| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765397663976739768 |
- /* Generated by Cython 3.2.4 */
- /* BEGIN: Cython Metadata
- {
- "distutils": {
- "name": "fontTools.misc.bezierTools",
- "sources": [
- "Lib/fontTools/misc/bezierTools.py"
- ]
- },
- "module_name": "fontTools.misc.bezierTools"
- }
- END: Cython Metadata */
- #ifndef PY_SSIZE_T_CLEAN
- #define PY_SSIZE_T_CLEAN
- #endif /* PY_SSIZE_T_CLEAN */
- /* InitLimitedAPI */
- #if defined(Py_LIMITED_API)
- #if !defined(CYTHON_LIMITED_API)
- #define CYTHON_LIMITED_API 1
- #endif
- #elif defined(CYTHON_LIMITED_API)
- #ifdef _MSC_VER
- #pragma message ("Limited API usage is enabled with 'CYTHON_LIMITED_API' but 'Py_LIMITED_API' does not define a Python target version. Consider setting 'Py_LIMITED_API' instead.")
- #else
- #warning Limited API usage is enabled with 'CYTHON_LIMITED_API' but 'Py_LIMITED_API' does not define a Python target version. Consider setting 'Py_LIMITED_API' instead.
- #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 < 0x03080000
- #error Cython requires Python 3.8+.
- #else
- #define __PYX_ABI_VERSION "3_2_4"
- #define CYTHON_HEX_VERSION 0x030204F0
- #define CYTHON_FUTURE_DIVISION 1
- /* CModulePreamble */
- #include <stddef.h>
- #ifndef offsetof
- #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
- #endif
- #if !defined(_WIN32) && !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
- #define __PYX_COMMA ,
- #ifndef PY_LONG_LONG
- #define PY_LONG_LONG LONG_LONG
- #endif
- #ifndef Py_HUGE_VAL
- #define Py_HUGE_VAL HUGE_VAL
- #endif
- #define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX
- #if defined(GRAALVM_PYTHON)
- /* For very preliminary testing purposes. Most variables are set the same as PyPy.
- The existence of this section does not imply that anything works or is even tested */
- #define CYTHON_COMPILING_IN_PYPY 0
- #define CYTHON_COMPILING_IN_CPYTHON 0
- #define CYTHON_COMPILING_IN_LIMITED_API 0
- #define CYTHON_COMPILING_IN_GRAAL 1
- #define CYTHON_COMPILING_IN_CPYTHON_FREETHREADING 0
- #undef CYTHON_USE_TYPE_SLOTS
- #define CYTHON_USE_TYPE_SLOTS 0
- #undef CYTHON_USE_TYPE_SPECS
- #define CYTHON_USE_TYPE_SPECS 0
- #undef CYTHON_USE_PYTYPE_LOOKUP
- #define CYTHON_USE_PYTYPE_LOOKUP 0
- #undef CYTHON_USE_PYLIST_INTERNALS
- #define CYTHON_USE_PYLIST_INTERNALS 0
- #undef CYTHON_USE_UNICODE_INTERNALS
- #define CYTHON_USE_UNICODE_INTERNALS 0
- #undef CYTHON_USE_UNICODE_WRITER
- #define CYTHON_USE_UNICODE_WRITER 0
- #undef CYTHON_USE_PYLONG_INTERNALS
- #define CYTHON_USE_PYLONG_INTERNALS 0
- #undef CYTHON_AVOID_BORROWED_REFS
- #define CYTHON_AVOID_BORROWED_REFS 1
- #undef CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
- #define CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS 0
- #undef CYTHON_ASSUME_SAFE_MACROS
- #define CYTHON_ASSUME_SAFE_MACROS 0
- #undef CYTHON_ASSUME_SAFE_SIZE
- #define CYTHON_ASSUME_SAFE_SIZE 0
- #undef CYTHON_UNPACK_METHODS
- #define CYTHON_UNPACK_METHODS 0
- #undef CYTHON_FAST_THREAD_STATE
- #define CYTHON_FAST_THREAD_STATE 0
- #undef CYTHON_FAST_GIL
- #define CYTHON_FAST_GIL 0
- #undef CYTHON_METH_FASTCALL
- #define CYTHON_METH_FASTCALL 0
- #undef CYTHON_FAST_PYCALL
- #define CYTHON_FAST_PYCALL 0
- #ifndef CYTHON_PEP487_INIT_SUBCLASS
- #define CYTHON_PEP487_INIT_SUBCLASS 1
- #endif
- #undef CYTHON_PEP489_MULTI_PHASE_INIT
- #define CYTHON_PEP489_MULTI_PHASE_INIT 1
- #undef CYTHON_USE_MODULE_STATE
- #define CYTHON_USE_MODULE_STATE 0
- #undef CYTHON_USE_SYS_MONITORING
- #define CYTHON_USE_SYS_MONITORING 0
- #undef CYTHON_USE_TP_FINALIZE
- #define CYTHON_USE_TP_FINALIZE 0
- #undef CYTHON_USE_AM_SEND
- #define CYTHON_USE_AM_SEND 0
- #undef CYTHON_USE_DICT_VERSIONS
- #define CYTHON_USE_DICT_VERSIONS 0
- #undef CYTHON_USE_EXC_INFO_STACK
- #define CYTHON_USE_EXC_INFO_STACK 1
- #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
- #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
- #endif
- #undef CYTHON_USE_FREELISTS
- #define CYTHON_USE_FREELISTS 0
- #undef CYTHON_IMMORTAL_CONSTANTS
- #define CYTHON_IMMORTAL_CONSTANTS 0
- #elif defined(PYPY_VERSION)
- #define CYTHON_COMPILING_IN_PYPY 1
- #define CYTHON_COMPILING_IN_CPYTHON 0
- #define CYTHON_COMPILING_IN_LIMITED_API 0
- #define CYTHON_COMPILING_IN_GRAAL 0
- #define CYTHON_COMPILING_IN_CPYTHON_FREETHREADING 0
- #undef CYTHON_USE_TYPE_SLOTS
- #define CYTHON_USE_TYPE_SLOTS 1
- #ifndef CYTHON_USE_TYPE_SPECS
- #define CYTHON_USE_TYPE_SPECS 0
- #endif
- #undef CYTHON_USE_PYTYPE_LOOKUP
- #define CYTHON_USE_PYTYPE_LOOKUP 0
- #undef CYTHON_USE_PYLIST_INTERNALS
- #define CYTHON_USE_PYLIST_INTERNALS 0
- #undef CYTHON_USE_UNICODE_INTERNALS
- #define CYTHON_USE_UNICODE_INTERNALS 0
- #undef CYTHON_USE_UNICODE_WRITER
- #define CYTHON_USE_UNICODE_WRITER 0
- #undef CYTHON_USE_PYLONG_INTERNALS
- #define CYTHON_USE_PYLONG_INTERNALS 0
- #undef CYTHON_AVOID_BORROWED_REFS
- #define CYTHON_AVOID_BORROWED_REFS 1
- #undef CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
- #define CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS 1
- #undef CYTHON_ASSUME_SAFE_MACROS
- #define CYTHON_ASSUME_SAFE_MACROS 0
- #ifndef CYTHON_ASSUME_SAFE_SIZE
- #define CYTHON_ASSUME_SAFE_SIZE 1
- #endif
- #undef CYTHON_UNPACK_METHODS
- #define CYTHON_UNPACK_METHODS 0
- #undef CYTHON_FAST_THREAD_STATE
- #define CYTHON_FAST_THREAD_STATE 0
- #undef CYTHON_FAST_GIL
- #define CYTHON_FAST_GIL 0
- #undef CYTHON_METH_FASTCALL
- #define CYTHON_METH_FASTCALL 0
- #undef CYTHON_FAST_PYCALL
- #define CYTHON_FAST_PYCALL 0
- #ifndef CYTHON_PEP487_INIT_SUBCLASS
- #define CYTHON_PEP487_INIT_SUBCLASS 1
- #endif
- #if PY_VERSION_HEX < 0x03090000
- #undef CYTHON_PEP489_MULTI_PHASE_INIT
- #define CYTHON_PEP489_MULTI_PHASE_INIT 0
- #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
- #define CYTHON_PEP489_MULTI_PHASE_INIT 1
- #endif
- #undef CYTHON_USE_MODULE_STATE
- #define CYTHON_USE_MODULE_STATE 0
- #undef CYTHON_USE_SYS_MONITORING
- #define CYTHON_USE_SYS_MONITORING 0
- #ifndef CYTHON_USE_TP_FINALIZE
- #define CYTHON_USE_TP_FINALIZE (PYPY_VERSION_NUM >= 0x07030C00)
- #endif
- #undef CYTHON_USE_AM_SEND
- #define CYTHON_USE_AM_SEND 0
- #undef CYTHON_USE_DICT_VERSIONS
- #define CYTHON_USE_DICT_VERSIONS 0
- #undef CYTHON_USE_EXC_INFO_STACK
- #define CYTHON_USE_EXC_INFO_STACK 0
- #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
- #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_NUM >= 0x07031100)
- #endif
- #undef CYTHON_USE_FREELISTS
- #define CYTHON_USE_FREELISTS 0
- #undef CYTHON_IMMORTAL_CONSTANTS
- #define CYTHON_IMMORTAL_CONSTANTS 0
- #elif defined(CYTHON_LIMITED_API)
- #ifdef Py_LIMITED_API
- #undef __PYX_LIMITED_VERSION_HEX
- #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API
- #endif
- #define CYTHON_COMPILING_IN_PYPY 0
- #define CYTHON_COMPILING_IN_CPYTHON 0
- #define CYTHON_COMPILING_IN_LIMITED_API 1
- #define CYTHON_COMPILING_IN_GRAAL 0
- #define CYTHON_COMPILING_IN_CPYTHON_FREETHREADING 0
- #undef CYTHON_USE_TYPE_SLOTS
- #define CYTHON_USE_TYPE_SLOTS 0
- #undef CYTHON_USE_TYPE_SPECS
- #define CYTHON_USE_TYPE_SPECS 1
- #undef CYTHON_USE_PYTYPE_LOOKUP
- #define CYTHON_USE_PYTYPE_LOOKUP 0
- #undef CYTHON_USE_PYLIST_INTERNALS
- #define CYTHON_USE_PYLIST_INTERNALS 0
- #undef CYTHON_USE_UNICODE_INTERNALS
- #define CYTHON_USE_UNICODE_INTERNALS 0
- #ifndef CYTHON_USE_UNICODE_WRITER
- #define CYTHON_USE_UNICODE_WRITER 0
- #endif
- #undef CYTHON_USE_PYLONG_INTERNALS
- #define CYTHON_USE_PYLONG_INTERNALS 0
- #ifndef CYTHON_AVOID_BORROWED_REFS
- #define CYTHON_AVOID_BORROWED_REFS 0
- #endif
- #ifndef CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
- #define CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS 0
- #endif
- #undef CYTHON_ASSUME_SAFE_MACROS
- #define CYTHON_ASSUME_SAFE_MACROS 0
- #undef CYTHON_ASSUME_SAFE_SIZE
- #define CYTHON_ASSUME_SAFE_SIZE 0
- #undef CYTHON_UNPACK_METHODS
- #define CYTHON_UNPACK_METHODS 0
- #undef CYTHON_FAST_THREAD_STATE
- #define CYTHON_FAST_THREAD_STATE 0
- #undef CYTHON_FAST_GIL
- #define CYTHON_FAST_GIL 0
- #undef CYTHON_METH_FASTCALL
- #define CYTHON_METH_FASTCALL (__PYX_LIMITED_VERSION_HEX >= 0x030C0000)
- #undef CYTHON_FAST_PYCALL
- #define CYTHON_FAST_PYCALL 0
- #ifndef CYTHON_PEP487_INIT_SUBCLASS
- #define CYTHON_PEP487_INIT_SUBCLASS 1
- #endif
- #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
- #define CYTHON_PEP489_MULTI_PHASE_INIT 1
- #endif
- #ifndef CYTHON_USE_MODULE_STATE
- #define CYTHON_USE_MODULE_STATE 0
- #endif
- #undef CYTHON_USE_SYS_MONITORING
- #define CYTHON_USE_SYS_MONITORING 0
- #ifndef CYTHON_USE_TP_FINALIZE
- #define CYTHON_USE_TP_FINALIZE 0
- #endif
- #ifndef CYTHON_USE_AM_SEND
- #define CYTHON_USE_AM_SEND (__PYX_LIMITED_VERSION_HEX >= 0x030A0000)
- #endif
- #undef CYTHON_USE_DICT_VERSIONS
- #define CYTHON_USE_DICT_VERSIONS 0
- #undef CYTHON_USE_EXC_INFO_STACK
- #define CYTHON_USE_EXC_INFO_STACK 0
- #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
- #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
- #endif
- #ifndef CYTHON_USE_FREELISTS
- #define CYTHON_USE_FREELISTS 1
- #endif
- #undef CYTHON_IMMORTAL_CONSTANTS
- #define CYTHON_IMMORTAL_CONSTANTS 0
- #else
- #define CYTHON_COMPILING_IN_PYPY 0
- #define CYTHON_COMPILING_IN_CPYTHON 1
- #define CYTHON_COMPILING_IN_LIMITED_API 0
- #define CYTHON_COMPILING_IN_GRAAL 0
- #ifdef Py_GIL_DISABLED
- #define CYTHON_COMPILING_IN_CPYTHON_FREETHREADING 1
- #else
- #define CYTHON_COMPILING_IN_CPYTHON_FREETHREADING 0
- #endif
- #if PY_VERSION_HEX < 0x030A0000
- #undef CYTHON_USE_TYPE_SLOTS
- #define CYTHON_USE_TYPE_SLOTS 1
- #elif !defined(CYTHON_USE_TYPE_SLOTS)
- #define CYTHON_USE_TYPE_SLOTS 1
- #endif
- #ifndef CYTHON_USE_TYPE_SPECS
- #define CYTHON_USE_TYPE_SPECS 0
- #endif
- #ifndef CYTHON_USE_PYTYPE_LOOKUP
- #define CYTHON_USE_PYTYPE_LOOKUP 1
- #endif
- #ifndef CYTHON_USE_PYLONG_INTERNALS
- #define CYTHON_USE_PYLONG_INTERNALS 1
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- #undef CYTHON_USE_PYLIST_INTERNALS
- #define CYTHON_USE_PYLIST_INTERNALS 0
- #elif !defined(CYTHON_USE_PYLIST_INTERNALS)
- #define CYTHON_USE_PYLIST_INTERNALS 1
- #endif
- #ifndef CYTHON_USE_UNICODE_INTERNALS
- #define CYTHON_USE_UNICODE_INTERNALS 1
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING || PY_VERSION_HEX >= 0x030B00A2
- #undef CYTHON_USE_UNICODE_WRITER
- #define CYTHON_USE_UNICODE_WRITER 0
- #elif !defined(CYTHON_USE_UNICODE_WRITER)
- #define CYTHON_USE_UNICODE_WRITER 1
- #endif
- #ifndef CYTHON_AVOID_BORROWED_REFS
- #define CYTHON_AVOID_BORROWED_REFS 0
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- #undef CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
- #define CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS 1
- #elif !defined(CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS)
- #define CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS 0
- #endif
- #ifndef CYTHON_ASSUME_SAFE_MACROS
- #define CYTHON_ASSUME_SAFE_MACROS 1
- #endif
- #ifndef CYTHON_ASSUME_SAFE_SIZE
- #define CYTHON_ASSUME_SAFE_SIZE 1
- #endif
- #ifndef CYTHON_UNPACK_METHODS
- #define CYTHON_UNPACK_METHODS 1
- #endif
- #ifndef CYTHON_FAST_THREAD_STATE
- #define CYTHON_FAST_THREAD_STATE 1
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- #undef CYTHON_FAST_GIL
- #define CYTHON_FAST_GIL 0
- #elif !defined(CYTHON_FAST_GIL)
- #define CYTHON_FAST_GIL (PY_VERSION_HEX < 0x030C00A6)
- #endif
- #ifndef CYTHON_METH_FASTCALL
- #define CYTHON_METH_FASTCALL 1
- #endif
- #ifndef CYTHON_FAST_PYCALL
- #define CYTHON_FAST_PYCALL 1
- #endif
- #ifndef CYTHON_PEP487_INIT_SUBCLASS
- #define CYTHON_PEP487_INIT_SUBCLASS 1
- #endif
- #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
- #define CYTHON_PEP489_MULTI_PHASE_INIT 1
- #endif
- #ifndef CYTHON_USE_MODULE_STATE
- #define CYTHON_USE_MODULE_STATE 0
- #endif
- #ifndef CYTHON_USE_SYS_MONITORING
- #define CYTHON_USE_SYS_MONITORING (PY_VERSION_HEX >= 0x030d00B1)
- #endif
- #ifndef CYTHON_USE_TP_FINALIZE
- #define CYTHON_USE_TP_FINALIZE 1
- #endif
- #ifndef CYTHON_USE_AM_SEND
- #define CYTHON_USE_AM_SEND 1
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- #undef CYTHON_USE_DICT_VERSIONS
- #define CYTHON_USE_DICT_VERSIONS 0
- #elif !defined(CYTHON_USE_DICT_VERSIONS)
- #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5 && !CYTHON_USE_MODULE_STATE)
- #endif
- #ifndef CYTHON_USE_EXC_INFO_STACK
- #define CYTHON_USE_EXC_INFO_STACK 1
- #endif
- #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
- #define CYTHON_UPDATE_DESCRIPTOR_DOC 1
- #endif
- #ifndef CYTHON_USE_FREELISTS
- #define CYTHON_USE_FREELISTS (!CYTHON_COMPILING_IN_CPYTHON_FREETHREADING)
- #endif
- #if defined(CYTHON_IMMORTAL_CONSTANTS) && PY_VERSION_HEX < 0x030C0000
- #undef CYTHON_IMMORTAL_CONSTANTS
- #define CYTHON_IMMORTAL_CONSTANTS 0 // definitely won't work
- #elif !defined(CYTHON_IMMORTAL_CONSTANTS)
- #define CYTHON_IMMORTAL_CONSTANTS (PY_VERSION_HEX >= 0x030C0000 && !CYTHON_USE_MODULE_STATE && CYTHON_COMPILING_IN_CPYTHON_FREETHREADING)
- #endif
- #endif
- #ifndef CYTHON_COMPRESS_STRINGS
- #define CYTHON_COMPRESS_STRINGS 1
- #endif
- #ifndef CYTHON_FAST_PYCCALL
- #define CYTHON_FAST_PYCCALL CYTHON_FAST_PYCALL
- #endif
- #ifndef CYTHON_VECTORCALL
- #if CYTHON_COMPILING_IN_LIMITED_API
- #define CYTHON_VECTORCALL (__PYX_LIMITED_VERSION_HEX >= 0x030C0000)
- #else
- #define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL)
- #endif
- #endif
- #if CYTHON_USE_PYLONG_INTERNALS
- #undef SHIFT
- #undef BASE
- #undef MASK
- #ifdef SIZEOF_VOID_P
- enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
- #endif
- #endif
- #ifndef __has_attribute
- #define __has_attribute(x) 0
- #endif
- #ifndef __has_cpp_attribute
- #define __has_cpp_attribute(x) 0
- #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
- #ifndef CYTHON_UNUSED
- #if defined(__cplusplus)
- /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17
- * but leads to warnings with -pedantic, since it is a C++17 feature */
- #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
- #if __has_cpp_attribute(maybe_unused)
- #define CYTHON_UNUSED [[maybe_unused]]
- #endif
- #endif
- #endif
- #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
- #ifndef CYTHON_UNUSED_VAR
- # if defined(__cplusplus)
- template<class T> void CYTHON_UNUSED_VAR( const T& ) { }
- # else
- # define CYTHON_UNUSED_VAR(x) (void)(x)
- # endif
- #endif
- #ifndef CYTHON_MAYBE_UNUSED_VAR
- #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x)
- #endif
- #ifndef CYTHON_NCP_UNUSED
- # if CYTHON_COMPILING_IN_CPYTHON && !CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- # define CYTHON_NCP_UNUSED
- # else
- # define CYTHON_NCP_UNUSED CYTHON_UNUSED
- # endif
- #endif
- #ifndef CYTHON_USE_CPP_STD_MOVE
- #if defined(__cplusplus) && (\
- __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600))
- #define CYTHON_USE_CPP_STD_MOVE 1
- #else
- #define CYTHON_USE_CPP_STD_MOVE 0
- #endif
- #endif
- #define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
- #include <stdint.h>
- typedef uintptr_t __pyx_uintptr_t;
- #ifndef CYTHON_FALLTHROUGH
- #if defined(__cplusplus)
- /* for clang __has_cpp_attribute(fallthrough) is true even before C++17
- * but leads to warnings with -pedantic, since it is a C++17 feature */
- #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
- #if __has_cpp_attribute(fallthrough)
- #define CYTHON_FALLTHROUGH [[fallthrough]]
- #endif
- #endif
- #ifndef CYTHON_FALLTHROUGH
- #if __has_cpp_attribute(clang::fallthrough)
- #define CYTHON_FALLTHROUGH [[clang::fallthrough]]
- #elif __has_cpp_attribute(gnu::fallthrough)
- #define CYTHON_FALLTHROUGH [[gnu::fallthrough]]
- #endif
- #endif
- #endif
- #ifndef CYTHON_FALLTHROUGH
- #if __has_attribute(fallthrough)
- #define CYTHON_FALLTHROUGH __attribute__((fallthrough))
- #else
- #define CYTHON_FALLTHROUGH
- #endif
- #endif
- #if defined(__clang__) && defined(__apple_build_version__)
- #if __apple_build_version__ < 7000000
- #undef CYTHON_FALLTHROUGH
- #define CYTHON_FALLTHROUGH
- #endif
- #endif
- #endif
- #ifndef Py_UNREACHABLE
- #define Py_UNREACHABLE() assert(0); abort()
- #endif
- #ifdef __cplusplus
- template <typename T>
- struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);};
- #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL<type>::value)
- #else
- #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0)
- #endif
- #if CYTHON_COMPILING_IN_PYPY == 1
- #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX < 0x030A0000)
- #else
- #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX < 0x03090000)
- #endif
- #define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer))
- /* CInitCode */
- #ifndef CYTHON_INLINE
- #if defined(__clang__)
- #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
- #elif 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
- /* PythonCompatibility */
- #define __PYX_BUILD_PY_SSIZE_T "n"
- #define CYTHON_FORMAT_SSIZE_T "z"
- #define __Pyx_BUILTIN_MODULE_NAME "builtins"
- #define __Pyx_DefaultClassType PyType_Type
- #if CYTHON_COMPILING_IN_LIMITED_API
- #ifndef CO_OPTIMIZED
- static int CO_OPTIMIZED;
- #endif
- #ifndef CO_NEWLOCALS
- static int CO_NEWLOCALS;
- #endif
- #ifndef CO_VARARGS
- static int CO_VARARGS;
- #endif
- #ifndef CO_VARKEYWORDS
- static int CO_VARKEYWORDS;
- #endif
- #ifndef CO_ASYNC_GENERATOR
- static int CO_ASYNC_GENERATOR;
- #endif
- #ifndef CO_GENERATOR
- static int CO_GENERATOR;
- #endif
- #ifndef CO_COROUTINE
- static int CO_COROUTINE;
- #endif
- #else
- #ifndef CO_COROUTINE
- #define CO_COROUTINE 0x80
- #endif
- #ifndef CO_ASYNC_GENERATOR
- #define CO_ASYNC_GENERATOR 0x200
- #endif
- #endif
- static int __Pyx_init_co_variables(void);
- #if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE)
- #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type)
- #else
- #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type))
- #endif
- #if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is)
- #define __Pyx_Py_Is(x, y) Py_Is(x, y)
- #else
- #define __Pyx_Py_Is(x, y) ((x) == (y))
- #endif
- #if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone)
- #define __Pyx_Py_IsNone(ob) Py_IsNone(ob)
- #else
- #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None)
- #endif
- #if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue)
- #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob)
- #else
- #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True)
- #endif
- #if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse)
- #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob)
- #else
- #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False)
- #endif
- #define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj))
- #if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY
- #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o)
- #else
- #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o)
- #endif
- #ifndef Py_TPFLAGS_CHECKTYPES
- #define Py_TPFLAGS_CHECKTYPES 0
- #endif
- #ifndef Py_TPFLAGS_HAVE_INDEX
- #define Py_TPFLAGS_HAVE_INDEX 0
- #endif
- #ifndef Py_TPFLAGS_HAVE_NEWBUFFER
- #define Py_TPFLAGS_HAVE_NEWBUFFER 0
- #endif
- #ifndef Py_TPFLAGS_HAVE_FINALIZE
- #define Py_TPFLAGS_HAVE_FINALIZE 0
- #endif
- #ifndef Py_TPFLAGS_SEQUENCE
- #define Py_TPFLAGS_SEQUENCE 0
- #endif
- #ifndef Py_TPFLAGS_MAPPING
- #define Py_TPFLAGS_MAPPING 0
- #endif
- #ifndef Py_TPFLAGS_IMMUTABLETYPE
- #define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
- #endif
- #ifndef Py_TPFLAGS_DISALLOW_INSTANTIATION
- #define Py_TPFLAGS_DISALLOW_INSTANTIATION (1UL << 7)
- #endif
- #ifndef METH_STACKLESS
- #define METH_STACKLESS 0
- #endif
- #ifndef METH_FASTCALL
- #ifndef METH_FASTCALL
- #define METH_FASTCALL 0x80
- #endif
- typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs);
- typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args,
- Py_ssize_t nargs, PyObject *kwnames);
- #else
- #if PY_VERSION_HEX >= 0x030d00A4
- # define __Pyx_PyCFunctionFast PyCFunctionFast
- # define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords
- #else
- # define __Pyx_PyCFunctionFast _PyCFunctionFast
- # define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
- #endif
- #endif
- #if CYTHON_METH_FASTCALL
- #define __Pyx_METH_FASTCALL METH_FASTCALL
- #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast
- #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords
- #else
- #define __Pyx_METH_FASTCALL METH_VARARGS
- #define __Pyx_PyCFunction_FastCall PyCFunction
- #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords
- #endif
- #if CYTHON_VECTORCALL
- #define __pyx_vectorcallfunc vectorcallfunc
- #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET
- #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n))
- #else
- #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0
- #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n))
- #endif
- #if PY_VERSION_HEX >= 0x030900B1
- #define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func)
- #else
- #define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func)
- #endif
- #define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func)
- #if CYTHON_COMPILING_IN_CPYTHON
- #define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth)
- #elif !CYTHON_COMPILING_IN_LIMITED_API
- #define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func)
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON
- #define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags)
- static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) {
- return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self;
- }
- #endif
- static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void (*cfunc)(void)) {
- #if CYTHON_COMPILING_IN_LIMITED_API
- return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc;
- #else
- return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc;
- #endif
- }
- #define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc)
- #if PY_VERSION_HEX < 0x03090000 || (CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000)
- #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b))
- typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *);
- #else
- #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b)
- #define __Pyx_PyCMethod PyCMethod
- #endif
- #ifndef METH_METHOD
- #define METH_METHOD 0x200
- #endif
- #if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
- #define PyObject_Malloc(s) PyMem_Malloc(s)
- #define PyObject_Free(p) PyMem_Free(p)
- #define PyObject_Realloc(p) PyMem_Realloc(p)
- #endif
- #if CYTHON_COMPILING_IN_LIMITED_API
- #define __Pyx_PyFrame_SetLineNumber(frame, lineno)
- #elif CYTHON_COMPILING_IN_GRAAL && defined(GRAALPY_VERSION_NUM) && GRAALPY_VERSION_NUM > 0x19000000
- #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0)
- #define __Pyx_PyFrame_SetLineNumber(frame, lineno) GraalPyFrame_SetLineNumber((frame), (lineno))
- #elif CYTHON_COMPILING_IN_GRAAL
- #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0)
- #define __Pyx_PyFrame_SetLineNumber(frame, lineno) _PyFrame_SetLineNumber((frame), (lineno))
- #else
- #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0)
- #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno)
- #endif
- #if CYTHON_COMPILING_IN_LIMITED_API
- #define __Pyx_PyThreadState_Current PyThreadState_Get()
- #elif !CYTHON_FAST_THREAD_STATE
- #define __Pyx_PyThreadState_Current PyThreadState_GET()
- #elif PY_VERSION_HEX >= 0x030d00A1
- #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked()
- #else
- #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
- #endif
- #if CYTHON_USE_MODULE_STATE
- static CYTHON_INLINE void *__Pyx__PyModule_GetState(PyObject *op)
- {
- void *result;
- result = PyModule_GetState(op);
- if (!result)
- Py_FatalError("Couldn't find the module state");
- return result;
- }
- #define __Pyx_PyModule_GetState(o) (__pyx_mstatetype *)__Pyx__PyModule_GetState(o)
- #else
- #define __Pyx_PyModule_GetState(op) ((void)op,__pyx_mstate_global)
- #endif
- #define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE((PyObject *) obj), name, func_ctype)
- #define __Pyx_PyObject_TryGetSlot(obj, name, func_ctype) __Pyx_PyType_TryGetSlot(Py_TYPE(obj), name, func_ctype)
- #define __Pyx_PyObject_GetSubSlot(obj, sub, name, func_ctype) __Pyx_PyType_GetSubSlot(Py_TYPE(obj), sub, name, func_ctype)
- #define __Pyx_PyObject_TryGetSubSlot(obj, sub, name, func_ctype) __Pyx_PyType_TryGetSubSlot(Py_TYPE(obj), sub, name, func_ctype)
- #if CYTHON_USE_TYPE_SLOTS
- #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name)
- #define __Pyx_PyType_TryGetSlot(type, name, func_ctype) __Pyx_PyType_GetSlot(type, name, func_ctype)
- #define __Pyx_PyType_GetSubSlot(type, sub, name, func_ctype) (((type)->sub) ? ((type)->sub->name) : NULL)
- #define __Pyx_PyType_TryGetSubSlot(type, sub, name, func_ctype) __Pyx_PyType_GetSubSlot(type, sub, name, func_ctype)
- #else
- #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name))
- #define __Pyx_PyType_TryGetSlot(type, name, func_ctype)\
- ((__PYX_LIMITED_VERSION_HEX >= 0x030A0000 ||\
- (PyType_GetFlags(type) & Py_TPFLAGS_HEAPTYPE) || __Pyx_get_runtime_version() >= 0x030A0000) ?\
- __Pyx_PyType_GetSlot(type, name, func_ctype) : NULL)
- #define __Pyx_PyType_GetSubSlot(obj, sub, name, func_ctype) __Pyx_PyType_GetSlot(obj, name, func_ctype)
- #define __Pyx_PyType_TryGetSubSlot(obj, sub, name, func_ctype) __Pyx_PyType_TryGetSlot(obj, name, func_ctype)
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized)
- #define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))
- #else
- #define __Pyx_PyDict_NewPresized(n) PyDict_New()
- #endif
- #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y)
- #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y)
- #if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_UNICODE_INTERNALS
- #define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)
- static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) {
- PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name);
- if (res == NULL) PyErr_Clear();
- return res;
- }
- #elif !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000
- #define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError
- #define __Pyx_PyDict_GetItemStr PyDict_GetItem
- #else
- static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) {
- #if CYTHON_COMPILING_IN_PYPY
- return PyDict_GetItem(dict, name);
- #else
- PyDictEntry *ep;
- PyDictObject *mp = (PyDictObject*) dict;
- long hash = ((PyStringObject *) name)->ob_shash;
- assert(hash != -1);
- ep = (mp->ma_lookup)(mp, name, hash);
- if (ep == NULL) {
- return NULL;
- }
- return ep->me_value;
- #endif
- }
- #define __Pyx_PyDict_GetItemStr PyDict_GetItem
- #endif
- #if CYTHON_USE_TYPE_SLOTS
- #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags)
- #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0)
- #else
- #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp))
- #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature)
- #endif
- #define __Pyx_PyObject_GetIterNextFunc(iterator) __Pyx_PyObject_GetSlot(iterator, tp_iternext, iternextfunc)
- #if CYTHON_USE_TYPE_SPECS
- #define __Pyx_PyHeapTypeObject_GC_Del(obj) {\
- PyTypeObject *type = Py_TYPE((PyObject*)obj);\
- assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\
- PyObject_GC_Del(obj);\
- Py_DECREF(type);\
- }
- #else
- #define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj)
- #endif
- #if CYTHON_COMPILING_IN_LIMITED_API
- #define __Pyx_PyUnicode_READY(op) (0)
- #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i)
- #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U)
- #define __Pyx_PyUnicode_KIND(u) ((void)u, (0))
- #define __Pyx_PyUnicode_DATA(u) ((void*)u)
- #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i))
- #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u))
- #else
- #if PY_VERSION_HEX >= 0x030C0000
- #define __Pyx_PyUnicode_READY(op) (0)
- #else
- #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\
- 0 : _PyUnicode_Ready((PyObject *)(op)))
- #endif
- #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
- #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u)
- #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u))
- #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u)
- #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i)
- #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch)
- #if PY_VERSION_HEX >= 0x030C0000
- #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u))
- #else
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
- #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
- #else
- #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
- #endif
- #endif
- #endif
- #if CYTHON_COMPILING_IN_PYPY
- #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b)
- #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b)
- #else
- #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b)
- #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
- PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
- #endif
- #if CYTHON_COMPILING_IN_PYPY
- #if !defined(PyUnicode_DecodeUnicodeEscape)
- #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors)
- #endif
- #if !defined(PyUnicode_Contains)
- #define PyUnicode_Contains(u, s) PySequence_Contains(u, s)
- #endif
- #if !defined(PyByteArray_Check)
- #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type)
- #endif
- #if !defined(PyObject_Format)
- #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt)
- #endif
- #endif
- #define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- #define __Pyx_PySequence_ListKeepNew(obj)\
- (likely(PyList_CheckExact(obj) && PyUnstable_Object_IsUniquelyReferenced(obj)) ? __Pyx_NewRef(obj) : PySequence_List(obj))
- #elif CYTHON_COMPILING_IN_CPYTHON
- #define __Pyx_PySequence_ListKeepNew(obj)\
- (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj))
- #else
- #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj)
- #endif
- #ifndef PySet_CheckExact
- #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type)
- #endif
- #if PY_VERSION_HEX >= 0x030900A4
- #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt)
- #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size)
- #else
- #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt)
- #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size)
- #endif
- enum __Pyx_ReferenceSharing {
- __Pyx_ReferenceSharing_DefinitelyUnique, // We created it so we know it's unshared - no need to check
- __Pyx_ReferenceSharing_OwnStrongReference,
- __Pyx_ReferenceSharing_FunctionArgument,
- __Pyx_ReferenceSharing_SharedReference, // Never trust it to be unshared because it's a global or similar
- };
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING && PY_VERSION_HEX >= 0x030E0000
- #define __Pyx_IS_UNIQUELY_REFERENCED(o, sharing)\
- (sharing == __Pyx_ReferenceSharing_DefinitelyUnique ? 1 :\
- (sharing == __Pyx_ReferenceSharing_FunctionArgument ? PyUnstable_Object_IsUniqueReferencedTemporary(o) :\
- (sharing == __Pyx_ReferenceSharing_OwnStrongReference ? PyUnstable_Object_IsUniquelyReferenced(o) : 0)))
- #elif (CYTHON_COMPILING_IN_CPYTHON && !CYTHON_COMPILING_IN_CPYTHON_FREETHREADING) || CYTHON_COMPILING_IN_LIMITED_API
- #define __Pyx_IS_UNIQUELY_REFERENCED(o, sharing) (((void)sharing), Py_REFCNT(o) == 1)
- #else
- #define __Pyx_IS_UNIQUELY_REFERENCED(o, sharing) (((void)o), ((void)sharing), 0)
- #endif
- #if CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
- #if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
- #define __Pyx_PyList_GetItemRef(o, i) PyList_GetItemRef(o, i)
- #elif CYTHON_COMPILING_IN_LIMITED_API || !CYTHON_ASSUME_SAFE_MACROS
- #define __Pyx_PyList_GetItemRef(o, i) (likely((i) >= 0) ? PySequence_GetItem(o, i) : (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
- #else
- #define __Pyx_PyList_GetItemRef(o, i) PySequence_ITEM(o, i)
- #endif
- #elif CYTHON_COMPILING_IN_LIMITED_API || !CYTHON_ASSUME_SAFE_MACROS
- #if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
- #define __Pyx_PyList_GetItemRef(o, i) PyList_GetItemRef(o, i)
- #else
- #define __Pyx_PyList_GetItemRef(o, i) __Pyx_XNewRef(PyList_GetItem(o, i))
- #endif
- #else
- #define __Pyx_PyList_GetItemRef(o, i) __Pyx_NewRef(PyList_GET_ITEM(o, i))
- #endif
- #if CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS && !CYTHON_COMPILING_IN_LIMITED_API && CYTHON_ASSUME_SAFE_MACROS
- #define __Pyx_PyList_GetItemRefFast(o, i, unsafe_shared) (__Pyx_IS_UNIQUELY_REFERENCED(o, unsafe_shared) ?\
- __Pyx_NewRef(PyList_GET_ITEM(o, i)) : __Pyx_PyList_GetItemRef(o, i))
- #else
- #define __Pyx_PyList_GetItemRefFast(o, i, unsafe_shared) __Pyx_PyList_GetItemRef(o, i)
- #endif
- #if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
- #define __Pyx_PyDict_GetItemRef(dict, key, result) PyDict_GetItemRef(dict, key, result)
- #elif CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
- static CYTHON_INLINE int __Pyx_PyDict_GetItemRef(PyObject *dict, PyObject *key, PyObject **result) {
- *result = PyObject_GetItem(dict, key);
- if (*result == NULL) {
- if (PyErr_ExceptionMatches(PyExc_KeyError)) {
- PyErr_Clear();
- return 0;
- }
- return -1;
- }
- return 1;
- }
- #else
- static CYTHON_INLINE int __Pyx_PyDict_GetItemRef(PyObject *dict, PyObject *key, PyObject **result) {
- *result = PyDict_GetItemWithError(dict, key);
- if (*result == NULL) {
- return PyErr_Occurred() ? -1 : 0;
- }
- Py_INCREF(*result);
- return 1;
- }
- #endif
- #if defined(CYTHON_DEBUG_VISIT_CONST) && CYTHON_DEBUG_VISIT_CONST
- #define __Pyx_VISIT_CONST(obj) Py_VISIT(obj)
- #else
- #define __Pyx_VISIT_CONST(obj)
- #endif
- #if CYTHON_ASSUME_SAFE_MACROS
- #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i)
- #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq)
- #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0))
- #define __Pyx_PyTuple_GET_ITEM(o, i) PyTuple_GET_ITEM(o, i)
- #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0))
- #define __Pyx_PyList_GET_ITEM(o, i) PyList_GET_ITEM(o, i)
- #else
- #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i)
- #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq)
- #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v)
- #define __Pyx_PyTuple_GET_ITEM(o, i) PyTuple_GetItem(o, i)
- #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v)
- #define __Pyx_PyList_GET_ITEM(o, i) PyList_GetItem(o, i)
- #endif
- #if CYTHON_ASSUME_SAFE_SIZE
- #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o)
- #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o)
- #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o)
- #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o)
- #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o)
- #define __Pyx_PyUnicode_GET_LENGTH(o) PyUnicode_GET_LENGTH(o)
- #else
- #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o)
- #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o)
- #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o)
- #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o)
- #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o)
- #define __Pyx_PyUnicode_GET_LENGTH(o) PyUnicode_GetLength(o)
- #endif
- #if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_InternFromString)
- #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
- #endif
- #define __Pyx_PyLong_FromHash_t PyLong_FromSsize_t
- #define __Pyx_PyLong_AsHash_t __Pyx_PyIndex_AsSsize_t
- #if __PYX_LIMITED_VERSION_HEX >= 0x030A0000
- #define __Pyx_PySendResult PySendResult
- #else
- typedef enum {
- PYGEN_RETURN = 0,
- PYGEN_ERROR = -1,
- PYGEN_NEXT = 1,
- } __Pyx_PySendResult;
- #endif
- #if CYTHON_COMPILING_IN_LIMITED_API || PY_VERSION_HEX < 0x030A00A3
- typedef __Pyx_PySendResult (*__Pyx_pyiter_sendfunc)(PyObject *iter, PyObject *value, PyObject **result);
- #else
- #define __Pyx_pyiter_sendfunc sendfunc
- #endif
- #if !CYTHON_USE_AM_SEND
- #define __PYX_HAS_PY_AM_SEND 0
- #elif __PYX_LIMITED_VERSION_HEX >= 0x030A0000
- #define __PYX_HAS_PY_AM_SEND 1
- #else
- #define __PYX_HAS_PY_AM_SEND 2 // our own backported implementation
- #endif
- #if __PYX_HAS_PY_AM_SEND < 2
- #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
- #else
- typedef struct {
- unaryfunc am_await;
- unaryfunc am_aiter;
- unaryfunc am_anext;
- __Pyx_pyiter_sendfunc am_send;
- } __Pyx_PyAsyncMethodsStruct;
- #define __Pyx_SlotTpAsAsync(s) ((PyAsyncMethods*)(s))
- #endif
- #if CYTHON_USE_AM_SEND && PY_VERSION_HEX < 0x030A00F0
- #define __Pyx_TPFLAGS_HAVE_AM_SEND (1UL << 21)
- #else
- #define __Pyx_TPFLAGS_HAVE_AM_SEND (0)
- #endif
- #if PY_VERSION_HEX >= 0x03090000
- #define __Pyx_PyInterpreterState_Get() PyInterpreterState_Get()
- #else
- #define __Pyx_PyInterpreterState_Get() PyThreadState_Get()->interp
- #endif
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030A0000
- #ifdef __cplusplus
- extern "C"
- #endif
- PyAPI_FUNC(void *) PyMem_Calloc(size_t nelem, size_t elsize);
- #endif
- #if CYTHON_COMPILING_IN_LIMITED_API
- static int __Pyx_init_co_variable(PyObject *inspect, const char* name, int *write_to) {
- int value;
- PyObject *py_value = PyObject_GetAttrString(inspect, name);
- if (!py_value) return 0;
- value = (int) PyLong_AsLong(py_value);
- Py_DECREF(py_value);
- *write_to = value;
- return value != -1 || !PyErr_Occurred();
- }
- static int __Pyx_init_co_variables(void) {
- PyObject *inspect;
- int result;
- inspect = PyImport_ImportModule("inspect");
- result =
- #if !defined(CO_OPTIMIZED)
- __Pyx_init_co_variable(inspect, "CO_OPTIMIZED", &CO_OPTIMIZED) &&
- #endif
- #if !defined(CO_NEWLOCALS)
- __Pyx_init_co_variable(inspect, "CO_NEWLOCALS", &CO_NEWLOCALS) &&
- #endif
- #if !defined(CO_VARARGS)
- __Pyx_init_co_variable(inspect, "CO_VARARGS", &CO_VARARGS) &&
- #endif
- #if !defined(CO_VARKEYWORDS)
- __Pyx_init_co_variable(inspect, "CO_VARKEYWORDS", &CO_VARKEYWORDS) &&
- #endif
- #if !defined(CO_ASYNC_GENERATOR)
- __Pyx_init_co_variable(inspect, "CO_ASYNC_GENERATOR", &CO_ASYNC_GENERATOR) &&
- #endif
- #if !defined(CO_GENERATOR)
- __Pyx_init_co_variable(inspect, "CO_GENERATOR", &CO_GENERATOR) &&
- #endif
- #if !defined(CO_COROUTINE)
- __Pyx_init_co_variable(inspect, "CO_COROUTINE", &CO_COROUTINE) &&
- #endif
- 1;
- Py_DECREF(inspect);
- return result ? 0 : -1;
- }
- #else
- static int __Pyx_init_co_variables(void) {
- return 0; // It's a limited API-only feature
- }
- #endif
- /* MathInitCode */
- #if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)
- #ifndef _USE_MATH_DEFINES
- #define _USE_MATH_DEFINES
- #endif
- #endif
- #include <math.h>
- #if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
- #define __Pyx_truncl trunc
- #else
- #define __Pyx_truncl truncl
- #endif
- #ifndef CYTHON_CLINE_IN_TRACEBACK_RUNTIME
- #define CYTHON_CLINE_IN_TRACEBACK_RUNTIME 0
- #endif
- #ifndef CYTHON_CLINE_IN_TRACEBACK
- #define CYTHON_CLINE_IN_TRACEBACK CYTHON_CLINE_IN_TRACEBACK_RUNTIME
- #endif
- #if CYTHON_CLINE_IN_TRACEBACK
- #define __PYX_MARK_ERR_POS(f_index, lineno) { __pyx_filename = __pyx_f[f_index]; (void) __pyx_filename; __pyx_lineno = lineno; (void) __pyx_lineno; __pyx_clineno = __LINE__; (void) __pyx_clineno; }
- #else
- #define __PYX_MARK_ERR_POS(f_index, lineno) { __pyx_filename = __pyx_f[f_index]; (void) __pyx_filename; __pyx_lineno = lineno; (void) __pyx_lineno; (void) __pyx_clineno; }
- #endif
- #define __PYX_ERR(f_index, lineno, Ln_error) \
- { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; }
- #ifdef CYTHON_EXTERN_C
- #undef __PYX_EXTERN_C
- #define __PYX_EXTERN_C CYTHON_EXTERN_C
- #elif defined(__PYX_EXTERN_C)
- #ifdef _MSC_VER
- #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.")
- #else
- #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.
- #endif
- #else
- #ifdef __cplusplus
- #define __PYX_EXTERN_C extern "C"
- #else
- #define __PYX_EXTERN_C extern
- #endif
- #endif
- #define __PYX_HAVE__fontTools__misc__bezierTools
- #define __PYX_HAVE_API__fontTools__misc__bezierTools
- /* Early includes */
- #ifdef _OPENMP
- #include <omp.h>
- #endif /* _OPENMP */
- #if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
- #define CYTHON_WITHOUT_ASSERTIONS
- #endif
- #ifdef CYTHON_FREETHREADING_COMPATIBLE
- #if CYTHON_FREETHREADING_COMPATIBLE
- #define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_NOT_USED
- #else
- #define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_USED
- #endif
- #else
- #define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_USED
- #endif
- #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
- #define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0
- #define __PYX_DEFAULT_STRING_ENCODING ""
- #define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
- #define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
- #define __Pyx_uchar_cast(c) ((unsigned char)c)
- #define __Pyx_long_cast(x) ((long)x)
- #define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\
- (sizeof(type) < sizeof(Py_ssize_t)) ||\
- (sizeof(type) > sizeof(Py_ssize_t) &&\
- likely(v < (type)PY_SSIZE_T_MAX ||\
- v == (type)PY_SSIZE_T_MAX) &&\
- (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
- v == (type)PY_SSIZE_T_MIN))) ||\
- (sizeof(type) == sizeof(Py_ssize_t) &&\
- (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
- v == (type)PY_SSIZE_T_MAX))) )
- static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) {
- return (size_t) i < (size_t) limit;
- }
- #if defined (__cplusplus) && __cplusplus >= 201103L
- #include <cstdlib>
- #define __Pyx_sst_abs(value) std::abs(value)
- #elif SIZEOF_INT >= SIZEOF_SIZE_T
- #define __Pyx_sst_abs(value) abs(value)
- #elif SIZEOF_LONG >= SIZEOF_SIZE_T
- #define __Pyx_sst_abs(value) labs(value)
- #elif defined (_MSC_VER)
- #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value))
- #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
- #define __Pyx_sst_abs(value) llabs(value)
- #elif defined (__GNUC__)
- #define __Pyx_sst_abs(value) __builtin_llabs(value)
- #else
- #define __Pyx_sst_abs(value) ((value<0) ? -value : value)
- #endif
- static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s);
- static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
- static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
- static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*);
- #define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
- #define __Pyx_PyBytes_FromString PyBytes_FromString
- #define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
- static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
- #if CYTHON_ASSUME_SAFE_MACROS
- #define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s))
- #define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s))
- #define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s))
- #define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s))
- #define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s))
- #define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s))
- #define __Pyx_PyByteArray_AsString(s) PyByteArray_AS_STRING(s)
- #else
- #define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AsString(s))
- #define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AsString(s))
- #define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AsString(s))
- #define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AsString(s))
- #define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AsString(s))
- #define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AsString(s))
- #define __Pyx_PyByteArray_AsString(s) PyByteArray_AsString(s)
- #endif
- #define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
- #define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
- #define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
- #define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s))
- #define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s))
- #define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s)
- #define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s)
- #define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s)
- #define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
- #define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o)
- #define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode
- static CYTHON_INLINE PyObject *__Pyx_NewRef(PyObject *obj) {
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030a0000 || defined(Py_NewRef)
- return Py_NewRef(obj);
- #else
- Py_INCREF(obj);
- return obj;
- #endif
- }
- static CYTHON_INLINE PyObject *__Pyx_XNewRef(PyObject *obj) {
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030a0000 || defined(Py_XNewRef)
- return Py_XNewRef(obj);
- #else
- Py_XINCREF(obj);
- return obj;
- #endif
- }
- static CYTHON_INLINE PyObject *__Pyx_Owned_Py_None(int b);
- static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b);
- static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
- static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*);
- static CYTHON_INLINE PyObject* __Pyx_PyNumber_Long(PyObject* x);
- #define __Pyx_PySequence_Tuple(obj)\
- (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
- static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
- static CYTHON_INLINE PyObject * __Pyx_PyLong_FromSize_t(size_t);
- static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
- #if CYTHON_ASSUME_SAFE_MACROS
- #define __Pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
- #define __Pyx_PyFloat_AS_DOUBLE(x) PyFloat_AS_DOUBLE(x)
- #else
- #define __Pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
- #define __Pyx_PyFloat_AS_DOUBLE(x) PyFloat_AsDouble(x)
- #endif
- #define __Pyx_PyFloat_AsFloat(x) ((float) __Pyx_PyFloat_AsDouble(x))
- #define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
- #if CYTHON_USE_PYLONG_INTERNALS
- #if PY_VERSION_HEX >= 0x030C00A7
- #ifndef _PyLong_SIGN_MASK
- #define _PyLong_SIGN_MASK 3
- #endif
- #ifndef _PyLong_NON_SIZE_BITS
- #define _PyLong_NON_SIZE_BITS 3
- #endif
- #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK)
- #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0)
- #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x))
- #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1)
- #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0)
- #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0])
- #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS))
- #define __Pyx_PyLong_SignedDigitCount(x)\
- ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x))
- #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue)
- #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x)
- #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x)
- #else
- #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS))
- #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0])
- #endif
- typedef Py_ssize_t __Pyx_compact_pylong;
- typedef size_t __Pyx_compact_upylong;
- #else
- #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0)
- #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0)
- #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0)
- #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0)
- #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0])
- #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x))
- #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x)
- #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1)
- #define __Pyx_PyLong_CompactValue(x)\
- ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0]))
- typedef sdigit __Pyx_compact_pylong;
- typedef digit __Pyx_compact_upylong;
- #endif
- #if PY_VERSION_HEX >= 0x030C00A5
- #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit)
- #else
- #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit)
- #endif
- #endif
- #if __PYX_DEFAULT_STRING_ENCODING_IS_UTF8
- #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
- #elif __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
- #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeASCII(c_str, size, NULL)
- #else
- #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
- #endif
- /* Test for GCC > 2.95 */
- #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
- #define likely(x) __builtin_expect(!!(x), 1)
- #define unlikely(x) __builtin_expect(!!(x), 0)
- #else /* !__GNUC__ or GCC < 2.95 */
- #define likely(x) (x)
- #define unlikely(x) (x)
- #endif /* __GNUC__ */
- /* PretendToInitialize */
- #ifdef __cplusplus
- #if __cplusplus > 201103L
- #include <type_traits>
- #endif
- template <typename T>
- static void __Pyx_pretend_to_initialize(T* ptr) {
- #if __cplusplus > 201103L
- if ((std::is_trivially_default_constructible<T>::value))
- #endif
- *ptr = T();
- (void)ptr;
- }
- #else
- static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }
- #endif
- #if !CYTHON_USE_MODULE_STATE
- static PyObject *__pyx_m = NULL;
- #endif
- static int __pyx_lineno;
- static int __pyx_clineno = 0;
- static const char * const __pyx_cfilenm = __FILE__;
- static const char *__pyx_filename;
- /* Header.proto */
- #if !defined(CYTHON_CCOMPLEX)
- #if defined(__cplusplus)
- #define CYTHON_CCOMPLEX 1
- #elif (defined(_Complex_I) && !defined(_MSC_VER)) || ((defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) && !defined(__STDC_NO_COMPLEX__) && !defined(_MSC_VER))
- #define CYTHON_CCOMPLEX 1
- #else
- #define CYTHON_CCOMPLEX 0
- #endif
- #endif
- #if CYTHON_CCOMPLEX
- #ifdef __cplusplus
- #include <complex>
- #else
- #include <complex.h>
- #endif
- #endif
- #if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__)
- #undef _Complex_I
- #define _Complex_I 1.0fj
- #endif
- /* #### Code section: filename_table ### */
- static const char* const __pyx_f[] = {
- "Lib/fontTools/misc/bezierTools.py",
- };
- /* #### Code section: utility_code_proto_before_types ### */
- /* Atomics.proto (used by UnpackUnboundCMethod) */
- #include <pythread.h>
- #ifndef CYTHON_ATOMICS
- #define CYTHON_ATOMICS 1
- #endif
- #define __PYX_CYTHON_ATOMICS_ENABLED() CYTHON_ATOMICS
- #define __PYX_GET_CYTHON_COMPILING_IN_CPYTHON_FREETHREADING() CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- #define __pyx_atomic_int_type int
- #define __pyx_nonatomic_int_type int
- #if CYTHON_ATOMICS && (defined(__STDC_VERSION__) &&\
- (__STDC_VERSION__ >= 201112L) &&\
- !defined(__STDC_NO_ATOMICS__))
- #include <stdatomic.h>
- #elif CYTHON_ATOMICS && (defined(__cplusplus) && (\
- (__cplusplus >= 201103L) ||\
- (defined(_MSC_VER) && _MSC_VER >= 1700)))
- #include <atomic>
- #endif
- #if CYTHON_ATOMICS && (defined(__STDC_VERSION__) &&\
- (__STDC_VERSION__ >= 201112L) &&\
- !defined(__STDC_NO_ATOMICS__) &&\
- ATOMIC_INT_LOCK_FREE == 2)
- #undef __pyx_atomic_int_type
- #define __pyx_atomic_int_type atomic_int
- #define __pyx_atomic_ptr_type atomic_uintptr_t
- #define __pyx_nonatomic_ptr_type uintptr_t
- #define __pyx_atomic_incr_relaxed(value) atomic_fetch_add_explicit(value, 1, memory_order_relaxed)
- #define __pyx_atomic_incr_acq_rel(value) atomic_fetch_add_explicit(value, 1, memory_order_acq_rel)
- #define __pyx_atomic_decr_acq_rel(value) atomic_fetch_sub_explicit(value, 1, memory_order_acq_rel)
- #define __pyx_atomic_sub(value, arg) atomic_fetch_sub(value, arg)
- #define __pyx_atomic_int_cmp_exchange(value, expected, desired) atomic_compare_exchange_strong(value, expected, desired)
- #define __pyx_atomic_load(value) atomic_load(value)
- #define __pyx_atomic_store(value, new_value) atomic_store(value, new_value)
- #define __pyx_atomic_pointer_load_relaxed(value) atomic_load_explicit(value, memory_order_relaxed)
- #define __pyx_atomic_pointer_load_acquire(value) atomic_load_explicit(value, memory_order_acquire)
- #define __pyx_atomic_pointer_exchange(value, new_value) atomic_exchange(value, (__pyx_nonatomic_ptr_type)new_value)
- #define __pyx_atomic_pointer_cmp_exchange(value, expected, desired) atomic_compare_exchange_strong(value, expected, desired)
- #if defined(__PYX_DEBUG_ATOMICS) && defined(_MSC_VER)
- #pragma message ("Using standard C atomics")
- #elif defined(__PYX_DEBUG_ATOMICS)
- #warning "Using standard C atomics"
- #endif
- #elif CYTHON_ATOMICS && (defined(__cplusplus) && (\
- (__cplusplus >= 201103L) ||\
- \
- (defined(_MSC_VER) && _MSC_VER >= 1700)) &&\
- ATOMIC_INT_LOCK_FREE == 2)
- #undef __pyx_atomic_int_type
- #define __pyx_atomic_int_type std::atomic_int
- #define __pyx_atomic_ptr_type std::atomic_uintptr_t
- #define __pyx_nonatomic_ptr_type uintptr_t
- #define __pyx_atomic_incr_relaxed(value) std::atomic_fetch_add_explicit(value, 1, std::memory_order_relaxed)
- #define __pyx_atomic_incr_acq_rel(value) std::atomic_fetch_add_explicit(value, 1, std::memory_order_acq_rel)
- #define __pyx_atomic_decr_acq_rel(value) std::atomic_fetch_sub_explicit(value, 1, std::memory_order_acq_rel)
- #define __pyx_atomic_sub(value, arg) std::atomic_fetch_sub(value, arg)
- #define __pyx_atomic_int_cmp_exchange(value, expected, desired) std::atomic_compare_exchange_strong(value, expected, desired)
- #define __pyx_atomic_load(value) std::atomic_load(value)
- #define __pyx_atomic_store(value, new_value) std::atomic_store(value, new_value)
- #define __pyx_atomic_pointer_load_relaxed(value) std::atomic_load_explicit(value, std::memory_order_relaxed)
- #define __pyx_atomic_pointer_load_acquire(value) std::atomic_load_explicit(value, std::memory_order_acquire)
- #define __pyx_atomic_pointer_exchange(value, new_value) std::atomic_exchange(value, (__pyx_nonatomic_ptr_type)new_value)
- #define __pyx_atomic_pointer_cmp_exchange(value, expected, desired) std::atomic_compare_exchange_strong(value, expected, desired)
- #if defined(__PYX_DEBUG_ATOMICS) && defined(_MSC_VER)
- #pragma message ("Using standard C++ atomics")
- #elif defined(__PYX_DEBUG_ATOMICS)
- #warning "Using standard C++ atomics"
- #endif
- #elif CYTHON_ATOMICS && (__GNUC__ >= 5 || (__GNUC__ == 4 &&\
- (__GNUC_MINOR__ > 1 ||\
- (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ >= 2))))
- #define __pyx_atomic_ptr_type void*
- #define __pyx_nonatomic_ptr_type void*
- #define __pyx_atomic_incr_relaxed(value) __sync_fetch_and_add(value, 1)
- #define __pyx_atomic_incr_acq_rel(value) __sync_fetch_and_add(value, 1)
- #define __pyx_atomic_decr_acq_rel(value) __sync_fetch_and_sub(value, 1)
- #define __pyx_atomic_sub(value, arg) __sync_fetch_and_sub(value, arg)
- static CYTHON_INLINE int __pyx_atomic_int_cmp_exchange(__pyx_atomic_int_type* value, __pyx_nonatomic_int_type* expected, __pyx_nonatomic_int_type desired) {
- __pyx_nonatomic_int_type old = __sync_val_compare_and_swap(value, *expected, desired);
- int result = old == *expected;
- *expected = old;
- return result;
- }
- #define __pyx_atomic_load(value) __sync_fetch_and_add(value, 0)
- #define __pyx_atomic_store(value, new_value) __sync_lock_test_and_set(value, new_value)
- #define __pyx_atomic_pointer_load_relaxed(value) __sync_fetch_and_add(value, 0)
- #define __pyx_atomic_pointer_load_acquire(value) __sync_fetch_and_add(value, 0)
- #define __pyx_atomic_pointer_exchange(value, new_value) __sync_lock_test_and_set(value, (__pyx_atomic_ptr_type)new_value)
- static CYTHON_INLINE int __pyx_atomic_pointer_cmp_exchange(__pyx_atomic_ptr_type* value, __pyx_nonatomic_ptr_type* expected, __pyx_nonatomic_ptr_type desired) {
- __pyx_nonatomic_ptr_type old = __sync_val_compare_and_swap(value, *expected, desired);
- int result = old == *expected;
- *expected = old;
- return result;
- }
- #ifdef __PYX_DEBUG_ATOMICS
- #warning "Using GNU atomics"
- #endif
- #elif CYTHON_ATOMICS && defined(_MSC_VER)
- #include <intrin.h>
- #undef __pyx_atomic_int_type
- #define __pyx_atomic_int_type long
- #define __pyx_atomic_ptr_type void*
- #undef __pyx_nonatomic_int_type
- #define __pyx_nonatomic_int_type long
- #define __pyx_nonatomic_ptr_type void*
- #pragma intrinsic (_InterlockedExchangeAdd, _InterlockedExchange, _InterlockedCompareExchange, _InterlockedCompareExchangePointer, _InterlockedExchangePointer)
- #define __pyx_atomic_incr_relaxed(value) _InterlockedExchangeAdd(value, 1)
- #define __pyx_atomic_incr_acq_rel(value) _InterlockedExchangeAdd(value, 1)
- #define __pyx_atomic_decr_acq_rel(value) _InterlockedExchangeAdd(value, -1)
- #define __pyx_atomic_sub(value, arg) _InterlockedExchangeAdd(value, -arg)
- static CYTHON_INLINE int __pyx_atomic_int_cmp_exchange(__pyx_atomic_int_type* value, __pyx_nonatomic_int_type* expected, __pyx_nonatomic_int_type desired) {
- __pyx_nonatomic_int_type old = _InterlockedCompareExchange(value, desired, *expected);
- int result = old == *expected;
- *expected = old;
- return result;
- }
- #define __pyx_atomic_load(value) _InterlockedExchangeAdd(value, 0)
- #define __pyx_atomic_store(value, new_value) _InterlockedExchange(value, new_value)
- #define __pyx_atomic_pointer_load_relaxed(value) *(void * volatile *)value
- #define __pyx_atomic_pointer_load_acquire(value) _InterlockedCompareExchangePointer(value, 0, 0)
- #define __pyx_atomic_pointer_exchange(value, new_value) _InterlockedExchangePointer(value, (__pyx_atomic_ptr_type)new_value)
- static CYTHON_INLINE int __pyx_atomic_pointer_cmp_exchange(__pyx_atomic_ptr_type* value, __pyx_nonatomic_ptr_type* expected, __pyx_nonatomic_ptr_type desired) {
- __pyx_atomic_ptr_type old = _InterlockedCompareExchangePointer(value, desired, *expected);
- int result = old == *expected;
- *expected = old;
- return result;
- }
- #ifdef __PYX_DEBUG_ATOMICS
- #pragma message ("Using MSVC atomics")
- #endif
- #else
- #undef CYTHON_ATOMICS
- #define CYTHON_ATOMICS 0
- #ifdef __PYX_DEBUG_ATOMICS
- #warning "Not using atomics"
- #endif
- #endif
- /* CriticalSectionsDefinition.proto (used by CriticalSections) */
- #if !CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- #define __Pyx_PyCriticalSection void*
- #define __Pyx_PyCriticalSection2 void*
- #define __Pyx_PyCriticalSection_End(cs)
- #define __Pyx_PyCriticalSection2_End(cs)
- #else
- #define __Pyx_PyCriticalSection PyCriticalSection
- #define __Pyx_PyCriticalSection2 PyCriticalSection2
- #define __Pyx_PyCriticalSection_End PyCriticalSection_End
- #define __Pyx_PyCriticalSection2_End PyCriticalSection2_End
- #endif
- /* CriticalSections.proto (used by ParseKeywordsImpl) */
- #if !CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- #define __Pyx_PyCriticalSection_Begin(cs, arg) (void)(cs)
- #define __Pyx_PyCriticalSection2_Begin(cs, arg1, arg2) (void)(cs)
- #else
- #define __Pyx_PyCriticalSection_Begin PyCriticalSection_Begin
- #define __Pyx_PyCriticalSection2_Begin PyCriticalSection2_Begin
- #endif
- #if PY_VERSION_HEX < 0x030d0000 || CYTHON_COMPILING_IN_LIMITED_API
- #define __Pyx_BEGIN_CRITICAL_SECTION(o) {
- #define __Pyx_END_CRITICAL_SECTION() }
- #else
- #define __Pyx_BEGIN_CRITICAL_SECTION Py_BEGIN_CRITICAL_SECTION
- #define __Pyx_END_CRITICAL_SECTION Py_END_CRITICAL_SECTION
- #endif
- /* IncludeStructmemberH.proto (used by FixUpExtensionType) */
- #include <structmember.h>
- /* #### Code section: numeric_typedefs ### */
- /* #### Code section: complex_type_declarations ### */
- /* Declarations.proto */
- #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
- #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
- static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);
- /* #### Code section: type_declarations ### */
- /*--- Type declarations ---*/
- struct __pyx_defaults;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr;
- /* "fontTools/misc/bezierTools.py":815
- *
- *
- * def solveQuadratic(a, b, c, sqrt=sqrt): # <<<<<<<<<<<<<<
- * """Solve a quadratic equation.
- *
- */
- struct __pyx_defaults {
- PyObject_HEAD
- PyObject *arg0;
- };
- /* "fontTools/misc/bezierTools.py":546
- * a[isHorizontal], b[isHorizontal], c[isHorizontal] - where
- * )
- * solutions = sorted(t for t in solutions if 0 <= t < 1) # <<<<<<<<<<<<<<
- * if not solutions:
- * return [(pt1, pt2, pt3)]
- */
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr {
- PyObject_HEAD
- PyObject *__pyx_genexpr_arg_0;
- PyObject *__pyx_v_t;
- };
- /* "fontTools/misc/bezierTools.py":583
- * a[isHorizontal], b[isHorizontal], c[isHorizontal], d[isHorizontal] - where
- * )
- * solutions = sorted(t for t in solutions if 0 <= t < 1) # <<<<<<<<<<<<<<
- * if not solutions:
- * return [(pt1, pt2, pt3, pt4)]
- */
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr {
- PyObject_HEAD
- PyObject *__pyx_genexpr_arg_0;
- PyObject *__pyx_v_t;
- };
- /* "fontTools/misc/bezierTools.py":644
- *
- *
- * @cython.locals( # <<<<<<<<<<<<<<
- * pt1=cython.complex,
- * pt2=cython.complex,
- */
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC {
- PyObject_HEAD
- __pyx_t_double_complex __pyx_v_a;
- __pyx_t_double_complex __pyx_v_b;
- __pyx_t_double_complex __pyx_v_c;
- __pyx_t_double_complex __pyx_v_d;
- __pyx_t_double_complex __pyx_v_pt1;
- __pyx_t_double_complex __pyx_v_pt2;
- __pyx_t_double_complex __pyx_v_pt3;
- __pyx_t_double_complex __pyx_v_pt4;
- PyObject *__pyx_v_ts;
- };
- /* "fontTools/misc/bezierTools.py":770
- *
- *
- * @cython.locals( # <<<<<<<<<<<<<<
- * a=cython.complex,
- * b=cython.complex,
- */
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC {
- PyObject_HEAD
- __pyx_t_double_complex __pyx_v_a;
- __pyx_t_double_complex __pyx_v_a1;
- __pyx_t_double_complex __pyx_v_b;
- __pyx_t_double_complex __pyx_v_b1;
- __pyx_t_double_complex __pyx_v_c;
- __pyx_t_double_complex __pyx_v_c1;
- __pyx_t_double_complex __pyx_v_d;
- __pyx_t_double_complex __pyx_v_d1;
- double __pyx_v_delta;
- double __pyx_v_delta_2;
- double __pyx_v_delta_3;
- PyObject *__pyx_v_i;
- PyObject *__pyx_v_pt1;
- PyObject *__pyx_v_pt2;
- PyObject *__pyx_v_pt3;
- PyObject *__pyx_v_pt4;
- double __pyx_v_t1;
- double __pyx_v_t1_2;
- double __pyx_v_t1_3;
- double __pyx_v_t2;
- PyObject *__pyx_v_ts;
- PyObject *__pyx_t_0;
- PyObject *(*__pyx_t_1)(PyObject *);
- };
- /* "fontTools/misc/bezierTools.py":1252
- * else:
- * raise ValueError("Unknown curve degree")
- * return sorted(i for i in intersections if 0.0 <= i <= 1) # <<<<<<<<<<<<<<
- *
- *
- */
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr {
- PyObject_HEAD
- PyObject *__pyx_genexpr_arg_0;
- PyObject *__pyx_v_i;
- };
- /* "fontTools/misc/bezierTools.py":1313
- *
- *
- * def _curve_curve_intersections_t( # <<<<<<<<<<<<<<
- * curve1, curve2, precision=1e-3, range1=None, range2=None
- * ):
- */
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t {
- PyObject_HEAD
- PyObject *__pyx_v_precision;
- };
- /* "fontTools/misc/bezierTools.py":1382
- * def _is_linelike(segment):
- * maybeline = _alignment_transformation(segment).transformPoints(segment)
- * return all(math.isclose(p[1], 0.0) for p in maybeline) # <<<<<<<<<<<<<<
- *
- *
- */
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr {
- PyObject_HEAD
- PyObject *__pyx_genexpr_arg_0;
- PyObject *__pyx_v_p;
- };
- /* "fontTools/misc/bezierTools.py":1485
- * return "%g" % obj
- * else:
- * return "(%s)" % ", ".join(_segmentrepr(x) for x in it) # <<<<<<<<<<<<<<
- *
- *
- */
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr {
- PyObject_HEAD
- PyObject *__pyx_genexpr_arg_0;
- PyObject *__pyx_v_x;
- };
- /* #### Code section: utility_code_proto ### */
- /* --- Runtime support code (head) --- */
- /* Refnanny.proto */
- #ifndef CYTHON_REFNANNY
- #define CYTHON_REFNANNY 0
- #endif
- #if CYTHON_REFNANNY
- typedef struct {
- void (*INCREF)(void*, PyObject*, Py_ssize_t);
- void (*DECREF)(void*, PyObject*, Py_ssize_t);
- void (*GOTREF)(void*, PyObject*, Py_ssize_t);
- void (*GIVEREF)(void*, PyObject*, Py_ssize_t);
- void* (*SetupContext)(const char*, Py_ssize_t, const char*);
- void (*FinishContext)(void**);
- } __Pyx_RefNannyAPIStruct;
- static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
- static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
- #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
- #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__));\
- }
- #define __Pyx_RefNannyFinishContextNogil() {\
- PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
- __Pyx_RefNannyFinishContext();\
- PyGILState_Release(__pyx_gilstate_save);\
- }
- #define __Pyx_RefNannyFinishContextNogil() {\
- PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
- __Pyx_RefNannyFinishContext();\
- PyGILState_Release(__pyx_gilstate_save);\
- }
- #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); else {__Pyx_INCREF(r); }} while(0)
- #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0)
- #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0)
- #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0)
- #else
- #define __Pyx_RefNannyDeclarations
- #define __Pyx_RefNannySetupContext(name, acquire_gil)
- #define __Pyx_RefNannyFinishContextNogil()
- #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
- #define __Pyx_Py_XDECREF_SET(r, v) do {\
- PyObject *tmp = (PyObject *) r;\
- r = v; Py_XDECREF(tmp);\
- } while (0)
- #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)
- /* PyErrExceptionMatches.proto (used by PyObjectGetAttrStrNoError) */
- #if CYTHON_FAST_THREAD_STATE
- #define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
- static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
- #else
- #define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err)
- #endif
- /* PyThreadStateGet.proto (used by PyErrFetchRestore) */
- #if CYTHON_FAST_THREAD_STATE
- #define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate;
- #define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current;
- #if PY_VERSION_HEX >= 0x030C00A6
- #define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL)
- #define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL)
- #else
- #define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL)
- #define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type)
- #endif
- #else
- #define __Pyx_PyThreadState_declare
- #define __Pyx_PyThreadState_assign
- #define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL)
- #define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred()
- #endif
- /* PyErrFetchRestore.proto (used by PyObjectGetAttrStrNoError) */
- #if CYTHON_FAST_THREAD_STATE
- #define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL)
- #define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
- #define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
- #define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
- #define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)
- static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
- static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6
- #define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))
- #else
- #define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
- #endif
- #else
- #define __Pyx_PyErr_Clear() PyErr_Clear()
- #define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
- #define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb)
- #define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb)
- #define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb)
- #define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb)
- #define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb)
- #define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb)
- #endif
- /* PyObjectGetAttrStr.proto (used by PyObjectGetAttrStrNoError) */
- #if CYTHON_USE_TYPE_SLOTS
- static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name);
- #else
- #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
- #endif
- /* PyObjectGetAttrStrNoError.proto (used by GetBuiltinName) */
- static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name);
- /* GetBuiltinName.proto */
- static PyObject *__Pyx_GetBuiltinName(PyObject *name);
- /* TupleAndListFromArray.proto (used by fastcall) */
- #if CYTHON_COMPILING_IN_CPYTHON
- static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n);
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON || CYTHON_METH_FASTCALL
- static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n);
- #endif
- /* IncludeStringH.proto (used by BytesEquals) */
- #include <string.h>
- /* BytesEquals.proto (used by UnicodeEquals) */
- static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);
- /* UnicodeEquals.proto (used by fastcall) */
- static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);
- /* fastcall.proto */
- #if CYTHON_AVOID_BORROWED_REFS
- #define __Pyx_ArgRef_VARARGS(args, i) __Pyx_PySequence_ITEM(args, i)
- #elif CYTHON_ASSUME_SAFE_MACROS
- #define __Pyx_ArgRef_VARARGS(args, i) __Pyx_NewRef(__Pyx_PyTuple_GET_ITEM(args, i))
- #else
- #define __Pyx_ArgRef_VARARGS(args, i) __Pyx_XNewRef(PyTuple_GetItem(args, i))
- #endif
- #define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds)
- #define __Pyx_KwValues_VARARGS(args, nargs) NULL
- #define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s)
- #define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw)
- #if CYTHON_METH_FASTCALL
- #define __Pyx_ArgRef_FASTCALL(args, i) __Pyx_NewRef(args[i])
- #define __Pyx_NumKwargs_FASTCALL(kwds) __Pyx_PyTuple_GET_SIZE(kwds)
- #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs))
- static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 || CYTHON_COMPILING_IN_LIMITED_API
- CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues);
- #else
- #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw)
- #endif
- #else
- #define __Pyx_ArgRef_FASTCALL __Pyx_ArgRef_VARARGS
- #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS
- #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS
- #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS
- #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS
- #endif
- #define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop)
- #if CYTHON_METH_FASTCALL || (CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
- #define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(args + start, stop - start)
- #else
- #define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop)
- #endif
- /* py_dict_items.proto (used by OwnedDictNext) */
- static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d);
- /* CallCFunction.proto (used by CallUnboundCMethod0) */
- #define __Pyx_CallCFunction(cfunc, self, args)\
- ((PyCFunction)(void(*)(void))(cfunc)->func)(self, args)
- #define __Pyx_CallCFunctionWithKeywords(cfunc, self, args, kwargs)\
- ((PyCFunctionWithKeywords)(void(*)(void))(cfunc)->func)(self, args, kwargs)
- #define __Pyx_CallCFunctionFast(cfunc, self, args, nargs)\
- ((__Pyx_PyCFunctionFast)(void(*)(void))(PyCFunction)(cfunc)->func)(self, args, nargs)
- #define __Pyx_CallCFunctionFastWithKeywords(cfunc, self, args, nargs, kwnames)\
- ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))(PyCFunction)(cfunc)->func)(self, args, nargs, kwnames)
- /* PyObjectCall.proto (used by PyObjectFastCall) */
- #if CYTHON_COMPILING_IN_CPYTHON
- static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
- #else
- #define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
- #endif
- /* PyObjectCallMethO.proto (used by PyObjectFastCall) */
- #if CYTHON_COMPILING_IN_CPYTHON
- static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
- #endif
- /* PyObjectFastCall.proto (used by PyObjectCallOneArg) */
- #define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL)
- static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject * const*args, size_t nargs, PyObject *kwargs);
- /* PyObjectCallOneArg.proto (used by CallUnboundCMethod0) */
- static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);
- /* UnpackUnboundCMethod.proto (used by CallUnboundCMethod0) */
- typedef struct {
- PyObject *type;
- PyObject **method_name;
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING && CYTHON_ATOMICS
- __pyx_atomic_int_type initialized;
- #endif
- PyCFunction func;
- PyObject *method;
- int flag;
- } __Pyx_CachedCFunction;
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- static CYTHON_INLINE int __Pyx_CachedCFunction_GetAndSetInitializing(__Pyx_CachedCFunction *cfunc) {
- #if !CYTHON_ATOMICS
- return 1;
- #else
- __pyx_nonatomic_int_type expected = 0;
- if (__pyx_atomic_int_cmp_exchange(&cfunc->initialized, &expected, 1)) {
- return 0;
- }
- return expected;
- #endif
- }
- static CYTHON_INLINE void __Pyx_CachedCFunction_SetFinishedInitializing(__Pyx_CachedCFunction *cfunc) {
- #if CYTHON_ATOMICS
- __pyx_atomic_store(&cfunc->initialized, 2);
- #endif
- }
- #else
- #define __Pyx_CachedCFunction_GetAndSetInitializing(cfunc) 2
- #define __Pyx_CachedCFunction_SetFinishedInitializing(cfunc)
- #endif
- /* CallUnboundCMethod0.proto */
- CYTHON_UNUSED
- static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self);
- #if CYTHON_COMPILING_IN_CPYTHON
- static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self);
- #else
- #define __Pyx_CallUnboundCMethod0(cfunc, self) __Pyx__CallUnboundCMethod0(cfunc, self)
- #endif
- /* py_dict_values.proto (used by OwnedDictNext) */
- static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d);
- /* OwnedDictNext.proto (used by ParseKeywordsImpl) */
- #if CYTHON_AVOID_BORROWED_REFS
- static int __Pyx_PyDict_NextRef(PyObject *p, PyObject **ppos, PyObject **pkey, PyObject **pvalue);
- #else
- CYTHON_INLINE
- static int __Pyx_PyDict_NextRef(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue);
- #endif
- /* RaiseDoubleKeywords.proto (used by ParseKeywordsImpl) */
- static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
- /* ParseKeywordsImpl.export */
- static int __Pyx_ParseKeywordsTuple(
- PyObject *kwds,
- PyObject * const *kwvalues,
- PyObject ** const argnames[],
- PyObject *kwds2,
- PyObject *values[],
- Py_ssize_t num_pos_args,
- Py_ssize_t num_kwargs,
- const char* function_name,
- int ignore_unknown_kwargs
- );
- static int __Pyx_ParseKeywordDictToDict(
- PyObject *kwds,
- PyObject ** const argnames[],
- PyObject *kwds2,
- PyObject *values[],
- Py_ssize_t num_pos_args,
- const char* function_name
- );
- static int __Pyx_ParseKeywordDict(
- PyObject *kwds,
- PyObject ** const argnames[],
- PyObject *values[],
- Py_ssize_t num_pos_args,
- Py_ssize_t num_kwargs,
- const char* function_name,
- int ignore_unknown_kwargs
- );
- /* CallUnboundCMethod2.proto */
- CYTHON_UNUSED
- static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg1, PyObject* arg2);
- #if CYTHON_COMPILING_IN_CPYTHON
- static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *cfunc, PyObject *self, PyObject *arg1, PyObject *arg2);
- #else
- #define __Pyx_CallUnboundCMethod2(cfunc, self, arg1, arg2) __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2)
- #endif
- /* ParseKeywords.proto */
- static CYTHON_INLINE int __Pyx_ParseKeywords(
- PyObject *kwds, PyObject *const *kwvalues, PyObject ** const argnames[],
- PyObject *kwds2, PyObject *values[],
- Py_ssize_t num_pos_args, Py_ssize_t num_kwargs,
- const char* function_name,
- int ignore_unknown_kwargs
- );
- /* RaiseArgTupleInvalid.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);
- /* PyDictVersioning.proto (used by GetModuleGlobalName) */
- #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
- #define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1)
- #define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag)
- #define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\
- (version_var) = __PYX_GET_DICT_VERSION(dict);\
- (cache_var) = (value);
- #define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\
- static PY_UINT64_T __pyx_dict_version = 0;\
- static PyObject *__pyx_dict_cached_value = NULL;\
- if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\
- (VAR) = __Pyx_XNewRef(__pyx_dict_cached_value);\
- } else {\
- (VAR) = __pyx_dict_cached_value = (LOOKUP);\
- __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\
- }\
- }
- static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj);
- static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj);
- static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version);
- #else
- #define __PYX_GET_DICT_VERSION(dict) (0)
- #define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)
- #define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP);
- #endif
- /* GetModuleGlobalName.proto */
- #if CYTHON_USE_DICT_VERSIONS
- #define __Pyx_GetModuleGlobalName(var, name) do {\
- static PY_UINT64_T __pyx_dict_version = 0;\
- static PyObject *__pyx_dict_cached_value = NULL;\
- (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_mstate_global->__pyx_d))) ?\
- (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
- __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
- } while(0)
- #define __Pyx_GetModuleGlobalNameUncached(var, name) do {\
- PY_UINT64_T __pyx_dict_version;\
- PyObject *__pyx_dict_cached_value;\
- (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
- } while(0)
- static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
- #else
- #define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name)
- #define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name)
- static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name);
- #endif
- /* PyLongBinop.proto */
- #if !CYTHON_COMPILING_IN_PYPY
- static CYTHON_INLINE PyObject* __Pyx_PyLong_MultiplyCObj(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
- #else
- #define __Pyx_PyLong_MultiplyCObj(op1, op2, intval, inplace, zerodivision_check)\
- (inplace ? PyNumber_InPlaceMultiply(op1, op2) : PyNumber_Multiply(op1, op2))
- #endif
- /* RaiseTooManyValuesToUnpack.proto */
- static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
- /* RaiseNeedMoreValuesToUnpack.proto */
- static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
- /* IterFinish.proto */
- static CYTHON_INLINE int __Pyx_IterFinish(void);
- /* UnpackItemEndCheck.proto */
- static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);
- /* PyLongBinop.proto */
- #if !CYTHON_COMPILING_IN_PYPY
- static CYTHON_INLINE PyObject* __Pyx_PyLong_TrueDivideObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
- #else
- #define __Pyx_PyLong_TrueDivideObjC(op1, op2, intval, inplace, zerodivision_check)\
- (inplace ? PyNumber_InPlaceTrueDivide(op1, op2) : PyNumber_TrueDivide(op1, op2))
- #endif
- /* IncludeStdlibH.proto */
- #include <stdlib.h>
- /* PyLongCompare.proto */
- static CYTHON_INLINE int __Pyx_PyLong_BoolNeObjC(PyObject *op1, PyObject *op2, long intval, long inplace);
- /* ListAppend.proto */
- #if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
- 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);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000
- L->ob_item[len] = x;
- #else
- PyList_SET_ITEM(list, len, x);
- #endif
- __Pyx_SET_SIZE(list, len + 1);
- return 0;
- }
- return PyList_Append(list, x);
- }
- #else
- #define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
- #endif
- /* ListCompAppend.proto */
- #if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
- 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);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000
- L->ob_item[len] = x;
- #else
- PyList_SET_ITEM(list, len, x);
- #endif
- __Pyx_SET_SIZE(list, len + 1);
- return 0;
- }
- return PyList_Append(list, x);
- }
- #else
- #define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
- #endif
- /* GetItemInt.proto */
- #define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck, has_gil, unsafe_shared)\
- (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
- __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck, unsafe_shared) :\
- (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\
- __Pyx_GetItemInt_Generic(o, to_py_func(i))))
- #define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck, has_gil, unsafe_shared)\
- (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
- __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck, unsafe_shared) :\
- (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
- static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
- int wraparound, int boundscheck, int unsafe_shared);
- #define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck, has_gil, unsafe_shared)\
- (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
- __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck, unsafe_shared) :\
- (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
- static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
- int wraparound, int boundscheck, int unsafe_shared);
- static 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, int unsafe_shared);
- /* ObjectGetItem.proto */
- #if CYTHON_USE_TYPE_SLOTS
- static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key);
- #else
- #define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key)
- #endif
- /* PyLongCompare.proto */
- static CYTHON_INLINE int __Pyx_PyLong_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace);
- /* RaiseUnboundLocalError.proto */
- static void __Pyx_RaiseUnboundLocalError(const char *varname);
- /* GetException.proto (used by pep479) */
- #if CYTHON_FAST_THREAD_STATE
- #define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb)
- static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
- #else
- static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
- #endif
- /* pep479.proto */
- static void __Pyx_Generator_Replace_StopIteration(int in_async_gen);
- /* SliceObject.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);
- /* ListExtend.proto */
- static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) {
- #if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00a2
- return PyList_Extend(L, v);
- #elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000
- PyObject* none = _PyList_Extend((PyListObject*)L, v);
- if (unlikely(!none))
- return -1;
- Py_DECREF(none);
- return 0;
- #else
- return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v);
- #endif
- }
- /* SetItemInt.proto */
- #define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck, has_gil, unsafe_shared)\
- (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
- __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck, unsafe_shared) :\
- (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\
- __Pyx_SetItemInt_Generic(o, to_py_func(i), v)))
- static 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, int unsafe_shared);
- /* dict_setdefault.proto (used by FetchCommonType) */
- static CYTHON_INLINE PyObject *__Pyx_PyDict_SetDefault(PyObject *d, PyObject *key, PyObject *default_value);
- /* LimitedApiGetTypeDict.proto (used by SetItemOnTypeDict) */
- #if CYTHON_COMPILING_IN_LIMITED_API
- static PyObject *__Pyx_GetTypeDict(PyTypeObject *tp);
- #endif
- /* SetItemOnTypeDict.proto (used by FixUpExtensionType) */
- static int __Pyx__SetItemOnTypeDict(PyTypeObject *tp, PyObject *k, PyObject *v);
- #define __Pyx_SetItemOnTypeDict(tp, k, v) __Pyx__SetItemOnTypeDict((PyTypeObject*)tp, k, v)
- /* FixUpExtensionType.proto (used by FetchCommonType) */
- static CYTHON_INLINE int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type);
- /* AddModuleRef.proto (used by FetchSharedCythonModule) */
- #if ((CYTHON_COMPILING_IN_CPYTHON_FREETHREADING ) ||\
- __PYX_LIMITED_VERSION_HEX < 0x030d0000)
- static PyObject *__Pyx_PyImport_AddModuleRef(const char *name);
- #else
- #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name)
- #endif
- /* FetchSharedCythonModule.proto (used by FetchCommonType) */
- static PyObject *__Pyx_FetchSharedCythonABIModule(void);
- /* FetchCommonType.proto (used by CommonTypesMetaclass) */
- static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyTypeObject *metaclass, PyObject *module, PyType_Spec *spec, PyObject *bases);
- /* CommonTypesMetaclass.proto (used by CoroutineBase) */
- static int __pyx_CommonTypesMetaclass_init(PyObject *module);
- #define __Pyx_CommonTypesMetaclass_USED
- /* RaiseException.export */
- static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
- /* GetTopmostException.proto (used by SaveResetException) */
- #if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE
- static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate);
- #endif
- /* SaveResetException.proto (used by CoroutineBase) */
- #if CYTHON_FAST_THREAD_STATE
- #define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
- static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
- #define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
- static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
- #else
- #define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb)
- #define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb)
- #endif
- /* SwapException.proto (used by CoroutineBase) */
- #if CYTHON_FAST_THREAD_STATE
- #define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb)
- static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
- #else
- static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb);
- #endif
- /* CallTypeTraverse.proto (used by CoroutineBase) */
- #if !CYTHON_USE_TYPE_SPECS || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x03090000)
- #define __Pyx_call_type_traverse(o, always_call, visit, arg) 0
- #else
- static int __Pyx_call_type_traverse(PyObject *o, int always_call, visitproc visit, void *arg);
- #endif
- /* IterNextPlain.proto (used by CoroutineBase) */
- static CYTHON_INLINE PyObject *__Pyx_PyIter_Next_Plain(PyObject *iterator);
- #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
- static PyObject *__Pyx_GetBuiltinNext_LimitedAPI(void);
- #endif
- /* PyObjectCall2Args.proto (used by PyObjectCallMethod1) */
- static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2);
- /* PyObjectGetMethod.proto (used by PyObjectCallMethod1) */
- #if !(CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000)))
- static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);
- #endif
- /* PyObjectCallMethod1.proto (used by CoroutineBase) */
- static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg);
- /* PyObjectCallNoArg.proto (used by CoroutineBase) */
- static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
- /* ReturnWithStopIteration.proto (used by CoroutineBase) */
- static CYTHON_INLINE void __Pyx_ReturnWithStopIteration(PyObject* value, int async, int iternext);
- /* CoroutineBase.proto (used by Generator) */
- struct __pyx_CoroutineObject;
- typedef PyObject *(*__pyx_coroutine_body_t)(struct __pyx_CoroutineObject *, PyThreadState *, PyObject *);
- #if CYTHON_USE_EXC_INFO_STACK
- #define __Pyx_ExcInfoStruct _PyErr_StackItem
- #else
- typedef struct {
- PyObject *exc_type;
- PyObject *exc_value;
- PyObject *exc_traceback;
- } __Pyx_ExcInfoStruct;
- #endif
- typedef struct __pyx_CoroutineObject {
- PyObject_HEAD
- __pyx_coroutine_body_t body;
- PyObject *closure;
- __Pyx_ExcInfoStruct gi_exc_state;
- #if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
- PyObject *gi_weakreflist;
- #endif
- PyObject *classobj;
- PyObject *yieldfrom;
- __Pyx_pyiter_sendfunc yieldfrom_am_send;
- PyObject *gi_name;
- PyObject *gi_qualname;
- PyObject *gi_modulename;
- PyObject *gi_code;
- PyObject *gi_frame;
- #if CYTHON_USE_SYS_MONITORING && (CYTHON_PROFILE || CYTHON_TRACE)
- PyMonitoringState __pyx_pymonitoring_state[__Pyx_MonitoringEventTypes_CyGen_count];
- uint64_t __pyx_pymonitoring_version;
- #endif
- int resume_label;
- char is_running;
- } __pyx_CoroutineObject;
- static __pyx_CoroutineObject *__Pyx__Coroutine_New(
- PyTypeObject *type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
- PyObject *name, PyObject *qualname, PyObject *module_name);
- static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit(
- __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
- PyObject *name, PyObject *qualname, PyObject *module_name);
- static CYTHON_INLINE void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *self);
- static int __Pyx_Coroutine_clear(PyObject *self);
- static __Pyx_PySendResult __Pyx_Coroutine_AmSend(PyObject *self, PyObject *value, PyObject **retval);
- static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value);
- static __Pyx_PySendResult __Pyx_Coroutine_Close(PyObject *self, PyObject **retval);
- static PyObject *__Pyx_Coroutine_Throw(PyObject *gen, PyObject *args);
- #if CYTHON_USE_EXC_INFO_STACK
- #define __Pyx_Coroutine_SwapException(self)
- #define __Pyx_Coroutine_ResetAndClearException(self) __Pyx_Coroutine_ExceptionClear(&(self)->gi_exc_state)
- #else
- #define __Pyx_Coroutine_SwapException(self) {\
- __Pyx_ExceptionSwap(&(self)->gi_exc_state.exc_type, &(self)->gi_exc_state.exc_value, &(self)->gi_exc_state.exc_traceback);\
- __Pyx_Coroutine_ResetFrameBackpointer(&(self)->gi_exc_state);\
- }
- #define __Pyx_Coroutine_ResetAndClearException(self) {\
- __Pyx_ExceptionReset((self)->gi_exc_state.exc_type, (self)->gi_exc_state.exc_value, (self)->gi_exc_state.exc_traceback);\
- (self)->gi_exc_state.exc_type = (self)->gi_exc_state.exc_value = (self)->gi_exc_state.exc_traceback = NULL;\
- }
- #endif
- #if CYTHON_FAST_THREAD_STATE
- #define __Pyx_PyGen_FetchStopIterationValue(pvalue)\
- __Pyx_PyGen__FetchStopIterationValue(__pyx_tstate, pvalue)
- #else
- #define __Pyx_PyGen_FetchStopIterationValue(pvalue)\
- __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, pvalue)
- #endif
- static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue);
- static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state);
- static char __Pyx_Coroutine_test_and_set_is_running(__pyx_CoroutineObject *gen);
- static void __Pyx_Coroutine_unset_is_running(__pyx_CoroutineObject *gen);
- static char __Pyx_Coroutine_get_is_running(__pyx_CoroutineObject *gen);
- static PyObject *__Pyx_Coroutine_get_is_running_getter(PyObject *gen, void *closure);
- #if __PYX_HAS_PY_AM_SEND == 2
- static void __Pyx_SetBackportTypeAmSend(PyTypeObject *type, __Pyx_PyAsyncMethodsStruct *static_amsend_methods, __Pyx_pyiter_sendfunc am_send);
- #endif
- static PyObject *__Pyx_Coroutine_fail_reduce_ex(PyObject *self, PyObject *arg);
- /* Generator.proto (used by GeneratorYieldFrom) */
- #define __Pyx_Generator_USED
- #define __Pyx_Generator_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_mstate_global->__pyx_GeneratorType)
- #define __Pyx_Generator_New(body, code, closure, name, qualname, module_name)\
- __Pyx__Coroutine_New(__pyx_mstate_global->__pyx_GeneratorType, body, code, closure, name, qualname, module_name)
- static PyObject *__Pyx_Generator_Next(PyObject *self);
- static int __pyx_Generator_init(PyObject *module);
- static CYTHON_INLINE PyObject *__Pyx_Generator_GetInlinedResult(PyObject *self);
- /* GeneratorYieldFrom.proto */
- static CYTHON_INLINE __Pyx_PySendResult __Pyx_Generator_Yield_From(__pyx_CoroutineObject *gen, PyObject *source, PyObject **retval);
- /* append.proto */
- static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x);
- /* PyRange_Check.proto */
- #if CYTHON_COMPILING_IN_PYPY && !defined(PyRange_Check)
- #define PyRange_Check(obj) __Pyx_TypeCheck((obj), &PyRange_Type)
- #endif
- /* PyLongBinop.proto */
- #if !CYTHON_COMPILING_IN_PYPY
- static CYTHON_INLINE PyObject* __Pyx_PyLong_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
- #else
- #define __Pyx_PyLong_AddObjC(op1, op2, intval, inplace, zerodivision_check)\
- (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2))
- #endif
- /* py_abs.proto */
- #if CYTHON_USE_PYLONG_INTERNALS
- static PyObject *__Pyx_PyLong_AbsNeg(PyObject *num);
- #define __Pyx_PyNumber_Absolute(x)\
- ((likely(PyLong_CheckExact(x))) ?\
- (likely(__Pyx_PyLong_IsNonNeg(x)) ? __Pyx_NewRef(x) : __Pyx_PyLong_AbsNeg(x)) :\
- PyNumber_Absolute(x))
- #else
- #define __Pyx_PyNumber_Absolute(x) PyNumber_Absolute(x)
- #endif
- /* PyFloatBinop.proto */
- #if !CYTHON_COMPILING_IN_PYPY
- static PyObject* __Pyx_PyFloat_TrueDivideObjC(PyObject *op1, PyObject *op2, double floatval, int inplace, int zerodivision_check);
- #else
- #define __Pyx_PyFloat_TrueDivideObjC(op1, op2, floatval, inplace, zerodivision_check)\
- (inplace ? PyNumber_InPlaceTrueDivide(op1, op2) : PyNumber_TrueDivide(op1, op2))
- #endif
- /* pybytes_as_double.proto (used by pynumber_float) */
- static double __Pyx_SlowPyString_AsDouble(PyObject *obj);
- static double __Pyx__PyBytes_AsDouble(PyObject *obj, const char* start, Py_ssize_t length);
- static CYTHON_INLINE double __Pyx_PyBytes_AsDouble(PyObject *obj) {
- char* as_c_string;
- Py_ssize_t size;
- #if CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE
- as_c_string = PyBytes_AS_STRING(obj);
- size = PyBytes_GET_SIZE(obj);
- #else
- if (PyBytes_AsStringAndSize(obj, &as_c_string, &size) < 0) {
- return (double)-1;
- }
- #endif
- return __Pyx__PyBytes_AsDouble(obj, as_c_string, size);
- }
- static CYTHON_INLINE double __Pyx_PyByteArray_AsDouble(PyObject *obj) {
- char* as_c_string;
- Py_ssize_t size;
- #if CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE
- as_c_string = PyByteArray_AS_STRING(obj);
- size = PyByteArray_GET_SIZE(obj);
- #else
- as_c_string = PyByteArray_AsString(obj);
- if (as_c_string == NULL) {
- return (double)-1;
- }
- size = PyByteArray_Size(obj);
- #endif
- return __Pyx__PyBytes_AsDouble(obj, as_c_string, size);
- }
- /* pyunicode_as_double.proto (used by pynumber_float) */
- #if !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS
- static const char* __Pyx__PyUnicode_AsDouble_Copy(const void* data, const int kind, char* buffer, Py_ssize_t start, Py_ssize_t end) {
- int last_was_punctuation;
- Py_ssize_t i;
- last_was_punctuation = 1;
- for (i=start; i <= end; i++) {
- Py_UCS4 chr = PyUnicode_READ(kind, data, i);
- int is_punctuation = (chr == '_') | (chr == '.');
- *buffer = (char)chr;
- buffer += (chr != '_');
- if (unlikely(chr > 127)) goto parse_failure;
- if (unlikely(last_was_punctuation & is_punctuation)) goto parse_failure;
- last_was_punctuation = is_punctuation;
- }
- if (unlikely(last_was_punctuation)) goto parse_failure;
- *buffer = '\0';
- return buffer;
- parse_failure:
- return NULL;
- }
- static double __Pyx__PyUnicode_AsDouble_inf_nan(const void* data, int kind, Py_ssize_t start, Py_ssize_t length) {
- int matches = 1;
- Py_UCS4 chr;
- Py_UCS4 sign = PyUnicode_READ(kind, data, start);
- int is_signed = (sign == '-') | (sign == '+');
- start += is_signed;
- length -= is_signed;
- switch (PyUnicode_READ(kind, data, start)) {
- #ifdef Py_NAN
- case 'n':
- case 'N':
- if (unlikely(length != 3)) goto parse_failure;
- chr = PyUnicode_READ(kind, data, start+1);
- matches &= (chr == 'a') | (chr == 'A');
- chr = PyUnicode_READ(kind, data, start+2);
- matches &= (chr == 'n') | (chr == 'N');
- if (unlikely(!matches)) goto parse_failure;
- return (sign == '-') ? -Py_NAN : Py_NAN;
- #endif
- case 'i':
- case 'I':
- if (unlikely(length < 3)) goto parse_failure;
- chr = PyUnicode_READ(kind, data, start+1);
- matches &= (chr == 'n') | (chr == 'N');
- chr = PyUnicode_READ(kind, data, start+2);
- matches &= (chr == 'f') | (chr == 'F');
- if (likely(length == 3 && matches))
- return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL;
- if (unlikely(length != 8)) goto parse_failure;
- chr = PyUnicode_READ(kind, data, start+3);
- matches &= (chr == 'i') | (chr == 'I');
- chr = PyUnicode_READ(kind, data, start+4);
- matches &= (chr == 'n') | (chr == 'N');
- chr = PyUnicode_READ(kind, data, start+5);
- matches &= (chr == 'i') | (chr == 'I');
- chr = PyUnicode_READ(kind, data, start+6);
- matches &= (chr == 't') | (chr == 'T');
- chr = PyUnicode_READ(kind, data, start+7);
- matches &= (chr == 'y') | (chr == 'Y');
- if (unlikely(!matches)) goto parse_failure;
- return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL;
- case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
- break;
- default:
- goto parse_failure;
- }
- return 0.0;
- parse_failure:
- return -1.0;
- }
- static double __Pyx_PyUnicode_AsDouble_WithSpaces(PyObject *obj) {
- double value;
- const char *last;
- char *end;
- Py_ssize_t start, length = PyUnicode_GET_LENGTH(obj);
- const int kind = PyUnicode_KIND(obj);
- const void* data = PyUnicode_DATA(obj);
- start = 0;
- while (Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, start)))
- start++;
- while (start < length - 1 && Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, length - 1)))
- length--;
- length -= start;
- if (unlikely(length <= 0)) goto fallback;
- value = __Pyx__PyUnicode_AsDouble_inf_nan(data, kind, start, length);
- if (unlikely(value == -1.0)) goto fallback;
- if (value != 0.0) return value;
- if (length < 40) {
- char number[40];
- last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length);
- if (unlikely(!last)) goto fallback;
- value = PyOS_string_to_double(number, &end, NULL);
- } else {
- char *number = (char*) PyMem_Malloc((length + 1) * sizeof(char));
- if (unlikely(!number)) goto fallback;
- last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length);
- if (unlikely(!last)) {
- PyMem_Free(number);
- goto fallback;
- }
- value = PyOS_string_to_double(number, &end, NULL);
- PyMem_Free(number);
- }
- if (likely(end == last) || (value == (double)-1 && PyErr_Occurred())) {
- return value;
- }
- fallback:
- return __Pyx_SlowPyString_AsDouble(obj);
- }
- #endif
- static CYTHON_INLINE double __Pyx_PyUnicode_AsDouble(PyObject *obj) {
- #if !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS
- if (unlikely(__Pyx_PyUnicode_READY(obj) == -1))
- return (double)-1;
- if (likely(PyUnicode_IS_ASCII(obj))) {
- const char *s;
- Py_ssize_t length;
- s = PyUnicode_AsUTF8AndSize(obj, &length);
- return __Pyx__PyBytes_AsDouble(obj, s, length);
- }
- return __Pyx_PyUnicode_AsDouble_WithSpaces(obj);
- #else
- return __Pyx_SlowPyString_AsDouble(obj);
- #endif
- }
- /* pynumber_float.proto */
- static CYTHON_INLINE PyObject* __Pyx__PyNumber_Float(PyObject* obj);
- #define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : __Pyx__PyNumber_Float(x))
- /* PyFloatBinop.proto */
- #if !CYTHON_COMPILING_IN_PYPY
- static int __Pyx_PyFloat_BoolEqObjC(PyObject *op1, PyObject *op2, double floatval, int inplace, int zerodivision_check);
- #else
- #define __Pyx_PyFloat_BoolEqObjC(op1, op2, floatval, inplace, zerodivision_check)\
- __Pyx_PyObject_IsTrueAndDecref(PyObject_RichCompare(op1, op2, Py_EQ))
- #endif
- /* pow2.proto */
- #define __Pyx_PyNumber_Power2(a, b) PyNumber_Power(a, b, Py_None)
- /* PyLongBinop.proto */
- #if !CYTHON_COMPILING_IN_PYPY
- static CYTHON_INLINE PyObject* __Pyx_PyLong_SubtractCObj(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
- #else
- #define __Pyx_PyLong_SubtractCObj(op1, op2, intval, inplace, zerodivision_check)\
- (inplace ? PyNumber_InPlaceSubtract(op1, op2) : PyNumber_Subtract(op1, op2))
- #endif
- /* PyValueError_Check.proto */
- #define __Pyx_PyExc_ValueError_Check(obj) __Pyx_TypeCheck(obj, PyExc_ValueError)
- /* PyObjectVectorCallKwBuilder.proto */
- CYTHON_UNUSED static int __Pyx_VectorcallBuilder_AddArg_Check(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n);
- #if CYTHON_VECTORCALL
- #if PY_VERSION_HEX >= 0x03090000
- #define __Pyx_Object_Vectorcall_CallFromBuilder PyObject_Vectorcall
- #else
- #define __Pyx_Object_Vectorcall_CallFromBuilder _PyObject_Vectorcall
- #endif
- #define __Pyx_MakeVectorcallBuilderKwds(n) PyTuple_New(n)
- static int __Pyx_VectorcallBuilder_AddArg(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n);
- static int __Pyx_VectorcallBuilder_AddArgStr(const char *key, PyObject *value, PyObject *builder, PyObject **args, int n);
- #else
- #define __Pyx_Object_Vectorcall_CallFromBuilder __Pyx_PyObject_FastCallDict
- #define __Pyx_MakeVectorcallBuilderKwds(n) __Pyx_PyDict_NewPresized(n)
- #define __Pyx_VectorcallBuilder_AddArg(key, value, builder, args, n) PyDict_SetItem(builder, key, value)
- #define __Pyx_VectorcallBuilder_AddArgStr(key, value, builder, args, n) PyDict_SetItemString(builder, key, value)
- #endif
- /* PyObjectFastCallMethod.proto */
- #if CYTHON_VECTORCALL && PY_VERSION_HEX >= 0x03090000
- #define __Pyx_PyObject_FastCallMethod(name, args, nargsf) PyObject_VectorcallMethod(name, args, nargsf, NULL)
- #else
- static PyObject *__Pyx_PyObject_FastCallMethod(PyObject *name, PyObject *const *args, size_t nargsf);
- #endif
- /* RaiseClosureNameError.proto */
- static void __Pyx_RaiseClosureNameError(const char *varname);
- /* PyMethodNew.proto (used by CythonFunctionShared) */
- static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ);
- /* PyVectorcallFastCallDict.proto (used by CythonFunctionShared) */
- #if CYTHON_METH_FASTCALL && CYTHON_VECTORCALL
- static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw);
- #endif
- /* CythonFunctionShared.proto (used by CythonFunction) */
- #define __Pyx_CyFunction_USED
- #define __Pyx_CYFUNCTION_STATICMETHOD 0x01
- #define __Pyx_CYFUNCTION_CLASSMETHOD 0x02
- #define __Pyx_CYFUNCTION_CCLASS 0x04
- #define __Pyx_CYFUNCTION_COROUTINE 0x08
- #define __Pyx_CyFunction_GetClosure(f)\
- (((__pyx_CyFunctionObject *) (f))->func_closure)
- #if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
- #define __Pyx_CyFunction_GetClassObj(f)\
- (((__pyx_CyFunctionObject *) (f))->func_classobj)
- #else
- #define __Pyx_CyFunction_GetClassObj(f)\
- ((PyObject*) ((PyCMethodObject *) (f))->mm_class)
- #endif
- #define __Pyx_CyFunction_SetClassObj(f, classobj)\
- __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (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 {
- #if CYTHON_COMPILING_IN_LIMITED_API
- PyObject_HEAD
- PyObject *func;
- #elif PY_VERSION_HEX < 0x030900B1
- PyCFunctionObject func;
- #else
- PyCMethodObject func;
- #endif
- #if CYTHON_COMPILING_IN_LIMITED_API && CYTHON_METH_FASTCALL
- __pyx_vectorcallfunc func_vectorcall;
- #endif
- #if CYTHON_COMPILING_IN_LIMITED_API
- PyObject *func_weakreflist;
- #endif
- #if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
- PyObject *func_dict;
- #endif
- PyObject *func_name;
- PyObject *func_qualname;
- PyObject *func_doc;
- PyObject *func_globals;
- PyObject *func_code;
- PyObject *func_closure;
- #if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
- PyObject *func_classobj;
- #endif
- PyObject *defaults;
- int flags;
- PyObject *defaults_tuple;
- PyObject *defaults_kwdict;
- PyObject *(*defaults_getter)(PyObject *);
- PyObject *func_annotations;
- PyObject *func_is_coroutine;
- } __pyx_CyFunctionObject;
- #undef __Pyx_CyOrPyCFunction_Check
- #define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_mstate_global->__pyx_CyFunctionType)
- #define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_mstate_global->__pyx_CyFunctionType, &PyCFunction_Type)
- #define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_mstate_global->__pyx_CyFunctionType)
- static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void (*cfunc)(void));
- #undef __Pyx_IsSameCFunction
- #define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc)
- static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml,
- int flags, PyObject* qualname,
- PyObject *closure,
- PyObject *module, PyObject *globals,
- PyObject* code);
- static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj);
- static CYTHON_INLINE PyObject *__Pyx_CyFunction_InitDefaults(PyObject *func,
- PyTypeObject *defaults_type);
- 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(PyObject *module);
- #if CYTHON_METH_FASTCALL
- static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
- static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
- static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
- static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
- #if CYTHON_COMPILING_IN_LIMITED_API
- #define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall)
- #else
- #define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall)
- #endif
- #endif
- /* CythonFunction.proto */
- static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml,
- int flags, PyObject* qualname,
- PyObject *closure,
- PyObject *module, PyObject *globals,
- PyObject* code);
- /* pyfrozenset_new.proto (used by PySetContains) */
- static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it);
- /* PySetContains.proto */
- static CYTHON_INLINE int __Pyx_PySet_ContainsTF(PyObject* key, PyObject* set, int eq);
- /* PyTypeError_Check.proto */
- #define __Pyx_PyExc_TypeError_Check(obj) __Pyx_TypeCheck(obj, PyExc_TypeError)
- /* AllocateExtensionType.proto */
- static PyObject *__Pyx_AllocateExtensionType(PyTypeObject *t, int is_final);
- /* CheckTypeForFreelists.proto */
- #if CYTHON_USE_FREELISTS
- #if CYTHON_USE_TYPE_SPECS
- #define __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, expected_tp, expected_size) ((int) ((t) == (expected_tp)))
- #define __PYX_CHECK_TYPE_FOR_FREELIST_FLAGS Py_TPFLAGS_IS_ABSTRACT
- #else
- #define __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, expected_tp, expected_size) ((int) ((t)->tp_basicsize == (expected_size)))
- #define __PYX_CHECK_TYPE_FOR_FREELIST_FLAGS (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)
- #endif
- #define __PYX_CHECK_TYPE_FOR_FREELISTS(t, expected_tp, expected_size)\
- (__PYX_CHECK_FINAL_TYPE_FOR_FREELISTS((t), (expected_tp), (expected_size)) &\
- (int) (!__Pyx_PyType_HasFeature((t), __PYX_CHECK_TYPE_FOR_FREELIST_FLAGS)))
- #endif
- /* PyObjectCallMethod0.proto (used by PyType_Ready) */
- static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name);
- /* ValidateBasesTuple.proto (used by PyType_Ready) */
- #if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS
- static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases);
- #endif
- /* PyType_Ready.proto */
- CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t);
- /* HasAttr.proto (used by ImportImpl) */
- #if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
- #define __Pyx_HasAttr(o, n) PyObject_HasAttrWithError(o, n)
- #else
- static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
- #endif
- /* ImportImpl.export */
- static PyObject *__Pyx__Import(PyObject *name, PyObject *const *imported_names, Py_ssize_t len_imported_names, PyObject *qualname, PyObject *moddict, int level);
- /* Import.proto */
- static CYTHON_INLINE PyObject *__Pyx_Import(PyObject *name, PyObject *const *imported_names, Py_ssize_t len_imported_names, PyObject *qualname, int level);
- /* ImportFrom.proto */
- static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
- /* ListPack.proto */
- static PyObject *__Pyx_PyList_Pack(Py_ssize_t n, ...);
- /* CLineInTraceback.proto (used by AddTraceback) */
- #if CYTHON_CLINE_IN_TRACEBACK && CYTHON_CLINE_IN_TRACEBACK_RUNTIME
- static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line);
- #else
- #define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0)
- #endif
- /* CodeObjectCache.proto (used by AddTraceback) */
- #if CYTHON_COMPILING_IN_LIMITED_API
- typedef PyObject __Pyx_CachedCodeObjectType;
- #else
- typedef PyCodeObject __Pyx_CachedCodeObjectType;
- #endif
- typedef struct {
- __Pyx_CachedCodeObjectType* code_object;
- int code_line;
- } __Pyx_CodeObjectCacheEntry;
- struct __Pyx_CodeObjectCache {
- int count;
- int max_count;
- __Pyx_CodeObjectCacheEntry* entries;
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- __pyx_atomic_int_type accessor_count;
- #endif
- };
- static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
- static __Pyx_CachedCodeObjectType *__pyx_find_code_object(int code_line);
- static void __pyx_insert_code_object(int code_line, __Pyx_CachedCodeObjectType* code_object);
- /* AddTraceback.proto */
- static void __Pyx_AddTraceback(const char *funcname, int c_line,
- int py_line, const char *filename);
- /* RealImag.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(__cplusplus) && CYTHON_CCOMPLEX\
- && (defined(_WIN32) || defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4 )) || __cplusplus >= 201103)
- #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
- /* Arithmetic.proto */
- #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
- #define __Pyx_c_eq_double(a, b) ((a)==(b))
- #define __Pyx_c_sum_double(a, b) ((a)+(b))
- #define __Pyx_c_diff_double(a, b) ((a)-(b))
- #define __Pyx_c_prod_double(a, b) ((a)*(b))
- #define __Pyx_c_quot_double(a, b) ((a)/(b))
- #define __Pyx_c_neg_double(a) (-(a))
- #ifdef __cplusplus
- #define __Pyx_c_is_zero_double(z) ((z)==(double)0)
- #define __Pyx_c_conj_double(z) (::std::conj(z))
- #if 1
- #define __Pyx_c_abs_double(z) (::std::abs(z))
- #define __Pyx_c_pow_double(a, b) (::std::pow(a, b))
- #endif
- #else
- #define __Pyx_c_is_zero_double(z) ((z)==0)
- #define __Pyx_c_conj_double(z) (conj(z))
- #if 1
- #define __Pyx_c_abs_double(z) (cabs(z))
- #define __Pyx_c_pow_double(a, b) (cpow(a, b))
- #endif
- #endif
- #else
- static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex, __pyx_t_double_complex);
- static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex, __pyx_t_double_complex);
- static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex, __pyx_t_double_complex);
- static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex, __pyx_t_double_complex);
- static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex, __pyx_t_double_complex);
- static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex);
- static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex);
- static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex);
- #if 1
- static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex);
- static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex, __pyx_t_double_complex);
- #endif
- #endif
- /* FromPy.proto */
- static __pyx_t_double_complex __Pyx_PyComplex_As___pyx_t_double_complex(PyObject*);
- /* ToPy.proto */
- #define __pyx_PyComplex_FromComplex(z)\
- PyComplex_FromDoubles((double)__Pyx_CREAL(z),\
- (double)__Pyx_CIMAG(z))
- /* GCCDiagnostics.proto */
- #if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
- #define __Pyx_HAS_GCC_DIAGNOSTIC
- #endif
- /* CIntToPy.proto */
- static CYTHON_INLINE PyObject* __Pyx_PyLong_From_long(long value);
- /* FormatTypeName.proto */
- #if CYTHON_COMPILING_IN_LIMITED_API
- typedef PyObject *__Pyx_TypeName;
- #define __Pyx_FMT_TYPENAME "%U"
- #define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj)
- #if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
- #define __Pyx_PyType_GetFullyQualifiedName PyType_GetFullyQualifiedName
- #else
- static __Pyx_TypeName __Pyx_PyType_GetFullyQualifiedName(PyTypeObject* tp);
- #endif
- #else // !LIMITED_API
- typedef const char *__Pyx_TypeName;
- #define __Pyx_FMT_TYPENAME "%.200s"
- #define __Pyx_PyType_GetFullyQualifiedName(tp) ((tp)->tp_name)
- #define __Pyx_DECREF_TypeName(obj)
- #endif
- /* CIntFromPy.proto */
- static CYTHON_INLINE long __Pyx_PyLong_As_long(PyObject *);
- /* CIntFromPy.proto */
- static CYTHON_INLINE int __Pyx_PyLong_As_int(PyObject *);
- /* FastTypeChecks.proto */
- #if CYTHON_COMPILING_IN_CPYTHON
- #define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
- #define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2)
- static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
- static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b);
- static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
- static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
- #else
- #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
- #define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2))
- #define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
- static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2) {
- return PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2);
- }
- #endif
- #define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2)
- #define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
- #ifdef PyExceptionInstance_Check
- #define __Pyx_PyBaseException_Check(obj) PyExceptionInstance_Check(obj)
- #else
- #define __Pyx_PyBaseException_Check(obj) __Pyx_TypeCheck(obj, PyExc_BaseException)
- #endif
- /* GetRuntimeVersion.proto */
- #if __PYX_LIMITED_VERSION_HEX < 0x030b0000
- static unsigned long __Pyx_cached_runtime_version = 0;
- static void __Pyx_init_runtime_version(void);
- #else
- #define __Pyx_init_runtime_version()
- #endif
- static unsigned long __Pyx_get_runtime_version(void);
- /* CheckBinaryVersion.proto */
- static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer);
- /* DecompressString.proto */
- static PyObject *__Pyx_DecompressString(const char *s, Py_ssize_t length, int algo);
- /* MultiPhaseInitModuleState.proto */
- #if CYTHON_PEP489_MULTI_PHASE_INIT && CYTHON_USE_MODULE_STATE
- static PyObject *__Pyx_State_FindModule(void*);
- static int __Pyx_State_AddModule(PyObject* module, void*);
- static int __Pyx_State_RemoveModule(void*);
- #elif CYTHON_USE_MODULE_STATE
- #define __Pyx_State_FindModule PyState_FindModule
- #define __Pyx_State_AddModule PyState_AddModule
- #define __Pyx_State_RemoveModule PyState_RemoveModule
- #endif
- /* #### Code section: module_declarations ### */
- /* CythonABIVersion.proto */
- #if CYTHON_COMPILING_IN_LIMITED_API
- #if CYTHON_METH_FASTCALL
- #define __PYX_FASTCALL_ABI_SUFFIX "_fastcall"
- #else
- #define __PYX_FASTCALL_ABI_SUFFIX
- #endif
- #define __PYX_LIMITED_ABI_SUFFIX "limited" __PYX_FASTCALL_ABI_SUFFIX __PYX_AM_SEND_ABI_SUFFIX
- #else
- #define __PYX_LIMITED_ABI_SUFFIX
- #endif
- #if __PYX_HAS_PY_AM_SEND == 1
- #define __PYX_AM_SEND_ABI_SUFFIX
- #elif __PYX_HAS_PY_AM_SEND == 2
- #define __PYX_AM_SEND_ABI_SUFFIX "amsendbackport"
- #else
- #define __PYX_AM_SEND_ABI_SUFFIX "noamsend"
- #endif
- #ifndef __PYX_MONITORING_ABI_SUFFIX
- #define __PYX_MONITORING_ABI_SUFFIX
- #endif
- #if CYTHON_USE_TP_FINALIZE
- #define __PYX_TP_FINALIZE_ABI_SUFFIX
- #else
- #define __PYX_TP_FINALIZE_ABI_SUFFIX "nofinalize"
- #endif
- #if CYTHON_USE_FREELISTS || !defined(__Pyx_AsyncGen_USED)
- #define __PYX_FREELISTS_ABI_SUFFIX
- #else
- #define __PYX_FREELISTS_ABI_SUFFIX "nofreelists"
- #endif
- #define CYTHON_ABI __PYX_ABI_VERSION __PYX_LIMITED_ABI_SUFFIX __PYX_MONITORING_ABI_SUFFIX __PYX_TP_FINALIZE_ABI_SUFFIX __PYX_FREELISTS_ABI_SUFFIX __PYX_AM_SEND_ABI_SUFFIX
- #define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI
- #define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "."
- /* Module declarations from "cython" */
- /* Module declarations from "fontTools.misc.bezierTools" */
- static CYTHON_INLINE double __pyx_f_9fontTools_4misc_11bezierTools__dot(__pyx_t_double_complex, __pyx_t_double_complex); /*proto*/
- static CYTHON_INLINE double __pyx_f_9fontTools_4misc_11bezierTools__intSecAtan(double); /*proto*/
- static CYTHON_INLINE PyObject *__pyx_f_9fontTools_4misc_11bezierTools_calcCubicParametersC(__pyx_t_double_complex, __pyx_t_double_complex, __pyx_t_double_complex, __pyx_t_double_complex); /*proto*/
- static CYTHON_INLINE PyObject *__pyx_f_9fontTools_4misc_11bezierTools_calcCubicPointsC(__pyx_t_double_complex, __pyx_t_double_complex, __pyx_t_double_complex, __pyx_t_double_complex); /*proto*/
- /* #### Code section: typeinfo ### */
- /* #### Code section: before_global_var ### */
- #define __Pyx_MODULE_NAME "fontTools.misc.bezierTools"
- extern int __pyx_module_is_main_fontTools__misc__bezierTools;
- int __pyx_module_is_main_fontTools__misc__bezierTools = 0;
- /* Implementation of "fontTools.misc.bezierTools" */
- /* #### Code section: global_var ### */
- static PyObject *__pyx_builtin_round;
- static PyObject *__pyx_builtin_print;
- /* #### Code section: string_decls ### */
- static const char __pyx_k_fontTools_misc_bezierTools_py_to[] = "fontTools.misc.bezierTools.py -- tools for working with Bezier path segments.\n";
- /* #### Code section: decls ### */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_calcCubicArcLength(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_pt4, PyObject *__pyx_v_tolerance); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_2_split_cubic_into_two(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_p0, PyObject *__pyx_v_p1, PyObject *__pyx_v_p2, PyObject *__pyx_v_p3); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_4_calcCubicArcLengthCRecurse(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_mult, __pyx_t_double_complex __pyx_v_p0, __pyx_t_double_complex __pyx_v_p1, __pyx_t_double_complex __pyx_v_p2, __pyx_t_double_complex __pyx_v_p3); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_6calcCubicArcLengthC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_pt1, __pyx_t_double_complex __pyx_v_pt2, __pyx_t_double_complex __pyx_v_pt3, __pyx_t_double_complex __pyx_v_pt4, double __pyx_v_tolerance); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_8calcQuadraticArcLength(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_10calcQuadraticArcLengthC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_pt1, __pyx_t_double_complex __pyx_v_pt2, __pyx_t_double_complex __pyx_v_pt3); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_12approximateQuadraticArcLength(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_14approximateQuadraticArcLengthC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_pt1, __pyx_t_double_complex __pyx_v_pt2, __pyx_t_double_complex __pyx_v_pt3); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_16calcQuadraticBounds(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_18approximateCubicArcLength(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_pt4); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_20approximateCubicArcLengthC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_pt1, __pyx_t_double_complex __pyx_v_pt2, __pyx_t_double_complex __pyx_v_pt3, __pyx_t_double_complex __pyx_v_pt4); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_22calcCubicBounds(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_pt4); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_24splitLine(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_where, PyObject *__pyx_v_isHorizontal); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_14splitQuadratic_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_26splitQuadratic(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_where, PyObject *__pyx_v_isHorizontal); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_10splitCubic_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_28splitCubic(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_pt4, PyObject *__pyx_v_where, PyObject *__pyx_v_isHorizontal); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_30splitQuadraticAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_ts); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_32splitCubicAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_pt4, PyObject *__pyx_v_ts); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_34splitCubicAtTC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_pt1, __pyx_t_double_complex __pyx_v_pt2, __pyx_t_double_complex __pyx_v_pt3, __pyx_t_double_complex __pyx_v_pt4, PyObject *__pyx_v_ts); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_37splitCubicIntoTwoAtTC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_pt1, __pyx_t_double_complex __pyx_v_pt2, __pyx_t_double_complex __pyx_v_pt3, __pyx_t_double_complex __pyx_v_pt4, double __pyx_v_t); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_39_splitQuadraticAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_ts); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_41_splitCubicAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_ts); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_43_splitCubicAtTC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_a, __pyx_t_double_complex __pyx_v_b, __pyx_t_double_complex __pyx_v_c, __pyx_t_double_complex __pyx_v_d, PyObject *__pyx_v_ts); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_96__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_46solveQuadratic(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_sqrt); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_48solveCubic(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_50calcQuadraticParameters(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_52calcCubicParameters(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_pt4); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_54calcQuadraticPoints(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_56calcCubicPoints(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_58linePointAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_t); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_60quadraticPointAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_t); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_62cubicPointAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_pt4, PyObject *__pyx_v_t); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_64cubicPointAtTC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_pt1, __pyx_t_double_complex __pyx_v_pt2, __pyx_t_double_complex __pyx_v_pt3, __pyx_t_double_complex __pyx_v_pt4, double __pyx_v_t); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_66segmentPointAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seg, PyObject *__pyx_v_t); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_68_line_t_of_pt(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_s, PyObject *__pyx_v_e, PyObject *__pyx_v_pt); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_70_both_points_are_on_same_side_of_origin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_origin); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_72lineLineIntersections(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_s1, PyObject *__pyx_v_e1, PyObject *__pyx_v_s2, PyObject *__pyx_v_e2); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_74_alignment_transformation(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_segment); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_27_curve_line_intersections_t_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_76_curve_line_intersections_t(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_curve, PyObject *__pyx_v_line); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_78curveLineIntersections(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_curve, PyObject *__pyx_v_line); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_80_curve_bounds(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_c); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_82_split_segment_at_t(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_c, PyObject *__pyx_v_t); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_midpoint(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_r); /* proto */
- static PyObject *__pyx_lambda_funcdef_lambda3(PyObject *__pyx_self, PyObject *__pyx_v_ts); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_84_curve_curve_intersections_t(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_curve1, PyObject *__pyx_v_curve2, PyObject *__pyx_v_precision, PyObject *__pyx_v_range1, PyObject *__pyx_v_range2); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_12_is_linelike_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_86_is_linelike(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_segment); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_88curveCurveIntersections(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_curve1, PyObject *__pyx_v_curve2); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_90segmentSegmentIntersections(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seg1, PyObject *__pyx_v_seg2); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_12_segmentrepr_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_92_segmentrepr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj); /* proto */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_94printSegments(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_segments); /* proto */
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_defaults(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
- /* #### Code section: late_includes ### */
- /* #### Code section: module_state ### */
- /* SmallCodeConfig */
- #ifndef CYTHON_SMALL_CODE
- #if defined(__clang__)
- #define CYTHON_SMALL_CODE
- #elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
- #define CYTHON_SMALL_CODE __attribute__((cold))
- #else
- #define CYTHON_SMALL_CODE
- #endif
- #endif
- typedef struct {
- PyObject *__pyx_d;
- PyObject *__pyx_b;
- PyObject *__pyx_cython_runtime;
- PyObject *__pyx_empty_tuple;
- PyObject *__pyx_empty_bytes;
- PyObject *__pyx_empty_unicode;
- PyObject *__pyx_type_9fontTools_4misc_11bezierTools___pyx_defaults;
- PyObject *__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr;
- PyObject *__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr;
- PyObject *__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC;
- PyObject *__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC;
- PyObject *__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr;
- PyObject *__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t;
- PyObject *__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr;
- PyObject *__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr;
- PyTypeObject *__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_defaults;
- PyTypeObject *__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr;
- PyTypeObject *__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr;
- PyTypeObject *__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC;
- PyTypeObject *__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC;
- PyTypeObject *__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr;
- PyTypeObject *__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t;
- PyTypeObject *__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr;
- PyTypeObject *__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr;
- __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_items;
- __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_pop;
- __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_values;
- PyObject *__pyx_slice[2];
- PyObject *__pyx_tuple[4];
- PyObject *__pyx_codeobj_tab[54];
- PyObject *__pyx_string_tab[387];
- PyObject *__pyx_number_tab[21];
- /* #### Code section: module_state_contents ### */
- /* CommonTypesMetaclass.module_state_decls */
- PyTypeObject *__pyx_CommonTypesMetaclassType;
- /* IterNextPlain.module_state_decls */
- #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
- PyObject *__Pyx_GetBuiltinNext_LimitedAPI_cache;
- #endif
- /* Generator.module_state_decls */
- PyTypeObject *__pyx_GeneratorType;
- /* CachedMethodType.module_state_decls */
- #if CYTHON_COMPILING_IN_LIMITED_API
- PyObject *__Pyx_CachedMethodType;
- #endif
- /* CythonFunctionShared.module_state_decls */
- PyTypeObject *__pyx_CyFunctionType;
- #if CYTHON_USE_FREELISTS
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr[8];
- int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr;
- #endif
- #if CYTHON_USE_FREELISTS
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr[8];
- int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr;
- #endif
- #if CYTHON_USE_FREELISTS
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC[8];
- int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC;
- #endif
- #if CYTHON_USE_FREELISTS
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC[8];
- int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC;
- #endif
- #if CYTHON_USE_FREELISTS
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr[8];
- int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr;
- #endif
- #if CYTHON_USE_FREELISTS
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t[8];
- int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t;
- #endif
- #if CYTHON_USE_FREELISTS
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr[8];
- int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr;
- #endif
- #if CYTHON_USE_FREELISTS
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr[8];
- int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr;
- #endif
- /* CodeObjectCache.module_state_decls */
- struct __Pyx_CodeObjectCache __pyx_code_cache;
- /* #### Code section: module_state_end ### */
- } __pyx_mstatetype;
- #if CYTHON_USE_MODULE_STATE
- #ifdef __cplusplus
- namespace {
- extern struct PyModuleDef __pyx_moduledef;
- } /* anonymous namespace */
- #else
- static struct PyModuleDef __pyx_moduledef;
- #endif
- #define __pyx_mstate_global (__Pyx_PyModule_GetState(__Pyx_State_FindModule(&__pyx_moduledef)))
- #define __pyx_m (__Pyx_State_FindModule(&__pyx_moduledef))
- #else
- static __pyx_mstatetype __pyx_mstate_global_static =
- #ifdef __cplusplus
- {};
- #else
- {0};
- #endif
- static __pyx_mstatetype * const __pyx_mstate_global = &__pyx_mstate_global_static;
- #endif
- /* #### Code section: constant_name_defines ### */
- #define __pyx_kp_u_ __pyx_string_tab[0]
- #define __pyx_kp_u_Approximates_the_arc_length_for __pyx_string_tab[1]
- #define __pyx_kp_u_Calculates_the_arc_length_for_a __pyx_string_tab[2]
- #define __pyx_kp_u_Calculates_the_bounding_rectangl __pyx_string_tab[3]
- #define __pyx_kp_u_Calculates_the_bounding_rectangl_2 __pyx_string_tab[4]
- #define __pyx_kp_u_Couldn_t_work_out_which_intersec __pyx_string_tab[5]
- #define __pyx_kp_u_Finds_intersections_between_a_cu __pyx_string_tab[6]
- #define __pyx_kp_u_Finds_intersections_between_a_cu_2 __pyx_string_tab[7]
- #define __pyx_kp_u_Finds_intersections_between_two __pyx_string_tab[8]
- #define __pyx_kp_u_Finds_intersections_between_two_2 __pyx_string_tab[9]
- #define __pyx_kp_u_Lib_fontTools_misc_bezierTools_p __pyx_string_tab[10]
- #define __pyx_kp_u_Solve_a_cubic_equation_Solves_a __pyx_string_tab[11]
- #define __pyx_kp_u_Split_a_cubic_Bezier_curve_at_a __pyx_string_tab[12]
- #define __pyx_kp_u_Split_a_cubic_Bezier_curve_at_on __pyx_string_tab[13]
- #define __pyx_kp_u_Split_a_line_at_a_given_coordina __pyx_string_tab[14]
- #define __pyx_kp_u_Split_a_quadratic_Bezier_curve_a __pyx_string_tab[15]
- #define __pyx_kp_u_Split_a_quadratic_Bezier_curve_a_2 __pyx_string_tab[16]
- #define __pyx_kp_u_Unknown_curve_degree __pyx_string_tab[17]
- #define __pyx_kp_u__2 __pyx_string_tab[18]
- #define __pyx_kp_u__3 __pyx_string_tab[19]
- #define __pyx_kp_u_approximateCubicArcLength_line_3 __pyx_string_tab[20]
- #define __pyx_kp_u_calcCubicBounds_line_412 __pyx_string_tab[21]
- #define __pyx_kp_u_calcQuadraticArcLength_line_151 __pyx_string_tab[22]
- #define __pyx_kp_u_calcQuadraticBounds_line_298 __pyx_string_tab[23]
- #define __pyx_kp_u_curveCurveIntersections_line_138 __pyx_string_tab[24]
- #define __pyx_kp_u_curveLineIntersections_line_1255 __pyx_string_tab[25]
- #define __pyx_kp_u_disable __pyx_string_tab[26]
- #define __pyx_kp_u_enable __pyx_string_tab[27]
- #define __pyx_kp_u_g __pyx_string_tab[28]
- #define __pyx_kp_u_gc __pyx_string_tab[29]
- #define __pyx_kp_u_isenabled __pyx_string_tab[30]
- #define __pyx_kp_u_lineLineIntersections_line_1154 __pyx_string_tab[31]
- #define __pyx_kp_u_s_2 __pyx_string_tab[32]
- #define __pyx_kp_u_segmentSegmentIntersections_line __pyx_string_tab[33]
- #define __pyx_kp_u_segmentrepr_1_2_3_2_3_4_0_1_2 __pyx_string_tab[34]
- #define __pyx_kp_u_segmentrepr_line_1475 __pyx_string_tab[35]
- #define __pyx_kp_u_solveCubic_line_848 __pyx_string_tab[36]
- #define __pyx_kp_u_splitCubicAtT_line_613 __pyx_string_tab[37]
- #define __pyx_kp_u_splitCubic_line_552 __pyx_string_tab[38]
- #define __pyx_kp_u_splitLine_line_450 __pyx_string_tab[39]
- #define __pyx_kp_u_splitQuadraticAtT_line_589 __pyx_string_tab[40]
- #define __pyx_kp_u_splitQuadratic_line_507 __pyx_string_tab[41]
- #define __pyx_n_u_1_t __pyx_string_tab[42]
- #define __pyx_n_u_1_t_2 __pyx_string_tab[43]
- #define __pyx_n_u_2_t_1_t __pyx_string_tab[44]
- #define __pyx_n_u_COMPILED __pyx_string_tab[45]
- #define __pyx_n_u_DD __pyx_string_tab[46]
- #define __pyx_n_u_EPSILON __pyx_string_tab[47]
- #define __pyx_n_u_Identity __pyx_string_tab[48]
- #define __pyx_n_u_Intersection __pyx_string_tab[49]
- #define __pyx_n_u_Len __pyx_string_tab[50]
- #define __pyx_n_u_Pyx_PyDict_NextRef __pyx_string_tab[51]
- #define __pyx_n_u_Q __pyx_string_tab[52]
- #define __pyx_n_u_Q3 __pyx_string_tab[53]
- #define __pyx_n_u_R __pyx_string_tab[54]
- #define __pyx_n_u_R2 __pyx_string_tab[55]
- #define __pyx_n_u_R2_Q3 __pyx_string_tab[56]
- #define __pyx_n_u__6 __pyx_string_tab[57]
- #define __pyx_n_u_a __pyx_string_tab[58]
- #define __pyx_n_u_a1 __pyx_string_tab[59]
- #define __pyx_n_u_a1_3 __pyx_string_tab[60]
- #define __pyx_n_u_a1x __pyx_string_tab[61]
- #define __pyx_n_u_a1y __pyx_string_tab[62]
- #define __pyx_n_u_a2 __pyx_string_tab[63]
- #define __pyx_n_u_a3 __pyx_string_tab[64]
- #define __pyx_n_u_acos __pyx_string_tab[65]
- #define __pyx_n_u_aligned_curve __pyx_string_tab[66]
- #define __pyx_n_u_alignment_transformation __pyx_string_tab[67]
- #define __pyx_n_u_all __pyx_string_tab[68]
- #define __pyx_n_u_angle __pyx_string_tab[69]
- #define __pyx_n_u_append __pyx_string_tab[70]
- #define __pyx_n_u_approximateCubicArcLength __pyx_string_tab[71]
- #define __pyx_n_u_approximateCubicArcLengthC __pyx_string_tab[72]
- #define __pyx_n_u_approximateQuadraticArcLength __pyx_string_tab[73]
- #define __pyx_n_u_approximateQuadraticArcLengthC __pyx_string_tab[74]
- #define __pyx_n_u_arch __pyx_string_tab[75]
- #define __pyx_n_u_asinh __pyx_string_tab[76]
- #define __pyx_n_u_asyncio_coroutines __pyx_string_tab[77]
- #define __pyx_n_u_atan2 __pyx_string_tab[78]
- #define __pyx_n_u_ax __pyx_string_tab[79]
- #define __pyx_n_u_ax2 __pyx_string_tab[80]
- #define __pyx_n_u_ax3 __pyx_string_tab[81]
- #define __pyx_n_u_ay __pyx_string_tab[82]
- #define __pyx_n_u_ay2 __pyx_string_tab[83]
- #define __pyx_n_u_ay3 __pyx_string_tab[84]
- #define __pyx_n_u_b __pyx_string_tab[85]
- #define __pyx_n_u_b1 __pyx_string_tab[86]
- #define __pyx_n_u_b1x __pyx_string_tab[87]
- #define __pyx_n_u_b1y __pyx_string_tab[88]
- #define __pyx_n_u_both_points_are_on_same_side_of __pyx_string_tab[89]
- #define __pyx_n_u_bounds1 __pyx_string_tab[90]
- #define __pyx_n_u_bounds2 __pyx_string_tab[91]
- #define __pyx_n_u_box __pyx_string_tab[92]
- #define __pyx_n_u_bx __pyx_string_tab[93]
- #define __pyx_n_u_bx2 __pyx_string_tab[94]
- #define __pyx_n_u_by __pyx_string_tab[95]
- #define __pyx_n_u_by2 __pyx_string_tab[96]
- #define __pyx_n_u_c __pyx_string_tab[97]
- #define __pyx_n_u_c1 __pyx_string_tab[98]
- #define __pyx_n_u_c11 __pyx_string_tab[99]
- #define __pyx_n_u_c11_range __pyx_string_tab[100]
- #define __pyx_n_u_c12 __pyx_string_tab[101]
- #define __pyx_n_u_c12_range __pyx_string_tab[102]
- #define __pyx_n_u_c1x __pyx_string_tab[103]
- #define __pyx_n_u_c1y __pyx_string_tab[104]
- #define __pyx_n_u_c21 __pyx_string_tab[105]
- #define __pyx_n_u_c21_range __pyx_string_tab[106]
- #define __pyx_n_u_c22 __pyx_string_tab[107]
- #define __pyx_n_u_c22_range __pyx_string_tab[108]
- #define __pyx_n_u_calcBounds __pyx_string_tab[109]
- #define __pyx_n_u_calcCubicArcLength __pyx_string_tab[110]
- #define __pyx_n_u_calcCubicArcLengthC __pyx_string_tab[111]
- #define __pyx_n_u_calcCubicArcLengthCRecurse __pyx_string_tab[112]
- #define __pyx_n_u_calcCubicBounds __pyx_string_tab[113]
- #define __pyx_n_u_calcCubicParameters __pyx_string_tab[114]
- #define __pyx_n_u_calcCubicPoints __pyx_string_tab[115]
- #define __pyx_n_u_calcQuadraticArcLength __pyx_string_tab[116]
- #define __pyx_n_u_calcQuadraticArcLengthC __pyx_string_tab[117]
- #define __pyx_n_u_calcQuadraticBounds __pyx_string_tab[118]
- #define __pyx_n_u_calcQuadraticParameters __pyx_string_tab[119]
- #define __pyx_n_u_calcQuadraticPoints __pyx_string_tab[120]
- #define __pyx_n_u_class_getitem __pyx_string_tab[121]
- #define __pyx_n_u_cline_in_traceback __pyx_string_tab[122]
- #define __pyx_n_u_close __pyx_string_tab[123]
- #define __pyx_n_u_collections __pyx_string_tab[124]
- #define __pyx_n_u_cos __pyx_string_tab[125]
- #define __pyx_n_u_cubicPointAtT __pyx_string_tab[126]
- #define __pyx_n_u_cubicPointAtTC __pyx_string_tab[127]
- #define __pyx_n_u_curve __pyx_string_tab[128]
- #define __pyx_n_u_curve1 __pyx_string_tab[129]
- #define __pyx_n_u_curve2 __pyx_string_tab[130]
- #define __pyx_n_u_curveCurveIntersections __pyx_string_tab[131]
- #define __pyx_n_u_curveLineIntersections __pyx_string_tab[132]
- #define __pyx_n_u_curve_bounds __pyx_string_tab[133]
- #define __pyx_n_u_curve_curve_intersections_t __pyx_string_tab[134]
- #define __pyx_n_u_curve_curve_intersections_t_loc __pyx_string_tab[135]
- #define __pyx_n_u_curve_curve_intersections_t_loc_2 __pyx_string_tab[136]
- #define __pyx_n_u_curve_line_intersections_t __pyx_string_tab[137]
- #define __pyx_n_u_curve_line_intersections_t_loca __pyx_string_tab[138]
- #define __pyx_n_u_cx __pyx_string_tab[139]
- #define __pyx_n_u_cy __pyx_string_tab[140]
- #define __pyx_n_u_d __pyx_string_tab[141]
- #define __pyx_n_u_d0 __pyx_string_tab[142]
- #define __pyx_n_u_d1 __pyx_string_tab[143]
- #define __pyx_n_u_d1x __pyx_string_tab[144]
- #define __pyx_n_u_d1y __pyx_string_tab[145]
- #define __pyx_n_u_delta __pyx_string_tab[146]
- #define __pyx_n_u_delta_2 __pyx_string_tab[147]
- #define __pyx_n_u_delta_3 __pyx_string_tab[148]
- #define __pyx_n_u_deriv3 __pyx_string_tab[149]
- #define __pyx_n_u_doctest __pyx_string_tab[150]
- #define __pyx_n_u_dx __pyx_string_tab[151]
- #define __pyx_n_u_dy __pyx_string_tab[152]
- #define __pyx_n_u_e __pyx_string_tab[153]
- #define __pyx_n_u_e1 __pyx_string_tab[154]
- #define __pyx_n_u_e1x __pyx_string_tab[155]
- #define __pyx_n_u_e1y __pyx_string_tab[156]
- #define __pyx_n_u_e2 __pyx_string_tab[157]
- #define __pyx_n_u_e2x __pyx_string_tab[158]
- #define __pyx_n_u_e2y __pyx_string_tab[159]
- #define __pyx_n_u_end __pyx_string_tab[160]
- #define __pyx_n_u_epsilon __pyx_string_tab[161]
- #define __pyx_n_u_epsilonDigits __pyx_string_tab[162]
- #define __pyx_n_u_ex __pyx_string_tab[163]
- #define __pyx_n_u_exit __pyx_string_tab[164]
- #define __pyx_n_u_ey __pyx_string_tab[165]
- #define __pyx_n_u_failed __pyx_string_tab[166]
- #define __pyx_n_u_fontTools_misc_arrayTools __pyx_string_tab[167]
- #define __pyx_n_u_fontTools_misc_bezierTools __pyx_string_tab[168]
- #define __pyx_n_u_fontTools_misc_transform __pyx_string_tab[169]
- #define __pyx_n_u_found __pyx_string_tab[170]
- #define __pyx_n_u_func __pyx_string_tab[171]
- #define __pyx_n_u_genexpr __pyx_string_tab[172]
- #define __pyx_n_u_hits __pyx_string_tab[173]
- #define __pyx_n_u_i __pyx_string_tab[174]
- #define __pyx_n_u_insert __pyx_string_tab[175]
- #define __pyx_n_u_intersection_ts __pyx_string_tab[176]
- #define __pyx_n_u_intersections __pyx_string_tab[177]
- #define __pyx_n_u_intersects __pyx_string_tab[178]
- #define __pyx_n_u_isHorizontal __pyx_string_tab[179]
- #define __pyx_n_u_is_coroutine __pyx_string_tab[180]
- #define __pyx_n_u_is_linelike __pyx_string_tab[181]
- #define __pyx_n_u_is_linelike_locals_genexpr __pyx_string_tab[182]
- #define __pyx_n_u_isclose __pyx_string_tab[183]
- #define __pyx_n_u_it __pyx_string_tab[184]
- #define __pyx_n_u_items __pyx_string_tab[185]
- #define __pyx_n_u_key __pyx_string_tab[186]
- #define __pyx_n_u_lambda __pyx_string_tab[187]
- #define __pyx_n_u_line __pyx_string_tab[188]
- #define __pyx_n_u_line1 __pyx_string_tab[189]
- #define __pyx_n_u_line2 __pyx_string_tab[190]
- #define __pyx_n_u_lineLineIntersections __pyx_string_tab[191]
- #define __pyx_n_u_linePointAtT __pyx_string_tab[192]
- #define __pyx_n_u_line_t __pyx_string_tab[193]
- #define __pyx_n_u_line_t_of_pt __pyx_string_tab[194]
- #define __pyx_n_u_main __pyx_string_tab[195]
- #define __pyx_n_u_math __pyx_string_tab[196]
- #define __pyx_n_u_maybeline __pyx_string_tab[197]
- #define __pyx_n_u_mid __pyx_string_tab[198]
- #define __pyx_n_u_midPt __pyx_string_tab[199]
- #define __pyx_n_u_midpoint __pyx_string_tab[200]
- #define __pyx_n_u_module __pyx_string_tab[201]
- #define __pyx_n_u_mult __pyx_string_tab[202]
- #define __pyx_n_u_n __pyx_string_tab[203]
- #define __pyx_n_u_name __pyx_string_tab[204]
- #define __pyx_n_u_namedtuple __pyx_string_tab[205]
- #define __pyx_n_u_next __pyx_string_tab[206]
- #define __pyx_n_u_obj __pyx_string_tab[207]
- #define __pyx_n_u_off1 __pyx_string_tab[208]
- #define __pyx_n_u_off2 __pyx_string_tab[209]
- #define __pyx_n_u_one __pyx_string_tab[210]
- #define __pyx_n_u_origDist __pyx_string_tab[211]
- #define __pyx_n_u_origin __pyx_string_tab[212]
- #define __pyx_n_u_p __pyx_string_tab[213]
- #define __pyx_n_u_p0 __pyx_string_tab[214]
- #define __pyx_n_u_p1 __pyx_string_tab[215]
- #define __pyx_n_u_p2 __pyx_string_tab[216]
- #define __pyx_n_u_p3 __pyx_string_tab[217]
- #define __pyx_n_u_pi __pyx_string_tab[218]
- #define __pyx_n_u_pointAtT __pyx_string_tab[219]
- #define __pyx_n_u_pointFinder __pyx_string_tab[220]
- #define __pyx_n_u_points __pyx_string_tab[221]
- #define __pyx_n_u_pop __pyx_string_tab[222]
- #define __pyx_n_u_precision __pyx_string_tab[223]
- #define __pyx_n_u_print __pyx_string_tab[224]
- #define __pyx_n_u_printSegments __pyx_string_tab[225]
- #define __pyx_n_u_pt __pyx_string_tab[226]
- #define __pyx_n_u_pt1 __pyx_string_tab[227]
- #define __pyx_n_u_pt1x __pyx_string_tab[228]
- #define __pyx_n_u_pt1y __pyx_string_tab[229]
- #define __pyx_n_u_pt2 __pyx_string_tab[230]
- #define __pyx_n_u_pt2x __pyx_string_tab[231]
- #define __pyx_n_u_pt2y __pyx_string_tab[232]
- #define __pyx_n_u_pt3 __pyx_string_tab[233]
- #define __pyx_n_u_pt4 __pyx_string_tab[234]
- #define __pyx_n_u_px __pyx_string_tab[235]
- #define __pyx_n_u_py __pyx_string_tab[236]
- #define __pyx_n_u_quadraticPointAtT __pyx_string_tab[237]
- #define __pyx_n_u_qualname __pyx_string_tab[238]
- #define __pyx_n_u_r __pyx_string_tab[239]
- #define __pyx_n_u_rDD __pyx_string_tab[240]
- #define __pyx_n_u_rQ2 __pyx_string_tab[241]
- #define __pyx_n_u_range1 __pyx_string_tab[242]
- #define __pyx_n_u_range2 __pyx_string_tab[243]
- #define __pyx_n_u_rectArea __pyx_string_tab[244]
- #define __pyx_n_u_roots __pyx_string_tab[245]
- #define __pyx_n_u_rotate __pyx_string_tab[246]
- #define __pyx_n_u_round __pyx_string_tab[247]
- #define __pyx_n_u_s __pyx_string_tab[248]
- #define __pyx_n_u_s1 __pyx_string_tab[249]
- #define __pyx_n_u_s1x __pyx_string_tab[250]
- #define __pyx_n_u_s1y __pyx_string_tab[251]
- #define __pyx_n_u_s2 __pyx_string_tab[252]
- #define __pyx_n_u_s2x __pyx_string_tab[253]
- #define __pyx_n_u_s2y __pyx_string_tab[254]
- #define __pyx_n_u_scale __pyx_string_tab[255]
- #define __pyx_n_u_sectRect __pyx_string_tab[256]
- #define __pyx_n_u_seen __pyx_string_tab[257]
- #define __pyx_n_u_seg __pyx_string_tab[258]
- #define __pyx_n_u_seg1 __pyx_string_tab[259]
- #define __pyx_n_u_seg2 __pyx_string_tab[260]
- #define __pyx_n_u_segment __pyx_string_tab[261]
- #define __pyx_n_u_segmentPointAtT __pyx_string_tab[262]
- #define __pyx_n_u_segmentSegmentIntersections __pyx_string_tab[263]
- #define __pyx_n_u_segmentrepr __pyx_string_tab[264]
- #define __pyx_n_u_segmentrepr_locals_genexpr __pyx_string_tab[265]
- #define __pyx_n_u_segments __pyx_string_tab[266]
- #define __pyx_n_u_send __pyx_string_tab[267]
- #define __pyx_n_u_set_name __pyx_string_tab[268]
- #define __pyx_n_u_setdefault __pyx_string_tab[269]
- #define __pyx_n_u_slope12 __pyx_string_tab[270]
- #define __pyx_n_u_slope34 __pyx_string_tab[271]
- #define __pyx_n_u_solutions __pyx_string_tab[272]
- #define __pyx_n_u_solveCubic __pyx_string_tab[273]
- #define __pyx_n_u_solveQuadratic __pyx_string_tab[274]
- #define __pyx_n_u_split __pyx_string_tab[275]
- #define __pyx_n_u_splitCubic __pyx_string_tab[276]
- #define __pyx_n_u_splitCubicAtT __pyx_string_tab[277]
- #define __pyx_n_u_splitCubicAtTC __pyx_string_tab[278]
- #define __pyx_n_u_splitCubicAtTC_2 __pyx_string_tab[279]
- #define __pyx_n_u_splitCubicAtT_2 __pyx_string_tab[280]
- #define __pyx_n_u_splitCubicIntoTwoAtTC __pyx_string_tab[281]
- #define __pyx_n_u_splitCubic_locals_genexpr __pyx_string_tab[282]
- #define __pyx_n_u_splitLine __pyx_string_tab[283]
- #define __pyx_n_u_splitQuadratic __pyx_string_tab[284]
- #define __pyx_n_u_splitQuadraticAtT __pyx_string_tab[285]
- #define __pyx_n_u_splitQuadraticAtT_2 __pyx_string_tab[286]
- #define __pyx_n_u_splitQuadratic_locals_genexpr __pyx_string_tab[287]
- #define __pyx_n_u_split_cubic_into_two __pyx_string_tab[288]
- #define __pyx_n_u_split_segment_at_t __pyx_string_tab[289]
- #define __pyx_n_u_sqrt __pyx_string_tab[290]
- #define __pyx_n_u_start __pyx_string_tab[291]
- #define __pyx_n_u_swapped __pyx_string_tab[292]
- #define __pyx_n_u_sx __pyx_string_tab[293]
- #define __pyx_n_u_sy __pyx_string_tab[294]
- #define __pyx_n_u_sys __pyx_string_tab[295]
- #define __pyx_n_u_t __pyx_string_tab[296]
- #define __pyx_n_u_t1 __pyx_string_tab[297]
- #define __pyx_n_u_t1_2 __pyx_string_tab[298]
- #define __pyx_n_u_t1_3 __pyx_string_tab[299]
- #define __pyx_n_u_t2 __pyx_string_tab[300]
- #define __pyx_n_u_test __pyx_string_tab[301]
- #define __pyx_n_u_testmod __pyx_string_tab[302]
- #define __pyx_n_u_theta __pyx_string_tab[303]
- #define __pyx_n_u_throw __pyx_string_tab[304]
- #define __pyx_n_u_tolerance __pyx_string_tab[305]
- #define __pyx_n_u_transformPoints __pyx_string_tab[306]
- #define __pyx_n_u_translate __pyx_string_tab[307]
- #define __pyx_n_u_ts __pyx_string_tab[308]
- #define __pyx_n_u_two __pyx_string_tab[309]
- #define __pyx_n_u_unique_key __pyx_string_tab[310]
- #define __pyx_n_u_unique_values __pyx_string_tab[311]
- #define __pyx_n_u_v0 __pyx_string_tab[312]
- #define __pyx_n_u_v1 __pyx_string_tab[313]
- #define __pyx_n_u_v2 __pyx_string_tab[314]
- #define __pyx_n_u_v3 __pyx_string_tab[315]
- #define __pyx_n_u_v4 __pyx_string_tab[316]
- #define __pyx_n_u_value __pyx_string_tab[317]
- #define __pyx_n_u_values __pyx_string_tab[318]
- #define __pyx_n_u_where __pyx_string_tab[319]
- #define __pyx_n_u_x __pyx_string_tab[320]
- #define __pyx_n_u_x0 __pyx_string_tab[321]
- #define __pyx_n_u_x1 __pyx_string_tab[322]
- #define __pyx_n_u_x2 __pyx_string_tab[323]
- #define __pyx_n_u_x3 __pyx_string_tab[324]
- #define __pyx_n_u_x4 __pyx_string_tab[325]
- #define __pyx_n_u_xDiff __pyx_string_tab[326]
- #define __pyx_n_u_xRoots __pyx_string_tab[327]
- #define __pyx_n_u_y __pyx_string_tab[328]
- #define __pyx_n_u_y1 __pyx_string_tab[329]
- #define __pyx_n_u_y2 __pyx_string_tab[330]
- #define __pyx_n_u_y3 __pyx_string_tab[331]
- #define __pyx_n_u_y4 __pyx_string_tab[332]
- #define __pyx_n_u_yDiff __pyx_string_tab[333]
- #define __pyx_n_u_yRoots __pyx_string_tab[334]
- #define __pyx_kp_b_iso88591_0_2Q_2Rq_U_A_r_2Rq_r_b_Bb_7_Bb __pyx_string_tab[335]
- #define __pyx_kp_b_iso88591_1 __pyx_string_tab[336]
- #define __pyx_kp_b_iso88591_1A_at6_1_q_F_4vRq_1L_AU_Qe3auD __pyx_string_tab[337]
- #define __pyx_kp_b_iso88591_1_Ql_1 __pyx_string_tab[338]
- #define __pyx_kp_b_iso88591_1_a_r_wb_gRvWBfA __pyx_string_tab[339]
- #define __pyx_kp_b_iso88591_2B_1_1 __pyx_string_tab[340]
- #define __pyx_kp_b_iso88591_2Q_2Rq_U_A_7_E_4r_3gRr_4r_b_2U __pyx_string_tab[341]
- #define __pyx_kp_b_iso88591_2Q_2Rq_U_A_r_b_1A_Cwb_Cq_2U_Cr __pyx_string_tab[342]
- #define __pyx_kp_b_iso88591_2S_2Rs_Cq_2Rs_Bc_2Rs_3b_Bb_1A_2 __pyx_string_tab[343]
- #define __pyx_kp_b_iso88591_2_Q_r_wb_gRvWBa __pyx_string_tab[344]
- #define __pyx_kp_b_iso88591_3as_A_Qc_4r_AS_b_1Cr_uBe2XS_RuB __pyx_string_tab[345]
- #define __pyx_kp_b_iso88591_3b_S_b_Ba_c_3b_2T_1_c_4r_d_HA_d __pyx_string_tab[346]
- #define __pyx_kp_b_iso88591_4r_Rq_avU_uA __pyx_string_tab[347]
- #define __pyx_kp_b_iso88591_6_rQR __pyx_string_tab[348]
- #define __pyx_kp_b_iso88591_6_s_T_AU_uA_1O1A_2Q_aq_t1_r_e5 __pyx_string_tab[349]
- #define __pyx_kp_b_iso88591_7_F_6 __pyx_string_tab[350]
- #define __pyx_kp_b_iso88591_AS_Cr_3b_1Cr_c_S_Cr_AS __pyx_string_tab[351]
- #define __pyx_kp_b_iso88591_AT_5_A_2Q_Ba_Ba_Ba_AT_4r_RuBa_A __pyx_string_tab[352]
- #define __pyx_kp_b_iso88591_A_t3aq_2Qaq __pyx_string_tab[353]
- #define __pyx_kp_b_iso88591_B_A_2T_5Rt2_PPRRS_AT_5_A_Bd_6b __pyx_string_tab[354]
- #define __pyx_kp_b_iso88591_F_s_Qe5_a_1N_A_aq_t1_r_e1_Qc_D __pyx_string_tab[355]
- #define __pyx_kp_b_iso88591_G1A_1_D_as_3b_Qd_Qc_5_87_1F_AQe __pyx_string_tab[356]
- #define __pyx_kp_b_iso88591_H_b_b_S_r_A_r_a_s_c_1_r_D_2Rr_S __pyx_string_tab[357]
- #define __pyx_kp_b_iso88591_L_s_3b_Qc_A_Qa_2Q_2Q_2Q_Bc_4r_R __pyx_string_tab[358]
- #define __pyx_kp_b_iso88591_M_m1A_m1A_t1_q_t1_q_HAYa_t1_q_x __pyx_string_tab[359]
- #define __pyx_kp_b_iso88591_Q_Q_Q_Q_Rt2Q_Rt2Q_Rt2T_1_Rt2T_1 __pyx_string_tab[360]
- #define __pyx_kp_b_iso88591_Q_Q_Q_Q_RuBa_RuBa_Rt2T_1_Rt2T_1 __pyx_string_tab[361]
- #define __pyx_kp_b_iso88591_Q_Q_Q_Rt2Q_Rt2Q_Bc_1_Bc_1_1D_d __pyx_string_tab[362]
- #define __pyx_kp_b_iso88591_Q_Q_Q_RuBa_RuBa_Bc_1_Bc_1_1D_d __pyx_string_tab[363]
- #define __pyx_kp_b_iso88591_Q_Q_Q_s_3b_Bhd_Qc_4r_s_3b_Bc_Rq __pyx_string_tab[364]
- #define __pyx_kp_b_iso88591_Qa_gQc_gQa_q_Q_Q_Q_Q_U_3at2Q_Rq __pyx_string_tab[365]
- #define __pyx_kp_b_iso88591_Qa_q_gQc_gQa_Q_Q_Q_U_3at2Q_Rq_R __pyx_string_tab[366]
- #define __pyx_kp_b_iso88591_Qas_F_4s_1Cr_q_Qas_F_4s_1Cr_q_5 __pyx_string_tab[367]
- #define __pyx_kp_b_iso88591_Qe3C1A_s_7_Q_3d_1_aq_Qat1AQ_AWC __pyx_string_tab[368]
- #define __pyx_kp_b_iso88591_Rq_Rq_2Q_A_Cq_vS_s_4r_t1Cq_s_Rq __pyx_string_tab[369]
- #define __pyx_kp_b_iso88591_S_1Cr_S_1Cr __pyx_string_tab[370]
- #define __pyx_kp_b_iso88591_T_t6_V4v_e5PQ_Rq_Rq_Rq_Rq_Qb_E __pyx_string_tab[371]
- #define __pyx_kp_b_iso88591_T_t6_V_5_Q_Rq_Rq_A_t3a_WAQc_1_t __pyx_string_tab[372]
- #define __pyx_kp_b_iso88591_T_uBa_wb_E_a __pyx_string_tab[373]
- #define __pyx_kp_b_iso88591__4 __pyx_string_tab[374]
- #define __pyx_kp_b_iso88591__5 __pyx_string_tab[375]
- #define __pyx_kp_b_iso88591_a_2 __pyx_string_tab[376]
- #define __pyx_kp_b_iso88591_a_s_6_3aq_gV1_s_6_1_3avRq_31F_2 __pyx_string_tab[377]
- #define __pyx_kp_b_iso88591_q __pyx_string_tab[378]
- #define __pyx_kp_b_iso88591_q_q_q_q_HAU_t4xq_U_d_hauTU_q_HA __pyx_string_tab[379]
- #define __pyx_kp_b_iso88591_s_3b_3as_A_A_AQb_Rr_2T_2Rq_3c_a __pyx_string_tab[380]
- #define __pyx_kp_b_iso88591_s_3c_4q_q_3a_r_L_s_3c_Q_AS_1_Bc __pyx_string_tab[381]
- #define __pyx_kp_b_iso88591_s_3c_A_AS_1_b_AQ __pyx_string_tab[382]
- #define __pyx_kp_b_iso88591_s_5_1_2U_AU_Q_q_AU_Q_Be1_AQ __pyx_string_tab[383]
- #define __pyx_kp_b_iso88591_s_7_Q_a_AWCq_a_j_A_b_a_6_WA_T_C __pyx_string_tab[384]
- #define __pyx_kp_b_iso88591_s_Qe5_Qc_D __pyx_string_tab[385]
- #define __pyx_kp_b_iso88591_s_T_AU_uA_N_3c_D_e1Baq_6_r_3d_1 __pyx_string_tab[386]
- #define __pyx_float_0_0 __pyx_number_tab[0]
- #define __pyx_float_0_5 __pyx_number_tab[1]
- #define __pyx_float_1_0 __pyx_number_tab[2]
- #define __pyx_float_neg_2_0 __pyx_number_tab[3]
- #define __pyx_float_2_0 __pyx_number_tab[4]
- #define __pyx_float_3_0 __pyx_number_tab[5]
- #define __pyx_float_4_0 __pyx_number_tab[6]
- #define __pyx_float_9_0 __pyx_number_tab[7]
- #define __pyx_float_1eneg_3 __pyx_number_tab[8]
- #define __pyx_float_1eneg_9 __pyx_number_tab[9]
- #define __pyx_float_27_0 __pyx_number_tab[10]
- #define __pyx_float_54_0 __pyx_number_tab[11]
- #define __pyx_float_0_005 __pyx_number_tab[12]
- #define __pyx_float_0_125 __pyx_number_tab[13]
- #define __pyx_float_1eneg_10 __pyx_number_tab[14]
- #define __pyx_int_0 __pyx_number_tab[15]
- #define __pyx_int_neg_1 __pyx_number_tab[16]
- #define __pyx_int_1 __pyx_number_tab[17]
- #define __pyx_int_2 __pyx_number_tab[18]
- #define __pyx_int_3 __pyx_number_tab[19]
- #define __pyx_int_6 __pyx_number_tab[20]
- /* #### Code section: module_state_clear ### */
- #if CYTHON_USE_MODULE_STATE
- static CYTHON_SMALL_CODE int __pyx_m_clear(PyObject *m) {
- __pyx_mstatetype *clear_module_state = __Pyx_PyModule_GetState(m);
- if (!clear_module_state) return 0;
- Py_CLEAR(clear_module_state->__pyx_d);
- Py_CLEAR(clear_module_state->__pyx_b);
- Py_CLEAR(clear_module_state->__pyx_cython_runtime);
- Py_CLEAR(clear_module_state->__pyx_empty_tuple);
- Py_CLEAR(clear_module_state->__pyx_empty_bytes);
- Py_CLEAR(clear_module_state->__pyx_empty_unicode);
- #if CYTHON_PEP489_MULTI_PHASE_INIT
- __Pyx_State_RemoveModule(NULL);
- #endif
- Py_CLEAR(clear_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_defaults);
- Py_CLEAR(clear_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_defaults);
- Py_CLEAR(clear_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr);
- Py_CLEAR(clear_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr);
- Py_CLEAR(clear_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr);
- Py_CLEAR(clear_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr);
- Py_CLEAR(clear_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC);
- Py_CLEAR(clear_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC);
- Py_CLEAR(clear_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC);
- Py_CLEAR(clear_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC);
- Py_CLEAR(clear_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr);
- Py_CLEAR(clear_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr);
- Py_CLEAR(clear_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t);
- Py_CLEAR(clear_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t);
- Py_CLEAR(clear_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr);
- Py_CLEAR(clear_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr);
- Py_CLEAR(clear_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr);
- Py_CLEAR(clear_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr);
- for (int i=0; i<2; ++i) { Py_CLEAR(clear_module_state->__pyx_slice[i]); }
- for (int i=0; i<4; ++i) { Py_CLEAR(clear_module_state->__pyx_tuple[i]); }
- for (int i=0; i<54; ++i) { Py_CLEAR(clear_module_state->__pyx_codeobj_tab[i]); }
- for (int i=0; i<387; ++i) { Py_CLEAR(clear_module_state->__pyx_string_tab[i]); }
- for (int i=0; i<21; ++i) { Py_CLEAR(clear_module_state->__pyx_number_tab[i]); }
- /* #### Code section: module_state_clear_contents ### */
- /* CommonTypesMetaclass.module_state_clear */
- Py_CLEAR(clear_module_state->__pyx_CommonTypesMetaclassType);
- /* Generator.module_state_clear */
- Py_CLEAR(clear_module_state->__pyx_GeneratorType);
- /* CythonFunctionShared.module_state_clear */
- Py_CLEAR(clear_module_state->__pyx_CyFunctionType);
- /* #### Code section: module_state_clear_end ### */
- return 0;
- }
- #endif
- /* #### Code section: module_state_traverse ### */
- #if CYTHON_USE_MODULE_STATE
- static CYTHON_SMALL_CODE int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
- __pyx_mstatetype *traverse_module_state = __Pyx_PyModule_GetState(m);
- if (!traverse_module_state) return 0;
- Py_VISIT(traverse_module_state->__pyx_d);
- Py_VISIT(traverse_module_state->__pyx_b);
- Py_VISIT(traverse_module_state->__pyx_cython_runtime);
- __Pyx_VISIT_CONST(traverse_module_state->__pyx_empty_tuple);
- __Pyx_VISIT_CONST(traverse_module_state->__pyx_empty_bytes);
- __Pyx_VISIT_CONST(traverse_module_state->__pyx_empty_unicode);
- Py_VISIT(traverse_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_defaults);
- Py_VISIT(traverse_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_defaults);
- Py_VISIT(traverse_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr);
- Py_VISIT(traverse_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr);
- Py_VISIT(traverse_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr);
- Py_VISIT(traverse_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr);
- Py_VISIT(traverse_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC);
- Py_VISIT(traverse_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC);
- Py_VISIT(traverse_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC);
- Py_VISIT(traverse_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC);
- Py_VISIT(traverse_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr);
- Py_VISIT(traverse_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr);
- Py_VISIT(traverse_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t);
- Py_VISIT(traverse_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t);
- Py_VISIT(traverse_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr);
- Py_VISIT(traverse_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr);
- Py_VISIT(traverse_module_state->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr);
- Py_VISIT(traverse_module_state->__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr);
- for (int i=0; i<2; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_slice[i]); }
- for (int i=0; i<4; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_tuple[i]); }
- for (int i=0; i<54; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_codeobj_tab[i]); }
- for (int i=0; i<387; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_string_tab[i]); }
- for (int i=0; i<21; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_number_tab[i]); }
- /* #### Code section: module_state_traverse_contents ### */
- /* CommonTypesMetaclass.module_state_traverse */
- Py_VISIT(traverse_module_state->__pyx_CommonTypesMetaclassType);
- /* Generator.module_state_traverse */
- Py_VISIT(traverse_module_state->__pyx_GeneratorType);
- /* CythonFunctionShared.module_state_traverse */
- Py_VISIT(traverse_module_state->__pyx_CyFunctionType);
- /* #### Code section: module_state_traverse_end ### */
- return 0;
- }
- #endif
- /* #### Code section: module_code ### */
- /* "fontTools/misc/bezierTools.py":56
- *
- *
- * def calcCubicArcLength(pt1, pt2, pt3, pt4, tolerance=0.005): # <<<<<<<<<<<<<<
- * """Calculates the arc length for a cubic Bezier segment.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_1calcCubicArcLength(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_calcCubicArcLength, "calcCubicArcLength(pt1, pt2, pt3, pt4, tolerance=0.005)\n\nCalculates the arc length for a cubic Bezier segment.\n\nWhereas :func:`approximateCubicArcLength` approximates the length, this\nfunction calculates it by \"measuring\", recursively dividing the curve\nuntil the divided segments are shorter than ``tolerance``.\n\nArgs:\n pt1,pt2,pt3,pt4: Control points of the Bezier as 2D tuples.\n tolerance: Controls the precision of the calcuation.\n\nReturns:\n Arc length value.");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_1calcCubicArcLength = {"calcCubicArcLength", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_1calcCubicArcLength, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_calcCubicArcLength};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_1calcCubicArcLength(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_pt3 = 0;
- PyObject *__pyx_v_pt4 = 0;
- PyObject *__pyx_v_tolerance = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[5] = {0,0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("calcCubicArcLength (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,&__pyx_mstate_global->__pyx_n_u_pt4,&__pyx_mstate_global->__pyx_n_u_tolerance,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 56, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 5:
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 56, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 56, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 56, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 56, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 56, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "calcCubicArcLength", 0) < (0)) __PYX_ERR(0, 56, __pyx_L3_error)
- if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_float_0_005)));
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("calcCubicArcLength", 0, 4, 5, i); __PYX_ERR(0, 56, __pyx_L3_error) }
- }
- } else {
- switch (__pyx_nargs) {
- case 5:
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 56, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 56, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 56, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 56, __pyx_L3_error)
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 56, __pyx_L3_error)
- break;
- default: goto __pyx_L5_argtuple_error;
- }
- if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_float_0_005)));
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_pt3 = values[2];
- __pyx_v_pt4 = values[3];
- __pyx_v_tolerance = values[4];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("calcCubicArcLength", 0, 4, 5, __pyx_nargs); __PYX_ERR(0, 56, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcCubicArcLength", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_calcCubicArcLength(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_pt4, __pyx_v_tolerance);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_calcCubicArcLength(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_pt4, PyObject *__pyx_v_tolerance) {
- 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;
- PyObject *__pyx_t_8 = NULL;
- size_t __pyx_t_9;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("calcCubicArcLength", 0);
- /* "fontTools/misc/bezierTools.py":70
- * Arc length value.
- * """
- * return calcCubicArcLengthC( # <<<<<<<<<<<<<<
- * complex(*pt1), complex(*pt2), complex(*pt3), complex(*pt4), tolerance
- * )
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_calcCubicArcLengthC); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 70, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- /* "fontTools/misc/bezierTools.py":71
- * """
- * return calcCubicArcLengthC(
- * complex(*pt1), complex(*pt2), complex(*pt3), complex(*pt4), tolerance # <<<<<<<<<<<<<<
- * )
- *
- */
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_pt1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 71, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 71, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_pt2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 71, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 71, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_pt3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 71, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 71, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_pt4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 71, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 71, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_9 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_9 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[6] = {__pyx_t_2, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_v_tolerance};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_9, (6-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__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;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":56
- *
- *
- * def calcCubicArcLength(pt1, pt2, pt3, pt4, tolerance=0.005): # <<<<<<<<<<<<<<
- * """Calculates the arc length for a cubic Bezier segment.
- *
- */
- /* function exit code */
- __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_XDECREF(__pyx_t_8);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcCubicArcLength", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":75
- *
- *
- * def _split_cubic_into_two(p0, p1, p2, p3): # <<<<<<<<<<<<<<
- * mid = (p0 + 3 * (p1 + p2) + p3) * 0.125
- * deriv3 = (p3 + p2 - p1 - p0) * 0.125
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_3_split_cubic_into_two(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_2_split_cubic_into_two, "_split_cubic_into_two(p0, p1, p2, p3)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_3_split_cubic_into_two = {"_split_cubic_into_two", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_3_split_cubic_into_two, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_2_split_cubic_into_two};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_3_split_cubic_into_two(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_p0 = 0;
- PyObject *__pyx_v_p1 = 0;
- PyObject *__pyx_v_p2 = 0;
- PyObject *__pyx_v_p3 = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[4] = {0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("_split_cubic_into_two (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_p0,&__pyx_mstate_global->__pyx_n_u_p1,&__pyx_mstate_global->__pyx_n_u_p2,&__pyx_mstate_global->__pyx_n_u_p3,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 75, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 75, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 75, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 75, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 75, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_split_cubic_into_two", 0) < (0)) __PYX_ERR(0, 75, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_split_cubic_into_two", 1, 4, 4, i); __PYX_ERR(0, 75, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 4)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 75, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 75, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 75, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 75, __pyx_L3_error)
- }
- __pyx_v_p0 = values[0];
- __pyx_v_p1 = values[1];
- __pyx_v_p2 = values[2];
- __pyx_v_p3 = values[3];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("_split_cubic_into_two", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 75, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools._split_cubic_into_two", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_2_split_cubic_into_two(__pyx_self, __pyx_v_p0, __pyx_v_p1, __pyx_v_p2, __pyx_v_p3);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_2_split_cubic_into_two(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_p0, PyObject *__pyx_v_p1, PyObject *__pyx_v_p2, PyObject *__pyx_v_p3) {
- PyObject *__pyx_v_mid = NULL;
- PyObject *__pyx_v_deriv3 = 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_RefNannySetupContext("_split_cubic_into_two", 0);
- /* "fontTools/misc/bezierTools.py":76
- *
- * def _split_cubic_into_two(p0, p1, p2, p3):
- * mid = (p0 + 3 * (p1 + p2) + p3) * 0.125 # <<<<<<<<<<<<<<
- * deriv3 = (p3 + p2 - p1 - p0) * 0.125
- * return (
- */
- __pyx_t_1 = PyNumber_Add(__pyx_v_p1, __pyx_v_p2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 76, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyLong_MultiplyCObj(__pyx_mstate_global->__pyx_int_3, __pyx_t_1, 3, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 76, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Add(__pyx_v_p0, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 76, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_p3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 76, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_mstate_global->__pyx_float_0_125); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 76, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_mid = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":77
- * def _split_cubic_into_two(p0, p1, p2, p3):
- * mid = (p0 + 3 * (p1 + p2) + p3) * 0.125
- * deriv3 = (p3 + p2 - p1 - p0) * 0.125 # <<<<<<<<<<<<<<
- * return (
- * (p0, (p0 + p1) * 0.5, mid - deriv3, mid),
- */
- __pyx_t_1 = PyNumber_Add(__pyx_v_p3, __pyx_v_p2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_p1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 77, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Subtract(__pyx_t_2, __pyx_v_p0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __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_mstate_global->__pyx_float_0_125); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 77, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_v_deriv3 = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":78
- * mid = (p0 + 3 * (p1 + p2) + p3) * 0.125
- * deriv3 = (p3 + p2 - p1 - p0) * 0.125
- * return ( # <<<<<<<<<<<<<<
- * (p0, (p0 + p1) * 0.5, mid - deriv3, mid),
- * (mid, mid + deriv3, (p2 + p3) * 0.5, p3),
- */
- __Pyx_XDECREF(__pyx_r);
- /* "fontTools/misc/bezierTools.py":79
- * deriv3 = (p3 + p2 - p1 - p0) * 0.125
- * return (
- * (p0, (p0 + p1) * 0.5, mid - deriv3, mid), # <<<<<<<<<<<<<<
- * (mid, mid + deriv3, (p2 + p3) * 0.5, p3),
- * )
- */
- __pyx_t_2 = PyNumber_Add(__pyx_v_p0, __pyx_v_p1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 79, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_mstate_global->__pyx_float_0_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Subtract(__pyx_v_mid, __pyx_v_deriv3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 79, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 79, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_INCREF(__pyx_v_p0);
- __Pyx_GIVEREF(__pyx_v_p0);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_p0) != (0)) __PYX_ERR(0, 79, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 79, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2) != (0)) __PYX_ERR(0, 79, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_mid);
- __Pyx_GIVEREF(__pyx_v_mid);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_mid) != (0)) __PYX_ERR(0, 79, __pyx_L1_error);
- __pyx_t_1 = 0;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":80
- * return (
- * (p0, (p0 + p1) * 0.5, mid - deriv3, mid),
- * (mid, mid + deriv3, (p2 + p3) * 0.5, p3), # <<<<<<<<<<<<<<
- * )
- *
- */
- __pyx_t_2 = PyNumber_Add(__pyx_v_mid, __pyx_v_deriv3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 80, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Add(__pyx_v_p2, __pyx_v_p3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_4 = PyNumber_Multiply(__pyx_t_1, __pyx_mstate_global->__pyx_float_0_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 80, __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_ERR(0, 80, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_INCREF(__pyx_v_mid);
- __Pyx_GIVEREF(__pyx_v_mid);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_mid) != (0)) __PYX_ERR(0, 80, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 80, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_4);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4) != (0)) __PYX_ERR(0, 80, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_p3);
- __Pyx_GIVEREF(__pyx_v_p3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_p3) != (0)) __PYX_ERR(0, 80, __pyx_L1_error);
- __pyx_t_2 = 0;
- __pyx_t_4 = 0;
- /* "fontTools/misc/bezierTools.py":79
- * deriv3 = (p3 + p2 - p1 - p0) * 0.125
- * return (
- * (p0, (p0 + p1) * 0.5, mid - deriv3, mid), # <<<<<<<<<<<<<<
- * (mid, mid + deriv3, (p2 + p3) * 0.5, p3),
- * )
- */
- __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 79, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3) != (0)) __PYX_ERR(0, 79, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 79, __pyx_L1_error);
- __pyx_t_3 = 0;
- __pyx_t_1 = 0;
- __pyx_r = __pyx_t_4;
- __pyx_t_4 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":75
- *
- *
- * def _split_cubic_into_two(p0, p1, p2, p3): # <<<<<<<<<<<<<<
- * mid = (p0 + 3 * (p1 + p2) + p3) * 0.125
- * deriv3 = (p3 + p2 - p1 - p0) * 0.125
- */
- /* function exit code */
- __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("fontTools.misc.bezierTools._split_cubic_into_two", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_mid);
- __Pyx_XDECREF(__pyx_v_deriv3);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":84
- *
- *
- * @cython.returns(cython.double) # <<<<<<<<<<<<<<
- * @cython.locals(
- * p0=cython.complex,
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_5_calcCubicArcLengthCRecurse(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_4_calcCubicArcLengthCRecurse, "_calcCubicArcLengthCRecurse(double mult, double complex p0, double complex p1, double complex p2, double complex p3)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_5_calcCubicArcLengthCRecurse = {"_calcCubicArcLengthCRecurse", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_5_calcCubicArcLengthCRecurse, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_4_calcCubicArcLengthCRecurse};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_5_calcCubicArcLengthCRecurse(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- double __pyx_v_mult;
- __pyx_t_double_complex __pyx_v_p0;
- __pyx_t_double_complex __pyx_v_p1;
- __pyx_t_double_complex __pyx_v_p2;
- __pyx_t_double_complex __pyx_v_p3;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[5] = {0,0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("_calcCubicArcLengthCRecurse (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_mult,&__pyx_mstate_global->__pyx_n_u_p0,&__pyx_mstate_global->__pyx_n_u_p1,&__pyx_mstate_global->__pyx_n_u_p2,&__pyx_mstate_global->__pyx_n_u_p3,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 84, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 5:
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 84, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 84, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 84, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 84, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 84, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_calcCubicArcLengthCRecurse", 0) < (0)) __PYX_ERR(0, 84, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_calcCubicArcLengthCRecurse", 1, 5, 5, i); __PYX_ERR(0, 84, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 5)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 84, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 84, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 84, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 84, __pyx_L3_error)
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 84, __pyx_L3_error)
- }
- __pyx_v_mult = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_mult == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 92, __pyx_L3_error)
- __pyx_v_p0 = __Pyx_PyComplex_As___pyx_t_double_complex(values[1]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 92, __pyx_L3_error)
- __pyx_v_p1 = __Pyx_PyComplex_As___pyx_t_double_complex(values[2]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 92, __pyx_L3_error)
- __pyx_v_p2 = __Pyx_PyComplex_As___pyx_t_double_complex(values[3]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 92, __pyx_L3_error)
- __pyx_v_p3 = __Pyx_PyComplex_As___pyx_t_double_complex(values[4]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 92, __pyx_L3_error)
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("_calcCubicArcLengthCRecurse", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 84, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools._calcCubicArcLengthCRecurse", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_4_calcCubicArcLengthCRecurse(__pyx_self, __pyx_v_mult, __pyx_v_p0, __pyx_v_p1, __pyx_v_p2, __pyx_v_p3);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_4_calcCubicArcLengthCRecurse(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_mult, __pyx_t_double_complex __pyx_v_p0, __pyx_t_double_complex __pyx_v_p1, __pyx_t_double_complex __pyx_v_p2, __pyx_t_double_complex __pyx_v_p3) {
- double __pyx_v_arch;
- double __pyx_v_box;
- PyObject *__pyx_v_one = NULL;
- PyObject *__pyx_v_two = 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;
- PyObject *__pyx_t_5 = NULL;
- PyObject *__pyx_t_6 = NULL;
- PyObject *__pyx_t_7 = NULL;
- PyObject *__pyx_t_8 = NULL;
- size_t __pyx_t_9;
- PyObject *(*__pyx_t_10)(PyObject *);
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("_calcCubicArcLengthCRecurse", 0);
- /* "fontTools/misc/bezierTools.py":93
- * @cython.locals(mult=cython.double, arch=cython.double, box=cython.double)
- * def _calcCubicArcLengthCRecurse(mult, p0, p1, p2, p3):
- * arch = abs(p0 - p3) # <<<<<<<<<<<<<<
- * box = abs(p0 - p1) + abs(p1 - p2) + abs(p2 - p3)
- * if arch * mult + EPSILON >= box:
- */
- __pyx_v_arch = __Pyx_c_abs_double(__Pyx_c_diff_double(__pyx_v_p0, __pyx_v_p3));
- /* "fontTools/misc/bezierTools.py":94
- * def _calcCubicArcLengthCRecurse(mult, p0, p1, p2, p3):
- * arch = abs(p0 - p3)
- * box = abs(p0 - p1) + abs(p1 - p2) + abs(p2 - p3) # <<<<<<<<<<<<<<
- * if arch * mult + EPSILON >= box:
- * return (arch + box) * 0.5
- */
- __pyx_v_box = ((__Pyx_c_abs_double(__Pyx_c_diff_double(__pyx_v_p0, __pyx_v_p1)) + __Pyx_c_abs_double(__Pyx_c_diff_double(__pyx_v_p1, __pyx_v_p2))) + __Pyx_c_abs_double(__Pyx_c_diff_double(__pyx_v_p2, __pyx_v_p3)));
- /* "fontTools/misc/bezierTools.py":95
- * arch = abs(p0 - p3)
- * box = abs(p0 - p1) + abs(p1 - p2) + abs(p2 - p3)
- * if arch * mult + EPSILON >= box: # <<<<<<<<<<<<<<
- * return (arch + box) * 0.5
- * else:
- */
- __pyx_t_1 = PyFloat_FromDouble((__pyx_v_arch * __pyx_v_mult)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 95, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_EPSILON); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 95, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 95, __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_t_2 = PyFloat_FromDouble(__pyx_v_box); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 95, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 95, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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_ERR(0, 95, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_4) {
- /* "fontTools/misc/bezierTools.py":96
- * box = abs(p0 - p1) + abs(p1 - p2) + abs(p2 - p3)
- * if arch * mult + EPSILON >= box:
- * return (arch + box) * 0.5 # <<<<<<<<<<<<<<
- * else:
- * one, two = _split_cubic_into_two(p0, p1, p2, p3)
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyFloat_FromDouble(((__pyx_v_arch + __pyx_v_box) * 0.5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 96, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":95
- * arch = abs(p0 - p3)
- * box = abs(p0 - p1) + abs(p1 - p2) + abs(p2 - p3)
- * if arch * mult + EPSILON >= box: # <<<<<<<<<<<<<<
- * return (arch + box) * 0.5
- * else:
- */
- }
- /* "fontTools/misc/bezierTools.py":98
- * return (arch + box) * 0.5
- * else:
- * one, two = _split_cubic_into_two(p0, p1, p2, p3) # <<<<<<<<<<<<<<
- * return _calcCubicArcLengthCRecurse(mult, *one) + _calcCubicArcLengthCRecurse(
- * mult, *two
- */
- /*else*/ {
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_split_cubic_into_two); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 98, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = __pyx_PyComplex_FromComplex(__pyx_v_p0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 98, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_6 = __pyx_PyComplex_FromComplex(__pyx_v_p1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_7 = __pyx_PyComplex_FromComplex(__pyx_v_p2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 98, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __pyx_t_8 = __pyx_PyComplex_FromComplex(__pyx_v_p3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 98, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_9 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_9 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_9, (5-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__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;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __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;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 98, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_3);
- __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_8);
- } else {
- __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 98, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_3);
- __pyx_t_8 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 98, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_8);
- }
- #else
- __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 98, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 98, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- #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_ERR(0, 98, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_10 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7);
- index = 0; __pyx_t_3 = __pyx_t_10(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_3);
- index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_7); if (unlikely(!__pyx_t_8)) goto __pyx_L4_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_8);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_7), 2) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
- __pyx_t_10 = 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_10 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 98, __pyx_L1_error)
- __pyx_L5_unpacking_done:;
- }
- __pyx_v_one = __pyx_t_3;
- __pyx_t_3 = 0;
- __pyx_v_two = __pyx_t_8;
- __pyx_t_8 = 0;
- /* "fontTools/misc/bezierTools.py":99
- * else:
- * one, two = _split_cubic_into_two(p0, p1, p2, p3)
- * return _calcCubicArcLengthCRecurse(mult, *one) + _calcCubicArcLengthCRecurse( # <<<<<<<<<<<<<<
- * mult, *two
- * )
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_calcCubicArcLengthCRecurse); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 99, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_8 = PyFloat_FromDouble(__pyx_v_mult); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 99, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 99, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_GIVEREF(__pyx_t_8);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_8) != (0)) __PYX_ERR(0, 99, __pyx_L1_error);
- __pyx_t_8 = 0;
- __pyx_t_8 = __Pyx_PySequence_Tuple(__pyx_v_one); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 99, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_7 = PyNumber_Add(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 99, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 99, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_calcCubicArcLengthCRecurse); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 99, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- /* "fontTools/misc/bezierTools.py":100
- * one, two = _split_cubic_into_two(p0, p1, p2, p3)
- * return _calcCubicArcLengthCRecurse(mult, *one) + _calcCubicArcLengthCRecurse(
- * mult, *two # <<<<<<<<<<<<<<
- * )
- *
- */
- __pyx_t_1 = PyFloat_FromDouble(__pyx_v_mult); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 100, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- /* "fontTools/misc/bezierTools.py":99
- * else:
- * one, two = _split_cubic_into_two(p0, p1, p2, p3)
- * return _calcCubicArcLengthCRecurse(mult, *one) + _calcCubicArcLengthCRecurse( # <<<<<<<<<<<<<<
- * mult, *two
- * )
- */
- __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 99, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 99, __pyx_L1_error);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":100
- * one, two = _split_cubic_into_two(p0, p1, p2, p3)
- * return _calcCubicArcLengthCRecurse(mult, *one) + _calcCubicArcLengthCRecurse(
- * mult, *two # <<<<<<<<<<<<<<
- * )
- *
- */
- __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_v_two); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 99, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- /* "fontTools/misc/bezierTools.py":99
- * else:
- * one, two = _split_cubic_into_two(p0, p1, p2, p3)
- * return _calcCubicArcLengthCRecurse(mult, *one) + _calcCubicArcLengthCRecurse( # <<<<<<<<<<<<<<
- * mult, *two
- * )
- */
- __pyx_t_6 = PyNumber_Add(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 99, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 99, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = PyNumber_Add(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 99, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_r = __pyx_t_6;
- __pyx_t_6 = 0;
- goto __pyx_L0;
- }
- /* "fontTools/misc/bezierTools.py":84
- *
- *
- * @cython.returns(cython.double) # <<<<<<<<<<<<<<
- * @cython.locals(
- * p0=cython.complex,
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_XDECREF(__pyx_t_6);
- __Pyx_XDECREF(__pyx_t_7);
- __Pyx_XDECREF(__pyx_t_8);
- __Pyx_AddTraceback("fontTools.misc.bezierTools._calcCubicArcLengthCRecurse", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_one);
- __Pyx_XDECREF(__pyx_v_two);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":104
- *
- *
- * @cython.returns(cython.double) # <<<<<<<<<<<<<<
- * @cython.locals(
- * pt1=cython.complex,
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_7calcCubicArcLengthC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_6calcCubicArcLengthC, "calcCubicArcLengthC(double complex pt1, double complex pt2, double complex pt3, double complex pt4, double tolerance=0.005)\n\nCalculates the arc length for a cubic Bezier segment.\n\nArgs:\n pt1,pt2,pt3,pt4: Control points of the Bezier as complex numbers.\n tolerance: Controls the precision of the calcuation.\n\nReturns:\n Arc length value.");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_7calcCubicArcLengthC = {"calcCubicArcLengthC", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_7calcCubicArcLengthC, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_6calcCubicArcLengthC};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_7calcCubicArcLengthC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- __pyx_t_double_complex __pyx_v_pt1;
- __pyx_t_double_complex __pyx_v_pt2;
- __pyx_t_double_complex __pyx_v_pt3;
- __pyx_t_double_complex __pyx_v_pt4;
- double __pyx_v_tolerance;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[5] = {0,0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("calcCubicArcLengthC (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,&__pyx_mstate_global->__pyx_n_u_pt4,&__pyx_mstate_global->__pyx_n_u_tolerance,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 104, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 5:
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 104, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 104, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 104, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 104, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 104, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "calcCubicArcLengthC", 0) < (0)) __PYX_ERR(0, 104, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("calcCubicArcLengthC", 0, 4, 5, i); __PYX_ERR(0, 104, __pyx_L3_error) }
- }
- } else {
- switch (__pyx_nargs) {
- case 5:
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 104, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 104, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 104, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 104, __pyx_L3_error)
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 104, __pyx_L3_error)
- break;
- default: goto __pyx_L5_argtuple_error;
- }
- }
- __pyx_v_pt1 = __Pyx_PyComplex_As___pyx_t_double_complex(values[0]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 115, __pyx_L3_error)
- __pyx_v_pt2 = __Pyx_PyComplex_As___pyx_t_double_complex(values[1]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 115, __pyx_L3_error)
- __pyx_v_pt3 = __Pyx_PyComplex_As___pyx_t_double_complex(values[2]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 115, __pyx_L3_error)
- __pyx_v_pt4 = __Pyx_PyComplex_As___pyx_t_double_complex(values[3]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 115, __pyx_L3_error)
- if (values[4]) {
- __pyx_v_tolerance = __Pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_tolerance == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 115, __pyx_L3_error)
- } else {
- __pyx_v_tolerance = ((double)((double)0.005));
- }
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("calcCubicArcLengthC", 0, 4, 5, __pyx_nargs); __PYX_ERR(0, 104, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcCubicArcLengthC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_6calcCubicArcLengthC(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_pt4, __pyx_v_tolerance);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_6calcCubicArcLengthC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_pt1, __pyx_t_double_complex __pyx_v_pt2, __pyx_t_double_complex __pyx_v_pt3, __pyx_t_double_complex __pyx_v_pt4, double __pyx_v_tolerance) {
- double __pyx_v_mult;
- 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;
- PyObject *__pyx_t_8 = NULL;
- size_t __pyx_t_9;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("calcCubicArcLengthC", 0);
- /* "fontTools/misc/bezierTools.py":125
- * Arc length value.
- * """
- * mult = 1.0 + 1.5 * tolerance # The 1.5 is a empirical hack; no math # <<<<<<<<<<<<<<
- * return _calcCubicArcLengthCRecurse(mult, pt1, pt2, pt3, pt4)
- *
- */
- __pyx_v_mult = (1.0 + (1.5 * __pyx_v_tolerance));
- /* "fontTools/misc/bezierTools.py":126
- * """
- * mult = 1.0 + 1.5 * tolerance # The 1.5 is a empirical hack; no math
- * return _calcCubicArcLengthCRecurse(mult, pt1, pt2, pt3, pt4) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_calcCubicArcLengthCRecurse); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 126, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = PyFloat_FromDouble(__pyx_v_mult); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 126, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = __pyx_PyComplex_FromComplex(__pyx_v_pt1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 126, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_6 = __pyx_PyComplex_FromComplex(__pyx_v_pt2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 126, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_7 = __pyx_PyComplex_FromComplex(__pyx_v_pt3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 126, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __pyx_t_8 = __pyx_PyComplex_FromComplex(__pyx_v_pt4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 126, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_9 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_9 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[6] = {__pyx_t_2, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_9, (6-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 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;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 126, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":104
- *
- *
- * @cython.returns(cython.double) # <<<<<<<<<<<<<<
- * @cython.locals(
- * pt1=cython.complex,
- */
- /* function exit code */
- __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_XDECREF(__pyx_t_8);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcCubicArcLengthC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":133
- *
- *
- * @cython.cfunc # <<<<<<<<<<<<<<
- * @cython.inline
- * @cython.returns(cython.double)
- */
- static CYTHON_INLINE double __pyx_f_9fontTools_4misc_11bezierTools__dot(__pyx_t_double_complex __pyx_v_v1, __pyx_t_double_complex __pyx_v_v2) {
- double __pyx_r;
- /* "fontTools/misc/bezierTools.py":138
- * @cython.locals(v1=cython.complex, v2=cython.complex)
- * def _dot(v1, v2):
- * return (v1 * v2.conjugate()).real # <<<<<<<<<<<<<<
- *
- *
- */
- __pyx_r = __Pyx_CREAL(__Pyx_c_prod_double(__pyx_v_v1, __Pyx_c_conj_double(__pyx_v_v2)));
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":133
- *
- *
- * @cython.cfunc # <<<<<<<<<<<<<<
- * @cython.inline
- * @cython.returns(cython.double)
- */
- /* function exit code */
- __pyx_L0:;
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":141
- *
- *
- * @cython.cfunc # <<<<<<<<<<<<<<
- * @cython.inline
- * @cython.returns(cython.double)
- */
- static CYTHON_INLINE double __pyx_f_9fontTools_4misc_11bezierTools__intSecAtan(double __pyx_v_x) {
- double __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 = NULL;
- size_t __pyx_t_6;
- double __pyx_t_7;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("_intSecAtan", 0);
- /* "fontTools/misc/bezierTools.py":148
- * # In : sympy.integrate(sp.sec(sp.atan(x)))
- * # Out: x*sqrt(x**2 + 1)/2 + asinh(x)/2
- * return x * math.sqrt(x**2 + 1) / 2 + math.asinh(x) / 2 # <<<<<<<<<<<<<<
- *
- *
- */
- __pyx_t_1 = PyFloat_FromDouble(__pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 148, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 148, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sqrt); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 148, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = PyFloat_FromDouble((pow(__pyx_v_x, 2.0) + 1.0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 148, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_6 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_5))) {
- __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
- assert(__pyx_t_3);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
- __Pyx_INCREF(__pyx_t_3);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
- __pyx_t_6 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4};
- __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 148, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- }
- __pyx_t_5 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 148, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = __Pyx_PyLong_TrueDivideObjC(__pyx_t_5, __pyx_mstate_global->__pyx_int_2, 2, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 148, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_1 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 148, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_asinh); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 148, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = PyFloat_FromDouble(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 148, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_6 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_1);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_1);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_6 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_4};
- __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 148, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- }
- __pyx_t_3 = __Pyx_PyLong_TrueDivideObjC(__pyx_t_5, __pyx_mstate_global->__pyx_int_2, 2, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 148, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_5 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 148, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_7 = __Pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 148, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_r = __pyx_t_7;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":141
- *
- *
- * @cython.cfunc # <<<<<<<<<<<<<<
- * @cython.inline
- * @cython.returns(cython.double)
- */
- /* function exit code */
- __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("fontTools.misc.bezierTools._intSecAtan", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = -1;
- __pyx_L0:;
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":151
- *
- *
- * def calcQuadraticArcLength(pt1, pt2, pt3): # <<<<<<<<<<<<<<
- * """Calculates the arc length for a quadratic Bezier segment.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_9calcQuadraticArcLength(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_8calcQuadraticArcLength, "calcQuadraticArcLength(pt1, pt2, pt3)\n\nCalculates the arc length for a quadratic Bezier segment.\n\nArgs:\n pt1: Start point of the Bezier as 2D tuple.\n pt2: Handle point of the Bezier as 2D tuple.\n pt3: End point of the Bezier as 2D tuple.\n\nReturns:\n Arc length value.\n\nExample::\n\n >>> calcQuadraticArcLength((0, 0), (0, 0), (0, 0)) # empty segment\n 0.0\n >>> calcQuadraticArcLength((0, 0), (50, 0), (80, 0)) # collinear points\n 80.0\n >>> calcQuadraticArcLength((0, 0), (0, 50), (0, 80)) # collinear points vertical\n 80.0\n >>> calcQuadraticArcLength((0, 0), (50, 20), (100, 40)) # collinear points\n 107.70329614269008\n >>> calcQuadraticArcLength((0, 0), (0, 100), (100, 0))\n 154.02976155645263\n >>> calcQuadraticArcLength((0, 0), (0, 50), (100, 0))\n 120.21581243984076\n >>> calcQuadraticArcLength((0, 0), (50, -10), (80, 50))\n 102.53273816445825\n >>> calcQuadraticArcLength((0, 0), (40, 0), (-40, 0)) # collinear points, control point outside\n 66.66666666666667\n >>> calcQuadraticArcLength((0, 0), (40, 0), (0, 0)) # collinear points, looping back\n 40.0");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_9calcQuadraticArcLength = {"calcQuadraticArcLength", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_9calcQuadraticArcLength, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_8calcQuadraticArcLength};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_9calcQuadraticArcLength(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_pt3 = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[3] = {0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("calcQuadraticArcLength (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 151, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 151, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 151, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 151, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "calcQuadraticArcLength", 0) < (0)) __PYX_ERR(0, 151, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("calcQuadraticArcLength", 1, 3, 3, i); __PYX_ERR(0, 151, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 3)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 151, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 151, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 151, __pyx_L3_error)
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_pt3 = values[2];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("calcQuadraticArcLength", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 151, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcQuadraticArcLength", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_8calcQuadraticArcLength(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_8calcQuadraticArcLength(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3) {
- 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;
- size_t __pyx_t_8;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("calcQuadraticArcLength", 0);
- /* "fontTools/misc/bezierTools.py":183
- * 40.0
- * """
- * return calcQuadraticArcLengthC(complex(*pt1), complex(*pt2), complex(*pt3)) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_calcQuadraticArcLengthC); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 183, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_pt1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 183, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 183, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_pt2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 183, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 183, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_pt3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 183, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 183, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_8 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_8 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_5, __pyx_t_6, __pyx_t_7};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_8, (4-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__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;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 183, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":151
- *
- *
- * def calcQuadraticArcLength(pt1, pt2, pt3): # <<<<<<<<<<<<<<
- * """Calculates the arc length for a quadratic Bezier segment.
- *
- */
- /* function exit code */
- __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("fontTools.misc.bezierTools.calcQuadraticArcLength", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":186
- *
- *
- * @cython.returns(cython.double) # <<<<<<<<<<<<<<
- * @cython.locals(
- * pt1=cython.complex,
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_11calcQuadraticArcLengthC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_10calcQuadraticArcLengthC, "calcQuadraticArcLengthC(double complex pt1, double complex pt2, double complex pt3)\n\nCalculates the arc length for a quadratic Bezier segment.\n\nArgs:\n pt1: Start point of the Bezier as a complex number.\n pt2: Handle point of the Bezier as a complex number.\n pt3: End point of the Bezier as a complex number.\n\nReturns:\n Arc length value.");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_11calcQuadraticArcLengthC = {"calcQuadraticArcLengthC", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_11calcQuadraticArcLengthC, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_10calcQuadraticArcLengthC};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_11calcQuadraticArcLengthC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- __pyx_t_double_complex __pyx_v_pt1;
- __pyx_t_double_complex __pyx_v_pt2;
- __pyx_t_double_complex __pyx_v_pt3;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[3] = {0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("calcQuadraticArcLengthC (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 186, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 186, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 186, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 186, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "calcQuadraticArcLengthC", 0) < (0)) __PYX_ERR(0, 186, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("calcQuadraticArcLengthC", 1, 3, 3, i); __PYX_ERR(0, 186, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 3)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 186, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 186, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 186, __pyx_L3_error)
- }
- __pyx_v_pt1 = __Pyx_PyComplex_As___pyx_t_double_complex(values[0]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 205, __pyx_L3_error)
- __pyx_v_pt2 = __Pyx_PyComplex_As___pyx_t_double_complex(values[1]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 205, __pyx_L3_error)
- __pyx_v_pt3 = __Pyx_PyComplex_As___pyx_t_double_complex(values[2]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 205, __pyx_L3_error)
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("calcQuadraticArcLengthC", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 186, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcQuadraticArcLengthC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_10calcQuadraticArcLengthC(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_10calcQuadraticArcLengthC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_pt1, __pyx_t_double_complex __pyx_v_pt2, __pyx_t_double_complex __pyx_v_pt3) {
- double __pyx_v_scale;
- double __pyx_v_origDist;
- double __pyx_v_a;
- double __pyx_v_b;
- double __pyx_v_x0;
- double __pyx_v_x1;
- double __pyx_v_Len;
- __pyx_t_double_complex __pyx_v_d0;
- __pyx_t_double_complex __pyx_v_d1;
- __pyx_t_double_complex __pyx_v_d;
- __pyx_t_double_complex __pyx_v_n;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- int __pyx_t_1;
- PyObject *__pyx_t_2 = NULL;
- double __pyx_t_3;
- PyObject *__pyx_t_4 = NULL;
- PyObject *__pyx_t_5 = NULL;
- double __pyx_t_6;
- double __pyx_t_7;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("calcQuadraticArcLengthC", 0);
- /* "fontTools/misc/bezierTools.py":218
- * # Analytical solution to the length of a quadratic bezier.
- * # Documentation: https://github.com/fonttools/fonttools/issues/3055
- * d0 = pt2 - pt1 # <<<<<<<<<<<<<<
- * d1 = pt3 - pt2
- * d = d1 - d0
- */
- __pyx_v_d0 = __Pyx_c_diff_double(__pyx_v_pt2, __pyx_v_pt1);
- /* "fontTools/misc/bezierTools.py":219
- * # Documentation: https://github.com/fonttools/fonttools/issues/3055
- * d0 = pt2 - pt1
- * d1 = pt3 - pt2 # <<<<<<<<<<<<<<
- * d = d1 - d0
- * n = d * 1j
- */
- __pyx_v_d1 = __Pyx_c_diff_double(__pyx_v_pt3, __pyx_v_pt2);
- /* "fontTools/misc/bezierTools.py":220
- * d0 = pt2 - pt1
- * d1 = pt3 - pt2
- * d = d1 - d0 # <<<<<<<<<<<<<<
- * n = d * 1j
- * scale = abs(n)
- */
- __pyx_v_d = __Pyx_c_diff_double(__pyx_v_d1, __pyx_v_d0);
- /* "fontTools/misc/bezierTools.py":221
- * d1 = pt3 - pt2
- * d = d1 - d0
- * n = d * 1j # <<<<<<<<<<<<<<
- * scale = abs(n)
- * if scale == 0.0:
- */
- __pyx_v_n = __Pyx_c_prod_double(__pyx_v_d, __pyx_t_double_complex_from_parts(0, 1.0));
- /* "fontTools/misc/bezierTools.py":222
- * d = d1 - d0
- * n = d * 1j
- * scale = abs(n) # <<<<<<<<<<<<<<
- * if scale == 0.0:
- * return abs(pt3 - pt1)
- */
- __pyx_v_scale = __Pyx_c_abs_double(__pyx_v_n);
- /* "fontTools/misc/bezierTools.py":223
- * n = d * 1j
- * scale = abs(n)
- * if scale == 0.0: # <<<<<<<<<<<<<<
- * return abs(pt3 - pt1)
- * origDist = _dot(n, d0)
- */
- __pyx_t_1 = (__pyx_v_scale == 0.0);
- if (__pyx_t_1) {
- /* "fontTools/misc/bezierTools.py":224
- * scale = abs(n)
- * if scale == 0.0:
- * return abs(pt3 - pt1) # <<<<<<<<<<<<<<
- * origDist = _dot(n, d0)
- * if abs(origDist) < epsilon:
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_2 = PyFloat_FromDouble(__Pyx_c_abs_double(__Pyx_c_diff_double(__pyx_v_pt3, __pyx_v_pt1))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_r = __pyx_t_2;
- __pyx_t_2 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":223
- * n = d * 1j
- * scale = abs(n)
- * if scale == 0.0: # <<<<<<<<<<<<<<
- * return abs(pt3 - pt1)
- * origDist = _dot(n, d0)
- */
- }
- /* "fontTools/misc/bezierTools.py":225
- * if scale == 0.0:
- * return abs(pt3 - pt1)
- * origDist = _dot(n, d0) # <<<<<<<<<<<<<<
- * if abs(origDist) < epsilon:
- * if _dot(d0, d1) >= 0:
- */
- __pyx_t_3 = __pyx_f_9fontTools_4misc_11bezierTools__dot(__pyx_v_n, __pyx_v_d0); if (unlikely(__pyx_t_3 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 225, __pyx_L1_error)
- __pyx_v_origDist = __pyx_t_3;
- /* "fontTools/misc/bezierTools.py":226
- * return abs(pt3 - pt1)
- * origDist = _dot(n, d0)
- * if abs(origDist) < epsilon: # <<<<<<<<<<<<<<
- * if _dot(d0, d1) >= 0:
- * return abs(pt3 - pt1)
- */
- __pyx_t_3 = fabs(__pyx_v_origDist);
- __pyx_t_2 = PyFloat_FromDouble(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 226, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_epsilon); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 226, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = PyObject_RichCompare(__pyx_t_2, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 226, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 226, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- if (__pyx_t_1) {
- /* "fontTools/misc/bezierTools.py":227
- * origDist = _dot(n, d0)
- * if abs(origDist) < epsilon:
- * if _dot(d0, d1) >= 0: # <<<<<<<<<<<<<<
- * return abs(pt3 - pt1)
- * a, b = abs(d0), abs(d1)
- */
- __pyx_t_3 = __pyx_f_9fontTools_4misc_11bezierTools__dot(__pyx_v_d0, __pyx_v_d1); if (unlikely(__pyx_t_3 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 227, __pyx_L1_error)
- __pyx_t_1 = (__pyx_t_3 >= 0.0);
- if (__pyx_t_1) {
- /* "fontTools/misc/bezierTools.py":228
- * if abs(origDist) < epsilon:
- * if _dot(d0, d1) >= 0:
- * return abs(pt3 - pt1) # <<<<<<<<<<<<<<
- * a, b = abs(d0), abs(d1)
- * return (a * a + b * b) / (a + b)
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_5 = PyFloat_FromDouble(__Pyx_c_abs_double(__Pyx_c_diff_double(__pyx_v_pt3, __pyx_v_pt1))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 228, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_r = __pyx_t_5;
- __pyx_t_5 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":227
- * origDist = _dot(n, d0)
- * if abs(origDist) < epsilon:
- * if _dot(d0, d1) >= 0: # <<<<<<<<<<<<<<
- * return abs(pt3 - pt1)
- * a, b = abs(d0), abs(d1)
- */
- }
- /* "fontTools/misc/bezierTools.py":229
- * if _dot(d0, d1) >= 0:
- * return abs(pt3 - pt1)
- * a, b = abs(d0), abs(d1) # <<<<<<<<<<<<<<
- * return (a * a + b * b) / (a + b)
- * x0 = _dot(d, d0) / origDist
- */
- __pyx_t_3 = __Pyx_c_abs_double(__pyx_v_d0);
- __pyx_t_6 = __Pyx_c_abs_double(__pyx_v_d1);
- __pyx_v_a = __pyx_t_3;
- __pyx_v_b = __pyx_t_6;
- /* "fontTools/misc/bezierTools.py":230
- * return abs(pt3 - pt1)
- * a, b = abs(d0), abs(d1)
- * return (a * a + b * b) / (a + b) # <<<<<<<<<<<<<<
- * x0 = _dot(d, d0) / origDist
- * x1 = _dot(d, d1) / origDist
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_6 = ((__pyx_v_a * __pyx_v_a) + (__pyx_v_b * __pyx_v_b));
- __pyx_t_3 = (__pyx_v_a + __pyx_v_b);
- if (unlikely(__pyx_t_3 == 0)) {
- PyErr_SetString(PyExc_ZeroDivisionError, "float division");
- __PYX_ERR(0, 230, __pyx_L1_error)
- }
- __pyx_t_5 = PyFloat_FromDouble((__pyx_t_6 / __pyx_t_3)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 230, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_r = __pyx_t_5;
- __pyx_t_5 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":226
- * return abs(pt3 - pt1)
- * origDist = _dot(n, d0)
- * if abs(origDist) < epsilon: # <<<<<<<<<<<<<<
- * if _dot(d0, d1) >= 0:
- * return abs(pt3 - pt1)
- */
- }
- /* "fontTools/misc/bezierTools.py":231
- * a, b = abs(d0), abs(d1)
- * return (a * a + b * b) / (a + b)
- * x0 = _dot(d, d0) / origDist # <<<<<<<<<<<<<<
- * x1 = _dot(d, d1) / origDist
- * Len = abs(2 * (_intSecAtan(x1) - _intSecAtan(x0)) * origDist / (scale * (x1 - x0)))
- */
- __pyx_t_3 = __pyx_f_9fontTools_4misc_11bezierTools__dot(__pyx_v_d, __pyx_v_d0); if (unlikely(__pyx_t_3 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 231, __pyx_L1_error)
- if (unlikely(__pyx_v_origDist == 0)) {
- PyErr_SetString(PyExc_ZeroDivisionError, "float division");
- __PYX_ERR(0, 231, __pyx_L1_error)
- }
- __pyx_v_x0 = (__pyx_t_3 / __pyx_v_origDist);
- /* "fontTools/misc/bezierTools.py":232
- * return (a * a + b * b) / (a + b)
- * x0 = _dot(d, d0) / origDist
- * x1 = _dot(d, d1) / origDist # <<<<<<<<<<<<<<
- * Len = abs(2 * (_intSecAtan(x1) - _intSecAtan(x0)) * origDist / (scale * (x1 - x0)))
- * return Len
- */
- __pyx_t_3 = __pyx_f_9fontTools_4misc_11bezierTools__dot(__pyx_v_d, __pyx_v_d1); if (unlikely(__pyx_t_3 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 232, __pyx_L1_error)
- if (unlikely(__pyx_v_origDist == 0)) {
- PyErr_SetString(PyExc_ZeroDivisionError, "float division");
- __PYX_ERR(0, 232, __pyx_L1_error)
- }
- __pyx_v_x1 = (__pyx_t_3 / __pyx_v_origDist);
- /* "fontTools/misc/bezierTools.py":233
- * x0 = _dot(d, d0) / origDist
- * x1 = _dot(d, d1) / origDist
- * Len = abs(2 * (_intSecAtan(x1) - _intSecAtan(x0)) * origDist / (scale * (x1 - x0))) # <<<<<<<<<<<<<<
- * return Len
- *
- */
- __pyx_t_3 = __pyx_f_9fontTools_4misc_11bezierTools__intSecAtan(__pyx_v_x1); if (unlikely(__pyx_t_3 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 233, __pyx_L1_error)
- __pyx_t_6 = __pyx_f_9fontTools_4misc_11bezierTools__intSecAtan(__pyx_v_x0); if (unlikely(__pyx_t_6 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 233, __pyx_L1_error)
- __pyx_t_7 = ((2.0 * (__pyx_t_3 - __pyx_t_6)) * __pyx_v_origDist);
- __pyx_t_6 = (__pyx_v_scale * (__pyx_v_x1 - __pyx_v_x0));
- if (unlikely(__pyx_t_6 == 0)) {
- PyErr_SetString(PyExc_ZeroDivisionError, "float division");
- __PYX_ERR(0, 233, __pyx_L1_error)
- }
- __pyx_t_3 = fabs((__pyx_t_7 / __pyx_t_6));
- __pyx_v_Len = __pyx_t_3;
- /* "fontTools/misc/bezierTools.py":234
- * x1 = _dot(d, d1) / origDist
- * Len = abs(2 * (_intSecAtan(x1) - _intSecAtan(x0)) * origDist / (scale * (x1 - x0)))
- * return Len # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_5 = PyFloat_FromDouble(__pyx_v_Len); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 234, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_r = __pyx_t_5;
- __pyx_t_5 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":186
- *
- *
- * @cython.returns(cython.double) # <<<<<<<<<<<<<<
- * @cython.locals(
- * pt1=cython.complex,
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_4);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcQuadraticArcLengthC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":237
- *
- *
- * def approximateQuadraticArcLength(pt1, pt2, pt3): # <<<<<<<<<<<<<<
- * """Calculates the arc length for a quadratic Bezier segment.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_13approximateQuadraticArcLength(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_12approximateQuadraticArcLength, "approximateQuadraticArcLength(pt1, pt2, pt3)\n\nCalculates the arc length for a quadratic Bezier segment.\n\nUses Gauss-Legendre quadrature for a branch-free approximation.\nSee :func:`calcQuadraticArcLength` for a slower but more accurate result.\n\nArgs:\n pt1: Start point of the Bezier as 2D tuple.\n pt2: Handle point of the Bezier as 2D tuple.\n pt3: End point of the Bezier as 2D tuple.\n\nReturns:\n Approximate arc length value.");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_13approximateQuadraticArcLength = {"approximateQuadraticArcLength", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_13approximateQuadraticArcLength, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_12approximateQuadraticArcLength};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_13approximateQuadraticArcLength(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_pt3 = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[3] = {0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("approximateQuadraticArcLength (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 237, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 237, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 237, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 237, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "approximateQuadraticArcLength", 0) < (0)) __PYX_ERR(0, 237, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("approximateQuadraticArcLength", 1, 3, 3, i); __PYX_ERR(0, 237, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 3)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 237, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 237, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 237, __pyx_L3_error)
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_pt3 = values[2];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("approximateQuadraticArcLength", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 237, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.approximateQuadraticArcLength", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_12approximateQuadraticArcLength(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_12approximateQuadraticArcLength(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3) {
- 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;
- size_t __pyx_t_8;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("approximateQuadraticArcLength", 0);
- /* "fontTools/misc/bezierTools.py":251
- * Approximate arc length value.
- * """
- * return approximateQuadraticArcLengthC(complex(*pt1), complex(*pt2), complex(*pt3)) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_approximateQuadraticArcLengthC); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 251, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_pt1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 251, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 251, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_pt2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 251, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 251, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_pt3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 251, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 251, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_8 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_8 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_5, __pyx_t_6, __pyx_t_7};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_8, (4-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__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;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 251, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":237
- *
- *
- * def approximateQuadraticArcLength(pt1, pt2, pt3): # <<<<<<<<<<<<<<
- * """Calculates the arc length for a quadratic Bezier segment.
- *
- */
- /* function exit code */
- __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("fontTools.misc.bezierTools.approximateQuadraticArcLength", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":254
- *
- *
- * @cython.returns(cython.double) # <<<<<<<<<<<<<<
- * @cython.locals(
- * pt1=cython.complex,
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_15approximateQuadraticArcLengthC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_14approximateQuadraticArcLengthC, "approximateQuadraticArcLengthC(double complex pt1, double complex pt2, double complex pt3)\n\nCalculates the arc length for a quadratic Bezier segment.\n\nUses Gauss-Legendre quadrature for a branch-free approximation.\nSee :func:`calcQuadraticArcLength` for a slower but more accurate result.\n\nArgs:\n pt1: Start point of the Bezier as a complex number.\n pt2: Handle point of the Bezier as a complex number.\n pt3: End point of the Bezier as a complex number.\n\nReturns:\n Approximate arc length value.");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_15approximateQuadraticArcLengthC = {"approximateQuadraticArcLengthC", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_15approximateQuadraticArcLengthC, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_14approximateQuadraticArcLengthC};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_15approximateQuadraticArcLengthC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- __pyx_t_double_complex __pyx_v_pt1;
- __pyx_t_double_complex __pyx_v_pt2;
- __pyx_t_double_complex __pyx_v_pt3;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[3] = {0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("approximateQuadraticArcLengthC (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 254, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 254, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 254, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 254, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "approximateQuadraticArcLengthC", 0) < (0)) __PYX_ERR(0, 254, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("approximateQuadraticArcLengthC", 1, 3, 3, i); __PYX_ERR(0, 254, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 3)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 254, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 254, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 254, __pyx_L3_error)
- }
- __pyx_v_pt1 = __Pyx_PyComplex_As___pyx_t_double_complex(values[0]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 265, __pyx_L3_error)
- __pyx_v_pt2 = __Pyx_PyComplex_As___pyx_t_double_complex(values[1]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 265, __pyx_L3_error)
- __pyx_v_pt3 = __Pyx_PyComplex_As___pyx_t_double_complex(values[2]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 265, __pyx_L3_error)
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("approximateQuadraticArcLengthC", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 254, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.approximateQuadraticArcLengthC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_14approximateQuadraticArcLengthC(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_14approximateQuadraticArcLengthC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_pt1, __pyx_t_double_complex __pyx_v_pt2, __pyx_t_double_complex __pyx_v_pt3) {
- double __pyx_v_v0;
- double __pyx_v_v1;
- double __pyx_v_v2;
- 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("approximateQuadraticArcLengthC", 0);
- /* "fontTools/misc/bezierTools.py":287
- * # abs(BezierCurveC[2].diff(t).subs({t:T})) for T in sorted(.5, .5sqrt(3/5)/2),
- * # weighted 5/18, 8/18, 5/18 respectively.
- * v0 = abs( # <<<<<<<<<<<<<<
- * -0.492943519233745 * pt1 + 0.430331482911935 * pt2 + 0.0626120363218102 * pt3
- * )
- */
- __pyx_v_v0 = __Pyx_c_abs_double(__Pyx_c_sum_double(__Pyx_c_sum_double(__Pyx_c_prod_double(__pyx_t_double_complex_from_parts(-0.492943519233745, 0), __pyx_v_pt1), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(0.430331482911935, 0), __pyx_v_pt2)), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(0.0626120363218102, 0), __pyx_v_pt3)));
- /* "fontTools/misc/bezierTools.py":290
- * -0.492943519233745 * pt1 + 0.430331482911935 * pt2 + 0.0626120363218102 * pt3
- * )
- * v1 = abs(pt3 - pt1) * 0.4444444444444444 # <<<<<<<<<<<<<<
- * v2 = abs(
- * -0.0626120363218102 * pt1 - 0.430331482911935 * pt2 + 0.492943519233745 * pt3
- */
- __pyx_v_v1 = (__Pyx_c_abs_double(__Pyx_c_diff_double(__pyx_v_pt3, __pyx_v_pt1)) * 0.4444444444444444);
- /* "fontTools/misc/bezierTools.py":291
- * )
- * v1 = abs(pt3 - pt1) * 0.4444444444444444
- * v2 = abs( # <<<<<<<<<<<<<<
- * -0.0626120363218102 * pt1 - 0.430331482911935 * pt2 + 0.492943519233745 * pt3
- * )
- */
- __pyx_v_v2 = __Pyx_c_abs_double(__Pyx_c_sum_double(__Pyx_c_diff_double(__Pyx_c_prod_double(__pyx_t_double_complex_from_parts(-0.0626120363218102, 0), __pyx_v_pt1), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(0.430331482911935, 0), __pyx_v_pt2)), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(0.492943519233745, 0), __pyx_v_pt3)));
- /* "fontTools/misc/bezierTools.py":295
- * )
- *
- * return v0 + v1 + v2 # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyFloat_FromDouble(((__pyx_v_v0 + __pyx_v_v1) + __pyx_v_v2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 295, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":254
- *
- *
- * @cython.returns(cython.double) # <<<<<<<<<<<<<<
- * @cython.locals(
- * pt1=cython.complex,
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.approximateQuadraticArcLengthC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":298
- *
- *
- * def calcQuadraticBounds(pt1, pt2, pt3): # <<<<<<<<<<<<<<
- * """Calculates the bounding rectangle for a quadratic Bezier segment.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_17calcQuadraticBounds(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_16calcQuadraticBounds, "calcQuadraticBounds(pt1, pt2, pt3)\n\nCalculates the bounding rectangle for a quadratic Bezier segment.\n\nArgs:\n pt1: Start point of the Bezier as a 2D tuple.\n pt2: Handle point of the Bezier as a 2D tuple.\n pt3: End point of the Bezier as a 2D tuple.\n\nReturns:\n A four-item tuple representing the bounding rectangle ``(xMin, yMin, xMax, yMax)``.\n\nExample::\n\n >>> calcQuadraticBounds((0, 0), (50, 100), (100, 0))\n (0, 0, 100, 50.0)\n >>> calcQuadraticBounds((0, 0), (100, 0), (100, 100))\n (0.0, 0.0, 100, 100)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_17calcQuadraticBounds = {"calcQuadraticBounds", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_17calcQuadraticBounds, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_16calcQuadraticBounds};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_17calcQuadraticBounds(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_pt3 = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[3] = {0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("calcQuadraticBounds (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 298, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 298, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 298, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 298, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "calcQuadraticBounds", 0) < (0)) __PYX_ERR(0, 298, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("calcQuadraticBounds", 1, 3, 3, i); __PYX_ERR(0, 298, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 3)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 298, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 298, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 298, __pyx_L3_error)
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_pt3 = values[2];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("calcQuadraticBounds", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 298, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcQuadraticBounds", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_16calcQuadraticBounds(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_16calcQuadraticBounds(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3) {
- PyObject *__pyx_v_ax = NULL;
- PyObject *__pyx_v_ay = NULL;
- PyObject *__pyx_v_bx = NULL;
- PyObject *__pyx_v_by = NULL;
- PyObject *__pyx_v_cx = NULL;
- PyObject *__pyx_v_cy = NULL;
- PyObject *__pyx_v_ax2 = NULL;
- PyObject *__pyx_v_ay2 = NULL;
- PyObject *__pyx_v_roots = NULL;
- PyObject *__pyx_v_points = NULL;
- PyObject *__pyx_7genexpr__pyx_v_t = NULL;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- PyObject *__pyx_t_1 = NULL;
- PyObject *__pyx_t_2 = NULL;
- PyObject *__pyx_t_3 = NULL;
- size_t __pyx_t_4;
- PyObject *__pyx_t_5 = NULL;
- PyObject *__pyx_t_6 = NULL;
- PyObject *(*__pyx_t_7)(PyObject *);
- PyObject *__pyx_t_8 = NULL;
- PyObject *__pyx_t_9 = NULL;
- int __pyx_t_10;
- int __pyx_t_11;
- Py_ssize_t __pyx_t_12;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("calcQuadraticBounds", 0);
- /* "fontTools/misc/bezierTools.py":316
- * (0.0, 0.0, 100, 100)
- * """
- * (ax, ay), (bx, by), (cx, cy) = calcQuadraticParameters(pt1, pt2, pt3) # <<<<<<<<<<<<<<
- * ax2 = ax * 2.0
- * ay2 = ay * 2.0
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_calcQuadraticParameters); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 316, __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;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 3)) {
- if (size > 3) __Pyx_RaiseTooManyValuesError(3);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 316, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_3);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2);
- __Pyx_INCREF(__pyx_t_5);
- } else {
- __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_3);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_5 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_5);
- }
- #else
- __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 316, __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_ERR(0, 316, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6);
- index = 0; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_3);
- index = 1; __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 = 2; __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), 3) < (0)) __PYX_ERR(0, 316, __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_ERR(0, 316, __pyx_L1_error)
- __pyx_L4_unpacking_done:;
- }
- if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
- PyObject* sequence = __pyx_t_3;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 316, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_6);
- __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_8);
- } else {
- __pyx_t_6 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_6);
- __pyx_t_8 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_8);
- }
- #else
- __pyx_t_6 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 316, __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_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_9);
- index = 0; __pyx_t_6 = __pyx_t_7(__pyx_t_9); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_6);
- index = 1; __pyx_t_8 = __pyx_t_7(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_8);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_9), 2) < (0)) __PYX_ERR(0, 316, __pyx_L1_error)
- __pyx_t_7 = NULL;
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- goto __pyx_L6_unpacking_done;
- __pyx_L5_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __pyx_t_7 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 316, __pyx_L1_error)
- __pyx_L6_unpacking_done:;
- }
- __pyx_v_ax = __pyx_t_6;
- __pyx_t_6 = 0;
- __pyx_v_ay = __pyx_t_8;
- __pyx_t_8 = 0;
- if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
- PyObject* sequence = __pyx_t_2;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 316, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_8);
- __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_6);
- } else {
- __pyx_t_8 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_8);
- __pyx_t_6 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_6);
- }
- #else
- __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_6 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- #endif
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- } else {
- Py_ssize_t index = -1;
- __pyx_t_9 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_9);
- index = 0; __pyx_t_8 = __pyx_t_7(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_8);
- index = 1; __pyx_t_6 = __pyx_t_7(__pyx_t_9); if (unlikely(!__pyx_t_6)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_6);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_9), 2) < (0)) __PYX_ERR(0, 316, __pyx_L1_error)
- __pyx_t_7 = NULL;
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- goto __pyx_L8_unpacking_done;
- __pyx_L7_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __pyx_t_7 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 316, __pyx_L1_error)
- __pyx_L8_unpacking_done:;
- }
- __pyx_v_bx = __pyx_t_8;
- __pyx_t_8 = 0;
- __pyx_v_by = __pyx_t_6;
- __pyx_t_6 = 0;
- if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
- PyObject* sequence = __pyx_t_5;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 316, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_6);
- __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_8);
- } else {
- __pyx_t_6 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_6);
- __pyx_t_8 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_8);
- }
- #else
- __pyx_t_6 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- #endif
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- } else {
- Py_ssize_t index = -1;
- __pyx_t_9 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 316, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_9);
- index = 0; __pyx_t_6 = __pyx_t_7(__pyx_t_9); if (unlikely(!__pyx_t_6)) goto __pyx_L9_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_6);
- index = 1; __pyx_t_8 = __pyx_t_7(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L9_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_8);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_9), 2) < (0)) __PYX_ERR(0, 316, __pyx_L1_error)
- __pyx_t_7 = NULL;
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- goto __pyx_L10_unpacking_done;
- __pyx_L9_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __pyx_t_7 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 316, __pyx_L1_error)
- __pyx_L10_unpacking_done:;
- }
- __pyx_v_cx = __pyx_t_6;
- __pyx_t_6 = 0;
- __pyx_v_cy = __pyx_t_8;
- __pyx_t_8 = 0;
- /* "fontTools/misc/bezierTools.py":317
- * """
- * (ax, ay), (bx, by), (cx, cy) = calcQuadraticParameters(pt1, pt2, pt3)
- * ax2 = ax * 2.0 # <<<<<<<<<<<<<<
- * ay2 = ay * 2.0
- * roots = []
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_ax, __pyx_mstate_global->__pyx_float_2_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 317, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_ax2 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":318
- * (ax, ay), (bx, by), (cx, cy) = calcQuadraticParameters(pt1, pt2, pt3)
- * ax2 = ax * 2.0
- * ay2 = ay * 2.0 # <<<<<<<<<<<<<<
- * roots = []
- * if ax2 != 0:
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_ay, __pyx_mstate_global->__pyx_float_2_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 318, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_ay2 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":319
- * ax2 = ax * 2.0
- * ay2 = ay * 2.0
- * roots = [] # <<<<<<<<<<<<<<
- * if ax2 != 0:
- * roots.append(-bx / ax2)
- */
- __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 319, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_roots = ((PyObject*)__pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":320
- * ay2 = ay * 2.0
- * roots = []
- * if ax2 != 0: # <<<<<<<<<<<<<<
- * roots.append(-bx / ax2)
- * if ay2 != 0:
- */
- __pyx_t_10 = (__Pyx_PyLong_BoolNeObjC(__pyx_v_ax2, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 320, __pyx_L1_error)
- if (__pyx_t_10) {
- /* "fontTools/misc/bezierTools.py":321
- * roots = []
- * if ax2 != 0:
- * roots.append(-bx / ax2) # <<<<<<<<<<<<<<
- * if ay2 != 0:
- * roots.append(-by / ay2)
- */
- __pyx_t_1 = PyNumber_Negative(__pyx_v_bx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 321, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_v_ax2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 321, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_roots, __pyx_t_5); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 321, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- /* "fontTools/misc/bezierTools.py":320
- * ay2 = ay * 2.0
- * roots = []
- * if ax2 != 0: # <<<<<<<<<<<<<<
- * roots.append(-bx / ax2)
- * if ay2 != 0:
- */
- }
- /* "fontTools/misc/bezierTools.py":322
- * if ax2 != 0:
- * roots.append(-bx / ax2)
- * if ay2 != 0: # <<<<<<<<<<<<<<
- * roots.append(-by / ay2)
- * points = [
- */
- __pyx_t_10 = (__Pyx_PyLong_BoolNeObjC(__pyx_v_ay2, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 322, __pyx_L1_error)
- if (__pyx_t_10) {
- /* "fontTools/misc/bezierTools.py":323
- * roots.append(-bx / ax2)
- * if ay2 != 0:
- * roots.append(-by / ay2) # <<<<<<<<<<<<<<
- * points = [
- * (ax * t * t + bx * t + cx, ay * t * t + by * t + cy)
- */
- __pyx_t_5 = PyNumber_Negative(__pyx_v_by); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 323, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_5, __pyx_v_ay2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 323, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_roots, __pyx_t_1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 323, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":322
- * if ax2 != 0:
- * roots.append(-bx / ax2)
- * if ay2 != 0: # <<<<<<<<<<<<<<
- * roots.append(-by / ay2)
- * points = [
- */
- }
- /* "fontTools/misc/bezierTools.py":328
- * for t in roots
- * if 0 <= t < 1
- * ] + [pt1, pt3] # <<<<<<<<<<<<<<
- * return calcBounds(points)
- *
- */
- { /* enter inner scope */
- /* "fontTools/misc/bezierTools.py":324
- * if ay2 != 0:
- * roots.append(-by / ay2)
- * points = [ # <<<<<<<<<<<<<<
- * (ax * t * t + bx * t + cx, ay * t * t + by * t + cy)
- * for t in roots
- */
- __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_1);
- /* "fontTools/misc/bezierTools.py":326
- * points = [
- * (ax * t * t + bx * t + cx, ay * t * t + by * t + cy)
- * for t in roots # <<<<<<<<<<<<<<
- * if 0 <= t < 1
- * ] + [pt1, pt3]
- */
- __pyx_t_5 = __pyx_v_roots; __Pyx_INCREF(__pyx_t_5);
- __pyx_t_12 = 0;
- for (;;) {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_5);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 326, __pyx_L15_error)
- #endif
- if (__pyx_t_12 >= __pyx_temp) break;
- }
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(__pyx_t_5, __pyx_t_12, __Pyx_ReferenceSharing_OwnStrongReference);
- ++__pyx_t_12;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 326, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_t, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":327
- * (ax * t * t + bx * t + cx, ay * t * t + by * t + cy)
- * for t in roots
- * if 0 <= t < 1 # <<<<<<<<<<<<<<
- * ] + [pt1, pt3]
- * return calcBounds(points)
- */
- __pyx_t_2 = PyObject_RichCompare(__pyx_mstate_global->__pyx_int_0, __pyx_7genexpr__pyx_v_t, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 327, __pyx_L15_error)
- if (__Pyx_PyObject_IsTrue(__pyx_t_2)) {
- __Pyx_DECREF(__pyx_t_2);
- __pyx_t_2 = PyObject_RichCompare(__pyx_7genexpr__pyx_v_t, __pyx_mstate_global->__pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 327, __pyx_L15_error)
- }
- __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 327, __pyx_L15_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (__pyx_t_10) {
- /* "fontTools/misc/bezierTools.py":325
- * roots.append(-by / ay2)
- * points = [
- * (ax * t * t + bx * t + cx, ay * t * t + by * t + cy) # <<<<<<<<<<<<<<
- * for t in roots
- * if 0 <= t < 1
- */
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_ax, __pyx_7genexpr__pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 325, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = PyNumber_Multiply(__pyx_t_2, __pyx_7genexpr__pyx_v_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 325, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_bx, __pyx_7genexpr__pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 325, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_8 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 325, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_8);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Add(__pyx_t_8, __pyx_v_cx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 325, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __pyx_t_8 = PyNumber_Multiply(__pyx_v_ay, __pyx_7genexpr__pyx_v_t); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 325, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_3 = PyNumber_Multiply(__pyx_t_8, __pyx_7genexpr__pyx_v_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 325, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __pyx_t_8 = PyNumber_Multiply(__pyx_v_by, __pyx_7genexpr__pyx_v_t); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 325, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_6 = PyNumber_Add(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 325, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __pyx_t_8 = PyNumber_Add(__pyx_t_6, __pyx_v_cy); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 325, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_8);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 325, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 325, __pyx_L15_error);
- __Pyx_GIVEREF(__pyx_t_8);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_8) != (0)) __PYX_ERR(0, 325, __pyx_L15_error);
- __pyx_t_2 = 0;
- __pyx_t_8 = 0;
- if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 324, __pyx_L15_error)
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":327
- * (ax * t * t + bx * t + cx, ay * t * t + by * t + cy)
- * for t in roots
- * if 0 <= t < 1 # <<<<<<<<<<<<<<
- * ] + [pt1, pt3]
- * return calcBounds(points)
- */
- }
- /* "fontTools/misc/bezierTools.py":326
- * points = [
- * (ax * t * t + bx * t + cx, ay * t * t + by * t + cy)
- * for t in roots # <<<<<<<<<<<<<<
- * if 0 <= t < 1
- * ] + [pt1, pt3]
- */
- }
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_XDECREF(__pyx_7genexpr__pyx_v_t); __pyx_7genexpr__pyx_v_t = 0;
- goto __pyx_L20_exit_scope;
- __pyx_L15_error:;
- __Pyx_XDECREF(__pyx_7genexpr__pyx_v_t); __pyx_7genexpr__pyx_v_t = 0;
- goto __pyx_L1_error;
- __pyx_L20_exit_scope:;
- } /* exit inner scope */
- /* "fontTools/misc/bezierTools.py":328
- * for t in roots
- * if 0 <= t < 1
- * ] + [pt1, pt3] # <<<<<<<<<<<<<<
- * return calcBounds(points)
- *
- */
- __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 328, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_INCREF(__pyx_v_pt1);
- __Pyx_GIVEREF(__pyx_v_pt1);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_pt1) != (0)) __PYX_ERR(0, 328, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_pt3);
- __Pyx_GIVEREF(__pyx_v_pt3);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_5, 1, __pyx_v_pt3) != (0)) __PYX_ERR(0, 328, __pyx_L1_error);
- __pyx_t_6 = PyNumber_Add(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 328, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_v_points = ((PyObject*)__pyx_t_6);
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":329
- * if 0 <= t < 1
- * ] + [pt1, pt3]
- * return calcBounds(points) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_5 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_calcBounds); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 329, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_1))) {
- __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
- assert(__pyx_t_5);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
- __Pyx_INCREF(__pyx_t_5);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_points};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 329, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- __pyx_r = __pyx_t_6;
- __pyx_t_6 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":298
- *
- *
- * def calcQuadraticBounds(pt1, pt2, pt3): # <<<<<<<<<<<<<<
- * """Calculates the bounding rectangle for a quadratic Bezier segment.
- *
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_XDECREF(__pyx_t_6);
- __Pyx_XDECREF(__pyx_t_8);
- __Pyx_XDECREF(__pyx_t_9);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcQuadraticBounds", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_ax);
- __Pyx_XDECREF(__pyx_v_ay);
- __Pyx_XDECREF(__pyx_v_bx);
- __Pyx_XDECREF(__pyx_v_by);
- __Pyx_XDECREF(__pyx_v_cx);
- __Pyx_XDECREF(__pyx_v_cy);
- __Pyx_XDECREF(__pyx_v_ax2);
- __Pyx_XDECREF(__pyx_v_ay2);
- __Pyx_XDECREF(__pyx_v_roots);
- __Pyx_XDECREF(__pyx_v_points);
- __Pyx_XDECREF(__pyx_7genexpr__pyx_v_t);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":332
- *
- *
- * def approximateCubicArcLength(pt1, pt2, pt3, pt4): # <<<<<<<<<<<<<<
- * """Approximates the arc length for a cubic Bezier segment.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_19approximateCubicArcLength(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_18approximateCubicArcLength, "approximateCubicArcLength(pt1, pt2, pt3, pt4)\n\nApproximates the arc length for a cubic Bezier segment.\n\nUses Gauss-Lobatto quadrature with n=5 points to approximate arc length.\nSee :func:`calcCubicArcLength` for a slower but more accurate result.\n\nArgs:\n pt1,pt2,pt3,pt4: Control points of the Bezier as 2D tuples.\n\nReturns:\n Arc length value.\n\nExample::\n\n >>> approximateCubicArcLength((0, 0), (25, 100), (75, 100), (100, 0))\n 190.04332968932817\n >>> approximateCubicArcLength((0, 0), (50, 0), (100, 50), (100, 100))\n 154.8852074945903\n >>> approximateCubicArcLength((0, 0), (50, 0), (100, 0), (150, 0)) # line; exact result should be 150.\n 149.99999999999991\n >>> approximateCubicArcLength((0, 0), (50, 0), (100, 0), (-50, 0)) # cusp; exact result should be 150.\n 136.9267662156362\n >>> approximateCubicArcLength((0, 0), (50, 0), (100, -50), (-50, 0)) # cusp\n 154.80848416537057");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_19approximateCubicArcLength = {"approximateCubicArcLength", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_19approximateCubicArcLength, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_18approximateCubicArcLength};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_19approximateCubicArcLength(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_pt3 = 0;
- PyObject *__pyx_v_pt4 = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[4] = {0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("approximateCubicArcLength (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,&__pyx_mstate_global->__pyx_n_u_pt4,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 332, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 332, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 332, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 332, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 332, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "approximateCubicArcLength", 0) < (0)) __PYX_ERR(0, 332, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("approximateCubicArcLength", 1, 4, 4, i); __PYX_ERR(0, 332, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 4)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 332, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 332, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 332, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 332, __pyx_L3_error)
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_pt3 = values[2];
- __pyx_v_pt4 = values[3];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("approximateCubicArcLength", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 332, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.approximateCubicArcLength", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_18approximateCubicArcLength(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_pt4);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_18approximateCubicArcLength(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_pt4) {
- 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;
- PyObject *__pyx_t_8 = NULL;
- size_t __pyx_t_9;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("approximateCubicArcLength", 0);
- /* "fontTools/misc/bezierTools.py":357
- * 154.80848416537057
- * """
- * return approximateCubicArcLengthC( # <<<<<<<<<<<<<<
- * complex(*pt1), complex(*pt2), complex(*pt3), complex(*pt4)
- * )
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_approximateCubicArcLengthC); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 357, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- /* "fontTools/misc/bezierTools.py":358
- * """
- * return approximateCubicArcLengthC(
- * complex(*pt1), complex(*pt2), complex(*pt3), complex(*pt4) # <<<<<<<<<<<<<<
- * )
- *
- */
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_pt1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 358, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 358, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_pt2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 358, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 358, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_pt3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 358, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 358, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_pt4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 358, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 358, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_9 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_9 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_9, (5-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__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;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":332
- *
- *
- * def approximateCubicArcLength(pt1, pt2, pt3, pt4): # <<<<<<<<<<<<<<
- * """Approximates the arc length for a cubic Bezier segment.
- *
- */
- /* function exit code */
- __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_XDECREF(__pyx_t_8);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.approximateCubicArcLength", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":362
- *
- *
- * @cython.returns(cython.double) # <<<<<<<<<<<<<<
- * @cython.locals(
- * pt1=cython.complex,
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_21approximateCubicArcLengthC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_20approximateCubicArcLengthC, "approximateCubicArcLengthC(double complex pt1, double complex pt2, double complex pt3, double complex pt4)\n\nApproximates the arc length for a cubic Bezier segment.\n\nArgs:\n pt1,pt2,pt3,pt4: Control points of the Bezier as complex numbers.\n\nReturns:\n Arc length value.");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_21approximateCubicArcLengthC = {"approximateCubicArcLengthC", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_21approximateCubicArcLengthC, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_20approximateCubicArcLengthC};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_21approximateCubicArcLengthC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- __pyx_t_double_complex __pyx_v_pt1;
- __pyx_t_double_complex __pyx_v_pt2;
- __pyx_t_double_complex __pyx_v_pt3;
- __pyx_t_double_complex __pyx_v_pt4;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[4] = {0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("approximateCubicArcLengthC (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,&__pyx_mstate_global->__pyx_n_u_pt4,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 362, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 362, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 362, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 362, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 362, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "approximateCubicArcLengthC", 0) < (0)) __PYX_ERR(0, 362, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("approximateCubicArcLengthC", 1, 4, 4, i); __PYX_ERR(0, 362, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 4)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 362, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 362, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 362, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 362, __pyx_L3_error)
- }
- __pyx_v_pt1 = __Pyx_PyComplex_As___pyx_t_double_complex(values[0]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 376, __pyx_L3_error)
- __pyx_v_pt2 = __Pyx_PyComplex_As___pyx_t_double_complex(values[1]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 376, __pyx_L3_error)
- __pyx_v_pt3 = __Pyx_PyComplex_As___pyx_t_double_complex(values[2]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 376, __pyx_L3_error)
- __pyx_v_pt4 = __Pyx_PyComplex_As___pyx_t_double_complex(values[3]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 376, __pyx_L3_error)
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("approximateCubicArcLengthC", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 362, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.approximateCubicArcLengthC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_20approximateCubicArcLengthC(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_pt4);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_20approximateCubicArcLengthC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_pt1, __pyx_t_double_complex __pyx_v_pt2, __pyx_t_double_complex __pyx_v_pt3, __pyx_t_double_complex __pyx_v_pt4) {
- double __pyx_v_v0;
- double __pyx_v_v1;
- double __pyx_v_v2;
- double __pyx_v_v3;
- double __pyx_v_v4;
- 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("approximateCubicArcLengthC", 0);
- /* "fontTools/misc/bezierTools.py":393
- * # abs(BezierCurveC[3].diff(t).subs({t:T})) for T in sorted(0, .5(3/7)**.5/2, .5, 1),
- * # weighted 1/20, 49/180, 32/90, 49/180, 1/20 respectively.
- * v0 = abs(pt2 - pt1) * 0.15 # <<<<<<<<<<<<<<
- * v1 = abs(
- * -0.558983582205757 * pt1
- */
- __pyx_v_v0 = (__Pyx_c_abs_double(__Pyx_c_diff_double(__pyx_v_pt2, __pyx_v_pt1)) * 0.15);
- /* "fontTools/misc/bezierTools.py":394
- * # weighted 1/20, 49/180, 32/90, 49/180, 1/20 respectively.
- * v0 = abs(pt2 - pt1) * 0.15
- * v1 = abs( # <<<<<<<<<<<<<<
- * -0.558983582205757 * pt1
- * + 0.325650248872424 * pt2
- */
- __pyx_v_v1 = __Pyx_c_abs_double(__Pyx_c_sum_double(__Pyx_c_sum_double(__Pyx_c_sum_double(__Pyx_c_prod_double(__pyx_t_double_complex_from_parts(-0.558983582205757, 0), __pyx_v_pt1), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(0.325650248872424, 0), __pyx_v_pt2)), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(0.208983582205757, 0), __pyx_v_pt3)), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(0.024349751127576, 0), __pyx_v_pt4)));
- /* "fontTools/misc/bezierTools.py":400
- * + 0.024349751127576 * pt4
- * )
- * v2 = abs(pt4 - pt1 + pt3 - pt2) * 0.26666666666666666 # <<<<<<<<<<<<<<
- * v3 = abs(
- * -0.024349751127576 * pt1
- */
- __pyx_v_v2 = (__Pyx_c_abs_double(__Pyx_c_diff_double(__Pyx_c_sum_double(__Pyx_c_diff_double(__pyx_v_pt4, __pyx_v_pt1), __pyx_v_pt3), __pyx_v_pt2)) * 0.26666666666666666);
- /* "fontTools/misc/bezierTools.py":401
- * )
- * v2 = abs(pt4 - pt1 + pt3 - pt2) * 0.26666666666666666
- * v3 = abs( # <<<<<<<<<<<<<<
- * -0.024349751127576 * pt1
- * - 0.208983582205757 * pt2
- */
- __pyx_v_v3 = __Pyx_c_abs_double(__Pyx_c_sum_double(__Pyx_c_diff_double(__Pyx_c_diff_double(__Pyx_c_prod_double(__pyx_t_double_complex_from_parts(-0.024349751127576, 0), __pyx_v_pt1), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(0.208983582205757, 0), __pyx_v_pt2)), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(0.325650248872424, 0), __pyx_v_pt3)), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(0.558983582205757, 0), __pyx_v_pt4)));
- /* "fontTools/misc/bezierTools.py":407
- * + 0.558983582205757 * pt4
- * )
- * v4 = abs(pt4 - pt3) * 0.15 # <<<<<<<<<<<<<<
- *
- * return v0 + v1 + v2 + v3 + v4
- */
- __pyx_v_v4 = (__Pyx_c_abs_double(__Pyx_c_diff_double(__pyx_v_pt4, __pyx_v_pt3)) * 0.15);
- /* "fontTools/misc/bezierTools.py":409
- * v4 = abs(pt4 - pt3) * 0.15
- *
- * return v0 + v1 + v2 + v3 + v4 # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyFloat_FromDouble(((((__pyx_v_v0 + __pyx_v_v1) + __pyx_v_v2) + __pyx_v_v3) + __pyx_v_v4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":362
- *
- *
- * @cython.returns(cython.double) # <<<<<<<<<<<<<<
- * @cython.locals(
- * pt1=cython.complex,
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.approximateCubicArcLengthC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":412
- *
- *
- * def calcCubicBounds(pt1, pt2, pt3, pt4): # <<<<<<<<<<<<<<
- * """Calculates the bounding rectangle for a quadratic Bezier segment.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_23calcCubicBounds(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_22calcCubicBounds, "calcCubicBounds(pt1, pt2, pt3, pt4)\n\nCalculates the bounding rectangle for a quadratic Bezier segment.\n\nArgs:\n pt1,pt2,pt3,pt4: Control points of the Bezier as 2D tuples.\n\nReturns:\n A four-item tuple representing the bounding rectangle ``(xMin, yMin, xMax, yMax)``.\n\nExample::\n\n >>> calcCubicBounds((0, 0), (25, 100), (75, 100), (100, 0))\n (0, 0, 100, 75.0)\n >>> calcCubicBounds((0, 0), (50, 0), (100, 50), (100, 100))\n (0.0, 0.0, 100, 100)\n >>> print(\"%f %f %f %f\" % calcCubicBounds((50, 0), (0, 100), (100, 100), (50, 0)))\n 35.566243 0.000000 64.433757 75.000000");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_23calcCubicBounds = {"calcCubicBounds", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_23calcCubicBounds, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_22calcCubicBounds};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_23calcCubicBounds(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_pt3 = 0;
- PyObject *__pyx_v_pt4 = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[4] = {0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("calcCubicBounds (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,&__pyx_mstate_global->__pyx_n_u_pt4,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 412, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 412, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 412, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 412, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 412, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "calcCubicBounds", 0) < (0)) __PYX_ERR(0, 412, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("calcCubicBounds", 1, 4, 4, i); __PYX_ERR(0, 412, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 4)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 412, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 412, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 412, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 412, __pyx_L3_error)
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_pt3 = values[2];
- __pyx_v_pt4 = values[3];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("calcCubicBounds", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 412, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcCubicBounds", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_22calcCubicBounds(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_pt4);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_22calcCubicBounds(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_pt4) {
- PyObject *__pyx_v_ax = NULL;
- PyObject *__pyx_v_ay = NULL;
- PyObject *__pyx_v_bx = NULL;
- PyObject *__pyx_v_by = NULL;
- PyObject *__pyx_v_cx = NULL;
- PyObject *__pyx_v_cy = NULL;
- PyObject *__pyx_v_dx = NULL;
- PyObject *__pyx_v_dy = NULL;
- PyObject *__pyx_v_ax3 = NULL;
- PyObject *__pyx_v_ay3 = NULL;
- PyObject *__pyx_v_bx2 = NULL;
- PyObject *__pyx_v_by2 = NULL;
- PyObject *__pyx_v_xRoots = NULL;
- PyObject *__pyx_v_yRoots = NULL;
- PyObject *__pyx_v_roots = NULL;
- PyObject *__pyx_v_points = NULL;
- PyObject *__pyx_8genexpr1__pyx_v_t = NULL;
- PyObject *__pyx_8genexpr2__pyx_v_t = NULL;
- PyObject *__pyx_8genexpr3__pyx_v_t = NULL;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- PyObject *__pyx_t_1 = NULL;
- PyObject *__pyx_t_2 = NULL;
- PyObject *__pyx_t_3 = NULL;
- size_t __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;
- Py_ssize_t __pyx_t_11;
- PyObject *(*__pyx_t_12)(PyObject *);
- int __pyx_t_13;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("calcCubicBounds", 0);
- /* "fontTools/misc/bezierTools.py":430
- * 35.566243 0.000000 64.433757 75.000000
- * """
- * (ax, ay), (bx, by), (cx, cy), (dx, dy) = calcCubicParameters(pt1, pt2, pt3, pt4) # <<<<<<<<<<<<<<
- * # calc first derivative
- * ax3 = ax * 3.0
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_calcCubicParameters); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_pt4};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (5-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 430, __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;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 4)) {
- if (size > 4) __Pyx_RaiseTooManyValuesError(4);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 430, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_3);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2);
- __Pyx_INCREF(__pyx_t_5);
- __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3);
- __Pyx_INCREF(__pyx_t_6);
- } else {
- __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_3);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_5 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_5);
- __pyx_t_6 = __Pyx_PyList_GetItemRefFast(sequence, 3, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_6);
- }
- #else
- {
- Py_ssize_t i;
- PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_2,&__pyx_t_5,&__pyx_t_6};
- for (i=0; i < 4; i++) {
- PyObject* item = __Pyx_PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 430, __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[4] = {&__pyx_t_3,&__pyx_t_2,&__pyx_t_5,&__pyx_t_6};
- __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_8 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7);
- for (index=0; index < 4; index++) {
- PyObject* item = __pyx_t_8(__pyx_t_7); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(item);
- *(temps[index]) = item;
- }
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 4) < (0)) __PYX_ERR(0, 430, __pyx_L1_error)
- __pyx_t_8 = NULL;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- goto __pyx_L4_unpacking_done;
- __pyx_L3_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __pyx_t_8 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 430, __pyx_L1_error)
- __pyx_L4_unpacking_done:;
- }
- if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
- PyObject* sequence = __pyx_t_3;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 430, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_7);
- __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_9);
- } else {
- __pyx_t_7 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_7);
- __pyx_t_9 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_9);
- }
- #else
- __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __pyx_t_9 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- #endif
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- } else {
- Py_ssize_t index = -1;
- __pyx_t_10 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_8 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_10);
- index = 0; __pyx_t_7 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_7)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_7);
- index = 1; __pyx_t_9 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_9);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_10), 2) < (0)) __PYX_ERR(0, 430, __pyx_L1_error)
- __pyx_t_8 = NULL;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- goto __pyx_L6_unpacking_done;
- __pyx_L5_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __pyx_t_8 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 430, __pyx_L1_error)
- __pyx_L6_unpacking_done:;
- }
- __pyx_v_ax = __pyx_t_7;
- __pyx_t_7 = 0;
- __pyx_v_ay = __pyx_t_9;
- __pyx_t_9 = 0;
- if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
- PyObject* sequence = __pyx_t_2;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 430, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_9);
- __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_7);
- } else {
- __pyx_t_9 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_9);
- __pyx_t_7 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_7);
- }
- #else
- __pyx_t_9 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 430, __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_10 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_8 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_10);
- index = 0; __pyx_t_9 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_9);
- index = 1; __pyx_t_7 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_7)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_7);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_10), 2) < (0)) __PYX_ERR(0, 430, __pyx_L1_error)
- __pyx_t_8 = NULL;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- goto __pyx_L8_unpacking_done;
- __pyx_L7_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __pyx_t_8 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 430, __pyx_L1_error)
- __pyx_L8_unpacking_done:;
- }
- __pyx_v_bx = __pyx_t_9;
- __pyx_t_9 = 0;
- __pyx_v_by = __pyx_t_7;
- __pyx_t_7 = 0;
- if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
- PyObject* sequence = __pyx_t_5;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 430, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_7);
- __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_9);
- } else {
- __pyx_t_7 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_7);
- __pyx_t_9 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_9);
- }
- #else
- __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __pyx_t_9 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- #endif
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- } else {
- Py_ssize_t index = -1;
- __pyx_t_10 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_8 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_10);
- index = 0; __pyx_t_7 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_7)) goto __pyx_L9_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_7);
- index = 1; __pyx_t_9 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L9_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_9);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_10), 2) < (0)) __PYX_ERR(0, 430, __pyx_L1_error)
- __pyx_t_8 = NULL;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- goto __pyx_L10_unpacking_done;
- __pyx_L9_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __pyx_t_8 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 430, __pyx_L1_error)
- __pyx_L10_unpacking_done:;
- }
- __pyx_v_cx = __pyx_t_7;
- __pyx_t_7 = 0;
- __pyx_v_cy = __pyx_t_9;
- __pyx_t_9 = 0;
- if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
- PyObject* sequence = __pyx_t_6;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 430, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_9);
- __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_7);
- } else {
- __pyx_t_9 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_9);
- __pyx_t_7 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_7);
- }
- #else
- __pyx_t_9 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 430, __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_10 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 430, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_8 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_10);
- index = 0; __pyx_t_9 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L11_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_9);
- index = 1; __pyx_t_7 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_7)) goto __pyx_L11_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_7);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_10), 2) < (0)) __PYX_ERR(0, 430, __pyx_L1_error)
- __pyx_t_8 = NULL;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- goto __pyx_L12_unpacking_done;
- __pyx_L11_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __pyx_t_8 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 430, __pyx_L1_error)
- __pyx_L12_unpacking_done:;
- }
- __pyx_v_dx = __pyx_t_9;
- __pyx_t_9 = 0;
- __pyx_v_dy = __pyx_t_7;
- __pyx_t_7 = 0;
- /* "fontTools/misc/bezierTools.py":432
- * (ax, ay), (bx, by), (cx, cy), (dx, dy) = calcCubicParameters(pt1, pt2, pt3, pt4)
- * # calc first derivative
- * ax3 = ax * 3.0 # <<<<<<<<<<<<<<
- * ay3 = ay * 3.0
- * bx2 = bx * 2.0
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_ax, __pyx_mstate_global->__pyx_float_3_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 432, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_ax3 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":433
- * # calc first derivative
- * ax3 = ax * 3.0
- * ay3 = ay * 3.0 # <<<<<<<<<<<<<<
- * bx2 = bx * 2.0
- * by2 = by * 2.0
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_ay, __pyx_mstate_global->__pyx_float_3_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 433, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_ay3 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":434
- * ax3 = ax * 3.0
- * ay3 = ay * 3.0
- * bx2 = bx * 2.0 # <<<<<<<<<<<<<<
- * by2 = by * 2.0
- * xRoots = [t for t in solveQuadratic(ax3, bx2, cx) if 0 <= t < 1]
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_bx, __pyx_mstate_global->__pyx_float_2_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_bx2 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":435
- * ay3 = ay * 3.0
- * bx2 = bx * 2.0
- * by2 = by * 2.0 # <<<<<<<<<<<<<<
- * xRoots = [t for t in solveQuadratic(ax3, bx2, cx) if 0 <= t < 1]
- * yRoots = [t for t in solveQuadratic(ay3, by2, cy) if 0 <= t < 1]
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_by, __pyx_mstate_global->__pyx_float_2_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 435, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_by2 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":436
- * bx2 = bx * 2.0
- * by2 = by * 2.0
- * xRoots = [t for t in solveQuadratic(ax3, bx2, cx) if 0 <= t < 1] # <<<<<<<<<<<<<<
- * yRoots = [t for t in solveQuadratic(ay3, by2, cy) if 0 <= t < 1]
- * roots = xRoots + yRoots
- */
- { /* enter inner scope */
- __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 436, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_5 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_solveQuadratic); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 436, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_2))) {
- __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
- assert(__pyx_t_5);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
- __Pyx_INCREF(__pyx_t_5);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_5, __pyx_v_ax3, __pyx_v_bx2, __pyx_v_cx};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 436, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) {
- __pyx_t_2 = __pyx_t_6; __Pyx_INCREF(__pyx_t_2);
- __pyx_t_11 = 0;
- __pyx_t_12 = NULL;
- } else {
- __pyx_t_11 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 436, __pyx_L15_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_12 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 436, __pyx_L15_error)
- }
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- for (;;) {
- if (likely(!__pyx_t_12)) {
- if (likely(PyList_CheckExact(__pyx_t_2))) {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 436, __pyx_L15_error)
- #endif
- if (__pyx_t_11 >= __pyx_temp) break;
- }
- __pyx_t_6 = __Pyx_PyList_GetItemRefFast(__pyx_t_2, __pyx_t_11, __Pyx_ReferenceSharing_OwnStrongReference);
- ++__pyx_t_11;
- } else {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 436, __pyx_L15_error)
- #endif
- if (__pyx_t_11 >= __pyx_temp) break;
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_6 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_11));
- #else
- __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_11);
- #endif
- ++__pyx_t_11;
- }
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 436, __pyx_L15_error)
- } else {
- __pyx_t_6 = __pyx_t_12(__pyx_t_2);
- if (unlikely(!__pyx_t_6)) {
- PyObject* exc_type = PyErr_Occurred();
- if (exc_type) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 436, __pyx_L15_error)
- PyErr_Clear();
- }
- break;
- }
- }
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_t, __pyx_t_6);
- __pyx_t_6 = 0;
- __pyx_t_6 = PyObject_RichCompare(__pyx_mstate_global->__pyx_int_0, __pyx_8genexpr1__pyx_v_t, Py_LE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 436, __pyx_L15_error)
- if (__Pyx_PyObject_IsTrue(__pyx_t_6)) {
- __Pyx_DECREF(__pyx_t_6);
- __pyx_t_6 = PyObject_RichCompare(__pyx_8genexpr1__pyx_v_t, __pyx_mstate_global->__pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 436, __pyx_L15_error)
- }
- __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 436, __pyx_L15_error)
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- if (__pyx_t_13) {
- if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_8genexpr1__pyx_v_t))) __PYX_ERR(0, 436, __pyx_L15_error)
- }
- }
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_t); __pyx_8genexpr1__pyx_v_t = 0;
- goto __pyx_L20_exit_scope;
- __pyx_L15_error:;
- __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_t); __pyx_8genexpr1__pyx_v_t = 0;
- goto __pyx_L1_error;
- __pyx_L20_exit_scope:;
- } /* exit inner scope */
- __pyx_v_xRoots = ((PyObject*)__pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":437
- * by2 = by * 2.0
- * xRoots = [t for t in solveQuadratic(ax3, bx2, cx) if 0 <= t < 1]
- * yRoots = [t for t in solveQuadratic(ay3, by2, cy) if 0 <= t < 1] # <<<<<<<<<<<<<<
- * roots = xRoots + yRoots
- *
- */
- { /* enter inner scope */
- __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L23_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_6 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_solveQuadratic); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 437, __pyx_L23_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_5))) {
- __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
- assert(__pyx_t_6);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_6, __pyx_v_ay3, __pyx_v_by2, __pyx_v_cy};
- __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 437, __pyx_L23_error)
- __Pyx_GOTREF(__pyx_t_2);
- }
- if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
- __pyx_t_5 = __pyx_t_2; __Pyx_INCREF(__pyx_t_5);
- __pyx_t_11 = 0;
- __pyx_t_12 = NULL;
- } else {
- __pyx_t_11 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 437, __pyx_L23_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_12 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 437, __pyx_L23_error)
- }
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- for (;;) {
- if (likely(!__pyx_t_12)) {
- if (likely(PyList_CheckExact(__pyx_t_5))) {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_5);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 437, __pyx_L23_error)
- #endif
- if (__pyx_t_11 >= __pyx_temp) break;
- }
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(__pyx_t_5, __pyx_t_11, __Pyx_ReferenceSharing_OwnStrongReference);
- ++__pyx_t_11;
- } else {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_5);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 437, __pyx_L23_error)
- #endif
- if (__pyx_t_11 >= __pyx_temp) break;
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_2 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_11));
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_5, __pyx_t_11);
- #endif
- ++__pyx_t_11;
- }
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 437, __pyx_L23_error)
- } else {
- __pyx_t_2 = __pyx_t_12(__pyx_t_5);
- if (unlikely(!__pyx_t_2)) {
- PyObject* exc_type = PyErr_Occurred();
- if (exc_type) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 437, __pyx_L23_error)
- PyErr_Clear();
- }
- break;
- }
- }
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_t, __pyx_t_2);
- __pyx_t_2 = 0;
- __pyx_t_2 = PyObject_RichCompare(__pyx_mstate_global->__pyx_int_0, __pyx_8genexpr2__pyx_v_t, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 437, __pyx_L23_error)
- if (__Pyx_PyObject_IsTrue(__pyx_t_2)) {
- __Pyx_DECREF(__pyx_t_2);
- __pyx_t_2 = PyObject_RichCompare(__pyx_8genexpr2__pyx_v_t, __pyx_mstate_global->__pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 437, __pyx_L23_error)
- }
- __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 437, __pyx_L23_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (__pyx_t_13) {
- if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_8genexpr2__pyx_v_t))) __PYX_ERR(0, 437, __pyx_L23_error)
- }
- }
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_t); __pyx_8genexpr2__pyx_v_t = 0;
- goto __pyx_L28_exit_scope;
- __pyx_L23_error:;
- __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_t); __pyx_8genexpr2__pyx_v_t = 0;
- goto __pyx_L1_error;
- __pyx_L28_exit_scope:;
- } /* exit inner scope */
- __pyx_v_yRoots = ((PyObject*)__pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":438
- * xRoots = [t for t in solveQuadratic(ax3, bx2, cx) if 0 <= t < 1]
- * yRoots = [t for t in solveQuadratic(ay3, by2, cy) if 0 <= t < 1]
- * roots = xRoots + yRoots # <<<<<<<<<<<<<<
- *
- * points = [
- */
- __pyx_t_1 = PyNumber_Add(__pyx_v_xRoots, __pyx_v_yRoots); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 438, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_roots = ((PyObject*)__pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":446
- * )
- * for t in roots
- * ] + [pt1, pt4] # <<<<<<<<<<<<<<
- * return calcBounds(points)
- *
- */
- { /* enter inner scope */
- /* "fontTools/misc/bezierTools.py":440
- * roots = xRoots + yRoots
- *
- * points = [ # <<<<<<<<<<<<<<
- * (
- * ax * t * t * t + bx * t * t + cx * t + dx,
- */
- __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 440, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_1);
- /* "fontTools/misc/bezierTools.py":445
- * ay * t * t * t + by * t * t + cy * t + dy,
- * )
- * for t in roots # <<<<<<<<<<<<<<
- * ] + [pt1, pt4]
- * return calcBounds(points)
- */
- __pyx_t_5 = __pyx_v_roots; __Pyx_INCREF(__pyx_t_5);
- __pyx_t_11 = 0;
- for (;;) {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_5);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 445, __pyx_L31_error)
- #endif
- if (__pyx_t_11 >= __pyx_temp) break;
- }
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(__pyx_t_5, __pyx_t_11, __Pyx_ReferenceSharing_OwnStrongReference);
- ++__pyx_t_11;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 445, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_XDECREF_SET(__pyx_8genexpr3__pyx_v_t, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":442
- * points = [
- * (
- * ax * t * t * t + bx * t * t + cx * t + dx, # <<<<<<<<<<<<<<
- * ay * t * t * t + by * t * t + cy * t + dy,
- * )
- */
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_ax, __pyx_8genexpr3__pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 442, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_6 = PyNumber_Multiply(__pyx_t_2, __pyx_8genexpr3__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 442, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_6, __pyx_8genexpr3__pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 442, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = PyNumber_Multiply(__pyx_v_bx, __pyx_8genexpr3__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 442, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_3 = PyNumber_Multiply(__pyx_t_6, __pyx_8genexpr3__pyx_v_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 442, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 442, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = PyNumber_Multiply(__pyx_v_cx, __pyx_8genexpr3__pyx_v_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 442, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 442, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_dx); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 442, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":443
- * (
- * ax * t * t * t + bx * t * t + cx * t + dx,
- * ay * t * t * t + by * t * t + cy * t + dy, # <<<<<<<<<<<<<<
- * )
- * for t in roots
- */
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_ay, __pyx_8genexpr3__pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 443, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_6 = PyNumber_Multiply(__pyx_t_2, __pyx_8genexpr3__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 443, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_6, __pyx_8genexpr3__pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 443, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = PyNumber_Multiply(__pyx_v_by, __pyx_8genexpr3__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 443, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_7 = PyNumber_Multiply(__pyx_t_6, __pyx_8genexpr3__pyx_v_t); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 443, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = PyNumber_Add(__pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 443, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __pyx_t_7 = PyNumber_Multiply(__pyx_v_cy, __pyx_8genexpr3__pyx_v_t); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 443, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_7);
- __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 443, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __pyx_t_7 = PyNumber_Add(__pyx_t_2, __pyx_v_dy); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 443, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":442
- * points = [
- * (
- * ax * t * t * t + bx * t * t + cx * t + dx, # <<<<<<<<<<<<<<
- * ay * t * t * t + by * t * t + cy * t + dy,
- * )
- */
- __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 442, __pyx_L31_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3) != (0)) __PYX_ERR(0, 442, __pyx_L31_error);
- __Pyx_GIVEREF(__pyx_t_7);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7) != (0)) __PYX_ERR(0, 442, __pyx_L31_error);
- __pyx_t_3 = 0;
- __pyx_t_7 = 0;
- if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 440, __pyx_L31_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":445
- * ay * t * t * t + by * t * t + cy * t + dy,
- * )
- * for t in roots # <<<<<<<<<<<<<<
- * ] + [pt1, pt4]
- * return calcBounds(points)
- */
- }
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_t); __pyx_8genexpr3__pyx_v_t = 0;
- goto __pyx_L35_exit_scope;
- __pyx_L31_error:;
- __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_t); __pyx_8genexpr3__pyx_v_t = 0;
- goto __pyx_L1_error;
- __pyx_L35_exit_scope:;
- } /* exit inner scope */
- /* "fontTools/misc/bezierTools.py":446
- * )
- * for t in roots
- * ] + [pt1, pt4] # <<<<<<<<<<<<<<
- * return calcBounds(points)
- *
- */
- __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 446, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_INCREF(__pyx_v_pt1);
- __Pyx_GIVEREF(__pyx_v_pt1);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_pt1) != (0)) __PYX_ERR(0, 446, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_pt4);
- __Pyx_GIVEREF(__pyx_v_pt4);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_5, 1, __pyx_v_pt4) != (0)) __PYX_ERR(0, 446, __pyx_L1_error);
- __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 446, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_v_points = ((PyObject*)__pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":447
- * for t in roots
- * ] + [pt1, pt4]
- * return calcBounds(points) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_5 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_calcBounds); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 447, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_1))) {
- __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
- assert(__pyx_t_5);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
- __Pyx_INCREF(__pyx_t_5);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_points};
- __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 447, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- }
- __pyx_r = __pyx_t_2;
- __pyx_t_2 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":412
- *
- *
- * def calcCubicBounds(pt1, pt2, pt3, pt4): # <<<<<<<<<<<<<<
- * """Calculates the bounding rectangle for a quadratic Bezier segment.
- *
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_XDECREF(__pyx_t_6);
- __Pyx_XDECREF(__pyx_t_7);
- __Pyx_XDECREF(__pyx_t_9);
- __Pyx_XDECREF(__pyx_t_10);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcCubicBounds", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_ax);
- __Pyx_XDECREF(__pyx_v_ay);
- __Pyx_XDECREF(__pyx_v_bx);
- __Pyx_XDECREF(__pyx_v_by);
- __Pyx_XDECREF(__pyx_v_cx);
- __Pyx_XDECREF(__pyx_v_cy);
- __Pyx_XDECREF(__pyx_v_dx);
- __Pyx_XDECREF(__pyx_v_dy);
- __Pyx_XDECREF(__pyx_v_ax3);
- __Pyx_XDECREF(__pyx_v_ay3);
- __Pyx_XDECREF(__pyx_v_bx2);
- __Pyx_XDECREF(__pyx_v_by2);
- __Pyx_XDECREF(__pyx_v_xRoots);
- __Pyx_XDECREF(__pyx_v_yRoots);
- __Pyx_XDECREF(__pyx_v_roots);
- __Pyx_XDECREF(__pyx_v_points);
- __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_t);
- __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_t);
- __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_t);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":450
- *
- *
- * def splitLine(pt1, pt2, where, isHorizontal): # <<<<<<<<<<<<<<
- * """Split a line at a given coordinate.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_25splitLine(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_24splitLine, "splitLine(pt1, pt2, where, isHorizontal)\n\nSplit a line at a given coordinate.\n\nArgs:\n pt1: Start point of line as 2D tuple.\n pt2: End point of line as 2D tuple.\n where: Position at which to split the line.\n isHorizontal: Direction of the ray splitting the line. If true,\n ``where`` is interpreted as a Y coordinate; if false, then\n ``where`` is interpreted as an X coordinate.\n\nReturns:\n A list of two line segments (each line segment being two 2D tuples)\n if the line was successfully split, or a list containing the original\n line.\n\nExample::\n\n >>> printSegments(splitLine((0, 0), (100, 100), 50, True))\n ((0, 0), (50, 50))\n ((50, 50), (100, 100))\n >>> printSegments(splitLine((0, 0), (100, 100), 100, True))\n ((0, 0), (100, 100))\n >>> printSegments(splitLine((0, 0), (100, 100), 0, True))\n ((0, 0), (0, 0))\n ((0, 0), (100, 100))\n >>> printSegments(splitLine((0, 0), (100, 100), 0, False))\n ((0, 0), (0, 0))\n ((0, 0), (100, 100))\n >>> printSegments(splitLine((100, 0), (0, 0), 50, False))\n ((100, 0), (50, 0))\n ((50, 0), (0, 0))\n >>> printSegments(splitLine((0, 100), (0, 0), 50, True))\n ((0, 100), (0, 50))\n ((0, 50), (0, 0))");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_25splitLine = {"splitLine", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_25splitLine, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_24splitLine};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_25splitLine(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_where = 0;
- PyObject *__pyx_v_isHorizontal = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[4] = {0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("splitLine (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_where,&__pyx_mstate_global->__pyx_n_u_isHorizontal,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 450, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 450, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 450, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 450, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 450, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "splitLine", 0) < (0)) __PYX_ERR(0, 450, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("splitLine", 1, 4, 4, i); __PYX_ERR(0, 450, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 4)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 450, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 450, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 450, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 450, __pyx_L3_error)
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_where = values[2];
- __pyx_v_isHorizontal = values[3];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("splitLine", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 450, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.splitLine", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_24splitLine(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_where, __pyx_v_isHorizontal);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_24splitLine(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_where, PyObject *__pyx_v_isHorizontal) {
- PyObject *__pyx_v_pt1x = NULL;
- PyObject *__pyx_v_pt1y = NULL;
- PyObject *__pyx_v_pt2x = NULL;
- PyObject *__pyx_v_pt2y = NULL;
- PyObject *__pyx_v_ax = NULL;
- PyObject *__pyx_v_ay = NULL;
- PyObject *__pyx_v_bx = NULL;
- PyObject *__pyx_v_by = NULL;
- PyObject *__pyx_v_a = NULL;
- PyObject *__pyx_v_t = NULL;
- PyObject *__pyx_v_midPt = 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)(PyObject *);
- int __pyx_t_5;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("splitLine", 0);
- /* "fontTools/misc/bezierTools.py":486
- * ((0, 50), (0, 0))
- * """
- * pt1x, pt1y = pt1 # <<<<<<<<<<<<<<
- * pt2x, pt2y = pt2
- *
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_pt1))) || (PyList_CheckExact(__pyx_v_pt1))) {
- PyObject* sequence = __pyx_v_pt1;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 486, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 486, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 486, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 486, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 486, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_pt1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 486, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 486, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L4_unpacking_done;
- __pyx_L3_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 486, __pyx_L1_error)
- __pyx_L4_unpacking_done:;
- }
- __pyx_v_pt1x = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_pt1y = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":487
- * """
- * pt1x, pt1y = pt1
- * pt2x, pt2y = pt2 # <<<<<<<<<<<<<<
- *
- * ax = pt2x - pt1x
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_pt2))) || (PyList_CheckExact(__pyx_v_pt2))) {
- PyObject* sequence = __pyx_v_pt2;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 487, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 487, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 487, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 487, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 487, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_pt2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 487, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- index = 1; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 487, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L6_unpacking_done;
- __pyx_L5_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 487, __pyx_L1_error)
- __pyx_L6_unpacking_done:;
- }
- __pyx_v_pt2x = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_pt2y = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":489
- * pt2x, pt2y = pt2
- *
- * ax = pt2x - pt1x # <<<<<<<<<<<<<<
- * ay = pt2y - pt1y
- *
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_pt2x, __pyx_v_pt1x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 489, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_ax = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":490
- *
- * ax = pt2x - pt1x
- * ay = pt2y - pt1y # <<<<<<<<<<<<<<
- *
- * bx = pt1x
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_pt2y, __pyx_v_pt1y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 490, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_ay = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":492
- * ay = pt2y - pt1y
- *
- * bx = pt1x # <<<<<<<<<<<<<<
- * by = pt1y
- *
- */
- __Pyx_INCREF(__pyx_v_pt1x);
- __pyx_v_bx = __pyx_v_pt1x;
- /* "fontTools/misc/bezierTools.py":493
- *
- * bx = pt1x
- * by = pt1y # <<<<<<<<<<<<<<
- *
- * a = (ax, ay)[isHorizontal]
- */
- __Pyx_INCREF(__pyx_v_pt1y);
- __pyx_v_by = __pyx_v_pt1y;
- /* "fontTools/misc/bezierTools.py":495
- * by = pt1y
- *
- * a = (ax, ay)[isHorizontal] # <<<<<<<<<<<<<<
- *
- * if a == 0:
- */
- __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 495, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_INCREF(__pyx_v_ax);
- __Pyx_GIVEREF(__pyx_v_ax);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_ax) != (0)) __PYX_ERR(0, 495, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_ay);
- __Pyx_GIVEREF(__pyx_v_ay);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_ay) != (0)) __PYX_ERR(0, 495, __pyx_L1_error);
- __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_isHorizontal); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 495, __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;
- /* "fontTools/misc/bezierTools.py":497
- * a = (ax, ay)[isHorizontal]
- *
- * if a == 0: # <<<<<<<<<<<<<<
- * return [(pt1, pt2)]
- * t = (where - (bx, by)[isHorizontal]) / a
- */
- __pyx_t_5 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_a, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 497, __pyx_L1_error)
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":498
- *
- * if a == 0:
- * return [(pt1, pt2)] # <<<<<<<<<<<<<<
- * t = (where - (bx, by)[isHorizontal]) / a
- * if 0 <= t < 1:
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 498, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_INCREF(__pyx_v_pt1);
- __Pyx_GIVEREF(__pyx_v_pt1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_pt1) != (0)) __PYX_ERR(0, 498, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_pt2);
- __Pyx_GIVEREF(__pyx_v_pt2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_pt2) != (0)) __PYX_ERR(0, 498, __pyx_L1_error);
- __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 498, __pyx_L1_error);
- __pyx_t_2 = 0;
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":497
- * a = (ax, ay)[isHorizontal]
- *
- * if a == 0: # <<<<<<<<<<<<<<
- * return [(pt1, pt2)]
- * t = (where - (bx, by)[isHorizontal]) / a
- */
- }
- /* "fontTools/misc/bezierTools.py":499
- * if a == 0:
- * return [(pt1, pt2)]
- * t = (where - (bx, by)[isHorizontal]) / a # <<<<<<<<<<<<<<
- * if 0 <= t < 1:
- * midPt = ax * t + bx, ay * t + by
- */
- __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 499, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_INCREF(__pyx_v_bx);
- __Pyx_GIVEREF(__pyx_v_bx);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_bx) != (0)) __PYX_ERR(0, 499, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_by);
- __Pyx_GIVEREF(__pyx_v_by);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_by) != (0)) __PYX_ERR(0, 499, __pyx_L1_error);
- __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_isHorizontal); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 499, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_where, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 499, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_v_a); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 499, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_v_t = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":500
- * return [(pt1, pt2)]
- * t = (where - (bx, by)[isHorizontal]) / a
- * if 0 <= t < 1: # <<<<<<<<<<<<<<
- * midPt = ax * t + bx, ay * t + by
- * return [(pt1, midPt), (midPt, pt2)]
- */
- __pyx_t_2 = PyObject_RichCompare(__pyx_mstate_global->__pyx_int_0, __pyx_v_t, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 500, __pyx_L1_error)
- if (__Pyx_PyObject_IsTrue(__pyx_t_2)) {
- __Pyx_DECREF(__pyx_t_2);
- __pyx_t_2 = PyObject_RichCompare(__pyx_v_t, __pyx_mstate_global->__pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 500, __pyx_L1_error)
- }
- __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 500, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":501
- * t = (where - (bx, by)[isHorizontal]) / a
- * if 0 <= t < 1:
- * midPt = ax * t + bx, ay * t + by # <<<<<<<<<<<<<<
- * return [(pt1, midPt), (midPt, pt2)]
- * else:
- */
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_ax, __pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 501, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_v_bx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 501, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_ay, __pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 501, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_by); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 501, __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_ERR(0, 501, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 501, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 501, __pyx_L1_error);
- __pyx_t_1 = 0;
- __pyx_t_3 = 0;
- __pyx_v_midPt = ((PyObject*)__pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":502
- * if 0 <= t < 1:
- * midPt = ax * t + bx, ay * t + by
- * return [(pt1, midPt), (midPt, pt2)] # <<<<<<<<<<<<<<
- * else:
- * return [(pt1, pt2)]
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 502, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_INCREF(__pyx_v_pt1);
- __Pyx_GIVEREF(__pyx_v_pt1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_pt1) != (0)) __PYX_ERR(0, 502, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_midPt);
- __Pyx_GIVEREF(__pyx_v_midPt);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_midPt) != (0)) __PYX_ERR(0, 502, __pyx_L1_error);
- __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 502, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_INCREF(__pyx_v_midPt);
- __Pyx_GIVEREF(__pyx_v_midPt);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_midPt) != (0)) __PYX_ERR(0, 502, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_pt2);
- __Pyx_GIVEREF(__pyx_v_pt2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_pt2) != (0)) __PYX_ERR(0, 502, __pyx_L1_error);
- __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 502, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 502, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 502, __pyx_L1_error);
- __pyx_t_2 = 0;
- __pyx_t_3 = 0;
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":500
- * return [(pt1, pt2)]
- * t = (where - (bx, by)[isHorizontal]) / a
- * if 0 <= t < 1: # <<<<<<<<<<<<<<
- * midPt = ax * t + bx, ay * t + by
- * return [(pt1, midPt), (midPt, pt2)]
- */
- }
- /* "fontTools/misc/bezierTools.py":504
- * return [(pt1, midPt), (midPt, pt2)]
- * else:
- * return [(pt1, pt2)] # <<<<<<<<<<<<<<
- *
- *
- */
- /*else*/ {
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 504, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_INCREF(__pyx_v_pt1);
- __Pyx_GIVEREF(__pyx_v_pt1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_pt1) != (0)) __PYX_ERR(0, 504, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_pt2);
- __Pyx_GIVEREF(__pyx_v_pt2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_pt2) != (0)) __PYX_ERR(0, 504, __pyx_L1_error);
- __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 504, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 504, __pyx_L1_error);
- __pyx_t_1 = 0;
- __pyx_r = __pyx_t_3;
- __pyx_t_3 = 0;
- goto __pyx_L0;
- }
- /* "fontTools/misc/bezierTools.py":450
- *
- *
- * def splitLine(pt1, pt2, where, isHorizontal): # <<<<<<<<<<<<<<
- * """Split a line at a given coordinate.
- *
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.splitLine", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_pt1x);
- __Pyx_XDECREF(__pyx_v_pt1y);
- __Pyx_XDECREF(__pyx_v_pt2x);
- __Pyx_XDECREF(__pyx_v_pt2y);
- __Pyx_XDECREF(__pyx_v_ax);
- __Pyx_XDECREF(__pyx_v_ay);
- __Pyx_XDECREF(__pyx_v_bx);
- __Pyx_XDECREF(__pyx_v_by);
- __Pyx_XDECREF(__pyx_v_a);
- __Pyx_XDECREF(__pyx_v_t);
- __Pyx_XDECREF(__pyx_v_midPt);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":507
- *
- *
- * def splitQuadratic(pt1, pt2, pt3, where, isHorizontal): # <<<<<<<<<<<<<<
- * """Split a quadratic Bezier curve at a given coordinate.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_27splitQuadratic(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_26splitQuadratic, "splitQuadratic(pt1, pt2, pt3, where, isHorizontal)\n\nSplit a quadratic Bezier curve at a given coordinate.\n\nArgs:\n pt1,pt2,pt3: Control points of the Bezier as 2D tuples.\n where: Position at which to split the curve.\n isHorizontal: Direction of the ray splitting the curve. If true,\n ``where`` is interpreted as a Y coordinate; if false, then\n ``where`` is interpreted as an X coordinate.\n\nReturns:\n A list of two curve segments (each curve segment being three 2D tuples)\n if the curve was successfully split, or a list containing the original\n curve.\n\nExample::\n\n >>> printSegments(splitQuadratic((0, 0), (50, 100), (100, 0), 150, False))\n ((0, 0), (50, 100), (100, 0))\n >>> printSegments(splitQuadratic((0, 0), (50, 100), (100, 0), 50, False))\n ((0, 0), (25, 50), (50, 50))\n ((50, 50), (75, 50), (100, 0))\n >>> printSegments(splitQuadratic((0, 0), (50, 100), (100, 0), 25, False))\n ((0, 0), (12.5, 25), (25, 37.5))\n ((25, 37.5), (62.5, 75), (100, 0))\n >>> printSegments(splitQuadratic((0, 0), (50, 100), (100, 0), 25, True))\n ((0, 0), (7.32233, 14.6447), (14.6447, 25))\n ((14.6447, 25), (50, 75), (85.3553, 25))\n ((85.3553, 25), (92.6777, 14.6447), (100, -7.10543e-15))\n >>> # XXX I'm not at all sure if the following behavior is desirable:\n >>> printSegments(splitQuadratic((0, 0), (50, 100), (100, 0), 50, True))\n ((0, 0), (25, 50), (50, 50))\n ((50, 50), (50, 50), (50, 50))\n ((50, 50), (75, 50), (100, 0))");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_27splitQuadratic = {"splitQuadratic", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_27splitQuadratic, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_26splitQuadratic};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_27splitQuadratic(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_pt3 = 0;
- PyObject *__pyx_v_where = 0;
- PyObject *__pyx_v_isHorizontal = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[5] = {0,0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("splitQuadratic (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,&__pyx_mstate_global->__pyx_n_u_where,&__pyx_mstate_global->__pyx_n_u_isHorizontal,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 507, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 5:
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 507, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 507, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 507, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 507, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 507, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "splitQuadratic", 0) < (0)) __PYX_ERR(0, 507, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("splitQuadratic", 1, 5, 5, i); __PYX_ERR(0, 507, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 5)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 507, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 507, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 507, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 507, __pyx_L3_error)
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 507, __pyx_L3_error)
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_pt3 = values[2];
- __pyx_v_where = values[3];
- __pyx_v_isHorizontal = values[4];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("splitQuadratic", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 507, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.splitQuadratic", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_26splitQuadratic(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_where, __pyx_v_isHorizontal);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_14splitQuadratic_2generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
- /* "fontTools/misc/bezierTools.py":546
- * a[isHorizontal], b[isHorizontal], c[isHorizontal] - where
- * )
- * solutions = sorted(t for t in solutions if 0 <= t < 1) # <<<<<<<<<<<<<<
- * if not solutions:
- * return [(pt1, pt2, pt3)]
- */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_14splitQuadratic_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr *__pyx_cur_scope;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("genexpr", 0);
- __pyx_cur_scope = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr(__pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
- if (unlikely(!__pyx_cur_scope)) {
- __pyx_cur_scope = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr *)Py_None);
- __Pyx_INCREF(Py_None);
- __PYX_ERR(0, 546, __pyx_L1_error)
- } else {
- __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
- }
- __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
- __Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
- __Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
- {
- __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_9fontTools_4misc_11bezierTools_14splitQuadratic_2generator2, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[0]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_splitQuadratic_locals_genexpr, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools); if (unlikely(!gen)) __PYX_ERR(0, 546, __pyx_L1_error)
- __Pyx_DECREF(__pyx_cur_scope);
- __Pyx_RefNannyFinishContext();
- return (PyObject *) gen;
- }
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_AddTraceback("fontTools.misc.bezierTools.splitQuadratic.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __Pyx_DECREF((PyObject *)__pyx_cur_scope);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_14splitQuadratic_2generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
- {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr *__pyx_cur_scope = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr *)__pyx_generator->closure);
- PyObject *__pyx_r = NULL;
- PyObject *__pyx_t_1 = NULL;
- Py_ssize_t __pyx_t_2;
- PyObject *(*__pyx_t_3)(PyObject *);
- PyObject *__pyx_t_4 = NULL;
- int __pyx_t_5;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("genexpr", 0);
- switch (__pyx_generator->resume_label) {
- case 0: goto __pyx_L3_first_run;
- default: /* CPython raises the right error here */
- __Pyx_RefNannyFinishContext();
- return NULL;
- }
- __pyx_L3_first_run:;
- if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 546, __pyx_L1_error)
- __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 546, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_r);
- if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 546, __pyx_L1_error) }
- if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) {
- __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = 0;
- __pyx_t_3 = NULL;
- } else {
- __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_genexpr_arg_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 546, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 546, __pyx_L1_error)
- }
- for (;;) {
- if (likely(!__pyx_t_3)) {
- if (likely(PyList_CheckExact(__pyx_t_1))) {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 546, __pyx_L1_error)
- #endif
- if (__pyx_t_2 >= __pyx_temp) break;
- }
- __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
- ++__pyx_t_2;
- } else {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 546, __pyx_L1_error)
- #endif
- if (__pyx_t_2 >= __pyx_temp) break;
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
- #else
- __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
- #endif
- ++__pyx_t_2;
- }
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 546, __pyx_L1_error)
- } else {
- __pyx_t_4 = __pyx_t_3(__pyx_t_1);
- if (unlikely(!__pyx_t_4)) {
- PyObject* exc_type = PyErr_Occurred();
- if (exc_type) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 546, __pyx_L1_error)
- PyErr_Clear();
- }
- break;
- }
- }
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_t);
- __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_t, __pyx_t_4);
- __Pyx_GIVEREF(__pyx_t_4);
- __pyx_t_4 = 0;
- __pyx_t_4 = PyObject_RichCompare(__pyx_mstate_global->__pyx_int_0, __pyx_cur_scope->__pyx_v_t, Py_LE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 546, __pyx_L1_error)
- if (__Pyx_PyObject_IsTrue(__pyx_t_4)) {
- __Pyx_DECREF(__pyx_t_4);
- __pyx_t_4 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_t, __pyx_mstate_global->__pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 546, __pyx_L1_error)
- }
- __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 546, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- if (__pyx_t_5) {
- if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_cur_scope->__pyx_v_t))) __PYX_ERR(0, 546, __pyx_L1_error)
- }
- }
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
- /* function exit code */
- goto __pyx_L0;
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_4);
- if (__Pyx_PyErr_Occurred()) {
- __Pyx_Generator_Replace_StopIteration(0);
- __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
- }
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- #if !CYTHON_USE_EXC_INFO_STACK
- __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
- #endif
- __pyx_generator->resume_label = -1;
- __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":507
- *
- *
- * def splitQuadratic(pt1, pt2, pt3, where, isHorizontal): # <<<<<<<<<<<<<<
- * """Split a quadratic Bezier curve at a given coordinate.
- *
- */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_26splitQuadratic(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_where, PyObject *__pyx_v_isHorizontal) {
- PyObject *__pyx_v_a = NULL;
- PyObject *__pyx_v_b = NULL;
- PyObject *__pyx_v_c = NULL;
- PyObject *__pyx_v_solutions = NULL;
- PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_14splitQuadratic_2generator2 = 0;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- PyObject *__pyx_t_1 = NULL;
- PyObject *__pyx_t_2 = NULL;
- PyObject *__pyx_t_3 = NULL;
- size_t __pyx_t_4;
- PyObject *__pyx_t_5 = NULL;
- PyObject *__pyx_t_6 = NULL;
- PyObject *(*__pyx_t_7)(PyObject *);
- PyObject *__pyx_t_8 = NULL;
- PyObject *__pyx_t_9 = NULL;
- int __pyx_t_10;
- int __pyx_t_11;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("splitQuadratic", 0);
- /* "fontTools/misc/bezierTools.py":542
- * ((50, 50), (75, 50), (100, 0))
- * """
- * a, b, c = calcQuadraticParameters(pt1, pt2, pt3) # <<<<<<<<<<<<<<
- * solutions = solveQuadratic(
- * a[isHorizontal], b[isHorizontal], c[isHorizontal] - where
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_calcQuadraticParameters); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 542, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __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;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 3)) {
- if (size > 3) __Pyx_RaiseTooManyValuesError(3);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 542, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_3);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2);
- __Pyx_INCREF(__pyx_t_5);
- } else {
- __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 542, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_3);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 542, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_5 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 542, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_5);
- }
- #else
- __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 542, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 542, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 542, __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_ERR(0, 542, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6);
- index = 0; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_3);
- index = 1; __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 = 2; __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), 3) < (0)) __PYX_ERR(0, 542, __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_ERR(0, 542, __pyx_L1_error)
- __pyx_L4_unpacking_done:;
- }
- __pyx_v_a = __pyx_t_3;
- __pyx_t_3 = 0;
- __pyx_v_b = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_c = __pyx_t_5;
- __pyx_t_5 = 0;
- /* "fontTools/misc/bezierTools.py":543
- * """
- * a, b, c = calcQuadraticParameters(pt1, pt2, pt3)
- * solutions = solveQuadratic( # <<<<<<<<<<<<<<
- * a[isHorizontal], b[isHorizontal], c[isHorizontal] - where
- * )
- */
- __pyx_t_5 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_solveQuadratic); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 543, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- /* "fontTools/misc/bezierTools.py":544
- * a, b, c = calcQuadraticParameters(pt1, pt2, pt3)
- * solutions = solveQuadratic(
- * a[isHorizontal], b[isHorizontal], c[isHorizontal] - where # <<<<<<<<<<<<<<
- * )
- * solutions = sorted(t for t in solutions if 0 <= t < 1)
- */
- __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_a, __pyx_v_isHorizontal); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 544, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_b, __pyx_v_isHorizontal); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 544, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_c, __pyx_v_isHorizontal); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 544, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_9 = PyNumber_Subtract(__pyx_t_8, __pyx_v_where); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 544, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_2))) {
- __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
- assert(__pyx_t_5);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
- __Pyx_INCREF(__pyx_t_5);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_6, __pyx_t_9};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 543, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_v_solutions = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":546
- * a[isHorizontal], b[isHorizontal], c[isHorizontal] - where
- * )
- * solutions = sorted(t for t in solutions if 0 <= t < 1) # <<<<<<<<<<<<<<
- * if not solutions:
- * return [(pt1, pt2, pt3)]
- */
- __pyx_t_1 = __pyx_pf_9fontTools_4misc_11bezierTools_14splitQuadratic_genexpr(NULL, __pyx_v_solutions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 546, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_Generator_GetInlinedResult(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 546, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely((PyList_Sort(__pyx_t_2) < 0))) __PYX_ERR(0, 546, __pyx_L1_error)
- __Pyx_DECREF_SET(__pyx_v_solutions, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":547
- * )
- * solutions = sorted(t for t in solutions if 0 <= t < 1)
- * if not solutions: # <<<<<<<<<<<<<<
- * return [(pt1, pt2, pt3)]
- * return _splitQuadraticAtT(a, b, c, *solutions)
- */
- __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_solutions); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 547, __pyx_L1_error)
- __pyx_t_11 = (!__pyx_t_10);
- if (__pyx_t_11) {
- /* "fontTools/misc/bezierTools.py":548
- * solutions = sorted(t for t in solutions if 0 <= t < 1)
- * if not solutions:
- * return [(pt1, pt2, pt3)] # <<<<<<<<<<<<<<
- * return _splitQuadraticAtT(a, b, c, *solutions)
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 548, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_INCREF(__pyx_v_pt1);
- __Pyx_GIVEREF(__pyx_v_pt1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_pt1) != (0)) __PYX_ERR(0, 548, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_pt2);
- __Pyx_GIVEREF(__pyx_v_pt2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_pt2) != (0)) __PYX_ERR(0, 548, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_pt3);
- __Pyx_GIVEREF(__pyx_v_pt3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_pt3) != (0)) __PYX_ERR(0, 548, __pyx_L1_error);
- __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 548, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 548, __pyx_L1_error);
- __pyx_t_2 = 0;
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":547
- * )
- * solutions = sorted(t for t in solutions if 0 <= t < 1)
- * if not solutions: # <<<<<<<<<<<<<<
- * return [(pt1, pt2, pt3)]
- * return _splitQuadraticAtT(a, b, c, *solutions)
- */
- }
- /* "fontTools/misc/bezierTools.py":549
- * if not solutions:
- * return [(pt1, pt2, pt3)]
- * return _splitQuadraticAtT(a, b, c, *solutions) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_splitQuadraticAtT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 549, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 549, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_INCREF(__pyx_v_a);
- __Pyx_GIVEREF(__pyx_v_a);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a) != (0)) __PYX_ERR(0, 549, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_b);
- __Pyx_GIVEREF(__pyx_v_b);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_b) != (0)) __PYX_ERR(0, 549, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_c);
- __Pyx_GIVEREF(__pyx_v_c);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_c) != (0)) __PYX_ERR(0, 549, __pyx_L1_error);
- __pyx_t_9 = __Pyx_PySequence_Tuple(__pyx_v_solutions); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 549, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __pyx_t_6 = PyNumber_Add(__pyx_t_2, __pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 549, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 549, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_r = __pyx_t_9;
- __pyx_t_9 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":507
- *
- *
- * def splitQuadratic(pt1, pt2, pt3, where, isHorizontal): # <<<<<<<<<<<<<<
- * """Split a quadratic Bezier curve at a given coordinate.
- *
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_XDECREF(__pyx_t_6);
- __Pyx_XDECREF(__pyx_t_8);
- __Pyx_XDECREF(__pyx_t_9);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.splitQuadratic", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_a);
- __Pyx_XDECREF(__pyx_v_b);
- __Pyx_XDECREF(__pyx_v_c);
- __Pyx_XDECREF(__pyx_v_solutions);
- __Pyx_XDECREF(__pyx_gb_9fontTools_4misc_11bezierTools_14splitQuadratic_2generator2);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":552
- *
- *
- * def splitCubic(pt1, pt2, pt3, pt4, where, isHorizontal): # <<<<<<<<<<<<<<
- * """Split a cubic Bezier curve at a given coordinate.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_29splitCubic(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_28splitCubic, "splitCubic(pt1, pt2, pt3, pt4, where, isHorizontal)\n\nSplit a cubic Bezier curve at a given coordinate.\n\nArgs:\n pt1,pt2,pt3,pt4: Control points of the Bezier as 2D tuples.\n where: Position at which to split the curve.\n isHorizontal: Direction of the ray splitting the curve. If true,\n ``where`` is interpreted as a Y coordinate; if false, then\n ``where`` is interpreted as an X coordinate.\n\nReturns:\n A list of two curve segments (each curve segment being four 2D tuples)\n if the curve was successfully split, or a list containing the original\n curve.\n\nExample::\n\n >>> printSegments(splitCubic((0, 0), (25, 100), (75, 100), (100, 0), 150, False))\n ((0, 0), (25, 100), (75, 100), (100, 0))\n >>> printSegments(splitCubic((0, 0), (25, 100), (75, 100), (100, 0), 50, False))\n ((0, 0), (12.5, 50), (31.25, 75), (50, 75))\n ((50, 75), (68.75, 75), (87.5, 50), (100, 0))\n >>> printSegments(splitCubic((0, 0), (25, 100), (75, 100), (100, 0), 25, True))\n ((0, 0), (2.29379, 9.17517), (4.79804, 17.5085), (7.47414, 25))\n ((7.47414, 25), (31.2886, 91.6667), (68.7114, 91.6667), (92.5259, 25))\n ((92.5259, 25), (95.202, 17.5085), (97.7062, 9.17517), (100, 1.77636e-15))");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_29splitCubic = {"splitCubic", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_29splitCubic, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_28splitCubic};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_29splitCubic(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_pt3 = 0;
- PyObject *__pyx_v_pt4 = 0;
- PyObject *__pyx_v_where = 0;
- PyObject *__pyx_v_isHorizontal = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[6] = {0,0,0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("splitCubic (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,&__pyx_mstate_global->__pyx_n_u_pt4,&__pyx_mstate_global->__pyx_n_u_where,&__pyx_mstate_global->__pyx_n_u_isHorizontal,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 552, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 6:
- values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 552, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 5:
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 552, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 552, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 552, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 552, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 552, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "splitCubic", 0) < (0)) __PYX_ERR(0, 552, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 6; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("splitCubic", 1, 6, 6, i); __PYX_ERR(0, 552, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 6)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 552, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 552, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 552, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 552, __pyx_L3_error)
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 552, __pyx_L3_error)
- values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 552, __pyx_L3_error)
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_pt3 = values[2];
- __pyx_v_pt4 = values[3];
- __pyx_v_where = values[4];
- __pyx_v_isHorizontal = values[5];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("splitCubic", 1, 6, 6, __pyx_nargs); __PYX_ERR(0, 552, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.splitCubic", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_28splitCubic(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_pt4, __pyx_v_where, __pyx_v_isHorizontal);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_10splitCubic_2generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
- /* "fontTools/misc/bezierTools.py":583
- * a[isHorizontal], b[isHorizontal], c[isHorizontal], d[isHorizontal] - where
- * )
- * solutions = sorted(t for t in solutions if 0 <= t < 1) # <<<<<<<<<<<<<<
- * if not solutions:
- * return [(pt1, pt2, pt3, pt4)]
- */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_10splitCubic_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr *__pyx_cur_scope;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("genexpr", 0);
- __pyx_cur_scope = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr(__pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
- if (unlikely(!__pyx_cur_scope)) {
- __pyx_cur_scope = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr *)Py_None);
- __Pyx_INCREF(Py_None);
- __PYX_ERR(0, 583, __pyx_L1_error)
- } else {
- __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
- }
- __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
- __Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
- __Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
- {
- __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_9fontTools_4misc_11bezierTools_10splitCubic_2generator3, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[1]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_splitCubic_locals_genexpr, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools); if (unlikely(!gen)) __PYX_ERR(0, 583, __pyx_L1_error)
- __Pyx_DECREF(__pyx_cur_scope);
- __Pyx_RefNannyFinishContext();
- return (PyObject *) gen;
- }
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_AddTraceback("fontTools.misc.bezierTools.splitCubic.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __Pyx_DECREF((PyObject *)__pyx_cur_scope);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_10splitCubic_2generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
- {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr *__pyx_cur_scope = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr *)__pyx_generator->closure);
- PyObject *__pyx_r = NULL;
- PyObject *__pyx_t_1 = NULL;
- Py_ssize_t __pyx_t_2;
- PyObject *(*__pyx_t_3)(PyObject *);
- PyObject *__pyx_t_4 = NULL;
- int __pyx_t_5;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("genexpr", 0);
- switch (__pyx_generator->resume_label) {
- case 0: goto __pyx_L3_first_run;
- default: /* CPython raises the right error here */
- __Pyx_RefNannyFinishContext();
- return NULL;
- }
- __pyx_L3_first_run:;
- if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 583, __pyx_L1_error)
- __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 583, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_r);
- if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 583, __pyx_L1_error) }
- if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) {
- __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = 0;
- __pyx_t_3 = NULL;
- } else {
- __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_genexpr_arg_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 583, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 583, __pyx_L1_error)
- }
- for (;;) {
- if (likely(!__pyx_t_3)) {
- if (likely(PyList_CheckExact(__pyx_t_1))) {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 583, __pyx_L1_error)
- #endif
- if (__pyx_t_2 >= __pyx_temp) break;
- }
- __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
- ++__pyx_t_2;
- } else {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 583, __pyx_L1_error)
- #endif
- if (__pyx_t_2 >= __pyx_temp) break;
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
- #else
- __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
- #endif
- ++__pyx_t_2;
- }
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 583, __pyx_L1_error)
- } else {
- __pyx_t_4 = __pyx_t_3(__pyx_t_1);
- if (unlikely(!__pyx_t_4)) {
- PyObject* exc_type = PyErr_Occurred();
- if (exc_type) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 583, __pyx_L1_error)
- PyErr_Clear();
- }
- break;
- }
- }
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_t);
- __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_t, __pyx_t_4);
- __Pyx_GIVEREF(__pyx_t_4);
- __pyx_t_4 = 0;
- __pyx_t_4 = PyObject_RichCompare(__pyx_mstate_global->__pyx_int_0, __pyx_cur_scope->__pyx_v_t, Py_LE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 583, __pyx_L1_error)
- if (__Pyx_PyObject_IsTrue(__pyx_t_4)) {
- __Pyx_DECREF(__pyx_t_4);
- __pyx_t_4 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_t, __pyx_mstate_global->__pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 583, __pyx_L1_error)
- }
- __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 583, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- if (__pyx_t_5) {
- if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_cur_scope->__pyx_v_t))) __PYX_ERR(0, 583, __pyx_L1_error)
- }
- }
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
- /* function exit code */
- goto __pyx_L0;
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_4);
- if (__Pyx_PyErr_Occurred()) {
- __Pyx_Generator_Replace_StopIteration(0);
- __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
- }
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- #if !CYTHON_USE_EXC_INFO_STACK
- __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
- #endif
- __pyx_generator->resume_label = -1;
- __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":552
- *
- *
- * def splitCubic(pt1, pt2, pt3, pt4, where, isHorizontal): # <<<<<<<<<<<<<<
- * """Split a cubic Bezier curve at a given coordinate.
- *
- */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_28splitCubic(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_pt4, PyObject *__pyx_v_where, PyObject *__pyx_v_isHorizontal) {
- PyObject *__pyx_v_a = NULL;
- PyObject *__pyx_v_b = NULL;
- PyObject *__pyx_v_c = NULL;
- PyObject *__pyx_v_d = NULL;
- PyObject *__pyx_v_solutions = NULL;
- PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_10splitCubic_2generator3 = 0;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- PyObject *__pyx_t_1 = NULL;
- PyObject *__pyx_t_2 = NULL;
- PyObject *__pyx_t_3 = NULL;
- size_t __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;
- int __pyx_t_11;
- int __pyx_t_12;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("splitCubic", 0);
- /* "fontTools/misc/bezierTools.py":579
- * ((92.5259, 25), (95.202, 17.5085), (97.7062, 9.17517), (100, 1.77636e-15))
- * """
- * a, b, c, d = calcCubicParameters(pt1, pt2, pt3, pt4) # <<<<<<<<<<<<<<
- * solutions = solveCubic(
- * a[isHorizontal], b[isHorizontal], c[isHorizontal], d[isHorizontal] - where
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_calcCubicParameters); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 579, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_pt4};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (5-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 579, __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;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 4)) {
- if (size > 4) __Pyx_RaiseTooManyValuesError(4);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 579, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_3);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2);
- __Pyx_INCREF(__pyx_t_5);
- __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3);
- __Pyx_INCREF(__pyx_t_6);
- } else {
- __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 579, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_3);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 579, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_5 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 579, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_5);
- __pyx_t_6 = __Pyx_PyList_GetItemRefFast(sequence, 3, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 579, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_6);
- }
- #else
- {
- Py_ssize_t i;
- PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_2,&__pyx_t_5,&__pyx_t_6};
- for (i=0; i < 4; i++) {
- PyObject* item = __Pyx_PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 579, __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[4] = {&__pyx_t_3,&__pyx_t_2,&__pyx_t_5,&__pyx_t_6};
- __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 579, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_8 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7);
- for (index=0; index < 4; index++) {
- PyObject* item = __pyx_t_8(__pyx_t_7); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(item);
- *(temps[index]) = item;
- }
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 4) < (0)) __PYX_ERR(0, 579, __pyx_L1_error)
- __pyx_t_8 = NULL;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- goto __pyx_L4_unpacking_done;
- __pyx_L3_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __pyx_t_8 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 579, __pyx_L1_error)
- __pyx_L4_unpacking_done:;
- }
- __pyx_v_a = __pyx_t_3;
- __pyx_t_3 = 0;
- __pyx_v_b = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_c = __pyx_t_5;
- __pyx_t_5 = 0;
- __pyx_v_d = __pyx_t_6;
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":580
- * """
- * a, b, c, d = calcCubicParameters(pt1, pt2, pt3, pt4)
- * solutions = solveCubic( # <<<<<<<<<<<<<<
- * a[isHorizontal], b[isHorizontal], c[isHorizontal], d[isHorizontal] - where
- * )
- */
- __pyx_t_6 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_solveCubic); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 580, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- /* "fontTools/misc/bezierTools.py":581
- * a, b, c, d = calcCubicParameters(pt1, pt2, pt3, pt4)
- * solutions = solveCubic(
- * a[isHorizontal], b[isHorizontal], c[isHorizontal], d[isHorizontal] - where # <<<<<<<<<<<<<<
- * )
- * solutions = sorted(t for t in solutions if 0 <= t < 1)
- */
- __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_a, __pyx_v_isHorizontal); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 581, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_b, __pyx_v_isHorizontal); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 581, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_c, __pyx_v_isHorizontal); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 581, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_d, __pyx_v_isHorizontal); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 581, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __pyx_t_10 = PyNumber_Subtract(__pyx_t_9, __pyx_v_where); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 581, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_5))) {
- __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
- assert(__pyx_t_6);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_t_2, __pyx_t_3, __pyx_t_7, __pyx_t_10};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_4, (5-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 580, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_v_solutions = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":583
- * a[isHorizontal], b[isHorizontal], c[isHorizontal], d[isHorizontal] - where
- * )
- * solutions = sorted(t for t in solutions if 0 <= t < 1) # <<<<<<<<<<<<<<
- * if not solutions:
- * return [(pt1, pt2, pt3, pt4)]
- */
- __pyx_t_1 = __pyx_pf_9fontTools_4misc_11bezierTools_10splitCubic_genexpr(NULL, __pyx_v_solutions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 583, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_5 = __Pyx_Generator_GetInlinedResult(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 583, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely((PyList_Sort(__pyx_t_5) < 0))) __PYX_ERR(0, 583, __pyx_L1_error)
- __Pyx_DECREF_SET(__pyx_v_solutions, __pyx_t_5);
- __pyx_t_5 = 0;
- /* "fontTools/misc/bezierTools.py":584
- * )
- * solutions = sorted(t for t in solutions if 0 <= t < 1)
- * if not solutions: # <<<<<<<<<<<<<<
- * return [(pt1, pt2, pt3, pt4)]
- * return _splitCubicAtT(a, b, c, d, *solutions)
- */
- __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_solutions); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 584, __pyx_L1_error)
- __pyx_t_12 = (!__pyx_t_11);
- if (__pyx_t_12) {
- /* "fontTools/misc/bezierTools.py":585
- * solutions = sorted(t for t in solutions if 0 <= t < 1)
- * if not solutions:
- * return [(pt1, pt2, pt3, pt4)] # <<<<<<<<<<<<<<
- * return _splitCubicAtT(a, b, c, d, *solutions)
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 585, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_INCREF(__pyx_v_pt1);
- __Pyx_GIVEREF(__pyx_v_pt1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_pt1) != (0)) __PYX_ERR(0, 585, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_pt2);
- __Pyx_GIVEREF(__pyx_v_pt2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_pt2) != (0)) __PYX_ERR(0, 585, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_pt3);
- __Pyx_GIVEREF(__pyx_v_pt3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_pt3) != (0)) __PYX_ERR(0, 585, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_pt4);
- __Pyx_GIVEREF(__pyx_v_pt4);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_v_pt4) != (0)) __PYX_ERR(0, 585, __pyx_L1_error);
- __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 585, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GIVEREF(__pyx_t_5);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_5) != (0)) __PYX_ERR(0, 585, __pyx_L1_error);
- __pyx_t_5 = 0;
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":584
- * )
- * solutions = sorted(t for t in solutions if 0 <= t < 1)
- * if not solutions: # <<<<<<<<<<<<<<
- * return [(pt1, pt2, pt3, pt4)]
- * return _splitCubicAtT(a, b, c, d, *solutions)
- */
- }
- /* "fontTools/misc/bezierTools.py":586
- * if not solutions:
- * return [(pt1, pt2, pt3, pt4)]
- * return _splitCubicAtT(a, b, c, d, *solutions) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_splitCubicAtT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 586, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 586, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_INCREF(__pyx_v_a);
- __Pyx_GIVEREF(__pyx_v_a);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_a) != (0)) __PYX_ERR(0, 586, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_b);
- __Pyx_GIVEREF(__pyx_v_b);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_b) != (0)) __PYX_ERR(0, 586, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_c);
- __Pyx_GIVEREF(__pyx_v_c);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_c) != (0)) __PYX_ERR(0, 586, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_d);
- __Pyx_GIVEREF(__pyx_v_d);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_v_d) != (0)) __PYX_ERR(0, 586, __pyx_L1_error);
- __pyx_t_10 = __Pyx_PySequence_Tuple(__pyx_v_solutions); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 586, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __pyx_t_7 = PyNumber_Add(__pyx_t_5, __pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 586, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 586, __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_r = __pyx_t_10;
- __pyx_t_10 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":552
- *
- *
- * def splitCubic(pt1, pt2, pt3, pt4, where, isHorizontal): # <<<<<<<<<<<<<<
- * """Split a cubic Bezier curve at a given coordinate.
- *
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_XDECREF(__pyx_t_6);
- __Pyx_XDECREF(__pyx_t_7);
- __Pyx_XDECREF(__pyx_t_9);
- __Pyx_XDECREF(__pyx_t_10);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.splitCubic", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_a);
- __Pyx_XDECREF(__pyx_v_b);
- __Pyx_XDECREF(__pyx_v_c);
- __Pyx_XDECREF(__pyx_v_d);
- __Pyx_XDECREF(__pyx_v_solutions);
- __Pyx_XDECREF(__pyx_gb_9fontTools_4misc_11bezierTools_10splitCubic_2generator3);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":589
- *
- *
- * def splitQuadraticAtT(pt1, pt2, pt3, *ts): # <<<<<<<<<<<<<<
- * """Split a quadratic Bezier curve at one or more values of t.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_31splitQuadraticAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_30splitQuadraticAtT, "splitQuadraticAtT(pt1, pt2, pt3, *ts)\n\nSplit a quadratic Bezier curve at one or more values of t.\n\nArgs:\n pt1,pt2,pt3: Control points of the Bezier as 2D tuples.\n *ts: Positions at which to split the curve.\n\nReturns:\n A list of curve segments (each curve segment being three 2D tuples).\n\nExamples::\n\n >>> printSegments(splitQuadraticAtT((0, 0), (50, 100), (100, 0), 0.5))\n ((0, 0), (25, 50), (50, 50))\n ((50, 50), (75, 50), (100, 0))\n >>> printSegments(splitQuadraticAtT((0, 0), (50, 100), (100, 0), 0.5, 0.75))\n ((0, 0), (25, 50), (50, 50))\n ((50, 50), (62.5, 50), (75, 37.5))\n ((75, 37.5), (87.5, 25), (100, 0))");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_31splitQuadraticAtT = {"splitQuadraticAtT", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_31splitQuadraticAtT, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_30splitQuadraticAtT};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_31splitQuadraticAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_pt3 = 0;
- PyObject *__pyx_v_ts = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[3] = {0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("splitQuadraticAtT (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- __pyx_v_ts = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 3, __pyx_nargs);
- if (unlikely(!__pyx_v_ts)) {
- __Pyx_RefNannyFinishContext();
- return NULL;
- }
- __Pyx_GOTREF(__pyx_v_ts);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 589, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- default:
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 589, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 589, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 589, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- const Py_ssize_t used_pos_args = (kwd_pos_args < 3) ? kwd_pos_args : 3;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, used_pos_args, __pyx_kwds_len, "splitQuadraticAtT", 0) < (0)) __PYX_ERR(0, 589, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("splitQuadraticAtT", 0, 3, 3, i); __PYX_ERR(0, 589, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs < 3)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 589, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 589, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 589, __pyx_L3_error)
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_pt3 = values[2];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("splitQuadraticAtT", 0, 3, 3, __pyx_nargs); __PYX_ERR(0, 589, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_DECREF(__pyx_v_ts); __pyx_v_ts = 0;
- __Pyx_AddTraceback("fontTools.misc.bezierTools.splitQuadraticAtT", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_30splitQuadraticAtT(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_ts);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_DECREF(__pyx_v_ts);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_30splitQuadraticAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_ts) {
- PyObject *__pyx_v_a = NULL;
- PyObject *__pyx_v_b = NULL;
- PyObject *__pyx_v_c = NULL;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- PyObject *__pyx_t_1 = NULL;
- PyObject *__pyx_t_2 = NULL;
- PyObject *__pyx_t_3 = NULL;
- size_t __pyx_t_4;
- 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_RefNannySetupContext("splitQuadraticAtT", 0);
- /* "fontTools/misc/bezierTools.py":609
- * ((75, 37.5), (87.5, 25), (100, 0))
- * """
- * a, b, c = calcQuadraticParameters(pt1, pt2, pt3) # <<<<<<<<<<<<<<
- * return _splitQuadraticAtT(a, b, c, *ts)
- *
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_calcQuadraticParameters); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 609, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 609, __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;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 3)) {
- if (size > 3) __Pyx_RaiseTooManyValuesError(3);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 609, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_3);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2);
- __Pyx_INCREF(__pyx_t_5);
- } else {
- __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 609, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_3);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 609, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_5 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 609, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_5);
- }
- #else
- __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 609, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 609, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 609, __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_ERR(0, 609, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6);
- index = 0; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_3);
- index = 1; __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 = 2; __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), 3) < (0)) __PYX_ERR(0, 609, __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_ERR(0, 609, __pyx_L1_error)
- __pyx_L4_unpacking_done:;
- }
- __pyx_v_a = __pyx_t_3;
- __pyx_t_3 = 0;
- __pyx_v_b = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_c = __pyx_t_5;
- __pyx_t_5 = 0;
- /* "fontTools/misc/bezierTools.py":610
- * """
- * a, b, c = calcQuadraticParameters(pt1, pt2, pt3)
- * return _splitQuadraticAtT(a, b, c, *ts) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_splitQuadraticAtT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 610, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 610, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_INCREF(__pyx_v_a);
- __Pyx_GIVEREF(__pyx_v_a);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_a) != (0)) __PYX_ERR(0, 610, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_b);
- __Pyx_GIVEREF(__pyx_v_b);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_b) != (0)) __PYX_ERR(0, 610, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_c);
- __Pyx_GIVEREF(__pyx_v_c);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_c) != (0)) __PYX_ERR(0, 610, __pyx_L1_error);
- __pyx_t_2 = PyNumber_Add(__pyx_t_5, __pyx_v_ts); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 610, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 610, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_r = __pyx_t_5;
- __pyx_t_5 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":589
- *
- *
- * def splitQuadraticAtT(pt1, pt2, pt3, *ts): # <<<<<<<<<<<<<<
- * """Split a quadratic Bezier curve at one or more values of t.
- *
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_XDECREF(__pyx_t_6);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.splitQuadraticAtT", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_a);
- __Pyx_XDECREF(__pyx_v_b);
- __Pyx_XDECREF(__pyx_v_c);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":613
- *
- *
- * def splitCubicAtT(pt1, pt2, pt3, pt4, *ts): # <<<<<<<<<<<<<<
- * """Split a cubic Bezier curve at one or more values of t.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_33splitCubicAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_32splitCubicAtT, "splitCubicAtT(pt1, pt2, pt3, pt4, *ts)\n\nSplit a cubic Bezier curve at one or more values of t.\n\nArgs:\n pt1,pt2,pt3,pt4: Control points of the Bezier as 2D tuples.\n *ts: Positions at which to split the curve.\n\nReturns:\n A list of curve segments (each curve segment being four 2D tuples).\n\nExamples::\n\n >>> printSegments(splitCubicAtT((0, 0), (25, 100), (75, 100), (100, 0), 0.5))\n ((0, 0), (12.5, 50), (31.25, 75), (50, 75))\n ((50, 75), (68.75, 75), (87.5, 50), (100, 0))\n >>> printSegments(splitCubicAtT((0, 0), (25, 100), (75, 100), (100, 0), 0.5, 0.75))\n ((0, 0), (12.5, 50), (31.25, 75), (50, 75))\n ((50, 75), (59.375, 75), (68.75, 68.75), (77.3438, 56.25))\n ((77.3438, 56.25), (85.9375, 43.75), (93.75, 25), (100, 0))");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_33splitCubicAtT = {"splitCubicAtT", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_33splitCubicAtT, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_32splitCubicAtT};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_33splitCubicAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_pt3 = 0;
- PyObject *__pyx_v_pt4 = 0;
- PyObject *__pyx_v_ts = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[4] = {0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("splitCubicAtT (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- __pyx_v_ts = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 4, __pyx_nargs);
- if (unlikely(!__pyx_v_ts)) {
- __Pyx_RefNannyFinishContext();
- return NULL;
- }
- __Pyx_GOTREF(__pyx_v_ts);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,&__pyx_mstate_global->__pyx_n_u_pt4,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 613, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- default:
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 613, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 613, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 613, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 613, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- const Py_ssize_t used_pos_args = (kwd_pos_args < 4) ? kwd_pos_args : 4;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, used_pos_args, __pyx_kwds_len, "splitCubicAtT", 0) < (0)) __PYX_ERR(0, 613, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("splitCubicAtT", 0, 4, 4, i); __PYX_ERR(0, 613, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs < 4)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 613, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 613, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 613, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 613, __pyx_L3_error)
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_pt3 = values[2];
- __pyx_v_pt4 = values[3];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("splitCubicAtT", 0, 4, 4, __pyx_nargs); __PYX_ERR(0, 613, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_DECREF(__pyx_v_ts); __pyx_v_ts = 0;
- __Pyx_AddTraceback("fontTools.misc.bezierTools.splitCubicAtT", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_32splitCubicAtT(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_pt4, __pyx_v_ts);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_DECREF(__pyx_v_ts);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_32splitCubicAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_pt4, PyObject *__pyx_v_ts) {
- PyObject *__pyx_v_a = NULL;
- PyObject *__pyx_v_b = NULL;
- PyObject *__pyx_v_c = NULL;
- PyObject *__pyx_v_d = NULL;
- PyObject *__pyx_v_split = NULL;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- PyObject *__pyx_t_1 = NULL;
- PyObject *__pyx_t_2 = NULL;
- PyObject *__pyx_t_3 = NULL;
- size_t __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_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("splitCubicAtT", 0);
- /* "fontTools/misc/bezierTools.py":633
- * ((77.3438, 56.25), (85.9375, 43.75), (93.75, 25), (100, 0))
- * """
- * a, b, c, d = calcCubicParameters(pt1, pt2, pt3, pt4) # <<<<<<<<<<<<<<
- * split = _splitCubicAtT(a, b, c, d, *ts)
- *
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_calcCubicParameters); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 633, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_pt4};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (5-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 633, __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;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 4)) {
- if (size > 4) __Pyx_RaiseTooManyValuesError(4);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 633, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_3);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2);
- __Pyx_INCREF(__pyx_t_5);
- __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3);
- __Pyx_INCREF(__pyx_t_6);
- } else {
- __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 633, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_3);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 633, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_5 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 633, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_5);
- __pyx_t_6 = __Pyx_PyList_GetItemRefFast(sequence, 3, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 633, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_6);
- }
- #else
- {
- Py_ssize_t i;
- PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_2,&__pyx_t_5,&__pyx_t_6};
- for (i=0; i < 4; i++) {
- PyObject* item = __Pyx_PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 633, __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[4] = {&__pyx_t_3,&__pyx_t_2,&__pyx_t_5,&__pyx_t_6};
- __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 633, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_8 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7);
- for (index=0; index < 4; index++) {
- PyObject* item = __pyx_t_8(__pyx_t_7); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(item);
- *(temps[index]) = item;
- }
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 4) < (0)) __PYX_ERR(0, 633, __pyx_L1_error)
- __pyx_t_8 = NULL;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- goto __pyx_L4_unpacking_done;
- __pyx_L3_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __pyx_t_8 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 633, __pyx_L1_error)
- __pyx_L4_unpacking_done:;
- }
- __pyx_v_a = __pyx_t_3;
- __pyx_t_3 = 0;
- __pyx_v_b = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_c = __pyx_t_5;
- __pyx_t_5 = 0;
- __pyx_v_d = __pyx_t_6;
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":634
- * """
- * a, b, c, d = calcCubicParameters(pt1, pt2, pt3, pt4)
- * split = _splitCubicAtT(a, b, c, d, *ts) # <<<<<<<<<<<<<<
- *
- * # the split impl can introduce floating point errors; we know the first
- */
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_splitCubicAtT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 634, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 634, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_INCREF(__pyx_v_a);
- __Pyx_GIVEREF(__pyx_v_a);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_a) != (0)) __PYX_ERR(0, 634, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_b);
- __Pyx_GIVEREF(__pyx_v_b);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_b) != (0)) __PYX_ERR(0, 634, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_c);
- __Pyx_GIVEREF(__pyx_v_c);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_c) != (0)) __PYX_ERR(0, 634, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_d);
- __Pyx_GIVEREF(__pyx_v_d);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_v_d) != (0)) __PYX_ERR(0, 634, __pyx_L1_error);
- __pyx_t_5 = PyNumber_Add(__pyx_t_6, __pyx_v_ts); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 634, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 634, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_v_split = __pyx_t_6;
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":639
- * # segment should always start at pt1 and the last segment should end at pt4,
- * # so we set those values directly before returning.
- * split[0] = (pt1, *split[0][1:]) # <<<<<<<<<<<<<<
- * split[-1] = (*split[-1][:-1], pt4)
- * return split
- */
- __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 639, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_INCREF(__pyx_v_pt1);
- __Pyx_GIVEREF(__pyx_v_pt1);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_pt1) != (0)) __PYX_ERR(0, 639, __pyx_L1_error);
- __pyx_t_6 = __pyx_t_5;
- __pyx_t_5 = 0;
- __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_split, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 639, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_t_5, 1, 0, NULL, NULL, &__pyx_mstate_global->__pyx_slice[0], 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 639, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- if (__Pyx_PyList_Extend(__pyx_t_6, __pyx_t_1) < (0)) __PYX_ERR(0, 639, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- {
- PyObject *__pyx_temp = PyList_AsTuple(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_6);
- __pyx_t_6 = __pyx_temp; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 639, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- if (unlikely((__Pyx_SetItemInt(__pyx_v_split, 0, __pyx_t_6, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 639, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":640
- * # so we set those values directly before returning.
- * split[0] = (pt1, *split[0][1:])
- * split[-1] = (*split[-1][:-1], pt4) # <<<<<<<<<<<<<<
- * return split
- *
- */
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_split, -1L, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 640, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_5 = __Pyx_PyObject_GetSlice(__pyx_t_1, 0, -1L, NULL, NULL, &__pyx_mstate_global->__pyx_slice[1], 0, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 640, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_6 = __Pyx_PySequence_ListKeepNew(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 640, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- if (__Pyx_ListComp_Append(__pyx_t_6, __pyx_v_pt4) < (0)) __PYX_ERR(0, 640, __pyx_L1_error)
- {
- PyObject *__pyx_temp = PyList_AsTuple(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_6);
- __pyx_t_6 = __pyx_temp; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 640, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- if (unlikely((__Pyx_SetItemInt(__pyx_v_split, -1L, __pyx_t_6, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 640, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":641
- * split[0] = (pt1, *split[0][1:])
- * split[-1] = (*split[-1][:-1], pt4)
- * return split # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_INCREF(__pyx_v_split);
- __pyx_r = __pyx_v_split;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":613
- *
- *
- * def splitCubicAtT(pt1, pt2, pt3, pt4, *ts): # <<<<<<<<<<<<<<
- * """Split a cubic Bezier curve at one or more values of t.
- *
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_XDECREF(__pyx_t_6);
- __Pyx_XDECREF(__pyx_t_7);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.splitCubicAtT", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_a);
- __Pyx_XDECREF(__pyx_v_b);
- __Pyx_XDECREF(__pyx_v_c);
- __Pyx_XDECREF(__pyx_v_d);
- __Pyx_XDECREF(__pyx_v_split);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_36generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
- /* "fontTools/misc/bezierTools.py":644
- *
- *
- * @cython.locals( # <<<<<<<<<<<<<<
- * pt1=cython.complex,
- * pt2=cython.complex,
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_35splitCubicAtTC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_34splitCubicAtTC, "splitCubicAtTC(double complex pt1, double complex pt2, double complex pt3, double complex pt4, *ts)\n\nSplit a cubic Bezier curve at one or more values of t.\n\nArgs:\n pt1,pt2,pt3,pt4: Control points of the Bezier as complex numbers..\n *ts: Positions at which to split the curve.\n\nYields:\n Curve segments (each curve segment being four complex numbers).");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_35splitCubicAtTC = {"splitCubicAtTC", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_35splitCubicAtTC, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_34splitCubicAtTC};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_35splitCubicAtTC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- __pyx_t_double_complex __pyx_v_pt1;
- __pyx_t_double_complex __pyx_v_pt2;
- __pyx_t_double_complex __pyx_v_pt3;
- __pyx_t_double_complex __pyx_v_pt4;
- PyObject *__pyx_v_ts = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[4] = {0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("splitCubicAtTC (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- __pyx_v_ts = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 4, __pyx_nargs);
- if (unlikely(!__pyx_v_ts)) {
- __Pyx_RefNannyFinishContext();
- return NULL;
- }
- __Pyx_GOTREF(__pyx_v_ts);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,&__pyx_mstate_global->__pyx_n_u_pt4,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 644, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- default:
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 644, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 644, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 644, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 644, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- const Py_ssize_t used_pos_args = (kwd_pos_args < 4) ? kwd_pos_args : 4;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, used_pos_args, __pyx_kwds_len, "splitCubicAtTC", 0) < (0)) __PYX_ERR(0, 644, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("splitCubicAtTC", 0, 4, 4, i); __PYX_ERR(0, 644, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs < 4)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 644, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 644, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 644, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 644, __pyx_L3_error)
- }
- __pyx_v_pt1 = __Pyx_PyComplex_As___pyx_t_double_complex(values[0]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 654, __pyx_L3_error)
- __pyx_v_pt2 = __Pyx_PyComplex_As___pyx_t_double_complex(values[1]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 654, __pyx_L3_error)
- __pyx_v_pt3 = __Pyx_PyComplex_As___pyx_t_double_complex(values[2]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 654, __pyx_L3_error)
- __pyx_v_pt4 = __Pyx_PyComplex_As___pyx_t_double_complex(values[3]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 654, __pyx_L3_error)
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("splitCubicAtTC", 0, 4, 4, __pyx_nargs); __PYX_ERR(0, 644, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_CLEAR(__pyx_v_ts);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.splitCubicAtTC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_34splitCubicAtTC(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_pt4, __pyx_v_ts);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_DECREF(__pyx_v_ts);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_34splitCubicAtTC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_pt1, __pyx_t_double_complex __pyx_v_pt2, __pyx_t_double_complex __pyx_v_pt3, __pyx_t_double_complex __pyx_v_pt4, PyObject *__pyx_v_ts) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC *__pyx_cur_scope;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("splitCubicAtTC", 0);
- __pyx_cur_scope = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC(__pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC, __pyx_mstate_global->__pyx_empty_tuple, NULL);
- if (unlikely(!__pyx_cur_scope)) {
- __pyx_cur_scope = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC *)Py_None);
- __Pyx_INCREF(Py_None);
- __PYX_ERR(0, 644, __pyx_L1_error)
- } else {
- __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
- }
- __pyx_cur_scope->__pyx_v_pt1 = __pyx_v_pt1;
- __pyx_cur_scope->__pyx_v_pt2 = __pyx_v_pt2;
- __pyx_cur_scope->__pyx_v_pt3 = __pyx_v_pt3;
- __pyx_cur_scope->__pyx_v_pt4 = __pyx_v_pt4;
- __pyx_cur_scope->__pyx_v_ts = __pyx_v_ts;
- __Pyx_INCREF(__pyx_cur_scope->__pyx_v_ts);
- __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_ts);
- {
- __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_9fontTools_4misc_11bezierTools_36generator, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[2]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_splitCubicAtTC, __pyx_mstate_global->__pyx_n_u_splitCubicAtTC, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools); if (unlikely(!gen)) __PYX_ERR(0, 644, __pyx_L1_error)
- __Pyx_DECREF(__pyx_cur_scope);
- __Pyx_RefNannyFinishContext();
- return (PyObject *) gen;
- }
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_AddTraceback("fontTools.misc.bezierTools.splitCubicAtTC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __Pyx_DECREF((PyObject *)__pyx_cur_scope);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_36generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
- {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC *__pyx_cur_scope = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC *)__pyx_generator->closure);
- PyObject *__pyx_r = NULL;
- 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)(PyObject *);
- __pyx_t_double_complex __pyx_t_8;
- __pyx_t_double_complex __pyx_t_9;
- __pyx_t_double_complex __pyx_t_10;
- __pyx_t_double_complex __pyx_t_11;
- __Pyx_PySendResult __pyx_t_12;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("splitCubicAtTC", 0);
- switch (__pyx_generator->resume_label) {
- case 0: goto __pyx_L3_first_run;
- case 1: goto __pyx_L6_resume_from_yield_from;
- default: /* CPython raises the right error here */
- __Pyx_RefNannyFinishContext();
- return NULL;
- }
- __pyx_L3_first_run:;
- if (unlikely(__pyx_sent_value != Py_None)) {
- if (unlikely(__pyx_sent_value)) PyErr_SetString(PyExc_TypeError, "can't send non-None value to a just-started generator");
- __PYX_ERR(0, 644, __pyx_L1_error)
- }
- /* "fontTools/misc/bezierTools.py":664
- * Curve segments (each curve segment being four complex numbers).
- * """
- * a, b, c, d = calcCubicParametersC(pt1, pt2, pt3, pt4) # <<<<<<<<<<<<<<
- * yield from _splitCubicAtTC(a, b, c, d, *ts)
- *
- */
- __pyx_t_1 = __pyx_f_9fontTools_4misc_11bezierTools_calcCubicParametersC(__pyx_cur_scope->__pyx_v_pt1, __pyx_cur_scope->__pyx_v_pt2, __pyx_cur_scope->__pyx_v_pt3, __pyx_cur_scope->__pyx_v_pt4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 664, __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;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 4)) {
- if (size > 4) __Pyx_RaiseTooManyValuesError(4);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 664, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_3);
- __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2);
- __Pyx_INCREF(__pyx_t_4);
- __pyx_t_5 = PyTuple_GET_ITEM(sequence, 3);
- __Pyx_INCREF(__pyx_t_5);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 664, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 664, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_3);
- __pyx_t_4 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 664, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_4);
- __pyx_t_5 = __Pyx_PyList_GetItemRefFast(sequence, 3, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 664, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_5);
- }
- #else
- {
- Py_ssize_t i;
- PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_3,&__pyx_t_4,&__pyx_t_5};
- for (i=0; i < 4; i++) {
- PyObject* item = __Pyx_PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 664, __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[4] = {&__pyx_t_2,&__pyx_t_3,&__pyx_t_4,&__pyx_t_5};
- __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 664, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6);
- for (index=0; index < 4; index++) {
- PyObject* item = __pyx_t_7(__pyx_t_6); if (unlikely(!item)) goto __pyx_L4_unpacking_failed;
- __Pyx_GOTREF(item);
- *(temps[index]) = item;
- }
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < (0)) __PYX_ERR(0, 664, __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_ERR(0, 664, __pyx_L1_error)
- __pyx_L5_unpacking_done:;
- }
- __pyx_t_8 = __Pyx_PyComplex_As___pyx_t_double_complex(__pyx_t_2); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 664, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_9 = __Pyx_PyComplex_As___pyx_t_double_complex(__pyx_t_3); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 664, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_10 = __Pyx_PyComplex_As___pyx_t_double_complex(__pyx_t_4); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 664, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_11 = __Pyx_PyComplex_As___pyx_t_double_complex(__pyx_t_5); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 664, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_cur_scope->__pyx_v_a = __pyx_t_8;
- __pyx_cur_scope->__pyx_v_b = __pyx_t_9;
- __pyx_cur_scope->__pyx_v_c = __pyx_t_10;
- __pyx_cur_scope->__pyx_v_d = __pyx_t_11;
- /* "fontTools/misc/bezierTools.py":665
- * """
- * a, b, c, d = calcCubicParametersC(pt1, pt2, pt3, pt4)
- * yield from _splitCubicAtTC(a, b, c, d, *ts) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_splitCubicAtTC_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 665, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_5 = __pyx_PyComplex_FromComplex(__pyx_cur_scope->__pyx_v_a); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 665, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_4 = __pyx_PyComplex_FromComplex(__pyx_cur_scope->__pyx_v_b); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 665, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_3 = __pyx_PyComplex_FromComplex(__pyx_cur_scope->__pyx_v_c); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 665, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_2 = __pyx_PyComplex_FromComplex(__pyx_cur_scope->__pyx_v_d); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 665, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 665, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_GIVEREF(__pyx_t_5);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5) != (0)) __PYX_ERR(0, 665, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_4);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4) != (0)) __PYX_ERR(0, 665, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_3) != (0)) __PYX_ERR(0, 665, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_2) != (0)) __PYX_ERR(0, 665, __pyx_L1_error);
- __pyx_t_5 = 0;
- __pyx_t_4 = 0;
- __pyx_t_3 = 0;
- __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_cur_scope->__pyx_v_ts); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 665, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 665, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_12 = __Pyx_Generator_Yield_From(__pyx_generator, __pyx_t_6, &__pyx_r);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- if (likely(__pyx_t_12 == PYGEN_NEXT)) {
- __Pyx_GOTREF(__pyx_r);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
- /* return from generator, yielding value */
- __pyx_generator->resume_label = 1;
- return __pyx_r;
- __pyx_L6_resume_from_yield_from:;
- if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 665, __pyx_L1_error)
- } else if (likely(__pyx_t_12 == PYGEN_RETURN)) {
- __Pyx_GOTREF(__pyx_r);
- __Pyx_DECREF(__pyx_r); __pyx_r = 0;
- } else {
- __Pyx_XGOTREF(__pyx_r);
- __PYX_ERR(0, 665, __pyx_L1_error)
- }
- CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
- /* "fontTools/misc/bezierTools.py":644
- *
- *
- * @cython.locals( # <<<<<<<<<<<<<<
- * pt1=cython.complex,
- * pt2=cython.complex,
- */
- /* function exit code */
- __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);
- if (__Pyx_PyErr_Occurred()) {
- __Pyx_Generator_Replace_StopIteration(0);
- __Pyx_AddTraceback("splitCubicAtTC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- }
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- #if !CYTHON_USE_EXC_INFO_STACK
- __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
- #endif
- __pyx_generator->resume_label = -1;
- __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":668
- *
- *
- * @cython.returns(cython.complex) # <<<<<<<<<<<<<<
- * @cython.locals(
- * t=cython.double,
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_38splitCubicIntoTwoAtTC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_37splitCubicIntoTwoAtTC, "splitCubicIntoTwoAtTC(double complex pt1, double complex pt2, double complex pt3, double complex pt4, double t)\n\nSplit a cubic Bezier curve at t.\n\nArgs:\n pt1,pt2,pt3,pt4: Control points of the Bezier as complex numbers.\n t: Position at which to split the curve.\n\nReturns:\n A tuple of two curve segments (each curve segment being four complex numbers).");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_38splitCubicIntoTwoAtTC = {"splitCubicIntoTwoAtTC", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_38splitCubicIntoTwoAtTC, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_37splitCubicIntoTwoAtTC};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_38splitCubicIntoTwoAtTC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- __pyx_t_double_complex __pyx_v_pt1;
- __pyx_t_double_complex __pyx_v_pt2;
- __pyx_t_double_complex __pyx_v_pt3;
- __pyx_t_double_complex __pyx_v_pt4;
- double __pyx_v_t;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[5] = {0,0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("splitCubicIntoTwoAtTC (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,&__pyx_mstate_global->__pyx_n_u_pt4,&__pyx_mstate_global->__pyx_n_u_t,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 668, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 5:
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 668, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 668, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 668, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 668, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 668, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "splitCubicIntoTwoAtTC", 0) < (0)) __PYX_ERR(0, 668, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("splitCubicIntoTwoAtTC", 1, 5, 5, i); __PYX_ERR(0, 668, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 5)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 668, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 668, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 668, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 668, __pyx_L3_error)
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 668, __pyx_L3_error)
- }
- __pyx_v_pt1 = __Pyx_PyComplex_As___pyx_t_double_complex(values[0]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 682, __pyx_L3_error)
- __pyx_v_pt2 = __Pyx_PyComplex_As___pyx_t_double_complex(values[1]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 682, __pyx_L3_error)
- __pyx_v_pt3 = __Pyx_PyComplex_As___pyx_t_double_complex(values[2]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 682, __pyx_L3_error)
- __pyx_v_pt4 = __Pyx_PyComplex_As___pyx_t_double_complex(values[3]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 682, __pyx_L3_error)
- __pyx_v_t = __Pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_t == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 682, __pyx_L3_error)
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("splitCubicIntoTwoAtTC", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 668, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.splitCubicIntoTwoAtTC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_37splitCubicIntoTwoAtTC(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_pt4, __pyx_v_t);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_37splitCubicIntoTwoAtTC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_pt1, __pyx_t_double_complex __pyx_v_pt2, __pyx_t_double_complex __pyx_v_pt3, __pyx_t_double_complex __pyx_v_pt4, double __pyx_v_t) {
- double __pyx_v_t2;
- double __pyx_v__1_t;
- double __pyx_v__1_t_2;
- double __pyx_v__2_t_1_t;
- __pyx_t_double_complex __pyx_v_pointAtT;
- __pyx_t_double_complex __pyx_v_off1;
- __pyx_t_double_complex __pyx_v_off2;
- 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_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("splitCubicIntoTwoAtTC", 0);
- /* "fontTools/misc/bezierTools.py":692
- * A tuple of two curve segments (each curve segment being four complex numbers).
- * """
- * t2 = t * t # <<<<<<<<<<<<<<
- * _1_t = 1 - t
- * _1_t_2 = _1_t * _1_t
- */
- __pyx_v_t2 = (__pyx_v_t * __pyx_v_t);
- /* "fontTools/misc/bezierTools.py":693
- * """
- * t2 = t * t
- * _1_t = 1 - t # <<<<<<<<<<<<<<
- * _1_t_2 = _1_t * _1_t
- * _2_t_1_t = 2 * t * _1_t
- */
- __pyx_v__1_t = (1.0 - __pyx_v_t);
- /* "fontTools/misc/bezierTools.py":694
- * t2 = t * t
- * _1_t = 1 - t
- * _1_t_2 = _1_t * _1_t # <<<<<<<<<<<<<<
- * _2_t_1_t = 2 * t * _1_t
- * pointAtT = (
- */
- __pyx_v__1_t_2 = (__pyx_v__1_t * __pyx_v__1_t);
- /* "fontTools/misc/bezierTools.py":695
- * _1_t = 1 - t
- * _1_t_2 = _1_t * _1_t
- * _2_t_1_t = 2 * t * _1_t # <<<<<<<<<<<<<<
- * pointAtT = (
- * _1_t_2 * _1_t * pt1 + 3 * (_1_t_2 * t * pt2 + _1_t * t2 * pt3) + t2 * t * pt4
- */
- __pyx_v__2_t_1_t = ((2.0 * __pyx_v_t) * __pyx_v__1_t);
- /* "fontTools/misc/bezierTools.py":697
- * _2_t_1_t = 2 * t * _1_t
- * pointAtT = (
- * _1_t_2 * _1_t * pt1 + 3 * (_1_t_2 * t * pt2 + _1_t * t2 * pt3) + t2 * t * pt4 # <<<<<<<<<<<<<<
- * )
- * off1 = _1_t_2 * pt1 + _2_t_1_t * pt2 + t2 * pt3
- */
- __pyx_v_pointAtT = __Pyx_c_sum_double(__Pyx_c_sum_double(__Pyx_c_prod_double(__pyx_t_double_complex_from_parts((__pyx_v__1_t_2 * __pyx_v__1_t), 0), __pyx_v_pt1), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(3, 0), __Pyx_c_sum_double(__Pyx_c_prod_double(__pyx_t_double_complex_from_parts((__pyx_v__1_t_2 * __pyx_v_t), 0), __pyx_v_pt2), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts((__pyx_v__1_t * __pyx_v_t2), 0), __pyx_v_pt3)))), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts((__pyx_v_t2 * __pyx_v_t), 0), __pyx_v_pt4));
- /* "fontTools/misc/bezierTools.py":699
- * _1_t_2 * _1_t * pt1 + 3 * (_1_t_2 * t * pt2 + _1_t * t2 * pt3) + t2 * t * pt4
- * )
- * off1 = _1_t_2 * pt1 + _2_t_1_t * pt2 + t2 * pt3 # <<<<<<<<<<<<<<
- * off2 = _1_t_2 * pt2 + _2_t_1_t * pt3 + t2 * pt4
- *
- */
- __pyx_v_off1 = __Pyx_c_sum_double(__Pyx_c_sum_double(__Pyx_c_prod_double(__pyx_t_double_complex_from_parts(__pyx_v__1_t_2, 0), __pyx_v_pt1), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(__pyx_v__2_t_1_t, 0), __pyx_v_pt2)), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(__pyx_v_t2, 0), __pyx_v_pt3));
- /* "fontTools/misc/bezierTools.py":700
- * )
- * off1 = _1_t_2 * pt1 + _2_t_1_t * pt2 + t2 * pt3
- * off2 = _1_t_2 * pt2 + _2_t_1_t * pt3 + t2 * pt4 # <<<<<<<<<<<<<<
- *
- * pt2 = pt1 + (pt2 - pt1) * t
- */
- __pyx_v_off2 = __Pyx_c_sum_double(__Pyx_c_sum_double(__Pyx_c_prod_double(__pyx_t_double_complex_from_parts(__pyx_v__1_t_2, 0), __pyx_v_pt2), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(__pyx_v__2_t_1_t, 0), __pyx_v_pt3)), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(__pyx_v_t2, 0), __pyx_v_pt4));
- /* "fontTools/misc/bezierTools.py":702
- * off2 = _1_t_2 * pt2 + _2_t_1_t * pt3 + t2 * pt4
- *
- * pt2 = pt1 + (pt2 - pt1) * t # <<<<<<<<<<<<<<
- * pt3 = pt4 + (pt3 - pt4) * _1_t
- *
- */
- __pyx_v_pt2 = __Pyx_c_sum_double(__pyx_v_pt1, __Pyx_c_prod_double(__Pyx_c_diff_double(__pyx_v_pt2, __pyx_v_pt1), __pyx_t_double_complex_from_parts(__pyx_v_t, 0)));
- /* "fontTools/misc/bezierTools.py":703
- *
- * pt2 = pt1 + (pt2 - pt1) * t
- * pt3 = pt4 + (pt3 - pt4) * _1_t # <<<<<<<<<<<<<<
- *
- * return ((pt1, pt2, off1, pointAtT), (pointAtT, off2, pt3, pt4))
- */
- __pyx_v_pt3 = __Pyx_c_sum_double(__pyx_v_pt4, __Pyx_c_prod_double(__Pyx_c_diff_double(__pyx_v_pt3, __pyx_v_pt4), __pyx_t_double_complex_from_parts(__pyx_v__1_t, 0)));
- /* "fontTools/misc/bezierTools.py":705
- * pt3 = pt4 + (pt3 - pt4) * _1_t
- *
- * return ((pt1, pt2, off1, pointAtT), (pointAtT, off2, pt3, pt4)) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = __pyx_PyComplex_FromComplex(__pyx_v_pt1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 705, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __pyx_PyComplex_FromComplex(__pyx_v_pt2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 705, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = __pyx_PyComplex_FromComplex(__pyx_v_off1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 705, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = __pyx_PyComplex_FromComplex(__pyx_v_pointAtT); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 705, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 705, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 705, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 705, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3) != (0)) __PYX_ERR(0, 705, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_4);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4) != (0)) __PYX_ERR(0, 705, __pyx_L1_error);
- __pyx_t_1 = 0;
- __pyx_t_2 = 0;
- __pyx_t_3 = 0;
- __pyx_t_4 = 0;
- __pyx_t_4 = __pyx_PyComplex_FromComplex(__pyx_v_pointAtT); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 705, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_3 = __pyx_PyComplex_FromComplex(__pyx_v_off2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 705, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_2 = __pyx_PyComplex_FromComplex(__pyx_v_pt3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 705, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __pyx_PyComplex_FromComplex(__pyx_v_pt4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 705, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 705, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_GIVEREF(__pyx_t_4);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4) != (0)) __PYX_ERR(0, 705, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 705, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_2) != (0)) __PYX_ERR(0, 705, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_1) != (0)) __PYX_ERR(0, 705, __pyx_L1_error);
- __pyx_t_4 = 0;
- __pyx_t_3 = 0;
- __pyx_t_2 = 0;
- __pyx_t_1 = 0;
- __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 705, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GIVEREF(__pyx_t_5);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5) != (0)) __PYX_ERR(0, 705, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_6);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_6) != (0)) __PYX_ERR(0, 705, __pyx_L1_error);
- __pyx_t_5 = 0;
- __pyx_t_6 = 0;
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":668
- *
- *
- * @cython.returns(cython.complex) # <<<<<<<<<<<<<<
- * @cython.locals(
- * t=cython.double,
- */
- /* function exit code */
- __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_AddTraceback("fontTools.misc.bezierTools.splitCubicIntoTwoAtTC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":708
- *
- *
- * def _splitQuadraticAtT(a, b, c, *ts): # <<<<<<<<<<<<<<
- * ts = list(ts)
- * segments = []
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_40_splitQuadraticAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_39_splitQuadraticAtT, "_splitQuadraticAtT(a, b, c, *ts)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_40_splitQuadraticAtT = {"_splitQuadraticAtT", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_40_splitQuadraticAtT, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_39_splitQuadraticAtT};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_40_splitQuadraticAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_a = 0;
- PyObject *__pyx_v_b = 0;
- PyObject *__pyx_v_c = 0;
- PyObject *__pyx_v_ts = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[3] = {0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("_splitQuadraticAtT (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- __pyx_v_ts = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 3, __pyx_nargs);
- if (unlikely(!__pyx_v_ts)) {
- __Pyx_RefNannyFinishContext();
- return NULL;
- }
- __Pyx_GOTREF(__pyx_v_ts);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_a,&__pyx_mstate_global->__pyx_n_u_b,&__pyx_mstate_global->__pyx_n_u_c,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 708, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- default:
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 708, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 708, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 708, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- const Py_ssize_t used_pos_args = (kwd_pos_args < 3) ? kwd_pos_args : 3;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, used_pos_args, __pyx_kwds_len, "_splitQuadraticAtT", 0) < (0)) __PYX_ERR(0, 708, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_splitQuadraticAtT", 0, 3, 3, i); __PYX_ERR(0, 708, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs < 3)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 708, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 708, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 708, __pyx_L3_error)
- }
- __pyx_v_a = values[0];
- __pyx_v_b = values[1];
- __pyx_v_c = values[2];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("_splitQuadraticAtT", 0, 3, 3, __pyx_nargs); __PYX_ERR(0, 708, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_DECREF(__pyx_v_ts); __pyx_v_ts = 0;
- __Pyx_AddTraceback("fontTools.misc.bezierTools._splitQuadraticAtT", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_39_splitQuadraticAtT(__pyx_self, __pyx_v_a, __pyx_v_b, __pyx_v_c, __pyx_v_ts);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_DECREF(__pyx_v_ts);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_39_splitQuadraticAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_ts) {
- PyObject *__pyx_v_segments = NULL;
- PyObject *__pyx_v_ax = NULL;
- PyObject *__pyx_v_ay = NULL;
- PyObject *__pyx_v_bx = NULL;
- PyObject *__pyx_v_by = NULL;
- PyObject *__pyx_v_cx = NULL;
- PyObject *__pyx_v_cy = NULL;
- PyObject *__pyx_v_i = NULL;
- PyObject *__pyx_v_t1 = NULL;
- PyObject *__pyx_v_t2 = NULL;
- PyObject *__pyx_v_delta = NULL;
- PyObject *__pyx_v_delta_2 = NULL;
- PyObject *__pyx_v_a1x = NULL;
- PyObject *__pyx_v_a1y = NULL;
- PyObject *__pyx_v_b1x = NULL;
- PyObject *__pyx_v_b1y = NULL;
- PyObject *__pyx_v_t1_2 = NULL;
- PyObject *__pyx_v_c1x = NULL;
- PyObject *__pyx_v_c1y = NULL;
- PyObject *__pyx_v_pt1 = NULL;
- PyObject *__pyx_v_pt2 = NULL;
- PyObject *__pyx_v_pt3 = 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)(PyObject *);
- Py_ssize_t __pyx_t_6;
- size_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_RefNannySetupContext("_splitQuadraticAtT", 0);
- __Pyx_INCREF(__pyx_v_ts);
- /* "fontTools/misc/bezierTools.py":709
- *
- * def _splitQuadraticAtT(a, b, c, *ts):
- * ts = list(ts) # <<<<<<<<<<<<<<
- * segments = []
- * ts.insert(0, 0.0)
- */
- __pyx_t_1 = PySequence_List(__pyx_v_ts); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 709, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF_SET(__pyx_v_ts, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":710
- * def _splitQuadraticAtT(a, b, c, *ts):
- * ts = list(ts)
- * segments = [] # <<<<<<<<<<<<<<
- * ts.insert(0, 0.0)
- * ts.append(1.0)
- */
- __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 710, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_segments = ((PyObject*)__pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":711
- * ts = list(ts)
- * segments = []
- * ts.insert(0, 0.0) # <<<<<<<<<<<<<<
- * ts.append(1.0)
- * ax, ay = a
- */
- __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_ts, __pyx_mstate_global->__pyx_n_u_insert); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 711, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[0], NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 711, __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;
- /* "fontTools/misc/bezierTools.py":712
- * segments = []
- * ts.insert(0, 0.0)
- * ts.append(1.0) # <<<<<<<<<<<<<<
- * ax, ay = a
- * bx, by = b
- */
- __pyx_t_3 = __Pyx_PyObject_Append(__pyx_v_ts, __pyx_mstate_global->__pyx_float_1_0); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 712, __pyx_L1_error)
- /* "fontTools/misc/bezierTools.py":713
- * ts.insert(0, 0.0)
- * ts.append(1.0)
- * ax, ay = a # <<<<<<<<<<<<<<
- * bx, by = b
- * cx, cy = c
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_a))) || (PyList_CheckExact(__pyx_v_a))) {
- PyObject* sequence = __pyx_v_a;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 713, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 713, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 713, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 713, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 713, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_4 = PyObject_GetIter(__pyx_v_a); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 713, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4);
- 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_1 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < (0)) __PYX_ERR(0, 713, __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_ERR(0, 713, __pyx_L1_error)
- __pyx_L4_unpacking_done:;
- }
- __pyx_v_ax = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_ay = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":714
- * ts.append(1.0)
- * ax, ay = a
- * bx, by = b # <<<<<<<<<<<<<<
- * cx, cy = c
- * for i in range(len(ts) - 1):
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_b))) || (PyList_CheckExact(__pyx_v_b))) {
- PyObject* sequence = __pyx_v_b;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 714, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 714, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 714, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 714, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 714, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_4 = PyObject_GetIter(__pyx_v_b); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 714, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4);
- index = 0; __pyx_t_1 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- 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_ERR(0, 714, __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_ERR(0, 714, __pyx_L1_error)
- __pyx_L6_unpacking_done:;
- }
- __pyx_v_bx = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_by = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":715
- * ax, ay = a
- * bx, by = b
- * cx, cy = c # <<<<<<<<<<<<<<
- * for i in range(len(ts) - 1):
- * t1 = ts[i]
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_c))) || (PyList_CheckExact(__pyx_v_c))) {
- PyObject* sequence = __pyx_v_c;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 715, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 715, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 715, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 715, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 715, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_4 = PyObject_GetIter(__pyx_v_c); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 715, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4);
- index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- index = 1; __pyx_t_1 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < (0)) __PYX_ERR(0, 715, __pyx_L1_error)
- __pyx_t_5 = NULL;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- goto __pyx_L8_unpacking_done;
- __pyx_L7_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_5 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 715, __pyx_L1_error)
- __pyx_L8_unpacking_done:;
- }
- __pyx_v_cx = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_cy = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":716
- * bx, by = b
- * cx, cy = c
- * for i in range(len(ts) - 1): # <<<<<<<<<<<<<<
- * t1 = ts[i]
- * t2 = ts[i + 1]
- */
- __pyx_t_2 = NULL;
- __pyx_t_6 = PyObject_Length(__pyx_v_ts); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 716, __pyx_L1_error)
- __pyx_t_4 = PyLong_FromSsize_t((__pyx_t_6 - 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 716, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_7 = 1;
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 716, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 716, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_8 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 716, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- for (;;) {
- {
- __pyx_t_1 = __pyx_t_8(__pyx_t_4);
- if (unlikely(!__pyx_t_1)) {
- PyObject* exc_type = PyErr_Occurred();
- if (exc_type) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 716, __pyx_L1_error)
- PyErr_Clear();
- }
- break;
- }
- }
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":717
- * cx, cy = c
- * for i in range(len(ts) - 1):
- * t1 = ts[i] # <<<<<<<<<<<<<<
- * t2 = ts[i + 1]
- * delta = t2 - t1
- */
- __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_ts, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 717, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_XDECREF_SET(__pyx_v_t1, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":718
- * for i in range(len(ts) - 1):
- * t1 = ts[i]
- * t2 = ts[i + 1] # <<<<<<<<<<<<<<
- * delta = t2 - t1
- * # calc new a, b and c
- */
- __pyx_t_1 = __Pyx_PyLong_AddObjC(__pyx_v_i, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 718, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_ts, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 718, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_XDECREF_SET(__pyx_v_t2, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":719
- * t1 = ts[i]
- * t2 = ts[i + 1]
- * delta = t2 - t1 # <<<<<<<<<<<<<<
- * # calc new a, b and c
- * delta_2 = delta * delta
- */
- __pyx_t_2 = PyNumber_Subtract(__pyx_v_t2, __pyx_v_t1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 719, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_XDECREF_SET(__pyx_v_delta, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":721
- * delta = t2 - t1
- * # calc new a, b and c
- * delta_2 = delta * delta # <<<<<<<<<<<<<<
- * a1x = ax * delta_2
- * a1y = ay * delta_2
- */
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_delta, __pyx_v_delta); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 721, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_XDECREF_SET(__pyx_v_delta_2, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":722
- * # calc new a, b and c
- * delta_2 = delta * delta
- * a1x = ax * delta_2 # <<<<<<<<<<<<<<
- * a1y = ay * delta_2
- * b1x = (2 * ax * t1 + bx) * delta
- */
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_ax, __pyx_v_delta_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 722, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_XDECREF_SET(__pyx_v_a1x, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":723
- * delta_2 = delta * delta
- * a1x = ax * delta_2
- * a1y = ay * delta_2 # <<<<<<<<<<<<<<
- * b1x = (2 * ax * t1 + bx) * delta
- * b1y = (2 * ay * t1 + by) * delta
- */
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_ay, __pyx_v_delta_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 723, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_XDECREF_SET(__pyx_v_a1y, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":724
- * a1x = ax * delta_2
- * a1y = ay * delta_2
- * b1x = (2 * ax * t1 + bx) * delta # <<<<<<<<<<<<<<
- * b1y = (2 * ay * t1 + by) * delta
- * t1_2 = t1 * t1
- */
- __pyx_t_2 = __Pyx_PyLong_MultiplyCObj(__pyx_mstate_global->__pyx_int_2, __pyx_v_ax, 2, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 724, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_v_t1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_bx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 724, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_v_delta); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_XDECREF_SET(__pyx_v_b1x, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":725
- * a1y = ay * delta_2
- * b1x = (2 * ax * t1 + bx) * delta
- * b1y = (2 * ay * t1 + by) * delta # <<<<<<<<<<<<<<
- * t1_2 = t1 * t1
- * c1x = ax * t1_2 + bx * t1 + cx
- */
- __pyx_t_1 = __Pyx_PyLong_MultiplyCObj(__pyx_mstate_global->__pyx_int_2, __pyx_v_ay, 2, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 725, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_v_t1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 725, __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_by); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 725, __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_v_delta); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 725, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_XDECREF_SET(__pyx_v_b1y, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":726
- * b1x = (2 * ax * t1 + bx) * delta
- * b1y = (2 * ay * t1 + by) * delta
- * t1_2 = t1 * t1 # <<<<<<<<<<<<<<
- * c1x = ax * t1_2 + bx * t1 + cx
- * c1y = ay * t1_2 + by * t1 + cy
- */
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_t1, __pyx_v_t1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 726, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_XDECREF_SET(__pyx_v_t1_2, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":727
- * b1y = (2 * ay * t1 + by) * delta
- * t1_2 = t1 * t1
- * c1x = ax * t1_2 + bx * t1 + cx # <<<<<<<<<<<<<<
- * c1y = ay * t1_2 + by * t1 + cy
- *
- */
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_ax, __pyx_v_t1_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 727, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_bx, __pyx_v_t1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_9 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 727, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Add(__pyx_t_9, __pyx_v_cx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __Pyx_XDECREF_SET(__pyx_v_c1x, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":728
- * t1_2 = t1 * t1
- * c1x = ax * t1_2 + bx * t1 + cx
- * c1y = ay * t1_2 + by * t1 + cy # <<<<<<<<<<<<<<
- *
- * pt1, pt2, pt3 = calcQuadraticPoints((a1x, a1y), (b1x, b1y), (c1x, c1y))
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_ay, __pyx_v_t1_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 728, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_9 = PyNumber_Multiply(__pyx_v_by, __pyx_v_t1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 728, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 728, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __pyx_t_9 = PyNumber_Add(__pyx_t_2, __pyx_v_cy); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 728, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_XDECREF_SET(__pyx_v_c1y, __pyx_t_9);
- __pyx_t_9 = 0;
- /* "fontTools/misc/bezierTools.py":730
- * c1y = ay * t1_2 + by * t1 + cy
- *
- * pt1, pt2, pt3 = calcQuadraticPoints((a1x, a1y), (b1x, b1y), (c1x, c1y)) # <<<<<<<<<<<<<<
- * segments.append((pt1, pt2, pt3))
- * return segments
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_calcQuadraticPoints); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 730, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 730, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __Pyx_INCREF(__pyx_v_a1x);
- __Pyx_GIVEREF(__pyx_v_a1x);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_a1x) != (0)) __PYX_ERR(0, 730, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_a1y);
- __Pyx_GIVEREF(__pyx_v_a1y);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_a1y) != (0)) __PYX_ERR(0, 730, __pyx_L1_error);
- __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 730, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __Pyx_INCREF(__pyx_v_b1x);
- __Pyx_GIVEREF(__pyx_v_b1x);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_b1x) != (0)) __PYX_ERR(0, 730, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_b1y);
- __Pyx_GIVEREF(__pyx_v_b1y);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_b1y) != (0)) __PYX_ERR(0, 730, __pyx_L1_error);
- __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 730, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_12);
- __Pyx_INCREF(__pyx_v_c1x);
- __Pyx_GIVEREF(__pyx_v_c1x);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_c1x) != (0)) __PYX_ERR(0, 730, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_c1y);
- __Pyx_GIVEREF(__pyx_v_c1y);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_c1y) != (0)) __PYX_ERR(0, 730, __pyx_L1_error);
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_1))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_10, __pyx_t_11, __pyx_t_12};
- __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 730, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- }
- if ((likely(PyTuple_CheckExact(__pyx_t_9))) || (PyList_CheckExact(__pyx_t_9))) {
- PyObject* sequence = __pyx_t_9;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 3)) {
- if (size > 3) __Pyx_RaiseTooManyValuesError(3);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 730, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_12 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_12);
- __pyx_t_11 = PyTuple_GET_ITEM(sequence, 2);
- __Pyx_INCREF(__pyx_t_11);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 730, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_12 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 730, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_12);
- __pyx_t_11 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 730, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_11);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 730, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_12 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 730, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_12);
- __pyx_t_11 = __Pyx_PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 730, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- #endif
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- } else {
- Py_ssize_t index = -1;
- __pyx_t_10 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 730, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_10);
- index = 0; __pyx_t_1 = __pyx_t_5(__pyx_t_10); if (unlikely(!__pyx_t_1)) goto __pyx_L11_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 1; __pyx_t_12 = __pyx_t_5(__pyx_t_10); if (unlikely(!__pyx_t_12)) goto __pyx_L11_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_12);
- index = 2; __pyx_t_11 = __pyx_t_5(__pyx_t_10); if (unlikely(!__pyx_t_11)) goto __pyx_L11_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_11);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_10), 3) < (0)) __PYX_ERR(0, 730, __pyx_L1_error)
- __pyx_t_5 = NULL;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- goto __pyx_L12_unpacking_done;
- __pyx_L11_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __pyx_t_5 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 730, __pyx_L1_error)
- __pyx_L12_unpacking_done:;
- }
- __Pyx_XDECREF_SET(__pyx_v_pt1, __pyx_t_1);
- __pyx_t_1 = 0;
- __Pyx_XDECREF_SET(__pyx_v_pt2, __pyx_t_12);
- __pyx_t_12 = 0;
- __Pyx_XDECREF_SET(__pyx_v_pt3, __pyx_t_11);
- __pyx_t_11 = 0;
- /* "fontTools/misc/bezierTools.py":731
- *
- * pt1, pt2, pt3 = calcQuadraticPoints((a1x, a1y), (b1x, b1y), (c1x, c1y))
- * segments.append((pt1, pt2, pt3)) # <<<<<<<<<<<<<<
- * return segments
- *
- */
- __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 731, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __Pyx_INCREF(__pyx_v_pt1);
- __Pyx_GIVEREF(__pyx_v_pt1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_pt1) != (0)) __PYX_ERR(0, 731, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_pt2);
- __Pyx_GIVEREF(__pyx_v_pt2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_pt2) != (0)) __PYX_ERR(0, 731, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_pt3);
- __Pyx_GIVEREF(__pyx_v_pt3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_v_pt3) != (0)) __PYX_ERR(0, 731, __pyx_L1_error);
- __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_segments, __pyx_t_9); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 731, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- /* "fontTools/misc/bezierTools.py":716
- * bx, by = b
- * cx, cy = c
- * for i in range(len(ts) - 1): # <<<<<<<<<<<<<<
- * t1 = ts[i]
- * t2 = ts[i + 1]
- */
- }
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- /* "fontTools/misc/bezierTools.py":732
- * pt1, pt2, pt3 = calcQuadraticPoints((a1x, a1y), (b1x, b1y), (c1x, c1y))
- * segments.append((pt1, pt2, pt3))
- * return segments # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_INCREF(__pyx_v_segments);
- __pyx_r = __pyx_v_segments;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":708
- *
- *
- * def _splitQuadraticAtT(a, b, c, *ts): # <<<<<<<<<<<<<<
- * ts = list(ts)
- * segments = []
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_4);
- __Pyx_XDECREF(__pyx_t_9);
- __Pyx_XDECREF(__pyx_t_10);
- __Pyx_XDECREF(__pyx_t_11);
- __Pyx_XDECREF(__pyx_t_12);
- __Pyx_AddTraceback("fontTools.misc.bezierTools._splitQuadraticAtT", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_ts);
- __Pyx_XDECREF(__pyx_v_segments);
- __Pyx_XDECREF(__pyx_v_ax);
- __Pyx_XDECREF(__pyx_v_ay);
- __Pyx_XDECREF(__pyx_v_bx);
- __Pyx_XDECREF(__pyx_v_by);
- __Pyx_XDECREF(__pyx_v_cx);
- __Pyx_XDECREF(__pyx_v_cy);
- __Pyx_XDECREF(__pyx_v_i);
- __Pyx_XDECREF(__pyx_v_t1);
- __Pyx_XDECREF(__pyx_v_t2);
- __Pyx_XDECREF(__pyx_v_delta);
- __Pyx_XDECREF(__pyx_v_delta_2);
- __Pyx_XDECREF(__pyx_v_a1x);
- __Pyx_XDECREF(__pyx_v_a1y);
- __Pyx_XDECREF(__pyx_v_b1x);
- __Pyx_XDECREF(__pyx_v_b1y);
- __Pyx_XDECREF(__pyx_v_t1_2);
- __Pyx_XDECREF(__pyx_v_c1x);
- __Pyx_XDECREF(__pyx_v_c1y);
- __Pyx_XDECREF(__pyx_v_pt1);
- __Pyx_XDECREF(__pyx_v_pt2);
- __Pyx_XDECREF(__pyx_v_pt3);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":735
- *
- *
- * def _splitCubicAtT(a, b, c, d, *ts): # <<<<<<<<<<<<<<
- * ts = list(ts)
- * ts.insert(0, 0.0)
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_42_splitCubicAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_41_splitCubicAtT, "_splitCubicAtT(a, b, c, d, *ts)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_42_splitCubicAtT = {"_splitCubicAtT", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_42_splitCubicAtT, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_41_splitCubicAtT};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_42_splitCubicAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_a = 0;
- PyObject *__pyx_v_b = 0;
- PyObject *__pyx_v_c = 0;
- PyObject *__pyx_v_d = 0;
- PyObject *__pyx_v_ts = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[4] = {0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("_splitCubicAtT (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- __pyx_v_ts = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 4, __pyx_nargs);
- if (unlikely(!__pyx_v_ts)) {
- __Pyx_RefNannyFinishContext();
- return NULL;
- }
- __Pyx_GOTREF(__pyx_v_ts);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_a,&__pyx_mstate_global->__pyx_n_u_b,&__pyx_mstate_global->__pyx_n_u_c,&__pyx_mstate_global->__pyx_n_u_d,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 735, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- default:
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 735, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 735, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 735, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 735, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- const Py_ssize_t used_pos_args = (kwd_pos_args < 4) ? kwd_pos_args : 4;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, used_pos_args, __pyx_kwds_len, "_splitCubicAtT", 0) < (0)) __PYX_ERR(0, 735, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_splitCubicAtT", 0, 4, 4, i); __PYX_ERR(0, 735, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs < 4)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 735, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 735, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 735, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 735, __pyx_L3_error)
- }
- __pyx_v_a = values[0];
- __pyx_v_b = values[1];
- __pyx_v_c = values[2];
- __pyx_v_d = values[3];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("_splitCubicAtT", 0, 4, 4, __pyx_nargs); __PYX_ERR(0, 735, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_DECREF(__pyx_v_ts); __pyx_v_ts = 0;
- __Pyx_AddTraceback("fontTools.misc.bezierTools._splitCubicAtT", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_41_splitCubicAtT(__pyx_self, __pyx_v_a, __pyx_v_b, __pyx_v_c, __pyx_v_d, __pyx_v_ts);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_DECREF(__pyx_v_ts);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_41_splitCubicAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_ts) {
- PyObject *__pyx_v_segments = NULL;
- PyObject *__pyx_v_ax = NULL;
- PyObject *__pyx_v_ay = NULL;
- PyObject *__pyx_v_bx = NULL;
- PyObject *__pyx_v_by = NULL;
- PyObject *__pyx_v_cx = NULL;
- PyObject *__pyx_v_cy = NULL;
- PyObject *__pyx_v_dx = NULL;
- PyObject *__pyx_v_dy = NULL;
- PyObject *__pyx_v_i = NULL;
- PyObject *__pyx_v_t1 = NULL;
- PyObject *__pyx_v_t2 = NULL;
- PyObject *__pyx_v_delta = NULL;
- PyObject *__pyx_v_delta_2 = NULL;
- PyObject *__pyx_v_delta_3 = NULL;
- PyObject *__pyx_v_t1_2 = NULL;
- PyObject *__pyx_v_t1_3 = NULL;
- PyObject *__pyx_v_a1x = NULL;
- PyObject *__pyx_v_a1y = NULL;
- PyObject *__pyx_v_b1x = NULL;
- PyObject *__pyx_v_b1y = NULL;
- PyObject *__pyx_v_c1x = NULL;
- PyObject *__pyx_v_c1y = NULL;
- PyObject *__pyx_v_d1x = NULL;
- PyObject *__pyx_v_d1y = NULL;
- PyObject *__pyx_v_pt1 = NULL;
- PyObject *__pyx_v_pt2 = NULL;
- PyObject *__pyx_v_pt3 = NULL;
- PyObject *__pyx_v_pt4 = 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)(PyObject *);
- Py_ssize_t __pyx_t_6;
- size_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;
- PyObject *__pyx_t_13 = NULL;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("_splitCubicAtT", 0);
- __Pyx_INCREF(__pyx_v_ts);
- /* "fontTools/misc/bezierTools.py":736
- *
- * def _splitCubicAtT(a, b, c, d, *ts):
- * ts = list(ts) # <<<<<<<<<<<<<<
- * ts.insert(0, 0.0)
- * ts.append(1.0)
- */
- __pyx_t_1 = PySequence_List(__pyx_v_ts); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 736, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF_SET(__pyx_v_ts, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":737
- * def _splitCubicAtT(a, b, c, d, *ts):
- * ts = list(ts)
- * ts.insert(0, 0.0) # <<<<<<<<<<<<<<
- * ts.append(1.0)
- * segments = []
- */
- __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_ts, __pyx_mstate_global->__pyx_n_u_insert); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 737, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[0], NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 737, __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;
- /* "fontTools/misc/bezierTools.py":738
- * ts = list(ts)
- * ts.insert(0, 0.0)
- * ts.append(1.0) # <<<<<<<<<<<<<<
- * segments = []
- * ax, ay = a
- */
- __pyx_t_3 = __Pyx_PyObject_Append(__pyx_v_ts, __pyx_mstate_global->__pyx_float_1_0); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 738, __pyx_L1_error)
- /* "fontTools/misc/bezierTools.py":739
- * ts.insert(0, 0.0)
- * ts.append(1.0)
- * segments = [] # <<<<<<<<<<<<<<
- * ax, ay = a
- * bx, by = b
- */
- __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 739, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_v_segments = ((PyObject*)__pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":740
- * ts.append(1.0)
- * segments = []
- * ax, ay = a # <<<<<<<<<<<<<<
- * bx, by = b
- * cx, cy = c
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_a))) || (PyList_CheckExact(__pyx_v_a))) {
- PyObject* sequence = __pyx_v_a;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 740, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 740, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 740, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 740, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 740, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_4 = PyObject_GetIter(__pyx_v_a); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 740, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4);
- 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_1 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < (0)) __PYX_ERR(0, 740, __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_ERR(0, 740, __pyx_L1_error)
- __pyx_L4_unpacking_done:;
- }
- __pyx_v_ax = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_ay = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":741
- * segments = []
- * ax, ay = a
- * bx, by = b # <<<<<<<<<<<<<<
- * cx, cy = c
- * dx, dy = d
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_b))) || (PyList_CheckExact(__pyx_v_b))) {
- PyObject* sequence = __pyx_v_b;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 741, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 741, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 741, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 741, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 741, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_4 = PyObject_GetIter(__pyx_v_b); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 741, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4);
- index = 0; __pyx_t_1 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- 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_ERR(0, 741, __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_ERR(0, 741, __pyx_L1_error)
- __pyx_L6_unpacking_done:;
- }
- __pyx_v_bx = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_by = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":742
- * ax, ay = a
- * bx, by = b
- * cx, cy = c # <<<<<<<<<<<<<<
- * dx, dy = d
- * for i in range(len(ts) - 1):
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_c))) || (PyList_CheckExact(__pyx_v_c))) {
- PyObject* sequence = __pyx_v_c;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 742, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 742, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 742, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 742, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 742, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_4 = PyObject_GetIter(__pyx_v_c); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 742, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4);
- index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- index = 1; __pyx_t_1 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < (0)) __PYX_ERR(0, 742, __pyx_L1_error)
- __pyx_t_5 = NULL;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- goto __pyx_L8_unpacking_done;
- __pyx_L7_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_5 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 742, __pyx_L1_error)
- __pyx_L8_unpacking_done:;
- }
- __pyx_v_cx = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_cy = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":743
- * bx, by = b
- * cx, cy = c
- * dx, dy = d # <<<<<<<<<<<<<<
- * for i in range(len(ts) - 1):
- * t1 = ts[i]
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_d))) || (PyList_CheckExact(__pyx_v_d))) {
- PyObject* sequence = __pyx_v_d;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 743, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 743, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 743, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 743, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 743, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_4 = PyObject_GetIter(__pyx_v_d); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 743, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4);
- index = 0; __pyx_t_1 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L9_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 1; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L9_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < (0)) __PYX_ERR(0, 743, __pyx_L1_error)
- __pyx_t_5 = NULL;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- goto __pyx_L10_unpacking_done;
- __pyx_L9_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_5 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 743, __pyx_L1_error)
- __pyx_L10_unpacking_done:;
- }
- __pyx_v_dx = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_dy = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":744
- * cx, cy = c
- * dx, dy = d
- * for i in range(len(ts) - 1): # <<<<<<<<<<<<<<
- * t1 = ts[i]
- * t2 = ts[i + 1]
- */
- __pyx_t_1 = NULL;
- __pyx_t_6 = PyObject_Length(__pyx_v_ts); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 744, __pyx_L1_error)
- __pyx_t_4 = PyLong_FromSsize_t((__pyx_t_6 - 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 744, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_7 = 1;
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_4};
- __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 744, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- }
- __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 744, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_8 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 744, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- for (;;) {
- {
- __pyx_t_2 = __pyx_t_8(__pyx_t_4);
- if (unlikely(!__pyx_t_2)) {
- PyObject* exc_type = PyErr_Occurred();
- if (exc_type) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 744, __pyx_L1_error)
- PyErr_Clear();
- }
- break;
- }
- }
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":745
- * dx, dy = d
- * for i in range(len(ts) - 1):
- * t1 = ts[i] # <<<<<<<<<<<<<<
- * t2 = ts[i + 1]
- * delta = t2 - t1
- */
- __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_ts, __pyx_v_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 745, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_XDECREF_SET(__pyx_v_t1, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":746
- * for i in range(len(ts) - 1):
- * t1 = ts[i]
- * t2 = ts[i + 1] # <<<<<<<<<<<<<<
- * delta = t2 - t1
- *
- */
- __pyx_t_2 = __Pyx_PyLong_AddObjC(__pyx_v_i, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 746, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_ts, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 746, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_XDECREF_SET(__pyx_v_t2, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":747
- * t1 = ts[i]
- * t2 = ts[i + 1]
- * delta = t2 - t1 # <<<<<<<<<<<<<<
- *
- * delta_2 = delta * delta
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_t2, __pyx_v_t1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 747, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_XDECREF_SET(__pyx_v_delta, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":749
- * delta = t2 - t1
- *
- * delta_2 = delta * delta # <<<<<<<<<<<<<<
- * delta_3 = delta * delta_2
- * t1_2 = t1 * t1
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_delta, __pyx_v_delta); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 749, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_XDECREF_SET(__pyx_v_delta_2, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":750
- *
- * delta_2 = delta * delta
- * delta_3 = delta * delta_2 # <<<<<<<<<<<<<<
- * t1_2 = t1 * t1
- * t1_3 = t1 * t1_2
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_delta, __pyx_v_delta_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_XDECREF_SET(__pyx_v_delta_3, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":751
- * delta_2 = delta * delta
- * delta_3 = delta * delta_2
- * t1_2 = t1 * t1 # <<<<<<<<<<<<<<
- * t1_3 = t1 * t1_2
- *
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_t1, __pyx_v_t1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 751, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_XDECREF_SET(__pyx_v_t1_2, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":752
- * delta_3 = delta * delta_2
- * t1_2 = t1 * t1
- * t1_3 = t1 * t1_2 # <<<<<<<<<<<<<<
- *
- * # calc new a, b, c and d
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_t1, __pyx_v_t1_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 752, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_XDECREF_SET(__pyx_v_t1_3, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":755
- *
- * # calc new a, b, c and d
- * a1x = ax * delta_3 # <<<<<<<<<<<<<<
- * a1y = ay * delta_3
- * b1x = (3 * ax * t1 + bx) * delta_2
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_ax, __pyx_v_delta_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 755, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_XDECREF_SET(__pyx_v_a1x, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":756
- * # calc new a, b, c and d
- * a1x = ax * delta_3
- * a1y = ay * delta_3 # <<<<<<<<<<<<<<
- * b1x = (3 * ax * t1 + bx) * delta_2
- * b1y = (3 * ay * t1 + by) * delta_2
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_ay, __pyx_v_delta_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 756, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_XDECREF_SET(__pyx_v_a1y, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":757
- * a1x = ax * delta_3
- * a1y = ay * delta_3
- * b1x = (3 * ax * t1 + bx) * delta_2 # <<<<<<<<<<<<<<
- * b1y = (3 * ay * t1 + by) * delta_2
- * c1x = (2 * bx * t1 + cx + 3 * ax * t1_2) * delta
- */
- __pyx_t_1 = __Pyx_PyLong_MultiplyCObj(__pyx_mstate_global->__pyx_int_3, __pyx_v_ax, 3, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 757, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_v_t1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 757, __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_bx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 757, __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_v_delta_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 757, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_XDECREF_SET(__pyx_v_b1x, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":758
- * a1y = ay * delta_3
- * b1x = (3 * ax * t1 + bx) * delta_2
- * b1y = (3 * ay * t1 + by) * delta_2 # <<<<<<<<<<<<<<
- * c1x = (2 * bx * t1 + cx + 3 * ax * t1_2) * delta
- * c1y = (2 * by * t1 + cy + 3 * ay * t1_2) * delta
- */
- __pyx_t_2 = __Pyx_PyLong_MultiplyCObj(__pyx_mstate_global->__pyx_int_3, __pyx_v_ay, 3, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_v_t1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_by); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_v_delta_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_XDECREF_SET(__pyx_v_b1y, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":759
- * b1x = (3 * ax * t1 + bx) * delta_2
- * b1y = (3 * ay * t1 + by) * delta_2
- * c1x = (2 * bx * t1 + cx + 3 * ax * t1_2) * delta # <<<<<<<<<<<<<<
- * c1y = (2 * by * t1 + cy + 3 * ay * t1_2) * delta
- * d1x = ax * t1_3 + bx * t1_2 + cx * t1 + dx
- */
- __pyx_t_1 = __Pyx_PyLong_MultiplyCObj(__pyx_mstate_global->__pyx_int_2, __pyx_v_bx, 2, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_v_t1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 759, __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_cx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = __Pyx_PyLong_MultiplyCObj(__pyx_mstate_global->__pyx_int_3, __pyx_v_ax, 3, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 759, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_9 = PyNumber_Multiply(__pyx_t_2, __pyx_v_t1_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 759, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 759, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __pyx_t_9 = PyNumber_Multiply(__pyx_t_2, __pyx_v_delta); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 759, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_XDECREF_SET(__pyx_v_c1x, __pyx_t_9);
- __pyx_t_9 = 0;
- /* "fontTools/misc/bezierTools.py":760
- * b1y = (3 * ay * t1 + by) * delta_2
- * c1x = (2 * bx * t1 + cx + 3 * ax * t1_2) * delta
- * c1y = (2 * by * t1 + cy + 3 * ay * t1_2) * delta # <<<<<<<<<<<<<<
- * d1x = ax * t1_3 + bx * t1_2 + cx * t1 + dx
- * d1y = ay * t1_3 + by * t1_2 + cy * t1 + dy
- */
- __pyx_t_9 = __Pyx_PyLong_MultiplyCObj(__pyx_mstate_global->__pyx_int_2, __pyx_v_by, 2, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 760, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_9, __pyx_v_t1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 760, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __pyx_t_9 = PyNumber_Add(__pyx_t_2, __pyx_v_cy); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 760, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = __Pyx_PyLong_MultiplyCObj(__pyx_mstate_global->__pyx_int_3, __pyx_v_ay, 3, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 760, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_v_t1_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 760, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Add(__pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 760, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_v_delta); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 760, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_XDECREF_SET(__pyx_v_c1y, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":761
- * c1x = (2 * bx * t1 + cx + 3 * ax * t1_2) * delta
- * c1y = (2 * by * t1 + cy + 3 * ay * t1_2) * delta
- * d1x = ax * t1_3 + bx * t1_2 + cx * t1 + dx # <<<<<<<<<<<<<<
- * d1y = ay * t1_3 + by * t1_2 + cy * t1 + dy
- * pt1, pt2, pt3, pt4 = calcCubicPoints(
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_ax, __pyx_v_t1_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_bx, __pyx_v_t1_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_9 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 761, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_cx, __pyx_v_t1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Add(__pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_dx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_XDECREF_SET(__pyx_v_d1x, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":762
- * c1y = (2 * by * t1 + cy + 3 * ay * t1_2) * delta
- * d1x = ax * t1_3 + bx * t1_2 + cx * t1 + dx
- * d1y = ay * t1_3 + by * t1_2 + cy * t1 + dy # <<<<<<<<<<<<<<
- * pt1, pt2, pt3, pt4 = calcCubicPoints(
- * (a1x, a1y), (b1x, b1y), (c1x, c1y), (d1x, d1y)
- */
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_ay, __pyx_v_t1_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 762, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_by, __pyx_v_t1_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 762, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_9 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 762, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_cy, __pyx_v_t1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 762, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Add(__pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 762, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_v_dy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 762, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_XDECREF_SET(__pyx_v_d1y, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":763
- * d1x = ax * t1_3 + bx * t1_2 + cx * t1 + dx
- * d1y = ay * t1_3 + by * t1_2 + cy * t1 + dy
- * pt1, pt2, pt3, pt4 = calcCubicPoints( # <<<<<<<<<<<<<<
- * (a1x, a1y), (b1x, b1y), (c1x, c1y), (d1x, d1y)
- * )
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_calcCubicPoints); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 763, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- /* "fontTools/misc/bezierTools.py":764
- * d1y = ay * t1_3 + by * t1_2 + cy * t1 + dy
- * pt1, pt2, pt3, pt4 = calcCubicPoints(
- * (a1x, a1y), (b1x, b1y), (c1x, c1y), (d1x, d1y) # <<<<<<<<<<<<<<
- * )
- * segments.append((pt1, pt2, pt3, pt4))
- */
- __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 764, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __Pyx_INCREF(__pyx_v_a1x);
- __Pyx_GIVEREF(__pyx_v_a1x);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_a1x) != (0)) __PYX_ERR(0, 764, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_a1y);
- __Pyx_GIVEREF(__pyx_v_a1y);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_a1y) != (0)) __PYX_ERR(0, 764, __pyx_L1_error);
- __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 764, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __Pyx_INCREF(__pyx_v_b1x);
- __Pyx_GIVEREF(__pyx_v_b1x);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_b1x) != (0)) __PYX_ERR(0, 764, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_b1y);
- __Pyx_GIVEREF(__pyx_v_b1y);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_b1y) != (0)) __PYX_ERR(0, 764, __pyx_L1_error);
- __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 764, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_12);
- __Pyx_INCREF(__pyx_v_c1x);
- __Pyx_GIVEREF(__pyx_v_c1x);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_c1x) != (0)) __PYX_ERR(0, 764, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_c1y);
- __Pyx_GIVEREF(__pyx_v_c1y);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_c1y) != (0)) __PYX_ERR(0, 764, __pyx_L1_error);
- __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 764, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_13);
- __Pyx_INCREF(__pyx_v_d1x);
- __Pyx_GIVEREF(__pyx_v_d1x);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_d1x) != (0)) __PYX_ERR(0, 764, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_d1y);
- __Pyx_GIVEREF(__pyx_v_d1y);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_v_d1y) != (0)) __PYX_ERR(0, 764, __pyx_L1_error);
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_9))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_7, (5-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
- __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 763, __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;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 4)) {
- if (size > 4) __Pyx_RaiseTooManyValuesError(4);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 763, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_9);
- __pyx_t_13 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_13);
- __pyx_t_12 = PyTuple_GET_ITEM(sequence, 2);
- __Pyx_INCREF(__pyx_t_12);
- __pyx_t_11 = PyTuple_GET_ITEM(sequence, 3);
- __Pyx_INCREF(__pyx_t_11);
- } else {
- __pyx_t_9 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 763, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_9);
- __pyx_t_13 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 763, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_13);
- __pyx_t_12 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 763, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_12);
- __pyx_t_11 = __Pyx_PyList_GetItemRefFast(sequence, 3, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 763, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_11);
- }
- #else
- {
- Py_ssize_t i;
- PyObject** temps[4] = {&__pyx_t_9,&__pyx_t_13,&__pyx_t_12,&__pyx_t_11};
- for (i=0; i < 4; i++) {
- PyObject* item = __Pyx_PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 763, __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[4] = {&__pyx_t_9,&__pyx_t_13,&__pyx_t_12,&__pyx_t_11};
- __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 763, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_10);
- for (index=0; index < 4; index++) {
- PyObject* item = __pyx_t_5(__pyx_t_10); if (unlikely(!item)) goto __pyx_L13_unpacking_failed;
- __Pyx_GOTREF(item);
- *(temps[index]) = item;
- }
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_10), 4) < (0)) __PYX_ERR(0, 763, __pyx_L1_error)
- __pyx_t_5 = NULL;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- goto __pyx_L14_unpacking_done;
- __pyx_L13_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __pyx_t_5 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 763, __pyx_L1_error)
- __pyx_L14_unpacking_done:;
- }
- /* "fontTools/misc/bezierTools.py":763
- * d1x = ax * t1_3 + bx * t1_2 + cx * t1 + dx
- * d1y = ay * t1_3 + by * t1_2 + cy * t1 + dy
- * pt1, pt2, pt3, pt4 = calcCubicPoints( # <<<<<<<<<<<<<<
- * (a1x, a1y), (b1x, b1y), (c1x, c1y), (d1x, d1y)
- * )
- */
- __Pyx_XDECREF_SET(__pyx_v_pt1, __pyx_t_9);
- __pyx_t_9 = 0;
- __Pyx_XDECREF_SET(__pyx_v_pt2, __pyx_t_13);
- __pyx_t_13 = 0;
- __Pyx_XDECREF_SET(__pyx_v_pt3, __pyx_t_12);
- __pyx_t_12 = 0;
- __Pyx_XDECREF_SET(__pyx_v_pt4, __pyx_t_11);
- __pyx_t_11 = 0;
- /* "fontTools/misc/bezierTools.py":766
- * (a1x, a1y), (b1x, b1y), (c1x, c1y), (d1x, d1y)
- * )
- * segments.append((pt1, pt2, pt3, pt4)) # <<<<<<<<<<<<<<
- * return segments
- *
- */
- __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 766, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_INCREF(__pyx_v_pt1);
- __Pyx_GIVEREF(__pyx_v_pt1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_pt1) != (0)) __PYX_ERR(0, 766, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_pt2);
- __Pyx_GIVEREF(__pyx_v_pt2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_pt2) != (0)) __PYX_ERR(0, 766, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_pt3);
- __Pyx_GIVEREF(__pyx_v_pt3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_pt3) != (0)) __PYX_ERR(0, 766, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_pt4);
- __Pyx_GIVEREF(__pyx_v_pt4);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_pt4) != (0)) __PYX_ERR(0, 766, __pyx_L1_error);
- __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_segments, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 766, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":744
- * cx, cy = c
- * dx, dy = d
- * for i in range(len(ts) - 1): # <<<<<<<<<<<<<<
- * t1 = ts[i]
- * t2 = ts[i + 1]
- */
- }
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- /* "fontTools/misc/bezierTools.py":767
- * )
- * segments.append((pt1, pt2, pt3, pt4))
- * return segments # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_INCREF(__pyx_v_segments);
- __pyx_r = __pyx_v_segments;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":735
- *
- *
- * def _splitCubicAtT(a, b, c, d, *ts): # <<<<<<<<<<<<<<
- * ts = list(ts)
- * ts.insert(0, 0.0)
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_4);
- __Pyx_XDECREF(__pyx_t_9);
- __Pyx_XDECREF(__pyx_t_10);
- __Pyx_XDECREF(__pyx_t_11);
- __Pyx_XDECREF(__pyx_t_12);
- __Pyx_XDECREF(__pyx_t_13);
- __Pyx_AddTraceback("fontTools.misc.bezierTools._splitCubicAtT", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_ts);
- __Pyx_XDECREF(__pyx_v_segments);
- __Pyx_XDECREF(__pyx_v_ax);
- __Pyx_XDECREF(__pyx_v_ay);
- __Pyx_XDECREF(__pyx_v_bx);
- __Pyx_XDECREF(__pyx_v_by);
- __Pyx_XDECREF(__pyx_v_cx);
- __Pyx_XDECREF(__pyx_v_cy);
- __Pyx_XDECREF(__pyx_v_dx);
- __Pyx_XDECREF(__pyx_v_dy);
- __Pyx_XDECREF(__pyx_v_i);
- __Pyx_XDECREF(__pyx_v_t1);
- __Pyx_XDECREF(__pyx_v_t2);
- __Pyx_XDECREF(__pyx_v_delta);
- __Pyx_XDECREF(__pyx_v_delta_2);
- __Pyx_XDECREF(__pyx_v_delta_3);
- __Pyx_XDECREF(__pyx_v_t1_2);
- __Pyx_XDECREF(__pyx_v_t1_3);
- __Pyx_XDECREF(__pyx_v_a1x);
- __Pyx_XDECREF(__pyx_v_a1y);
- __Pyx_XDECREF(__pyx_v_b1x);
- __Pyx_XDECREF(__pyx_v_b1y);
- __Pyx_XDECREF(__pyx_v_c1x);
- __Pyx_XDECREF(__pyx_v_c1y);
- __Pyx_XDECREF(__pyx_v_d1x);
- __Pyx_XDECREF(__pyx_v_d1y);
- __Pyx_XDECREF(__pyx_v_pt1);
- __Pyx_XDECREF(__pyx_v_pt2);
- __Pyx_XDECREF(__pyx_v_pt3);
- __Pyx_XDECREF(__pyx_v_pt4);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_45generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
- /* "fontTools/misc/bezierTools.py":770
- *
- *
- * @cython.locals( # <<<<<<<<<<<<<<
- * a=cython.complex,
- * b=cython.complex,
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_44_splitCubicAtTC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_43_splitCubicAtTC, "_splitCubicAtTC(double complex a, double complex b, double complex c, double complex d, *ts)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_44_splitCubicAtTC = {"_splitCubicAtTC", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_44_splitCubicAtTC, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_43_splitCubicAtTC};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_44_splitCubicAtTC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- __pyx_t_double_complex __pyx_v_a;
- __pyx_t_double_complex __pyx_v_b;
- __pyx_t_double_complex __pyx_v_c;
- __pyx_t_double_complex __pyx_v_d;
- PyObject *__pyx_v_ts = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[4] = {0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("_splitCubicAtTC (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- __pyx_v_ts = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 4, __pyx_nargs);
- if (unlikely(!__pyx_v_ts)) {
- __Pyx_RefNannyFinishContext();
- return NULL;
- }
- __Pyx_GOTREF(__pyx_v_ts);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_a,&__pyx_mstate_global->__pyx_n_u_b,&__pyx_mstate_global->__pyx_n_u_c,&__pyx_mstate_global->__pyx_n_u_d,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 770, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- default:
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 770, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 770, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 770, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 770, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- const Py_ssize_t used_pos_args = (kwd_pos_args < 4) ? kwd_pos_args : 4;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, used_pos_args, __pyx_kwds_len, "_splitCubicAtTC", 0) < (0)) __PYX_ERR(0, 770, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_splitCubicAtTC", 0, 4, 4, i); __PYX_ERR(0, 770, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs < 4)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 770, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 770, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 770, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 770, __pyx_L3_error)
- }
- __pyx_v_a = __Pyx_PyComplex_As___pyx_t_double_complex(values[0]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 785, __pyx_L3_error)
- __pyx_v_b = __Pyx_PyComplex_As___pyx_t_double_complex(values[1]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 785, __pyx_L3_error)
- __pyx_v_c = __Pyx_PyComplex_As___pyx_t_double_complex(values[2]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 785, __pyx_L3_error)
- __pyx_v_d = __Pyx_PyComplex_As___pyx_t_double_complex(values[3]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 785, __pyx_L3_error)
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("_splitCubicAtTC", 0, 4, 4, __pyx_nargs); __PYX_ERR(0, 770, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_CLEAR(__pyx_v_ts);
- __Pyx_AddTraceback("fontTools.misc.bezierTools._splitCubicAtTC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_43_splitCubicAtTC(__pyx_self, __pyx_v_a, __pyx_v_b, __pyx_v_c, __pyx_v_d, __pyx_v_ts);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_DECREF(__pyx_v_ts);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_43_splitCubicAtTC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_a, __pyx_t_double_complex __pyx_v_b, __pyx_t_double_complex __pyx_v_c, __pyx_t_double_complex __pyx_v_d, PyObject *__pyx_v_ts) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC *__pyx_cur_scope;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("_splitCubicAtTC", 0);
- __pyx_cur_scope = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC(__pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC, __pyx_mstate_global->__pyx_empty_tuple, NULL);
- if (unlikely(!__pyx_cur_scope)) {
- __pyx_cur_scope = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC *)Py_None);
- __Pyx_INCREF(Py_None);
- __PYX_ERR(0, 770, __pyx_L1_error)
- } else {
- __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
- }
- __pyx_cur_scope->__pyx_v_a = __pyx_v_a;
- __pyx_cur_scope->__pyx_v_b = __pyx_v_b;
- __pyx_cur_scope->__pyx_v_c = __pyx_v_c;
- __pyx_cur_scope->__pyx_v_d = __pyx_v_d;
- __pyx_cur_scope->__pyx_v_ts = __pyx_v_ts;
- __Pyx_INCREF(__pyx_cur_scope->__pyx_v_ts);
- __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_ts);
- {
- __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_9fontTools_4misc_11bezierTools_45generator1, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[3]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_splitCubicAtTC_2, __pyx_mstate_global->__pyx_n_u_splitCubicAtTC_2, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools); if (unlikely(!gen)) __PYX_ERR(0, 770, __pyx_L1_error)
- __Pyx_DECREF(__pyx_cur_scope);
- __Pyx_RefNannyFinishContext();
- return (PyObject *) gen;
- }
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_AddTraceback("fontTools.misc.bezierTools._splitCubicAtTC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __Pyx_DECREF((PyObject *)__pyx_cur_scope);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_45generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
- {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC *__pyx_cur_scope = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC *)__pyx_generator->closure);
- PyObject *__pyx_r = NULL;
- 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;
- size_t __pyx_t_6;
- PyObject *(*__pyx_t_7)(PyObject *);
- double __pyx_t_8;
- PyObject *__pyx_t_9 = NULL;
- PyObject *__pyx_t_10 = NULL;
- PyObject *__pyx_t_11 = NULL;
- PyObject *__pyx_t_12 = NULL;
- PyObject *(*__pyx_t_13)(PyObject *);
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("_splitCubicAtTC", 0);
- switch (__pyx_generator->resume_label) {
- case 0: goto __pyx_L3_first_run;
- case 1: goto __pyx_L8_resume_from_yield;
- default: /* CPython raises the right error here */
- __Pyx_RefNannyFinishContext();
- return NULL;
- }
- __pyx_L3_first_run:;
- if (unlikely(__pyx_sent_value != Py_None)) {
- if (unlikely(__pyx_sent_value)) PyErr_SetString(PyExc_TypeError, "can't send non-None value to a just-started generator");
- __PYX_ERR(0, 770, __pyx_L1_error)
- }
- /* "fontTools/misc/bezierTools.py":786
- * )
- * def _splitCubicAtTC(a, b, c, d, *ts):
- * ts = list(ts) # <<<<<<<<<<<<<<
- * ts.insert(0, 0.0)
- * ts.append(1.0)
- */
- __pyx_t_1 = PySequence_List(__pyx_cur_scope->__pyx_v_ts); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_ts);
- __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_ts, __pyx_t_1);
- __Pyx_GIVEREF(__pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":787
- * def _splitCubicAtTC(a, b, c, d, *ts):
- * ts = list(ts)
- * ts.insert(0, 0.0) # <<<<<<<<<<<<<<
- * ts.append(1.0)
- * for i in range(len(ts) - 1):
- */
- __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_ts, __pyx_mstate_global->__pyx_n_u_insert); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 787, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[0], NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 787, __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;
- /* "fontTools/misc/bezierTools.py":788
- * ts = list(ts)
- * ts.insert(0, 0.0)
- * ts.append(1.0) # <<<<<<<<<<<<<<
- * for i in range(len(ts) - 1):
- * t1 = ts[i]
- */
- __pyx_t_3 = __Pyx_PyObject_Append(__pyx_cur_scope->__pyx_v_ts, __pyx_mstate_global->__pyx_float_1_0); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 788, __pyx_L1_error)
- /* "fontTools/misc/bezierTools.py":789
- * ts.insert(0, 0.0)
- * ts.append(1.0)
- * for i in range(len(ts) - 1): # <<<<<<<<<<<<<<
- * t1 = ts[i]
- * t2 = ts[i + 1]
- */
- __pyx_t_1 = NULL;
- __pyx_t_4 = PyObject_Length(__pyx_cur_scope->__pyx_v_ts); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 789, __pyx_L1_error)
- __pyx_t_5 = PyLong_FromSsize_t((__pyx_t_4 - 1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 789, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_6 = 1;
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_5};
- __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 789, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- }
- __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 789, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 789, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- for (;;) {
- {
- __pyx_t_2 = __pyx_t_7(__pyx_t_5);
- if (unlikely(!__pyx_t_2)) {
- PyObject* exc_type = PyErr_Occurred();
- if (exc_type) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 789, __pyx_L1_error)
- PyErr_Clear();
- }
- break;
- }
- }
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_i);
- __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_i, __pyx_t_2);
- __Pyx_GIVEREF(__pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":790
- * ts.append(1.0)
- * for i in range(len(ts) - 1):
- * t1 = ts[i] # <<<<<<<<<<<<<<
- * t2 = ts[i + 1]
- * delta = t2 - t1
- */
- __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_ts, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 790, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_8 = __Pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 790, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_cur_scope->__pyx_v_t1 = __pyx_t_8;
- /* "fontTools/misc/bezierTools.py":791
- * for i in range(len(ts) - 1):
- * t1 = ts[i]
- * t2 = ts[i + 1] # <<<<<<<<<<<<<<
- * delta = t2 - t1
- *
- */
- __pyx_t_2 = __Pyx_PyLong_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 791, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_ts, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 791, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_8 = __Pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 791, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_cur_scope->__pyx_v_t2 = __pyx_t_8;
- /* "fontTools/misc/bezierTools.py":792
- * t1 = ts[i]
- * t2 = ts[i + 1]
- * delta = t2 - t1 # <<<<<<<<<<<<<<
- *
- * delta_2 = delta * delta
- */
- __pyx_cur_scope->__pyx_v_delta = (__pyx_cur_scope->__pyx_v_t2 - __pyx_cur_scope->__pyx_v_t1);
- /* "fontTools/misc/bezierTools.py":794
- * delta = t2 - t1
- *
- * delta_2 = delta * delta # <<<<<<<<<<<<<<
- * delta_3 = delta * delta_2
- * t1_2 = t1 * t1
- */
- __pyx_cur_scope->__pyx_v_delta_2 = (__pyx_cur_scope->__pyx_v_delta * __pyx_cur_scope->__pyx_v_delta);
- /* "fontTools/misc/bezierTools.py":795
- *
- * delta_2 = delta * delta
- * delta_3 = delta * delta_2 # <<<<<<<<<<<<<<
- * t1_2 = t1 * t1
- * t1_3 = t1 * t1_2
- */
- __pyx_cur_scope->__pyx_v_delta_3 = (__pyx_cur_scope->__pyx_v_delta * __pyx_cur_scope->__pyx_v_delta_2);
- /* "fontTools/misc/bezierTools.py":796
- * delta_2 = delta * delta
- * delta_3 = delta * delta_2
- * t1_2 = t1 * t1 # <<<<<<<<<<<<<<
- * t1_3 = t1 * t1_2
- *
- */
- __pyx_cur_scope->__pyx_v_t1_2 = (__pyx_cur_scope->__pyx_v_t1 * __pyx_cur_scope->__pyx_v_t1);
- /* "fontTools/misc/bezierTools.py":797
- * delta_3 = delta * delta_2
- * t1_2 = t1 * t1
- * t1_3 = t1 * t1_2 # <<<<<<<<<<<<<<
- *
- * # calc new a, b, c and d
- */
- __pyx_cur_scope->__pyx_v_t1_3 = (__pyx_cur_scope->__pyx_v_t1 * __pyx_cur_scope->__pyx_v_t1_2);
- /* "fontTools/misc/bezierTools.py":800
- *
- * # calc new a, b, c and d
- * a1 = a * delta_3 # <<<<<<<<<<<<<<
- * b1 = (3 * a * t1 + b) * delta_2
- * c1 = (2 * b * t1 + c + 3 * a * t1_2) * delta
- */
- __pyx_cur_scope->__pyx_v_a1 = __Pyx_c_prod_double(__pyx_cur_scope->__pyx_v_a, __pyx_t_double_complex_from_parts(__pyx_cur_scope->__pyx_v_delta_3, 0));
- /* "fontTools/misc/bezierTools.py":801
- * # calc new a, b, c and d
- * a1 = a * delta_3
- * b1 = (3 * a * t1 + b) * delta_2 # <<<<<<<<<<<<<<
- * c1 = (2 * b * t1 + c + 3 * a * t1_2) * delta
- * d1 = a * t1_3 + b * t1_2 + c * t1 + d
- */
- __pyx_cur_scope->__pyx_v_b1 = __Pyx_c_prod_double(__Pyx_c_sum_double(__Pyx_c_prod_double(__Pyx_c_prod_double(__pyx_t_double_complex_from_parts(3, 0), __pyx_cur_scope->__pyx_v_a), __pyx_t_double_complex_from_parts(__pyx_cur_scope->__pyx_v_t1, 0)), __pyx_cur_scope->__pyx_v_b), __pyx_t_double_complex_from_parts(__pyx_cur_scope->__pyx_v_delta_2, 0));
- /* "fontTools/misc/bezierTools.py":802
- * a1 = a * delta_3
- * b1 = (3 * a * t1 + b) * delta_2
- * c1 = (2 * b * t1 + c + 3 * a * t1_2) * delta # <<<<<<<<<<<<<<
- * d1 = a * t1_3 + b * t1_2 + c * t1 + d
- * pt1, pt2, pt3, pt4 = calcCubicPointsC(a1, b1, c1, d1)
- */
- __pyx_cur_scope->__pyx_v_c1 = __Pyx_c_prod_double(__Pyx_c_sum_double(__Pyx_c_sum_double(__Pyx_c_prod_double(__Pyx_c_prod_double(__pyx_t_double_complex_from_parts(2, 0), __pyx_cur_scope->__pyx_v_b), __pyx_t_double_complex_from_parts(__pyx_cur_scope->__pyx_v_t1, 0)), __pyx_cur_scope->__pyx_v_c), __Pyx_c_prod_double(__Pyx_c_prod_double(__pyx_t_double_complex_from_parts(3, 0), __pyx_cur_scope->__pyx_v_a), __pyx_t_double_complex_from_parts(__pyx_cur_scope->__pyx_v_t1_2, 0))), __pyx_t_double_complex_from_parts(__pyx_cur_scope->__pyx_v_delta, 0));
- /* "fontTools/misc/bezierTools.py":803
- * b1 = (3 * a * t1 + b) * delta_2
- * c1 = (2 * b * t1 + c + 3 * a * t1_2) * delta
- * d1 = a * t1_3 + b * t1_2 + c * t1 + d # <<<<<<<<<<<<<<
- * pt1, pt2, pt3, pt4 = calcCubicPointsC(a1, b1, c1, d1)
- * yield (pt1, pt2, pt3, pt4)
- */
- __pyx_cur_scope->__pyx_v_d1 = __Pyx_c_sum_double(__Pyx_c_sum_double(__Pyx_c_sum_double(__Pyx_c_prod_double(__pyx_cur_scope->__pyx_v_a, __pyx_t_double_complex_from_parts(__pyx_cur_scope->__pyx_v_t1_3, 0)), __Pyx_c_prod_double(__pyx_cur_scope->__pyx_v_b, __pyx_t_double_complex_from_parts(__pyx_cur_scope->__pyx_v_t1_2, 0))), __Pyx_c_prod_double(__pyx_cur_scope->__pyx_v_c, __pyx_t_double_complex_from_parts(__pyx_cur_scope->__pyx_v_t1, 0))), __pyx_cur_scope->__pyx_v_d);
- /* "fontTools/misc/bezierTools.py":804
- * c1 = (2 * b * t1 + c + 3 * a * t1_2) * delta
- * d1 = a * t1_3 + b * t1_2 + c * t1 + d
- * pt1, pt2, pt3, pt4 = calcCubicPointsC(a1, b1, c1, d1) # <<<<<<<<<<<<<<
- * yield (pt1, pt2, pt3, pt4)
- *
- */
- __pyx_t_1 = __pyx_f_9fontTools_4misc_11bezierTools_calcCubicPointsC(__pyx_cur_scope->__pyx_v_a1, __pyx_cur_scope->__pyx_v_b1, __pyx_cur_scope->__pyx_v_c1, __pyx_cur_scope->__pyx_v_d1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 804, __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;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 4)) {
- if (size > 4) __Pyx_RaiseTooManyValuesError(4);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 804, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_9);
- __pyx_t_10 = PyTuple_GET_ITEM(sequence, 2);
- __Pyx_INCREF(__pyx_t_10);
- __pyx_t_11 = PyTuple_GET_ITEM(sequence, 3);
- __Pyx_INCREF(__pyx_t_11);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 804, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_9 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 804, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_9);
- __pyx_t_10 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 804, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_10);
- __pyx_t_11 = __Pyx_PyList_GetItemRefFast(sequence, 3, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 804, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_11);
- }
- #else
- {
- Py_ssize_t i;
- PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11};
- for (i=0; i < 4; i++) {
- PyObject* item = __Pyx_PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 804, __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[4] = {&__pyx_t_2,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11};
- __pyx_t_12 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 804, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_12);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_13 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_12);
- for (index=0; index < 4; index++) {
- PyObject* item = __pyx_t_13(__pyx_t_12); if (unlikely(!item)) goto __pyx_L6_unpacking_failed;
- __Pyx_GOTREF(item);
- *(temps[index]) = item;
- }
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 4) < (0)) __PYX_ERR(0, 804, __pyx_L1_error)
- __pyx_t_13 = NULL;
- __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
- goto __pyx_L7_unpacking_done;
- __pyx_L6_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
- __pyx_t_13 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 804, __pyx_L1_error)
- __pyx_L7_unpacking_done:;
- }
- __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_pt1);
- __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_pt1, __pyx_t_2);
- __Pyx_GIVEREF(__pyx_t_2);
- __pyx_t_2 = 0;
- __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_pt2);
- __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_pt2, __pyx_t_9);
- __Pyx_GIVEREF(__pyx_t_9);
- __pyx_t_9 = 0;
- __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_pt3);
- __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_pt3, __pyx_t_10);
- __Pyx_GIVEREF(__pyx_t_10);
- __pyx_t_10 = 0;
- __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_pt4);
- __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_pt4, __pyx_t_11);
- __Pyx_GIVEREF(__pyx_t_11);
- __pyx_t_11 = 0;
- /* "fontTools/misc/bezierTools.py":805
- * d1 = a * t1_3 + b * t1_2 + c * t1 + d
- * pt1, pt2, pt3, pt4 = calcCubicPointsC(a1, b1, c1, d1)
- * yield (pt1, pt2, pt3, pt4) # <<<<<<<<<<<<<<
- *
- *
- */
- __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 805, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_INCREF(__pyx_cur_scope->__pyx_v_pt1);
- __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_pt1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_cur_scope->__pyx_v_pt1) != (0)) __PYX_ERR(0, 805, __pyx_L1_error);
- __Pyx_INCREF(__pyx_cur_scope->__pyx_v_pt2);
- __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_pt2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_cur_scope->__pyx_v_pt2) != (0)) __PYX_ERR(0, 805, __pyx_L1_error);
- __Pyx_INCREF(__pyx_cur_scope->__pyx_v_pt3);
- __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_pt3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_cur_scope->__pyx_v_pt3) != (0)) __PYX_ERR(0, 805, __pyx_L1_error);
- __Pyx_INCREF(__pyx_cur_scope->__pyx_v_pt4);
- __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_pt4);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_cur_scope->__pyx_v_pt4) != (0)) __PYX_ERR(0, 805, __pyx_L1_error);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- __Pyx_XGIVEREF(__pyx_t_5);
- __pyx_cur_scope->__pyx_t_0 = __pyx_t_5;
- __pyx_cur_scope->__pyx_t_1 = __pyx_t_7;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
- /* return from generator, yielding value */
- __pyx_generator->resume_label = 1;
- return __pyx_r;
- __pyx_L8_resume_from_yield:;
- __pyx_t_5 = __pyx_cur_scope->__pyx_t_0;
- __pyx_cur_scope->__pyx_t_0 = 0;
- __Pyx_XGOTREF(__pyx_t_5);
- __pyx_t_7 = __pyx_cur_scope->__pyx_t_1;
- if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 805, __pyx_L1_error)
- /* "fontTools/misc/bezierTools.py":789
- * ts.insert(0, 0.0)
- * ts.append(1.0)
- * for i in range(len(ts) - 1): # <<<<<<<<<<<<<<
- * t1 = ts[i]
- * t2 = ts[i + 1]
- */
- }
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
- /* "fontTools/misc/bezierTools.py":770
- *
- *
- * @cython.locals( # <<<<<<<<<<<<<<
- * a=cython.complex,
- * b=cython.complex,
- */
- /* function exit code */
- __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_9);
- __Pyx_XDECREF(__pyx_t_10);
- __Pyx_XDECREF(__pyx_t_11);
- __Pyx_XDECREF(__pyx_t_12);
- if (__Pyx_PyErr_Occurred()) {
- __Pyx_Generator_Replace_StopIteration(0);
- __Pyx_AddTraceback("_splitCubicAtTC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- }
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- #if !CYTHON_USE_EXC_INFO_STACK
- __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
- #endif
- __pyx_generator->resume_label = -1;
- __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":815
- *
- *
- * def solveQuadratic(a, b, c, sqrt=sqrt): # <<<<<<<<<<<<<<
- * """Solve a quadratic equation.
- *
- */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_96__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_RefNannySetupContext("__defaults__", 0);
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 815, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_INCREF(__Pyx_CyFunction_Defaults(struct __pyx_defaults, __pyx_self)->arg0);
- __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(struct __pyx_defaults, __pyx_self)->arg0);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(struct __pyx_defaults, __pyx_self)->arg0) != (0)) __PYX_ERR(0, 815, __pyx_L1_error);
- __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 815, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 815, __pyx_L1_error);
- __Pyx_INCREF(Py_None);
- __Pyx_GIVEREF(Py_None);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None) != (0)) __PYX_ERR(0, 815, __pyx_L1_error);
- __pyx_t_1 = 0;
- __pyx_r = __pyx_t_2;
- __pyx_t_2 = 0;
- goto __pyx_L0;
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_47solveQuadratic(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_46solveQuadratic, "solveQuadratic(a, b, c, sqrt=sqrt)\n\nSolve a quadratic equation.\n\nSolves *a*x*x + b*x + c = 0* where a, b and c are real.\n\nArgs:\n a: coefficient of *x\302\262*\n b: coefficient of *x*\n c: constant term\n\nReturns:\n A list of roots. Note that the returned list is neither guaranteed to\n be sorted nor to contain unique values!");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_47solveQuadratic = {"solveQuadratic", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_47solveQuadratic, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_46solveQuadratic};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_47solveQuadratic(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_a = 0;
- PyObject *__pyx_v_b = 0;
- PyObject *__pyx_v_c = 0;
- PyObject *__pyx_v_sqrt = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[4] = {0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("solveQuadratic (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_a,&__pyx_mstate_global->__pyx_n_u_b,&__pyx_mstate_global->__pyx_n_u_c,&__pyx_mstate_global->__pyx_n_u_sqrt,0};
- struct __pyx_defaults *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(struct __pyx_defaults, __pyx_self);
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 815, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 815, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 815, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 815, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 815, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "solveQuadratic", 0) < (0)) __PYX_ERR(0, 815, __pyx_L3_error)
- if (!values[3]) values[3] = __Pyx_NewRef(__pyx_dynamic_args->arg0);
- for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("solveQuadratic", 0, 3, 4, i); __PYX_ERR(0, 815, __pyx_L3_error) }
- }
- } else {
- switch (__pyx_nargs) {
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 815, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 815, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 815, __pyx_L3_error)
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 815, __pyx_L3_error)
- break;
- default: goto __pyx_L5_argtuple_error;
- }
- if (!values[3]) values[3] = __Pyx_NewRef(__pyx_dynamic_args->arg0);
- }
- __pyx_v_a = values[0];
- __pyx_v_b = values[1];
- __pyx_v_c = values[2];
- __pyx_v_sqrt = values[3];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("solveQuadratic", 0, 3, 4, __pyx_nargs); __PYX_ERR(0, 815, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.solveQuadratic", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_46solveQuadratic(__pyx_self, __pyx_v_a, __pyx_v_b, __pyx_v_c, __pyx_v_sqrt);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_46solveQuadratic(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_sqrt) {
- PyObject *__pyx_v_roots = NULL;
- PyObject *__pyx_v_DD = NULL;
- PyObject *__pyx_v_rDD = 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;
- size_t __pyx_t_5;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("solveQuadratic", 0);
- /* "fontTools/misc/bezierTools.py":829
- * be sorted nor to contain unique values!
- * """
- * if abs(a) < epsilon: # <<<<<<<<<<<<<<
- * if abs(b) < epsilon:
- * # We have a non-equation; therefore, we have no valid solution
- */
- __pyx_t_1 = __Pyx_PyNumber_Absolute(__pyx_v_a); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 829, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_epsilon); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 829, __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_ERR(0, 829, __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_ERR(0, 829, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (__pyx_t_4) {
- /* "fontTools/misc/bezierTools.py":830
- * """
- * if abs(a) < epsilon:
- * if abs(b) < epsilon: # <<<<<<<<<<<<<<
- * # We have a non-equation; therefore, we have no valid solution
- * roots = []
- */
- __pyx_t_3 = __Pyx_PyNumber_Absolute(__pyx_v_b); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 830, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_epsilon); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 830, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 830, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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_ERR(0, 830, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_4) {
- /* "fontTools/misc/bezierTools.py":832
- * if abs(b) < epsilon:
- * # We have a non-equation; therefore, we have no valid solution
- * roots = [] # <<<<<<<<<<<<<<
- * else:
- * # We have a linear equation with 1 root.
- */
- __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 832, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_roots = ((PyObject*)__pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":830
- * """
- * if abs(a) < epsilon:
- * if abs(b) < epsilon: # <<<<<<<<<<<<<<
- * # We have a non-equation; therefore, we have no valid solution
- * roots = []
- */
- goto __pyx_L4;
- }
- /* "fontTools/misc/bezierTools.py":835
- * else:
- * # We have a linear equation with 1 root.
- * roots = [-c / b] # <<<<<<<<<<<<<<
- * else:
- * # We have a true quadratic equation. Apply the quadratic formula to find two roots.
- */
- /*else*/ {
- __pyx_t_1 = PyNumber_Negative(__pyx_v_c); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 835, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_v_b); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 835, __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_ERR(0, 835, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 835, __pyx_L1_error);
- __pyx_t_2 = 0;
- __pyx_v_roots = ((PyObject*)__pyx_t_1);
- __pyx_t_1 = 0;
- }
- __pyx_L4:;
- /* "fontTools/misc/bezierTools.py":829
- * be sorted nor to contain unique values!
- * """
- * if abs(a) < epsilon: # <<<<<<<<<<<<<<
- * if abs(b) < epsilon:
- * # We have a non-equation; therefore, we have no valid solution
- */
- goto __pyx_L3;
- }
- /* "fontTools/misc/bezierTools.py":838
- * else:
- * # We have a true quadratic equation. Apply the quadratic formula to find two roots.
- * DD = b * b - 4.0 * a * c # <<<<<<<<<<<<<<
- * if DD >= 0.0:
- * rDD = sqrt(DD)
- */
- /*else*/ {
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_b, __pyx_v_b); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Multiply(__pyx_mstate_global->__pyx_float_4_0, __pyx_v_a); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = PyNumber_Multiply(__pyx_t_2, __pyx_v_c); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 838, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __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_v_DD = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":839
- * # We have a true quadratic equation. Apply the quadratic formula to find two roots.
- * DD = b * b - 4.0 * a * c
- * if DD >= 0.0: # <<<<<<<<<<<<<<
- * rDD = sqrt(DD)
- * roots = [(-b + rDD) / 2.0 / a, (-b - rDD) / 2.0 / a]
- */
- __pyx_t_2 = PyObject_RichCompare(__pyx_v_DD, __pyx_mstate_global->__pyx_float_0_0, Py_GE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 839, __pyx_L1_error)
- __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 839, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (__pyx_t_4) {
- /* "fontTools/misc/bezierTools.py":840
- * DD = b * b - 4.0 * a * c
- * if DD >= 0.0:
- * rDD = sqrt(DD) # <<<<<<<<<<<<<<
- * roots = [(-b + rDD) / 2.0 / a, (-b - rDD) / 2.0 / a]
- * else:
- */
- __pyx_t_3 = NULL;
- __Pyx_INCREF(__pyx_v_sqrt);
- __pyx_t_1 = __pyx_v_sqrt;
- __pyx_t_5 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_1))) {
- __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
- assert(__pyx_t_3);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
- __Pyx_INCREF(__pyx_t_3);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
- __pyx_t_5 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_DD};
- __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 840, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- }
- __pyx_v_rDD = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":841
- * if DD >= 0.0:
- * rDD = sqrt(DD)
- * roots = [(-b + rDD) / 2.0 / a, (-b - rDD) / 2.0 / a] # <<<<<<<<<<<<<<
- * else:
- * # complex roots, ignore
- */
- __pyx_t_2 = PyNumber_Negative(__pyx_v_b); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 841, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_v_rDD); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 841, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = __Pyx_PyFloat_TrueDivideObjC(__pyx_t_1, __pyx_mstate_global->__pyx_float_2_0, 2.0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 841, __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_v_a); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 841, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Negative(__pyx_v_b); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 841, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = PyNumber_Subtract(__pyx_t_2, __pyx_v_rDD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 841, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = __Pyx_PyFloat_TrueDivideObjC(__pyx_t_3, __pyx_mstate_global->__pyx_float_2_0, 2.0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 841, __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_a); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 841, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 841, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 841, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 841, __pyx_L1_error);
- __pyx_t_1 = 0;
- __pyx_t_3 = 0;
- __pyx_v_roots = ((PyObject*)__pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":839
- * # We have a true quadratic equation. Apply the quadratic formula to find two roots.
- * DD = b * b - 4.0 * a * c
- * if DD >= 0.0: # <<<<<<<<<<<<<<
- * rDD = sqrt(DD)
- * roots = [(-b + rDD) / 2.0 / a, (-b - rDD) / 2.0 / a]
- */
- goto __pyx_L5;
- }
- /* "fontTools/misc/bezierTools.py":844
- * else:
- * # complex roots, ignore
- * roots = [] # <<<<<<<<<<<<<<
- * return roots
- *
- */
- /*else*/ {
- __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 844, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_v_roots = ((PyObject*)__pyx_t_2);
- __pyx_t_2 = 0;
- }
- __pyx_L5:;
- }
- __pyx_L3:;
- /* "fontTools/misc/bezierTools.py":845
- * # complex roots, ignore
- * roots = []
- * return roots # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_INCREF(__pyx_v_roots);
- __pyx_r = __pyx_v_roots;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":815
- *
- *
- * def solveQuadratic(a, b, c, sqrt=sqrt): # <<<<<<<<<<<<<<
- * """Solve a quadratic equation.
- *
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.solveQuadratic", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_roots);
- __Pyx_XDECREF(__pyx_v_DD);
- __Pyx_XDECREF(__pyx_v_rDD);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":848
- *
- *
- * def solveCubic(a, b, c, d): # <<<<<<<<<<<<<<
- * """Solve a cubic equation.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_49solveCubic(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_48solveCubic, "solveCubic(a, b, c, d)\n\nSolve a cubic equation.\n\nSolves *a*x*x*x + b*x*x + c*x + d = 0* where a, b, c and d are real.\n\nArgs:\n a: coefficient of *x\302\263*\n b: coefficient of *x\302\262*\n c: coefficient of *x*\n d: constant term\n\nReturns:\n A list of roots. Note that the returned list is neither guaranteed to\n be sorted nor to contain unique values!\n\nExamples::\n\n >>> solveCubic(1, 1, -6, 0)\n [-3.0, -0.0, 2.0]\n >>> solveCubic(-10.0, -9.0, 48.0, -29.0)\n [-2.9, 1.0, 1.0]\n >>> solveCubic(-9.875, -9.0, 47.625, -28.75)\n [-2.911392, 1.0, 1.0]\n >>> solveCubic(1.0, -4.5, 6.75, -3.375)\n [1.5, 1.5, 1.5]\n >>> solveCubic(-12.0, 18.0, -9.0, 1.50023651123)\n [0.5, 0.5, 0.5]\n >>> solveCubic(\n ... 9.0, 0.0, 0.0, -7.62939453125e-05\n ... ) == [-0.0, -0.0, -0.0]\n True");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_49solveCubic = {"solveCubic", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_49solveCubic, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_48solveCubic};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_49solveCubic(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_a = 0;
- PyObject *__pyx_v_b = 0;
- PyObject *__pyx_v_c = 0;
- PyObject *__pyx_v_d = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[4] = {0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("solveCubic (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_a,&__pyx_mstate_global->__pyx_n_u_b,&__pyx_mstate_global->__pyx_n_u_c,&__pyx_mstate_global->__pyx_n_u_d,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 848, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 848, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 848, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 848, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 848, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "solveCubic", 0) < (0)) __PYX_ERR(0, 848, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("solveCubic", 1, 4, 4, i); __PYX_ERR(0, 848, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 4)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 848, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 848, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 848, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 848, __pyx_L3_error)
- }
- __pyx_v_a = values[0];
- __pyx_v_b = values[1];
- __pyx_v_c = values[2];
- __pyx_v_d = values[3];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("solveCubic", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 848, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.solveCubic", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_48solveCubic(__pyx_self, __pyx_v_a, __pyx_v_b, __pyx_v_c, __pyx_v_d);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_48solveCubic(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) {
- PyObject *__pyx_v_a1 = NULL;
- PyObject *__pyx_v_a2 = NULL;
- PyObject *__pyx_v_a3 = NULL;
- PyObject *__pyx_v_Q = NULL;
- PyObject *__pyx_v_R = NULL;
- PyObject *__pyx_v_R2 = NULL;
- PyObject *__pyx_v_Q3 = NULL;
- PyObject *__pyx_v_R2_Q3 = NULL;
- PyObject *__pyx_v_x = NULL;
- PyObject *__pyx_v_theta = NULL;
- PyObject *__pyx_v_rQ2 = NULL;
- PyObject *__pyx_v_a1_3 = NULL;
- PyObject *__pyx_v_x0 = NULL;
- PyObject *__pyx_v_x1 = NULL;
- PyObject *__pyx_v_x2 = 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;
- size_t __pyx_t_5;
- PyObject *__pyx_t_6 = NULL;
- int __pyx_t_7;
- double __pyx_t_8;
- double __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("solveCubic", 0);
- __Pyx_INCREF(__pyx_v_a);
- /* "fontTools/misc/bezierTools.py":886
- * # found at: http://www.strangecreations.com/library/snippets/Cubic.C
- * #
- * if abs(a) < epsilon: # <<<<<<<<<<<<<<
- * # don't just test for zero; for very small values of 'a' solveCubic()
- * # returns unreliable results, so we fall back to quad.
- */
- __pyx_t_1 = __Pyx_PyNumber_Absolute(__pyx_v_a); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 886, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_epsilon); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 886, __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_ERR(0, 886, __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_ERR(0, 886, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (__pyx_t_4) {
- /* "fontTools/misc/bezierTools.py":889
- * # don't just test for zero; for very small values of 'a' solveCubic()
- * # returns unreliable results, so we fall back to quad.
- * return solveQuadratic(b, c, d) # <<<<<<<<<<<<<<
- * a = float(a)
- * a1 = b / a
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_solveQuadratic); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 889, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_5 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_1))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
- __pyx_t_5 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_b, __pyx_v_c, __pyx_v_d};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 889, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- __pyx_r = __pyx_t_3;
- __pyx_t_3 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":886
- * # found at: http://www.strangecreations.com/library/snippets/Cubic.C
- * #
- * if abs(a) < epsilon: # <<<<<<<<<<<<<<
- * # don't just test for zero; for very small values of 'a' solveCubic()
- * # returns unreliable results, so we fall back to quad.
- */
- }
- /* "fontTools/misc/bezierTools.py":890
- * # returns unreliable results, so we fall back to quad.
- * return solveQuadratic(b, c, d)
- * a = float(a) # <<<<<<<<<<<<<<
- * a1 = b / a
- * a2 = c / a
- */
- __pyx_t_3 = __Pyx_PyNumber_Float(__pyx_v_a); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 890, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF_SET(__pyx_v_a, __pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":891
- * return solveQuadratic(b, c, d)
- * a = float(a)
- * a1 = b / a # <<<<<<<<<<<<<<
- * a2 = c / a
- * a3 = d / a
- */
- __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_v_b, __pyx_v_a); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 891, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_v_a1 = __pyx_t_3;
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":892
- * a = float(a)
- * a1 = b / a
- * a2 = c / a # <<<<<<<<<<<<<<
- * a3 = d / a
- *
- */
- __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_v_c, __pyx_v_a); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 892, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_v_a2 = __pyx_t_3;
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":893
- * a1 = b / a
- * a2 = c / a
- * a3 = d / a # <<<<<<<<<<<<<<
- *
- * Q = (a1 * a1 - 3.0 * a2) / 9.0
- */
- __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_v_d, __pyx_v_a); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 893, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_v_a3 = __pyx_t_3;
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":895
- * a3 = d / a
- *
- * Q = (a1 * a1 - 3.0 * a2) / 9.0 # <<<<<<<<<<<<<<
- * R = (2.0 * a1 * a1 * a1 - 9.0 * a1 * a2 + 27.0 * a3) / 54.0
- *
- */
- __pyx_t_3 = PyNumber_Multiply(__pyx_v_a1, __pyx_v_a1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 895, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_1 = PyNumber_Multiply(__pyx_mstate_global->__pyx_float_3_0, __pyx_v_a2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 895, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Subtract(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 895, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = __Pyx_PyFloat_TrueDivideObjC(__pyx_t_2, __pyx_mstate_global->__pyx_float_9_0, 9.0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 895, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_Q = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":896
- *
- * Q = (a1 * a1 - 3.0 * a2) / 9.0
- * R = (2.0 * a1 * a1 * a1 - 9.0 * a1 * a2 + 27.0 * a3) / 54.0 # <<<<<<<<<<<<<<
- *
- * R2 = R * R
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_mstate_global->__pyx_float_2_0, __pyx_v_a1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 896, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_v_a1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 896, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_v_a1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 896, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Multiply(__pyx_mstate_global->__pyx_float_9_0, __pyx_v_a1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 896, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = PyNumber_Multiply(__pyx_t_2, __pyx_v_a2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 896, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 896, __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_Multiply(__pyx_mstate_global->__pyx_float_27_0, __pyx_v_a3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 896, __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_ERR(0, 896, __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 = __Pyx_PyFloat_TrueDivideObjC(__pyx_t_1, __pyx_mstate_global->__pyx_float_54_0, 54.0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 896, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_v_R = __pyx_t_3;
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":898
- * R = (2.0 * a1 * a1 * a1 - 9.0 * a1 * a2 + 27.0 * a3) / 54.0
- *
- * R2 = R * R # <<<<<<<<<<<<<<
- * Q3 = Q * Q * Q
- * R2 = 0 if R2 < epsilon else R2
- */
- __pyx_t_3 = PyNumber_Multiply(__pyx_v_R, __pyx_v_R); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 898, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_v_R2 = __pyx_t_3;
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":899
- *
- * R2 = R * R
- * Q3 = Q * Q * Q # <<<<<<<<<<<<<<
- * R2 = 0 if R2 < epsilon else R2
- * Q3 = 0 if abs(Q3) < epsilon else Q3
- */
- __pyx_t_3 = PyNumber_Multiply(__pyx_v_Q, __pyx_v_Q); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 899, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_v_Q); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 899, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_v_Q3 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":900
- * R2 = R * R
- * Q3 = Q * Q * Q
- * R2 = 0 if R2 < epsilon else R2 # <<<<<<<<<<<<<<
- * Q3 = 0 if abs(Q3) < epsilon else Q3
- *
- */
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_epsilon); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 900, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_2 = PyObject_RichCompare(__pyx_v_R2, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 900, __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_ERR(0, 900, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (__pyx_t_4) {
- __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
- __pyx_t_1 = __pyx_mstate_global->__pyx_int_0;
- } else {
- __Pyx_INCREF(__pyx_v_R2);
- __pyx_t_1 = __pyx_v_R2;
- }
- __Pyx_DECREF_SET(__pyx_v_R2, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":901
- * Q3 = Q * Q * Q
- * R2 = 0 if R2 < epsilon else R2
- * Q3 = 0 if abs(Q3) < epsilon else Q3 # <<<<<<<<<<<<<<
- *
- * R2_Q3 = R2 - Q3
- */
- __pyx_t_2 = __Pyx_PyNumber_Absolute(__pyx_v_Q3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 901, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_epsilon); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 901, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_6 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 901, __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_6); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 901, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- if (__pyx_t_4) {
- __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
- __pyx_t_1 = __pyx_mstate_global->__pyx_int_0;
- } else {
- __Pyx_INCREF(__pyx_v_Q3);
- __pyx_t_1 = __pyx_v_Q3;
- }
- __Pyx_DECREF_SET(__pyx_v_Q3, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":903
- * Q3 = 0 if abs(Q3) < epsilon else Q3
- *
- * R2_Q3 = R2 - Q3 # <<<<<<<<<<<<<<
- *
- * if R2 == 0.0 and Q3 == 0.0:
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_R2, __pyx_v_Q3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 903, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_R2_Q3 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":905
- * R2_Q3 = R2 - Q3
- *
- * if R2 == 0.0 and Q3 == 0.0: # <<<<<<<<<<<<<<
- * x = round(-a1 / 3.0, epsilonDigits)
- * return [x, x, x]
- */
- __pyx_t_7 = (__Pyx_PyFloat_BoolEqObjC(__pyx_v_R2, __pyx_mstate_global->__pyx_float_0_0, 0.0, 0, 0)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 905, __pyx_L1_error)
- if (__pyx_t_7) {
- } else {
- __pyx_t_4 = __pyx_t_7;
- goto __pyx_L5_bool_binop_done;
- }
- __pyx_t_7 = (__Pyx_PyFloat_BoolEqObjC(__pyx_v_Q3, __pyx_mstate_global->__pyx_float_0_0, 0.0, 0, 0)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 905, __pyx_L1_error)
- __pyx_t_4 = __pyx_t_7;
- __pyx_L5_bool_binop_done:;
- if (__pyx_t_4) {
- /* "fontTools/misc/bezierTools.py":906
- *
- * if R2 == 0.0 and Q3 == 0.0:
- * x = round(-a1 / 3.0, epsilonDigits) # <<<<<<<<<<<<<<
- * return [x, x, x]
- * elif R2_Q3 <= epsilon * 0.5:
- */
- __pyx_t_6 = NULL;
- __pyx_t_3 = PyNumber_Negative(__pyx_v_a1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 906, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_2 = __Pyx_PyFloat_TrueDivideObjC(__pyx_t_3, __pyx_mstate_global->__pyx_float_3_0, 3.0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 906, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_epsilonDigits); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 906, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = 1;
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_2, __pyx_t_3};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_round, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 906, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_v_x = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":907
- * if R2 == 0.0 and Q3 == 0.0:
- * x = round(-a1 / 3.0, epsilonDigits)
- * return [x, x, x] # <<<<<<<<<<<<<<
- * elif R2_Q3 <= epsilon * 0.5:
- * # The epsilon * .5 above ensures that Q3 is not zero.
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyList_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 907, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_INCREF(__pyx_v_x);
- __Pyx_GIVEREF(__pyx_v_x);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_v_x) != (0)) __PYX_ERR(0, 907, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_x);
- __Pyx_GIVEREF(__pyx_v_x);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 1, __pyx_v_x) != (0)) __PYX_ERR(0, 907, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_x);
- __Pyx_GIVEREF(__pyx_v_x);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 2, __pyx_v_x) != (0)) __PYX_ERR(0, 907, __pyx_L1_error);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":905
- * R2_Q3 = R2 - Q3
- *
- * if R2 == 0.0 and Q3 == 0.0: # <<<<<<<<<<<<<<
- * x = round(-a1 / 3.0, epsilonDigits)
- * return [x, x, x]
- */
- }
- /* "fontTools/misc/bezierTools.py":908
- * x = round(-a1 / 3.0, epsilonDigits)
- * return [x, x, x]
- * elif R2_Q3 <= epsilon * 0.5: # <<<<<<<<<<<<<<
- * # The epsilon * .5 above ensures that Q3 is not zero.
- * theta = acos(max(min(R / sqrt(Q3), 1.0), -1.0))
- */
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_epsilon); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 908, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_mstate_global->__pyx_float_0_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 908, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyObject_RichCompare(__pyx_v_R2_Q3, __pyx_t_3, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 908, __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_ERR(0, 908, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_4) {
- /* "fontTools/misc/bezierTools.py":910
- * elif R2_Q3 <= epsilon * 0.5:
- * # The epsilon * .5 above ensures that Q3 is not zero.
- * theta = acos(max(min(R / sqrt(Q3), 1.0), -1.0)) # <<<<<<<<<<<<<<
- * rQ2 = -2.0 * sqrt(Q)
- * a1_3 = a1 / 3.0
- */
- __pyx_t_3 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_acos); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 910, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_8 = -1.0;
- __pyx_t_9 = 1.0;
- __pyx_t_10 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_sqrt); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 910, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __pyx_t_5 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_11))) {
- __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
- assert(__pyx_t_10);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
- __Pyx_INCREF(__pyx_t_10);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
- __pyx_t_5 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_Q3};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 910, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- __pyx_t_11 = __Pyx_PyNumber_Divide(__pyx_v_R, __pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 910, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_10 = PyFloat_FromDouble(__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 910, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __pyx_t_12 = PyObject_RichCompare(__pyx_t_10, __pyx_t_11, Py_LT); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 910, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 910, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
- if (__pyx_t_4) {
- __pyx_t_12 = PyFloat_FromDouble(__pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 910, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_12);
- __pyx_t_6 = __pyx_t_12;
- __pyx_t_12 = 0;
- } else {
- __Pyx_INCREF(__pyx_t_11);
- __pyx_t_6 = __pyx_t_11;
- }
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_INCREF(__pyx_t_6);
- __pyx_t_11 = __pyx_t_6;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_12 = PyFloat_FromDouble(__pyx_t_8); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 910, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_12);
- __pyx_t_10 = PyObject_RichCompare(__pyx_t_12, __pyx_t_11, Py_GT); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 910, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
- __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 910, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- if (__pyx_t_4) {
- __pyx_t_10 = PyFloat_FromDouble(__pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 910, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __pyx_t_6 = __pyx_t_10;
- __pyx_t_10 = 0;
- } else {
- __Pyx_INCREF(__pyx_t_11);
- __pyx_t_6 = __pyx_t_11;
- }
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __pyx_t_5 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_2))) {
- __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
- assert(__pyx_t_3);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
- __Pyx_INCREF(__pyx_t_3);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
- __pyx_t_5 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 910, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_v_theta = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":911
- * # The epsilon * .5 above ensures that Q3 is not zero.
- * theta = acos(max(min(R / sqrt(Q3), 1.0), -1.0))
- * rQ2 = -2.0 * sqrt(Q) # <<<<<<<<<<<<<<
- * a1_3 = a1 / 3.0
- * x0 = rQ2 * cos(theta / 3.0) - a1_3
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_sqrt); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 911, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_5 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_6))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
- __pyx_t_5 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_Q};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_6 = PyNumber_Multiply(__pyx_mstate_global->__pyx_float_neg_2_0, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 911, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_v_rQ2 = __pyx_t_6;
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":912
- * theta = acos(max(min(R / sqrt(Q3), 1.0), -1.0))
- * rQ2 = -2.0 * sqrt(Q)
- * a1_3 = a1 / 3.0 # <<<<<<<<<<<<<<
- * x0 = rQ2 * cos(theta / 3.0) - a1_3
- * x1 = rQ2 * cos((theta + 2.0 * pi) / 3.0) - a1_3
- */
- __pyx_t_6 = __Pyx_PyFloat_TrueDivideObjC(__pyx_v_a1, __pyx_mstate_global->__pyx_float_3_0, 3.0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 912, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_v_a1_3 = __pyx_t_6;
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":913
- * rQ2 = -2.0 * sqrt(Q)
- * a1_3 = a1 / 3.0
- * x0 = rQ2 * cos(theta / 3.0) - a1_3 # <<<<<<<<<<<<<<
- * x1 = rQ2 * cos((theta + 2.0 * pi) / 3.0) - a1_3
- * x2 = rQ2 * cos((theta + 4.0 * pi) / 3.0) - a1_3
- */
- __pyx_t_1 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_cos); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 913, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = __Pyx_PyFloat_TrueDivideObjC(__pyx_v_theta, __pyx_mstate_global->__pyx_float_3_0, 3.0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 913, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_2))) {
- __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
- assert(__pyx_t_1);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
- __Pyx_INCREF(__pyx_t_1);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
- __pyx_t_5 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_3};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__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;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 913, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_rQ2, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 913, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = PyNumber_Subtract(__pyx_t_2, __pyx_v_a1_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 913, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_x0 = __pyx_t_6;
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":914
- * a1_3 = a1 / 3.0
- * x0 = rQ2 * cos(theta / 3.0) - a1_3
- * x1 = rQ2 * cos((theta + 2.0 * pi) / 3.0) - a1_3 # <<<<<<<<<<<<<<
- * x2 = rQ2 * cos((theta + 4.0 * pi) / 3.0) - a1_3
- * x0, x1, x2 = sorted([x0, x1, x2])
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_cos); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 914, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_pi); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 914, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_11 = PyNumber_Multiply(__pyx_mstate_global->__pyx_float_2_0, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 914, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Add(__pyx_v_theta, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 914, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __pyx_t_11 = __Pyx_PyFloat_TrueDivideObjC(__pyx_t_1, __pyx_mstate_global->__pyx_float_3_0, 3.0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 914, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_5 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_5 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_11};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 914, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- __pyx_t_3 = PyNumber_Multiply(__pyx_v_rQ2, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 914, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = PyNumber_Subtract(__pyx_t_3, __pyx_v_a1_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 914, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_v_x1 = __pyx_t_6;
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":915
- * x0 = rQ2 * cos(theta / 3.0) - a1_3
- * x1 = rQ2 * cos((theta + 2.0 * pi) / 3.0) - a1_3
- * x2 = rQ2 * cos((theta + 4.0 * pi) / 3.0) - a1_3 # <<<<<<<<<<<<<<
- * x0, x1, x2 = sorted([x0, x1, x2])
- * # Merge roots that are close-enough
- */
- __pyx_t_3 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_cos); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 915, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_pi); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 915, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Multiply(__pyx_mstate_global->__pyx_float_4_0, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 915, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Add(__pyx_v_theta, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 915, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = __Pyx_PyFloat_TrueDivideObjC(__pyx_t_2, __pyx_mstate_global->__pyx_float_3_0, 3.0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 915, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_5 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_11))) {
- __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_11);
- assert(__pyx_t_3);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
- __Pyx_INCREF(__pyx_t_3);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
- __pyx_t_5 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_1};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 915, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- __pyx_t_11 = PyNumber_Multiply(__pyx_v_rQ2, __pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 915, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = PyNumber_Subtract(__pyx_t_11, __pyx_v_a1_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 915, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __pyx_v_x2 = __pyx_t_6;
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":916
- * x1 = rQ2 * cos((theta + 2.0 * pi) / 3.0) - a1_3
- * x2 = rQ2 * cos((theta + 4.0 * pi) / 3.0) - a1_3
- * x0, x1, x2 = sorted([x0, x1, x2]) # <<<<<<<<<<<<<<
- * # Merge roots that are close-enough
- * if x1 - x0 < epsilon and x2 - x1 < epsilon:
- */
- __pyx_t_6 = PyList_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 916, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_INCREF(__pyx_v_x0);
- __Pyx_GIVEREF(__pyx_v_x0);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v_x0) != (0)) __PYX_ERR(0, 916, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_x1);
- __Pyx_GIVEREF(__pyx_v_x1);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_6, 1, __pyx_v_x1) != (0)) __PYX_ERR(0, 916, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_x2);
- __Pyx_GIVEREF(__pyx_v_x2);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_6, 2, __pyx_v_x2) != (0)) __PYX_ERR(0, 916, __pyx_L1_error);
- if (unlikely((PyList_Sort(__pyx_t_6) < 0))) __PYX_ERR(0, 916, __pyx_L1_error)
- if (1) {
- PyObject* sequence = __pyx_t_6;
- Py_ssize_t size = __Pyx_PyList_GET_SIZE(sequence);
- if (unlikely(size != 3)) {
- if (size > 3) __Pyx_RaiseTooManyValuesError(3);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 916, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_11 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 916, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_11);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 916, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 916, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_3);
- #else
- __pyx_t_11 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 916, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 916, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 916, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- #endif
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- }
- __Pyx_DECREF_SET(__pyx_v_x0, __pyx_t_11);
- __pyx_t_11 = 0;
- __Pyx_DECREF_SET(__pyx_v_x1, __pyx_t_1);
- __pyx_t_1 = 0;
- __Pyx_DECREF_SET(__pyx_v_x2, __pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":918
- * x0, x1, x2 = sorted([x0, x1, x2])
- * # Merge roots that are close-enough
- * if x1 - x0 < epsilon and x2 - x1 < epsilon: # <<<<<<<<<<<<<<
- * x0 = x1 = x2 = round((x0 + x1 + x2) / 3.0, epsilonDigits)
- * elif x1 - x0 < epsilon:
- */
- __pyx_t_6 = PyNumber_Subtract(__pyx_v_x1, __pyx_v_x0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 918, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_epsilon); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 918, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_1 = PyObject_RichCompare(__pyx_t_6, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 918, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 918, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_7) {
- } else {
- __pyx_t_4 = __pyx_t_7;
- goto __pyx_L8_bool_binop_done;
- }
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_x2, __pyx_v_x1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 918, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_epsilon); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 918, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_6 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 918, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 918, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_4 = __pyx_t_7;
- __pyx_L8_bool_binop_done:;
- if (__pyx_t_4) {
- /* "fontTools/misc/bezierTools.py":919
- * # Merge roots that are close-enough
- * if x1 - x0 < epsilon and x2 - x1 < epsilon:
- * x0 = x1 = x2 = round((x0 + x1 + x2) / 3.0, epsilonDigits) # <<<<<<<<<<<<<<
- * elif x1 - x0 < epsilon:
- * x0 = x1 = round((x0 + x1) / 2.0, epsilonDigits)
- */
- __pyx_t_3 = NULL;
- __pyx_t_1 = PyNumber_Add(__pyx_v_x0, __pyx_v_x1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 919, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_11 = PyNumber_Add(__pyx_t_1, __pyx_v_x2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 919, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = __Pyx_PyFloat_TrueDivideObjC(__pyx_t_11, __pyx_mstate_global->__pyx_float_3_0, 3.0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 919, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_epsilonDigits); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 919, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __pyx_t_5 = 1;
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_1, __pyx_t_11};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_round, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 919, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_DECREF_SET(__pyx_v_x0, __pyx_t_6);
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_DECREF_SET(__pyx_v_x1, __pyx_t_6);
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_DECREF_SET(__pyx_v_x2, __pyx_t_6);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":918
- * x0, x1, x2 = sorted([x0, x1, x2])
- * # Merge roots that are close-enough
- * if x1 - x0 < epsilon and x2 - x1 < epsilon: # <<<<<<<<<<<<<<
- * x0 = x1 = x2 = round((x0 + x1 + x2) / 3.0, epsilonDigits)
- * elif x1 - x0 < epsilon:
- */
- goto __pyx_L7;
- }
- /* "fontTools/misc/bezierTools.py":920
- * if x1 - x0 < epsilon and x2 - x1 < epsilon:
- * x0 = x1 = x2 = round((x0 + x1 + x2) / 3.0, epsilonDigits)
- * elif x1 - x0 < epsilon: # <<<<<<<<<<<<<<
- * x0 = x1 = round((x0 + x1) / 2.0, epsilonDigits)
- * x2 = round(x2, epsilonDigits)
- */
- __pyx_t_6 = PyNumber_Subtract(__pyx_v_x1, __pyx_v_x0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 920, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_epsilon); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 920, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __pyx_t_1 = PyObject_RichCompare(__pyx_t_6, __pyx_t_11, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 920, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 920, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_4) {
- /* "fontTools/misc/bezierTools.py":921
- * x0 = x1 = x2 = round((x0 + x1 + x2) / 3.0, epsilonDigits)
- * elif x1 - x0 < epsilon:
- * x0 = x1 = round((x0 + x1) / 2.0, epsilonDigits) # <<<<<<<<<<<<<<
- * x2 = round(x2, epsilonDigits)
- * elif x2 - x1 < epsilon:
- */
- __pyx_t_11 = NULL;
- __pyx_t_6 = PyNumber_Add(__pyx_v_x0, __pyx_v_x1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 921, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_3 = __Pyx_PyFloat_TrueDivideObjC(__pyx_t_6, __pyx_mstate_global->__pyx_float_2_0, 2.0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 921, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_epsilonDigits); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 921, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_5 = 1;
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_3, __pyx_t_6};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_round, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 921, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __Pyx_INCREF(__pyx_t_1);
- __Pyx_DECREF_SET(__pyx_v_x0, __pyx_t_1);
- __Pyx_INCREF(__pyx_t_1);
- __Pyx_DECREF_SET(__pyx_v_x1, __pyx_t_1);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":922
- * elif x1 - x0 < epsilon:
- * x0 = x1 = round((x0 + x1) / 2.0, epsilonDigits)
- * x2 = round(x2, epsilonDigits) # <<<<<<<<<<<<<<
- * elif x2 - x1 < epsilon:
- * x0 = round(x0, epsilonDigits)
- */
- __pyx_t_6 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_epsilonDigits); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 922, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = 1;
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_x2, __pyx_t_3};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_round, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 922, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __Pyx_DECREF_SET(__pyx_v_x2, __pyx_t_1);
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":920
- * if x1 - x0 < epsilon and x2 - x1 < epsilon:
- * x0 = x1 = x2 = round((x0 + x1 + x2) / 3.0, epsilonDigits)
- * elif x1 - x0 < epsilon: # <<<<<<<<<<<<<<
- * x0 = x1 = round((x0 + x1) / 2.0, epsilonDigits)
- * x2 = round(x2, epsilonDigits)
- */
- goto __pyx_L7;
- }
- /* "fontTools/misc/bezierTools.py":923
- * x0 = x1 = round((x0 + x1) / 2.0, epsilonDigits)
- * x2 = round(x2, epsilonDigits)
- * elif x2 - x1 < epsilon: # <<<<<<<<<<<<<<
- * x0 = round(x0, epsilonDigits)
- * x1 = x2 = round((x1 + x2) / 2.0, epsilonDigits)
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_x2, __pyx_v_x1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 923, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_epsilon); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 923, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_6 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 923, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 923, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- if (__pyx_t_4) {
- /* "fontTools/misc/bezierTools.py":924
- * x2 = round(x2, epsilonDigits)
- * elif x2 - x1 < epsilon:
- * x0 = round(x0, epsilonDigits) # <<<<<<<<<<<<<<
- * x1 = x2 = round((x1 + x2) / 2.0, epsilonDigits)
- * else:
- */
- __pyx_t_3 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_epsilonDigits); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 924, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_5 = 1;
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_x0, __pyx_t_1};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_round, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 924, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- __Pyx_DECREF_SET(__pyx_v_x0, __pyx_t_6);
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":925
- * elif x2 - x1 < epsilon:
- * x0 = round(x0, epsilonDigits)
- * x1 = x2 = round((x1 + x2) / 2.0, epsilonDigits) # <<<<<<<<<<<<<<
- * else:
- * x0 = round(x0, epsilonDigits)
- */
- __pyx_t_1 = NULL;
- __pyx_t_3 = PyNumber_Add(__pyx_v_x1, __pyx_v_x2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 925, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_11 = __Pyx_PyFloat_TrueDivideObjC(__pyx_t_3, __pyx_mstate_global->__pyx_float_2_0, 2.0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 925, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_epsilonDigits); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 925, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = 1;
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_11, __pyx_t_3};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_round, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 925, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_DECREF_SET(__pyx_v_x1, __pyx_t_6);
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_DECREF_SET(__pyx_v_x2, __pyx_t_6);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":923
- * x0 = x1 = round((x0 + x1) / 2.0, epsilonDigits)
- * x2 = round(x2, epsilonDigits)
- * elif x2 - x1 < epsilon: # <<<<<<<<<<<<<<
- * x0 = round(x0, epsilonDigits)
- * x1 = x2 = round((x1 + x2) / 2.0, epsilonDigits)
- */
- goto __pyx_L7;
- }
- /* "fontTools/misc/bezierTools.py":927
- * x1 = x2 = round((x1 + x2) / 2.0, epsilonDigits)
- * else:
- * x0 = round(x0, epsilonDigits) # <<<<<<<<<<<<<<
- * x1 = round(x1, epsilonDigits)
- * x2 = round(x2, epsilonDigits)
- */
- /*else*/ {
- __pyx_t_3 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_epsilonDigits); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 927, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __pyx_t_5 = 1;
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_x0, __pyx_t_11};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_round, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 927, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- __Pyx_DECREF_SET(__pyx_v_x0, __pyx_t_6);
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":928
- * else:
- * x0 = round(x0, epsilonDigits)
- * x1 = round(x1, epsilonDigits) # <<<<<<<<<<<<<<
- * x2 = round(x2, epsilonDigits)
- * return [x0, x1, x2]
- */
- __pyx_t_11 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_epsilonDigits); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 928, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = 1;
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_v_x1, __pyx_t_3};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_round, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 928, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- __Pyx_DECREF_SET(__pyx_v_x1, __pyx_t_6);
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":929
- * x0 = round(x0, epsilonDigits)
- * x1 = round(x1, epsilonDigits)
- * x2 = round(x2, epsilonDigits) # <<<<<<<<<<<<<<
- * return [x0, x1, x2]
- * else:
- */
- __pyx_t_3 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_epsilonDigits); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 929, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __pyx_t_5 = 1;
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_x2, __pyx_t_11};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_round, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 929, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- __Pyx_DECREF_SET(__pyx_v_x2, __pyx_t_6);
- __pyx_t_6 = 0;
- }
- __pyx_L7:;
- /* "fontTools/misc/bezierTools.py":930
- * x1 = round(x1, epsilonDigits)
- * x2 = round(x2, epsilonDigits)
- * return [x0, x1, x2] # <<<<<<<<<<<<<<
- * else:
- * x = pow(sqrt(R2_Q3) + abs(R), 1 / 3.0)
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_6 = PyList_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 930, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_INCREF(__pyx_v_x0);
- __Pyx_GIVEREF(__pyx_v_x0);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v_x0) != (0)) __PYX_ERR(0, 930, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_x1);
- __Pyx_GIVEREF(__pyx_v_x1);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_6, 1, __pyx_v_x1) != (0)) __PYX_ERR(0, 930, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_x2);
- __Pyx_GIVEREF(__pyx_v_x2);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_6, 2, __pyx_v_x2) != (0)) __PYX_ERR(0, 930, __pyx_L1_error);
- __pyx_r = __pyx_t_6;
- __pyx_t_6 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":908
- * x = round(-a1 / 3.0, epsilonDigits)
- * return [x, x, x]
- * elif R2_Q3 <= epsilon * 0.5: # <<<<<<<<<<<<<<
- * # The epsilon * .5 above ensures that Q3 is not zero.
- * theta = acos(max(min(R / sqrt(Q3), 1.0), -1.0))
- */
- }
- /* "fontTools/misc/bezierTools.py":932
- * return [x0, x1, x2]
- * else:
- * x = pow(sqrt(R2_Q3) + abs(R), 1 / 3.0) # <<<<<<<<<<<<<<
- * x = x + Q / x
- * if R >= 0.0:
- */
- /*else*/ {
- __pyx_t_11 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_sqrt); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 932, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_11);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_11);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_5 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_v_R2_Q3};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 932, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- __pyx_t_3 = __Pyx_PyNumber_Absolute(__pyx_v_R); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 932, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_11 = PyNumber_Add(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 932, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = PyFloat_FromDouble((1.0 / 3.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 932, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_6 = __Pyx_PyNumber_Power2(__pyx_t_11, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 932, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_v_x = __pyx_t_6;
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":933
- * else:
- * x = pow(sqrt(R2_Q3) + abs(R), 1 / 3.0)
- * x = x + Q / x # <<<<<<<<<<<<<<
- * if R >= 0.0:
- * x = -x
- */
- __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_v_Q, __pyx_v_x); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 933, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_3 = PyNumber_Add(__pyx_v_x, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 933, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":934
- * x = pow(sqrt(R2_Q3) + abs(R), 1 / 3.0)
- * x = x + Q / x
- * if R >= 0.0: # <<<<<<<<<<<<<<
- * x = -x
- * x = round(x - a1 / 3.0, epsilonDigits)
- */
- __pyx_t_3 = PyObject_RichCompare(__pyx_v_R, __pyx_mstate_global->__pyx_float_0_0, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 934, __pyx_L1_error)
- __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 934, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (__pyx_t_4) {
- /* "fontTools/misc/bezierTools.py":935
- * x = x + Q / x
- * if R >= 0.0:
- * x = -x # <<<<<<<<<<<<<<
- * x = round(x - a1 / 3.0, epsilonDigits)
- * return [x]
- */
- __pyx_t_3 = PyNumber_Negative(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 935, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":934
- * x = pow(sqrt(R2_Q3) + abs(R), 1 / 3.0)
- * x = x + Q / x
- * if R >= 0.0: # <<<<<<<<<<<<<<
- * x = -x
- * x = round(x - a1 / 3.0, epsilonDigits)
- */
- }
- /* "fontTools/misc/bezierTools.py":936
- * if R >= 0.0:
- * x = -x
- * x = round(x - a1 / 3.0, epsilonDigits) # <<<<<<<<<<<<<<
- * return [x]
- *
- */
- __pyx_t_6 = NULL;
- __pyx_t_11 = __Pyx_PyFloat_TrueDivideObjC(__pyx_v_a1, __pyx_mstate_global->__pyx_float_3_0, 3.0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 936, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_x, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 936, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_epsilonDigits); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 936, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __pyx_t_5 = 1;
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_1, __pyx_t_11};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_round, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 936, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":937
- * x = -x
- * x = round(x - a1 / 3.0, epsilonDigits)
- * return [x] # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 937, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_INCREF(__pyx_v_x);
- __Pyx_GIVEREF(__pyx_v_x);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_x) != (0)) __PYX_ERR(0, 937, __pyx_L1_error);
- __pyx_r = __pyx_t_3;
- __pyx_t_3 = 0;
- goto __pyx_L0;
- }
- /* "fontTools/misc/bezierTools.py":848
- *
- *
- * def solveCubic(a, b, c, d): # <<<<<<<<<<<<<<
- * """Solve a cubic equation.
- *
- */
- /* function exit code */
- __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_XDECREF(__pyx_t_11);
- __Pyx_XDECREF(__pyx_t_12);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.solveCubic", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_a1);
- __Pyx_XDECREF(__pyx_v_a2);
- __Pyx_XDECREF(__pyx_v_a3);
- __Pyx_XDECREF(__pyx_v_Q);
- __Pyx_XDECREF(__pyx_v_R);
- __Pyx_XDECREF(__pyx_v_R2);
- __Pyx_XDECREF(__pyx_v_Q3);
- __Pyx_XDECREF(__pyx_v_R2_Q3);
- __Pyx_XDECREF(__pyx_v_x);
- __Pyx_XDECREF(__pyx_v_theta);
- __Pyx_XDECREF(__pyx_v_rQ2);
- __Pyx_XDECREF(__pyx_v_a1_3);
- __Pyx_XDECREF(__pyx_v_x0);
- __Pyx_XDECREF(__pyx_v_x1);
- __Pyx_XDECREF(__pyx_v_x2);
- __Pyx_XDECREF(__pyx_v_a);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":945
- *
- *
- * def calcQuadraticParameters(pt1, pt2, pt3): # <<<<<<<<<<<<<<
- * x2, y2 = pt2
- * x3, y3 = pt3
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_51calcQuadraticParameters(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_50calcQuadraticParameters, "calcQuadraticParameters(pt1, pt2, pt3)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_51calcQuadraticParameters = {"calcQuadraticParameters", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_51calcQuadraticParameters, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_50calcQuadraticParameters};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_51calcQuadraticParameters(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_pt3 = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[3] = {0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("calcQuadraticParameters (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 945, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 945, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 945, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 945, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "calcQuadraticParameters", 0) < (0)) __PYX_ERR(0, 945, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("calcQuadraticParameters", 1, 3, 3, i); __PYX_ERR(0, 945, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 3)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 945, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 945, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 945, __pyx_L3_error)
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_pt3 = values[2];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("calcQuadraticParameters", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 945, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcQuadraticParameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_50calcQuadraticParameters(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_50calcQuadraticParameters(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3) {
- PyObject *__pyx_v_x2 = NULL;
- PyObject *__pyx_v_y2 = NULL;
- PyObject *__pyx_v_x3 = NULL;
- PyObject *__pyx_v_y3 = NULL;
- PyObject *__pyx_v_cx = NULL;
- PyObject *__pyx_v_cy = NULL;
- PyObject *__pyx_v_bx = NULL;
- PyObject *__pyx_v_by = NULL;
- PyObject *__pyx_v_ax = NULL;
- PyObject *__pyx_v_ay = 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)(PyObject *);
- PyObject *__pyx_t_5 = NULL;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("calcQuadraticParameters", 0);
- /* "fontTools/misc/bezierTools.py":946
- *
- * def calcQuadraticParameters(pt1, pt2, pt3):
- * x2, y2 = pt2 # <<<<<<<<<<<<<<
- * x3, y3 = pt3
- * cx, cy = pt1
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_pt2))) || (PyList_CheckExact(__pyx_v_pt2))) {
- PyObject* sequence = __pyx_v_pt2;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 946, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 946, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 946, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 946, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 946, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_pt2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 946, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 946, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L4_unpacking_done;
- __pyx_L3_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 946, __pyx_L1_error)
- __pyx_L4_unpacking_done:;
- }
- __pyx_v_x2 = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_y2 = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":947
- * def calcQuadraticParameters(pt1, pt2, pt3):
- * x2, y2 = pt2
- * x3, y3 = pt3 # <<<<<<<<<<<<<<
- * cx, cy = pt1
- * bx = (x2 - cx) * 2.0
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_pt3))) || (PyList_CheckExact(__pyx_v_pt3))) {
- PyObject* sequence = __pyx_v_pt3;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 947, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 947, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 947, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 947, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 947, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_pt3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 947, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- index = 1; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 947, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L6_unpacking_done;
- __pyx_L5_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 947, __pyx_L1_error)
- __pyx_L6_unpacking_done:;
- }
- __pyx_v_x3 = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_y3 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":948
- * x2, y2 = pt2
- * x3, y3 = pt3
- * cx, cy = pt1 # <<<<<<<<<<<<<<
- * bx = (x2 - cx) * 2.0
- * by = (y2 - cy) * 2.0
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_pt1))) || (PyList_CheckExact(__pyx_v_pt1))) {
- PyObject* sequence = __pyx_v_pt1;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 948, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 948, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 948, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 948, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 948, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_pt1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 948, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 948, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L8_unpacking_done;
- __pyx_L7_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 948, __pyx_L1_error)
- __pyx_L8_unpacking_done:;
- }
- __pyx_v_cx = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_cy = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":949
- * x3, y3 = pt3
- * cx, cy = pt1
- * bx = (x2 - cx) * 2.0 # <<<<<<<<<<<<<<
- * by = (y2 - cy) * 2.0
- * ax = x3 - cx - bx
- */
- __pyx_t_2 = PyNumber_Subtract(__pyx_v_x2, __pyx_v_cx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 949, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_mstate_global->__pyx_float_2_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 949, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_bx = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":950
- * cx, cy = pt1
- * bx = (x2 - cx) * 2.0
- * by = (y2 - cy) * 2.0 # <<<<<<<<<<<<<<
- * ax = x3 - cx - bx
- * ay = y3 - cy - by
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_y2, __pyx_v_cy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 950, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_mstate_global->__pyx_float_2_0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 950, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_v_by = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":951
- * bx = (x2 - cx) * 2.0
- * by = (y2 - cy) * 2.0
- * ax = x3 - cx - bx # <<<<<<<<<<<<<<
- * ay = y3 - cy - by
- * return (ax, ay), (bx, by), (cx, cy)
- */
- __pyx_t_2 = PyNumber_Subtract(__pyx_v_x3, __pyx_v_cx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 951, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Subtract(__pyx_t_2, __pyx_v_bx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 951, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_ax = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":952
- * by = (y2 - cy) * 2.0
- * ax = x3 - cx - bx
- * ay = y3 - cy - by # <<<<<<<<<<<<<<
- * return (ax, ay), (bx, by), (cx, cy)
- *
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_y3, __pyx_v_cy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 952, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_by); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 952, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_v_ay = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":953
- * ax = x3 - cx - bx
- * ay = y3 - cy - by
- * return (ax, ay), (bx, by), (cx, cy) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 953, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_INCREF(__pyx_v_ax);
- __Pyx_GIVEREF(__pyx_v_ax);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_ax) != (0)) __PYX_ERR(0, 953, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_ay);
- __Pyx_GIVEREF(__pyx_v_ay);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_ay) != (0)) __PYX_ERR(0, 953, __pyx_L1_error);
- __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 953, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_INCREF(__pyx_v_bx);
- __Pyx_GIVEREF(__pyx_v_bx);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_bx) != (0)) __PYX_ERR(0, 953, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_by);
- __Pyx_GIVEREF(__pyx_v_by);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_by) != (0)) __PYX_ERR(0, 953, __pyx_L1_error);
- __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 953, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_INCREF(__pyx_v_cx);
- __Pyx_GIVEREF(__pyx_v_cx);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_cx) != (0)) __PYX_ERR(0, 953, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_cy);
- __Pyx_GIVEREF(__pyx_v_cy);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_cy) != (0)) __PYX_ERR(0, 953, __pyx_L1_error);
- __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 953, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 953, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 953, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3) != (0)) __PYX_ERR(0, 953, __pyx_L1_error);
- __pyx_t_2 = 0;
- __pyx_t_1 = 0;
- __pyx_t_3 = 0;
- __pyx_r = __pyx_t_5;
- __pyx_t_5 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":945
- *
- *
- * def calcQuadraticParameters(pt1, pt2, pt3): # <<<<<<<<<<<<<<
- * x2, y2 = pt2
- * x3, y3 = pt3
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcQuadraticParameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_x2);
- __Pyx_XDECREF(__pyx_v_y2);
- __Pyx_XDECREF(__pyx_v_x3);
- __Pyx_XDECREF(__pyx_v_y3);
- __Pyx_XDECREF(__pyx_v_cx);
- __Pyx_XDECREF(__pyx_v_cy);
- __Pyx_XDECREF(__pyx_v_bx);
- __Pyx_XDECREF(__pyx_v_by);
- __Pyx_XDECREF(__pyx_v_ax);
- __Pyx_XDECREF(__pyx_v_ay);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":956
- *
- *
- * def calcCubicParameters(pt1, pt2, pt3, pt4): # <<<<<<<<<<<<<<
- * x2, y2 = pt2
- * x3, y3 = pt3
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_53calcCubicParameters(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_52calcCubicParameters, "calcCubicParameters(pt1, pt2, pt3, pt4)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_53calcCubicParameters = {"calcCubicParameters", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_53calcCubicParameters, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_52calcCubicParameters};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_53calcCubicParameters(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_pt3 = 0;
- PyObject *__pyx_v_pt4 = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[4] = {0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("calcCubicParameters (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,&__pyx_mstate_global->__pyx_n_u_pt4,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 956, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 956, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 956, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 956, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 956, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "calcCubicParameters", 0) < (0)) __PYX_ERR(0, 956, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("calcCubicParameters", 1, 4, 4, i); __PYX_ERR(0, 956, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 4)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 956, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 956, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 956, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 956, __pyx_L3_error)
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_pt3 = values[2];
- __pyx_v_pt4 = values[3];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("calcCubicParameters", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 956, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcCubicParameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_52calcCubicParameters(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_pt4);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_52calcCubicParameters(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_pt4) {
- PyObject *__pyx_v_x2 = NULL;
- PyObject *__pyx_v_y2 = NULL;
- PyObject *__pyx_v_x3 = NULL;
- PyObject *__pyx_v_y3 = NULL;
- PyObject *__pyx_v_x4 = NULL;
- PyObject *__pyx_v_y4 = NULL;
- PyObject *__pyx_v_dx = NULL;
- PyObject *__pyx_v_dy = NULL;
- PyObject *__pyx_v_cx = NULL;
- PyObject *__pyx_v_cy = NULL;
- PyObject *__pyx_v_bx = NULL;
- PyObject *__pyx_v_by = NULL;
- PyObject *__pyx_v_ax = NULL;
- PyObject *__pyx_v_ay = 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)(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_RefNannySetupContext("calcCubicParameters", 0);
- /* "fontTools/misc/bezierTools.py":957
- *
- * def calcCubicParameters(pt1, pt2, pt3, pt4):
- * x2, y2 = pt2 # <<<<<<<<<<<<<<
- * x3, y3 = pt3
- * x4, y4 = pt4
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_pt2))) || (PyList_CheckExact(__pyx_v_pt2))) {
- PyObject* sequence = __pyx_v_pt2;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 957, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 957, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 957, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 957, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 957, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_pt2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 957, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 957, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L4_unpacking_done;
- __pyx_L3_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 957, __pyx_L1_error)
- __pyx_L4_unpacking_done:;
- }
- __pyx_v_x2 = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_y2 = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":958
- * def calcCubicParameters(pt1, pt2, pt3, pt4):
- * x2, y2 = pt2
- * x3, y3 = pt3 # <<<<<<<<<<<<<<
- * x4, y4 = pt4
- * dx, dy = pt1
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_pt3))) || (PyList_CheckExact(__pyx_v_pt3))) {
- PyObject* sequence = __pyx_v_pt3;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 958, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 958, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 958, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 958, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 958, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_pt3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 958, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- index = 1; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 958, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L6_unpacking_done;
- __pyx_L5_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 958, __pyx_L1_error)
- __pyx_L6_unpacking_done:;
- }
- __pyx_v_x3 = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_y3 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":959
- * x2, y2 = pt2
- * x3, y3 = pt3
- * x4, y4 = pt4 # <<<<<<<<<<<<<<
- * dx, dy = pt1
- * cx = (x2 - dx) * 3.0
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_pt4))) || (PyList_CheckExact(__pyx_v_pt4))) {
- PyObject* sequence = __pyx_v_pt4;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 959, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 959, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 959, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 959, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 959, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_pt4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 959, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 959, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L8_unpacking_done;
- __pyx_L7_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 959, __pyx_L1_error)
- __pyx_L8_unpacking_done:;
- }
- __pyx_v_x4 = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_y4 = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":960
- * x3, y3 = pt3
- * x4, y4 = pt4
- * dx, dy = pt1 # <<<<<<<<<<<<<<
- * cx = (x2 - dx) * 3.0
- * cy = (y2 - dy) * 3.0
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_pt1))) || (PyList_CheckExact(__pyx_v_pt1))) {
- PyObject* sequence = __pyx_v_pt1;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 960, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 960, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 960, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 960, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 960, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_pt1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 960, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L9_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- index = 1; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L9_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 960, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L10_unpacking_done;
- __pyx_L9_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 960, __pyx_L1_error)
- __pyx_L10_unpacking_done:;
- }
- __pyx_v_dx = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_dy = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":961
- * x4, y4 = pt4
- * dx, dy = pt1
- * cx = (x2 - dx) * 3.0 # <<<<<<<<<<<<<<
- * cy = (y2 - dy) * 3.0
- * bx = (x3 - x2) * 3.0 - cx
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_x2, __pyx_v_dx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 961, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_mstate_global->__pyx_float_3_0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 961, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_v_cx = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":962
- * dx, dy = pt1
- * cx = (x2 - dx) * 3.0
- * cy = (y2 - dy) * 3.0 # <<<<<<<<<<<<<<
- * bx = (x3 - x2) * 3.0 - cx
- * by = (y3 - y2) * 3.0 - cy
- */
- __pyx_t_2 = PyNumber_Subtract(__pyx_v_y2, __pyx_v_dy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 962, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_mstate_global->__pyx_float_3_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 962, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_cy = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":963
- * cx = (x2 - dx) * 3.0
- * cy = (y2 - dy) * 3.0
- * bx = (x3 - x2) * 3.0 - cx # <<<<<<<<<<<<<<
- * by = (y3 - y2) * 3.0 - cy
- * ax = x4 - dx - cx - bx
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_x3, __pyx_v_x2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 963, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_mstate_global->__pyx_float_3_0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 963, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Subtract(__pyx_t_2, __pyx_v_cx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 963, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_bx = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":964
- * cy = (y2 - dy) * 3.0
- * bx = (x3 - x2) * 3.0 - cx
- * by = (y3 - y2) * 3.0 - cy # <<<<<<<<<<<<<<
- * ax = x4 - dx - cx - bx
- * ay = y4 - dy - cy - by
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_y3, __pyx_v_y2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 964, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_mstate_global->__pyx_float_3_0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 964, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Subtract(__pyx_t_2, __pyx_v_cy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 964, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_by = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":965
- * bx = (x3 - x2) * 3.0 - cx
- * by = (y3 - y2) * 3.0 - cy
- * ax = x4 - dx - cx - bx # <<<<<<<<<<<<<<
- * ay = y4 - dy - cy - by
- * return (ax, ay), (bx, by), (cx, cy), (dx, dy)
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_x4, __pyx_v_dx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 965, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_cx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 965, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Subtract(__pyx_t_2, __pyx_v_bx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 965, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_ax = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":966
- * by = (y3 - y2) * 3.0 - cy
- * ax = x4 - dx - cx - bx
- * ay = y4 - dy - cy - by # <<<<<<<<<<<<<<
- * return (ax, ay), (bx, by), (cx, cy), (dx, dy)
- *
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_y4, __pyx_v_dy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 966, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_cy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 966, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Subtract(__pyx_t_2, __pyx_v_by); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 966, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_ay = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":967
- * ax = x4 - dx - cx - bx
- * ay = y4 - dy - cy - by
- * return (ax, ay), (bx, by), (cx, cy), (dx, dy) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 967, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_INCREF(__pyx_v_ax);
- __Pyx_GIVEREF(__pyx_v_ax);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_ax) != (0)) __PYX_ERR(0, 967, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_ay);
- __Pyx_GIVEREF(__pyx_v_ay);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_ay) != (0)) __PYX_ERR(0, 967, __pyx_L1_error);
- __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 967, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_INCREF(__pyx_v_bx);
- __Pyx_GIVEREF(__pyx_v_bx);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_bx) != (0)) __PYX_ERR(0, 967, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_by);
- __Pyx_GIVEREF(__pyx_v_by);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_by) != (0)) __PYX_ERR(0, 967, __pyx_L1_error);
- __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 967, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_INCREF(__pyx_v_cx);
- __Pyx_GIVEREF(__pyx_v_cx);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_cx) != (0)) __PYX_ERR(0, 967, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_cy);
- __Pyx_GIVEREF(__pyx_v_cy);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_cy) != (0)) __PYX_ERR(0, 967, __pyx_L1_error);
- __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 967, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_INCREF(__pyx_v_dx);
- __Pyx_GIVEREF(__pyx_v_dx);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_dx) != (0)) __PYX_ERR(0, 967, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_dy);
- __Pyx_GIVEREF(__pyx_v_dy);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_dy) != (0)) __PYX_ERR(0, 967, __pyx_L1_error);
- __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 967, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 967, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 967, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_3) != (0)) __PYX_ERR(0, 967, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_5);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_5) != (0)) __PYX_ERR(0, 967, __pyx_L1_error);
- __pyx_t_1 = 0;
- __pyx_t_2 = 0;
- __pyx_t_3 = 0;
- __pyx_t_5 = 0;
- __pyx_r = __pyx_t_6;
- __pyx_t_6 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":956
- *
- *
- * def calcCubicParameters(pt1, pt2, pt3, pt4): # <<<<<<<<<<<<<<
- * x2, y2 = pt2
- * x3, y3 = pt3
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_XDECREF(__pyx_t_6);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcCubicParameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_x2);
- __Pyx_XDECREF(__pyx_v_y2);
- __Pyx_XDECREF(__pyx_v_x3);
- __Pyx_XDECREF(__pyx_v_y3);
- __Pyx_XDECREF(__pyx_v_x4);
- __Pyx_XDECREF(__pyx_v_y4);
- __Pyx_XDECREF(__pyx_v_dx);
- __Pyx_XDECREF(__pyx_v_dy);
- __Pyx_XDECREF(__pyx_v_cx);
- __Pyx_XDECREF(__pyx_v_cy);
- __Pyx_XDECREF(__pyx_v_bx);
- __Pyx_XDECREF(__pyx_v_by);
- __Pyx_XDECREF(__pyx_v_ax);
- __Pyx_XDECREF(__pyx_v_ay);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":970
- *
- *
- * @cython.cfunc # <<<<<<<<<<<<<<
- * @cython.inline
- * @cython.locals(
- */
- static CYTHON_INLINE PyObject *__pyx_f_9fontTools_4misc_11bezierTools_calcCubicParametersC(__pyx_t_double_complex __pyx_v_pt1, __pyx_t_double_complex __pyx_v_pt2, __pyx_t_double_complex __pyx_v_pt3, __pyx_t_double_complex __pyx_v_pt4) {
- __pyx_t_double_complex __pyx_v_a;
- __pyx_t_double_complex __pyx_v_b;
- __pyx_t_double_complex __pyx_v_c;
- 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_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("calcCubicParametersC", 0);
- /* "fontTools/misc/bezierTools.py":982
- * )
- * def calcCubicParametersC(pt1, pt2, pt3, pt4):
- * c = (pt2 - pt1) * 3.0 # <<<<<<<<<<<<<<
- * b = (pt3 - pt2) * 3.0 - c
- * a = pt4 - pt1 - c - b
- */
- __pyx_v_c = __Pyx_c_prod_double(__Pyx_c_diff_double(__pyx_v_pt2, __pyx_v_pt1), __pyx_t_double_complex_from_parts(3.0, 0));
- /* "fontTools/misc/bezierTools.py":983
- * def calcCubicParametersC(pt1, pt2, pt3, pt4):
- * c = (pt2 - pt1) * 3.0
- * b = (pt3 - pt2) * 3.0 - c # <<<<<<<<<<<<<<
- * a = pt4 - pt1 - c - b
- * return (a, b, c, pt1)
- */
- __pyx_v_b = __Pyx_c_diff_double(__Pyx_c_prod_double(__Pyx_c_diff_double(__pyx_v_pt3, __pyx_v_pt2), __pyx_t_double_complex_from_parts(3.0, 0)), __pyx_v_c);
- /* "fontTools/misc/bezierTools.py":984
- * c = (pt2 - pt1) * 3.0
- * b = (pt3 - pt2) * 3.0 - c
- * a = pt4 - pt1 - c - b # <<<<<<<<<<<<<<
- * return (a, b, c, pt1)
- *
- */
- __pyx_v_a = __Pyx_c_diff_double(__Pyx_c_diff_double(__Pyx_c_diff_double(__pyx_v_pt4, __pyx_v_pt1), __pyx_v_c), __pyx_v_b);
- /* "fontTools/misc/bezierTools.py":985
- * b = (pt3 - pt2) * 3.0 - c
- * a = pt4 - pt1 - c - b
- * return (a, b, c, pt1) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = __pyx_PyComplex_FromComplex(__pyx_v_a); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 985, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __pyx_PyComplex_FromComplex(__pyx_v_b); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 985, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = __pyx_PyComplex_FromComplex(__pyx_v_c); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 985, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = __pyx_PyComplex_FromComplex(__pyx_v_pt1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 985, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 985, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 985, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 985, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3) != (0)) __PYX_ERR(0, 985, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_4);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4) != (0)) __PYX_ERR(0, 985, __pyx_L1_error);
- __pyx_t_1 = 0;
- __pyx_t_2 = 0;
- __pyx_t_3 = 0;
- __pyx_t_4 = 0;
- __pyx_r = __pyx_t_5;
- __pyx_t_5 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":970
- *
- *
- * @cython.cfunc # <<<<<<<<<<<<<<
- * @cython.inline
- * @cython.locals(
- */
- /* function exit code */
- __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("fontTools.misc.bezierTools.calcCubicParametersC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = 0;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":988
- *
- *
- * def calcQuadraticPoints(a, b, c): # <<<<<<<<<<<<<<
- * ax, ay = a
- * bx, by = b
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_55calcQuadraticPoints(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_54calcQuadraticPoints, "calcQuadraticPoints(a, b, c)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_55calcQuadraticPoints = {"calcQuadraticPoints", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_55calcQuadraticPoints, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_54calcQuadraticPoints};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_55calcQuadraticPoints(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_a = 0;
- PyObject *__pyx_v_b = 0;
- PyObject *__pyx_v_c = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[3] = {0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("calcQuadraticPoints (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_a,&__pyx_mstate_global->__pyx_n_u_b,&__pyx_mstate_global->__pyx_n_u_c,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 988, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 988, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 988, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 988, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "calcQuadraticPoints", 0) < (0)) __PYX_ERR(0, 988, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("calcQuadraticPoints", 1, 3, 3, i); __PYX_ERR(0, 988, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 3)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 988, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 988, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 988, __pyx_L3_error)
- }
- __pyx_v_a = values[0];
- __pyx_v_b = values[1];
- __pyx_v_c = values[2];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("calcQuadraticPoints", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 988, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcQuadraticPoints", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_54calcQuadraticPoints(__pyx_self, __pyx_v_a, __pyx_v_b, __pyx_v_c);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_54calcQuadraticPoints(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
- PyObject *__pyx_v_ax = NULL;
- PyObject *__pyx_v_ay = NULL;
- PyObject *__pyx_v_bx = NULL;
- PyObject *__pyx_v_by = NULL;
- PyObject *__pyx_v_cx = NULL;
- PyObject *__pyx_v_cy = NULL;
- PyObject *__pyx_v_x1 = NULL;
- PyObject *__pyx_v_y1 = NULL;
- PyObject *__pyx_v_x2 = NULL;
- PyObject *__pyx_v_y2 = NULL;
- PyObject *__pyx_v_x3 = NULL;
- PyObject *__pyx_v_y3 = 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)(PyObject *);
- PyObject *__pyx_t_5 = NULL;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("calcQuadraticPoints", 0);
- /* "fontTools/misc/bezierTools.py":989
- *
- * def calcQuadraticPoints(a, b, c):
- * ax, ay = a # <<<<<<<<<<<<<<
- * bx, by = b
- * cx, cy = c
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_a))) || (PyList_CheckExact(__pyx_v_a))) {
- PyObject* sequence = __pyx_v_a;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 989, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 989, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 989, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 989, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 989, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_a); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 989, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 989, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L4_unpacking_done;
- __pyx_L3_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 989, __pyx_L1_error)
- __pyx_L4_unpacking_done:;
- }
- __pyx_v_ax = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_ay = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":990
- * def calcQuadraticPoints(a, b, c):
- * ax, ay = a
- * bx, by = b # <<<<<<<<<<<<<<
- * cx, cy = c
- * x1 = cx
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_b))) || (PyList_CheckExact(__pyx_v_b))) {
- PyObject* sequence = __pyx_v_b;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 990, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 990, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 990, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 990, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 990, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_b); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 990, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- index = 1; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 990, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L6_unpacking_done;
- __pyx_L5_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 990, __pyx_L1_error)
- __pyx_L6_unpacking_done:;
- }
- __pyx_v_bx = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_by = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":991
- * ax, ay = a
- * bx, by = b
- * cx, cy = c # <<<<<<<<<<<<<<
- * x1 = cx
- * y1 = cy
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_c))) || (PyList_CheckExact(__pyx_v_c))) {
- PyObject* sequence = __pyx_v_c;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 991, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 991, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 991, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 991, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 991, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_c); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 991, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 991, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L8_unpacking_done;
- __pyx_L7_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 991, __pyx_L1_error)
- __pyx_L8_unpacking_done:;
- }
- __pyx_v_cx = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_cy = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":992
- * bx, by = b
- * cx, cy = c
- * x1 = cx # <<<<<<<<<<<<<<
- * y1 = cy
- * x2 = (bx * 0.5) + cx
- */
- __Pyx_INCREF(__pyx_v_cx);
- __pyx_v_x1 = __pyx_v_cx;
- /* "fontTools/misc/bezierTools.py":993
- * cx, cy = c
- * x1 = cx
- * y1 = cy # <<<<<<<<<<<<<<
- * x2 = (bx * 0.5) + cx
- * y2 = (by * 0.5) + cy
- */
- __Pyx_INCREF(__pyx_v_cy);
- __pyx_v_y1 = __pyx_v_cy;
- /* "fontTools/misc/bezierTools.py":994
- * x1 = cx
- * y1 = cy
- * x2 = (bx * 0.5) + cx # <<<<<<<<<<<<<<
- * y2 = (by * 0.5) + cy
- * x3 = ax + bx + cx
- */
- __pyx_t_2 = PyNumber_Multiply(__pyx_v_bx, __pyx_mstate_global->__pyx_float_0_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 994, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_v_cx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 994, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_x2 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":995
- * y1 = cy
- * x2 = (bx * 0.5) + cx
- * y2 = (by * 0.5) + cy # <<<<<<<<<<<<<<
- * x3 = ax + bx + cx
- * y3 = ay + by + cy
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_by, __pyx_mstate_global->__pyx_float_0_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 995, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_cy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 995, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_v_y2 = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":996
- * x2 = (bx * 0.5) + cx
- * y2 = (by * 0.5) + cy
- * x3 = ax + bx + cx # <<<<<<<<<<<<<<
- * y3 = ay + by + cy
- * return (x1, y1), (x2, y2), (x3, y3)
- */
- __pyx_t_2 = PyNumber_Add(__pyx_v_ax, __pyx_v_bx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 996, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_v_cx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 996, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_x3 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":997
- * y2 = (by * 0.5) + cy
- * x3 = ax + bx + cx
- * y3 = ay + by + cy # <<<<<<<<<<<<<<
- * return (x1, y1), (x2, y2), (x3, y3)
- *
- */
- __pyx_t_1 = PyNumber_Add(__pyx_v_ay, __pyx_v_by); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 997, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_cy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 997, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_v_y3 = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":998
- * x3 = ax + bx + cx
- * y3 = ay + by + cy
- * return (x1, y1), (x2, y2), (x3, y3) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 998, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_INCREF(__pyx_v_x1);
- __Pyx_GIVEREF(__pyx_v_x1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_x1) != (0)) __PYX_ERR(0, 998, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_y1);
- __Pyx_GIVEREF(__pyx_v_y1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y1) != (0)) __PYX_ERR(0, 998, __pyx_L1_error);
- __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 998, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_INCREF(__pyx_v_x2);
- __Pyx_GIVEREF(__pyx_v_x2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_x2) != (0)) __PYX_ERR(0, 998, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_y2);
- __Pyx_GIVEREF(__pyx_v_y2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_y2) != (0)) __PYX_ERR(0, 998, __pyx_L1_error);
- __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 998, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_INCREF(__pyx_v_x3);
- __Pyx_GIVEREF(__pyx_v_x3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_x3) != (0)) __PYX_ERR(0, 998, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_y3);
- __Pyx_GIVEREF(__pyx_v_y3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_y3) != (0)) __PYX_ERR(0, 998, __pyx_L1_error);
- __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 998, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 998, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 998, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3) != (0)) __PYX_ERR(0, 998, __pyx_L1_error);
- __pyx_t_2 = 0;
- __pyx_t_1 = 0;
- __pyx_t_3 = 0;
- __pyx_r = __pyx_t_5;
- __pyx_t_5 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":988
- *
- *
- * def calcQuadraticPoints(a, b, c): # <<<<<<<<<<<<<<
- * ax, ay = a
- * bx, by = b
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcQuadraticPoints", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_ax);
- __Pyx_XDECREF(__pyx_v_ay);
- __Pyx_XDECREF(__pyx_v_bx);
- __Pyx_XDECREF(__pyx_v_by);
- __Pyx_XDECREF(__pyx_v_cx);
- __Pyx_XDECREF(__pyx_v_cy);
- __Pyx_XDECREF(__pyx_v_x1);
- __Pyx_XDECREF(__pyx_v_y1);
- __Pyx_XDECREF(__pyx_v_x2);
- __Pyx_XDECREF(__pyx_v_y2);
- __Pyx_XDECREF(__pyx_v_x3);
- __Pyx_XDECREF(__pyx_v_y3);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1001
- *
- *
- * def calcCubicPoints(a, b, c, d): # <<<<<<<<<<<<<<
- * ax, ay = a
- * bx, by = b
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_57calcCubicPoints(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_56calcCubicPoints, "calcCubicPoints(a, b, c, d)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_57calcCubicPoints = {"calcCubicPoints", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_57calcCubicPoints, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_56calcCubicPoints};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_57calcCubicPoints(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_a = 0;
- PyObject *__pyx_v_b = 0;
- PyObject *__pyx_v_c = 0;
- PyObject *__pyx_v_d = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[4] = {0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("calcCubicPoints (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_a,&__pyx_mstate_global->__pyx_n_u_b,&__pyx_mstate_global->__pyx_n_u_c,&__pyx_mstate_global->__pyx_n_u_d,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1001, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1001, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1001, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1001, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1001, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "calcCubicPoints", 0) < (0)) __PYX_ERR(0, 1001, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("calcCubicPoints", 1, 4, 4, i); __PYX_ERR(0, 1001, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 4)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1001, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1001, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1001, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1001, __pyx_L3_error)
- }
- __pyx_v_a = values[0];
- __pyx_v_b = values[1];
- __pyx_v_c = values[2];
- __pyx_v_d = values[3];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("calcCubicPoints", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 1001, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcCubicPoints", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_56calcCubicPoints(__pyx_self, __pyx_v_a, __pyx_v_b, __pyx_v_c, __pyx_v_d);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_56calcCubicPoints(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) {
- PyObject *__pyx_v_ax = NULL;
- PyObject *__pyx_v_ay = NULL;
- PyObject *__pyx_v_bx = NULL;
- PyObject *__pyx_v_by = NULL;
- PyObject *__pyx_v_cx = NULL;
- PyObject *__pyx_v_cy = NULL;
- PyObject *__pyx_v_dx = NULL;
- PyObject *__pyx_v_dy = NULL;
- PyObject *__pyx_v_x1 = NULL;
- PyObject *__pyx_v_y1 = NULL;
- PyObject *__pyx_v_x2 = NULL;
- PyObject *__pyx_v_y2 = NULL;
- PyObject *__pyx_v_x3 = NULL;
- PyObject *__pyx_v_y3 = NULL;
- PyObject *__pyx_v_x4 = NULL;
- PyObject *__pyx_v_y4 = 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)(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_RefNannySetupContext("calcCubicPoints", 0);
- /* "fontTools/misc/bezierTools.py":1002
- *
- * def calcCubicPoints(a, b, c, d):
- * ax, ay = a # <<<<<<<<<<<<<<
- * bx, by = b
- * cx, cy = c
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_a))) || (PyList_CheckExact(__pyx_v_a))) {
- PyObject* sequence = __pyx_v_a;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1002, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1002, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1002, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1002, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1002, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_a); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1002, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 1002, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L4_unpacking_done;
- __pyx_L3_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1002, __pyx_L1_error)
- __pyx_L4_unpacking_done:;
- }
- __pyx_v_ax = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_ay = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1003
- * def calcCubicPoints(a, b, c, d):
- * ax, ay = a
- * bx, by = b # <<<<<<<<<<<<<<
- * cx, cy = c
- * dx, dy = d
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_b))) || (PyList_CheckExact(__pyx_v_b))) {
- PyObject* sequence = __pyx_v_b;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1003, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1003, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1003, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1003, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1003, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_b); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1003, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- index = 1; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 1003, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L6_unpacking_done;
- __pyx_L5_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1003, __pyx_L1_error)
- __pyx_L6_unpacking_done:;
- }
- __pyx_v_bx = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_by = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1004
- * ax, ay = a
- * bx, by = b
- * cx, cy = c # <<<<<<<<<<<<<<
- * dx, dy = d
- * x1 = dx
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_c))) || (PyList_CheckExact(__pyx_v_c))) {
- PyObject* sequence = __pyx_v_c;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1004, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1004, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1004, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1004, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1004, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_c); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1004, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 1004, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L8_unpacking_done;
- __pyx_L7_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1004, __pyx_L1_error)
- __pyx_L8_unpacking_done:;
- }
- __pyx_v_cx = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_cy = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1005
- * bx, by = b
- * cx, cy = c
- * dx, dy = d # <<<<<<<<<<<<<<
- * x1 = dx
- * y1 = dy
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_d))) || (PyList_CheckExact(__pyx_v_d))) {
- PyObject* sequence = __pyx_v_d;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1005, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1005, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1005, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1005, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1005, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_d); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1005, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L9_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- index = 1; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L9_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 1005, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L10_unpacking_done;
- __pyx_L9_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1005, __pyx_L1_error)
- __pyx_L10_unpacking_done:;
- }
- __pyx_v_dx = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_dy = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1006
- * cx, cy = c
- * dx, dy = d
- * x1 = dx # <<<<<<<<<<<<<<
- * y1 = dy
- * x2 = (cx / 3.0) + dx
- */
- __Pyx_INCREF(__pyx_v_dx);
- __pyx_v_x1 = __pyx_v_dx;
- /* "fontTools/misc/bezierTools.py":1007
- * dx, dy = d
- * x1 = dx
- * y1 = dy # <<<<<<<<<<<<<<
- * x2 = (cx / 3.0) + dx
- * y2 = (cy / 3.0) + dy
- */
- __Pyx_INCREF(__pyx_v_dy);
- __pyx_v_y1 = __pyx_v_dy;
- /* "fontTools/misc/bezierTools.py":1008
- * x1 = dx
- * y1 = dy
- * x2 = (cx / 3.0) + dx # <<<<<<<<<<<<<<
- * y2 = (cy / 3.0) + dy
- * x3 = (bx + cx) / 3.0 + x2
- */
- __pyx_t_1 = __Pyx_PyFloat_TrueDivideObjC(__pyx_v_cx, __pyx_mstate_global->__pyx_float_3_0, 3.0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1008, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_dx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1008, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_v_x2 = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1009
- * y1 = dy
- * x2 = (cx / 3.0) + dx
- * y2 = (cy / 3.0) + dy # <<<<<<<<<<<<<<
- * x3 = (bx + cx) / 3.0 + x2
- * y3 = (by + cy) / 3.0 + y2
- */
- __pyx_t_2 = __Pyx_PyFloat_TrueDivideObjC(__pyx_v_cy, __pyx_mstate_global->__pyx_float_3_0, 3.0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1009, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_v_dy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1009, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_y2 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1010
- * x2 = (cx / 3.0) + dx
- * y2 = (cy / 3.0) + dy
- * x3 = (bx + cx) / 3.0 + x2 # <<<<<<<<<<<<<<
- * y3 = (by + cy) / 3.0 + y2
- * x4 = ax + dx + cx + bx
- */
- __pyx_t_1 = PyNumber_Add(__pyx_v_bx, __pyx_v_cx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1010, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyFloat_TrueDivideObjC(__pyx_t_1, __pyx_mstate_global->__pyx_float_3_0, 3.0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1010, __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_x2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1010, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_x3 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1011
- * y2 = (cy / 3.0) + dy
- * x3 = (bx + cx) / 3.0 + x2
- * y3 = (by + cy) / 3.0 + y2 # <<<<<<<<<<<<<<
- * x4 = ax + dx + cx + bx
- * y4 = ay + dy + cy + by
- */
- __pyx_t_1 = PyNumber_Add(__pyx_v_by, __pyx_v_cy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1011, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyFloat_TrueDivideObjC(__pyx_t_1, __pyx_mstate_global->__pyx_float_3_0, 3.0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1011, __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_y2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1011, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_y3 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1012
- * x3 = (bx + cx) / 3.0 + x2
- * y3 = (by + cy) / 3.0 + y2
- * x4 = ax + dx + cx + bx # <<<<<<<<<<<<<<
- * y4 = ay + dy + cy + by
- * return (x1, y1), (x2, y2), (x3, y3), (x4, y4)
- */
- __pyx_t_1 = PyNumber_Add(__pyx_v_ax, __pyx_v_dx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1012, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_cx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1012, __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_bx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1012, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_x4 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1013
- * y3 = (by + cy) / 3.0 + y2
- * x4 = ax + dx + cx + bx
- * y4 = ay + dy + cy + by # <<<<<<<<<<<<<<
- * return (x1, y1), (x2, y2), (x3, y3), (x4, y4)
- *
- */
- __pyx_t_1 = PyNumber_Add(__pyx_v_ay, __pyx_v_dy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1013, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_cy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1013, __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_by); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1013, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_v_y4 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1014
- * x4 = ax + dx + cx + bx
- * y4 = ay + dy + cy + by
- * return (x1, y1), (x2, y2), (x3, y3), (x4, y4) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1014, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_INCREF(__pyx_v_x1);
- __Pyx_GIVEREF(__pyx_v_x1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_x1) != (0)) __PYX_ERR(0, 1014, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_y1);
- __Pyx_GIVEREF(__pyx_v_y1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_y1) != (0)) __PYX_ERR(0, 1014, __pyx_L1_error);
- __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1014, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_INCREF(__pyx_v_x2);
- __Pyx_GIVEREF(__pyx_v_x2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_x2) != (0)) __PYX_ERR(0, 1014, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_y2);
- __Pyx_GIVEREF(__pyx_v_y2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y2) != (0)) __PYX_ERR(0, 1014, __pyx_L1_error);
- __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1014, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_INCREF(__pyx_v_x3);
- __Pyx_GIVEREF(__pyx_v_x3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_x3) != (0)) __PYX_ERR(0, 1014, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_y3);
- __Pyx_GIVEREF(__pyx_v_y3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_y3) != (0)) __PYX_ERR(0, 1014, __pyx_L1_error);
- __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1014, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_INCREF(__pyx_v_x4);
- __Pyx_GIVEREF(__pyx_v_x4);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_x4) != (0)) __PYX_ERR(0, 1014, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_y4);
- __Pyx_GIVEREF(__pyx_v_y4);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_y4) != (0)) __PYX_ERR(0, 1014, __pyx_L1_error);
- __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1014, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 1014, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 1014, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_3) != (0)) __PYX_ERR(0, 1014, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_5);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_5) != (0)) __PYX_ERR(0, 1014, __pyx_L1_error);
- __pyx_t_1 = 0;
- __pyx_t_2 = 0;
- __pyx_t_3 = 0;
- __pyx_t_5 = 0;
- __pyx_r = __pyx_t_6;
- __pyx_t_6 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1001
- *
- *
- * def calcCubicPoints(a, b, c, d): # <<<<<<<<<<<<<<
- * ax, ay = a
- * bx, by = b
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_XDECREF(__pyx_t_6);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.calcCubicPoints", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_ax);
- __Pyx_XDECREF(__pyx_v_ay);
- __Pyx_XDECREF(__pyx_v_bx);
- __Pyx_XDECREF(__pyx_v_by);
- __Pyx_XDECREF(__pyx_v_cx);
- __Pyx_XDECREF(__pyx_v_cy);
- __Pyx_XDECREF(__pyx_v_dx);
- __Pyx_XDECREF(__pyx_v_dy);
- __Pyx_XDECREF(__pyx_v_x1);
- __Pyx_XDECREF(__pyx_v_y1);
- __Pyx_XDECREF(__pyx_v_x2);
- __Pyx_XDECREF(__pyx_v_y2);
- __Pyx_XDECREF(__pyx_v_x3);
- __Pyx_XDECREF(__pyx_v_y3);
- __Pyx_XDECREF(__pyx_v_x4);
- __Pyx_XDECREF(__pyx_v_y4);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1017
- *
- *
- * @cython.cfunc # <<<<<<<<<<<<<<
- * @cython.inline
- * @cython.locals(
- */
- static CYTHON_INLINE PyObject *__pyx_f_9fontTools_4misc_11bezierTools_calcCubicPointsC(__pyx_t_double_complex __pyx_v_a, __pyx_t_double_complex __pyx_v_b, __pyx_t_double_complex __pyx_v_c, __pyx_t_double_complex __pyx_v_d) {
- __pyx_t_double_complex __pyx_v_p2;
- __pyx_t_double_complex __pyx_v_p3;
- __pyx_t_double_complex __pyx_v_p4;
- 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_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("calcCubicPointsC", 0);
- /* "fontTools/misc/bezierTools.py":1029
- * )
- * def calcCubicPointsC(a, b, c, d):
- * p2 = c * (1 / 3) + d # <<<<<<<<<<<<<<
- * p3 = (b + c) * (1 / 3) + p2
- * p4 = a + b + c + d
- */
- __pyx_v_p2 = __Pyx_c_sum_double(__Pyx_c_prod_double(__pyx_v_c, __pyx_t_double_complex_from_parts((1.0 / 3.0), 0)), __pyx_v_d);
- /* "fontTools/misc/bezierTools.py":1030
- * def calcCubicPointsC(a, b, c, d):
- * p2 = c * (1 / 3) + d
- * p3 = (b + c) * (1 / 3) + p2 # <<<<<<<<<<<<<<
- * p4 = a + b + c + d
- * return (d, p2, p3, p4)
- */
- __pyx_v_p3 = __Pyx_c_sum_double(__Pyx_c_prod_double(__Pyx_c_sum_double(__pyx_v_b, __pyx_v_c), __pyx_t_double_complex_from_parts((1.0 / 3.0), 0)), __pyx_v_p2);
- /* "fontTools/misc/bezierTools.py":1031
- * p2 = c * (1 / 3) + d
- * p3 = (b + c) * (1 / 3) + p2
- * p4 = a + b + c + d # <<<<<<<<<<<<<<
- * return (d, p2, p3, p4)
- *
- */
- __pyx_v_p4 = __Pyx_c_sum_double(__Pyx_c_sum_double(__Pyx_c_sum_double(__pyx_v_a, __pyx_v_b), __pyx_v_c), __pyx_v_d);
- /* "fontTools/misc/bezierTools.py":1032
- * p3 = (b + c) * (1 / 3) + p2
- * p4 = a + b + c + d
- * return (d, p2, p3, p4) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = __pyx_PyComplex_FromComplex(__pyx_v_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1032, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __pyx_PyComplex_FromComplex(__pyx_v_p2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1032, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = __pyx_PyComplex_FromComplex(__pyx_v_p3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1032, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = __pyx_PyComplex_FromComplex(__pyx_v_p4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1032, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1032, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 1032, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 1032, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3) != (0)) __PYX_ERR(0, 1032, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_4);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4) != (0)) __PYX_ERR(0, 1032, __pyx_L1_error);
- __pyx_t_1 = 0;
- __pyx_t_2 = 0;
- __pyx_t_3 = 0;
- __pyx_t_4 = 0;
- __pyx_r = __pyx_t_5;
- __pyx_t_5 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1017
- *
- *
- * @cython.cfunc # <<<<<<<<<<<<<<
- * @cython.inline
- * @cython.locals(
- */
- /* function exit code */
- __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("fontTools.misc.bezierTools.calcCubicPointsC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = 0;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1040
- *
- *
- * def linePointAtT(pt1, pt2, t): # <<<<<<<<<<<<<<
- * """Finds the point at time `t` on a line.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_59linePointAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_58linePointAtT, "linePointAtT(pt1, pt2, t)\n\nFinds the point at time `t` on a line.\n\nArgs:\n pt1, pt2: Coordinates of the line as 2D tuples.\n t: The time along the line.\n\nReturns:\n A 2D tuple with the coordinates of the point.");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_59linePointAtT = {"linePointAtT", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_59linePointAtT, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_58linePointAtT};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_59linePointAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_t = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[3] = {0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("linePointAtT (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_t,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1040, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1040, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1040, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1040, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "linePointAtT", 0) < (0)) __PYX_ERR(0, 1040, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("linePointAtT", 1, 3, 3, i); __PYX_ERR(0, 1040, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 3)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1040, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1040, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1040, __pyx_L3_error)
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_t = values[2];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("linePointAtT", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 1040, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.linePointAtT", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_58linePointAtT(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_t);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_58linePointAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_t) {
- 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_RefNannySetupContext("linePointAtT", 0);
- /* "fontTools/misc/bezierTools.py":1050
- * A 2D tuple with the coordinates of the point.
- * """
- * return ((pt1[0] * (1 - t) + pt2[0] * t), (pt1[1] * (1 - t) + pt2[1] * t)) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_pt1, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1050, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyLong_SubtractCObj(__pyx_mstate_global->__pyx_int_1, __pyx_v_t, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1050, __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_ERR(0, 1050, __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_t_2 = __Pyx_GetItemInt(__pyx_v_pt2, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1050, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_v_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1050, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1050, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_pt1, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1050, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = __Pyx_PyLong_SubtractCObj(__pyx_mstate_global->__pyx_int_1, __pyx_v_t, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1050, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = PyNumber_Multiply(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1050, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_pt2, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1050, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_v_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1050, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = PyNumber_Add(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1050, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1050, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 1050, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 1050, __pyx_L1_error);
- __pyx_t_2 = 0;
- __pyx_t_3 = 0;
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1040
- *
- *
- * def linePointAtT(pt1, pt2, t): # <<<<<<<<<<<<<<
- * """Finds the point at time `t` on a line.
- *
- */
- /* function exit code */
- __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("fontTools.misc.bezierTools.linePointAtT", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1053
- *
- *
- * def quadraticPointAtT(pt1, pt2, pt3, t): # <<<<<<<<<<<<<<
- * """Finds the point at time `t` on a quadratic curve.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_61quadraticPointAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_60quadraticPointAtT, "quadraticPointAtT(pt1, pt2, pt3, t)\n\nFinds the point at time `t` on a quadratic curve.\n\nArgs:\n pt1, pt2, pt3: Coordinates of the curve as 2D tuples.\n t: The time along the curve.\n\nReturns:\n A 2D tuple with the coordinates of the point.");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_61quadraticPointAtT = {"quadraticPointAtT", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_61quadraticPointAtT, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_60quadraticPointAtT};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_61quadraticPointAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_pt3 = 0;
- PyObject *__pyx_v_t = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[4] = {0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("quadraticPointAtT (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,&__pyx_mstate_global->__pyx_n_u_t,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1053, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1053, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1053, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1053, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1053, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "quadraticPointAtT", 0) < (0)) __PYX_ERR(0, 1053, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("quadraticPointAtT", 1, 4, 4, i); __PYX_ERR(0, 1053, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 4)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1053, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1053, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1053, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1053, __pyx_L3_error)
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_pt3 = values[2];
- __pyx_v_t = values[3];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("quadraticPointAtT", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 1053, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.quadraticPointAtT", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_60quadraticPointAtT(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_t);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_60quadraticPointAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_t) {
- PyObject *__pyx_v_x = NULL;
- PyObject *__pyx_v_y = 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_RefNannySetupContext("quadraticPointAtT", 0);
- /* "fontTools/misc/bezierTools.py":1063
- * A 2D tuple with the coordinates of the point.
- * """
- * x = (1 - t) * (1 - t) * pt1[0] + 2 * (1 - t) * t * pt2[0] + t * t * pt3[0] # <<<<<<<<<<<<<<
- * y = (1 - t) * (1 - t) * pt1[1] + 2 * (1 - t) * t * pt2[1] + t * t * pt3[1]
- * return (x, y)
- */
- __pyx_t_1 = __Pyx_PyLong_SubtractCObj(__pyx_mstate_global->__pyx_int_1, __pyx_v_t, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1063, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyLong_SubtractCObj(__pyx_mstate_global->__pyx_int_1, __pyx_v_t, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1063, __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_ERR(0, 1063, __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_t_2 = __Pyx_GetItemInt(__pyx_v_pt1, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1063, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1063, __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_t_2 = __Pyx_PyLong_SubtractCObj(__pyx_mstate_global->__pyx_int_1, __pyx_v_t, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1063, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = __Pyx_PyLong_MultiplyCObj(__pyx_mstate_global->__pyx_int_2, __pyx_t_2, 2, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1063, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_3, __pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1063, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_pt2, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1063, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1063, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1063, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = PyNumber_Multiply(__pyx_v_t, __pyx_v_t); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1063, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_pt3, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1063, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1063, __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_t_1 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1063, __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_x = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1064
- * """
- * x = (1 - t) * (1 - t) * pt1[0] + 2 * (1 - t) * t * pt2[0] + t * t * pt3[0]
- * y = (1 - t) * (1 - t) * pt1[1] + 2 * (1 - t) * t * pt2[1] + t * t * pt3[1] # <<<<<<<<<<<<<<
- * return (x, y)
- *
- */
- __pyx_t_1 = __Pyx_PyLong_SubtractCObj(__pyx_mstate_global->__pyx_int_1, __pyx_v_t, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyLong_SubtractCObj(__pyx_mstate_global->__pyx_int_1, __pyx_v_t, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1064, __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_ERR(0, 1064, __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_t_2 = __Pyx_GetItemInt(__pyx_v_pt1, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1064, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __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_t_2 = __Pyx_PyLong_SubtractCObj(__pyx_mstate_global->__pyx_int_1, __pyx_v_t, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1064, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = __Pyx_PyLong_MultiplyCObj(__pyx_mstate_global->__pyx_int_2, __pyx_t_2, 2, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1064, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_3, __pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1064, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_pt2, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1064, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1064, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1064, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = PyNumber_Multiply(__pyx_v_t, __pyx_v_t); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1064, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_pt3, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1064, __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_t_1 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __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_y = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1065
- * x = (1 - t) * (1 - t) * pt1[0] + 2 * (1 - t) * t * pt2[0] + t * t * pt3[0]
- * y = (1 - t) * (1 - t) * pt1[1] + 2 * (1 - t) * t * pt2[1] + t * t * pt3[1]
- * return (x, y) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1065, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_INCREF(__pyx_v_x);
- __Pyx_GIVEREF(__pyx_v_x);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_x) != (0)) __PYX_ERR(0, 1065, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_y);
- __Pyx_GIVEREF(__pyx_v_y);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_y) != (0)) __PYX_ERR(0, 1065, __pyx_L1_error);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1053
- *
- *
- * def quadraticPointAtT(pt1, pt2, pt3, t): # <<<<<<<<<<<<<<
- * """Finds the point at time `t` on a quadratic curve.
- *
- */
- /* function exit code */
- __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("fontTools.misc.bezierTools.quadraticPointAtT", __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_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1068
- *
- *
- * def cubicPointAtT(pt1, pt2, pt3, pt4, t): # <<<<<<<<<<<<<<
- * """Finds the point at time `t` on a cubic curve.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_63cubicPointAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_62cubicPointAtT, "cubicPointAtT(pt1, pt2, pt3, pt4, t)\n\nFinds the point at time `t` on a cubic curve.\n\nArgs:\n pt1, pt2, pt3, pt4: Coordinates of the curve as 2D tuples.\n t: The time along the curve.\n\nReturns:\n A 2D tuple with the coordinates of the point.");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_63cubicPointAtT = {"cubicPointAtT", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_63cubicPointAtT, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_62cubicPointAtT};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_63cubicPointAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_pt1 = 0;
- PyObject *__pyx_v_pt2 = 0;
- PyObject *__pyx_v_pt3 = 0;
- PyObject *__pyx_v_pt4 = 0;
- PyObject *__pyx_v_t = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[5] = {0,0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("cubicPointAtT (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,&__pyx_mstate_global->__pyx_n_u_pt4,&__pyx_mstate_global->__pyx_n_u_t,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1068, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 5:
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1068, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1068, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1068, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1068, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1068, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "cubicPointAtT", 0) < (0)) __PYX_ERR(0, 1068, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("cubicPointAtT", 1, 5, 5, i); __PYX_ERR(0, 1068, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 5)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1068, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1068, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1068, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1068, __pyx_L3_error)
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1068, __pyx_L3_error)
- }
- __pyx_v_pt1 = values[0];
- __pyx_v_pt2 = values[1];
- __pyx_v_pt3 = values[2];
- __pyx_v_pt4 = values[3];
- __pyx_v_t = values[4];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("cubicPointAtT", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 1068, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.cubicPointAtT", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_62cubicPointAtT(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_pt4, __pyx_v_t);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_62cubicPointAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pt1, PyObject *__pyx_v_pt2, PyObject *__pyx_v_pt3, PyObject *__pyx_v_pt4, PyObject *__pyx_v_t) {
- PyObject *__pyx_v_t2 = NULL;
- PyObject *__pyx_v__1_t = NULL;
- PyObject *__pyx_v__1_t_2 = NULL;
- PyObject *__pyx_v_x = NULL;
- PyObject *__pyx_v_y = 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_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("cubicPointAtT", 0);
- /* "fontTools/misc/bezierTools.py":1078
- * A 2D tuple with the coordinates of the point.
- * """
- * t2 = t * t # <<<<<<<<<<<<<<
- * _1_t = 1 - t
- * _1_t_2 = _1_t * _1_t
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_t, __pyx_v_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1078, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_t2 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1079
- * """
- * t2 = t * t
- * _1_t = 1 - t # <<<<<<<<<<<<<<
- * _1_t_2 = _1_t * _1_t
- * x = (
- */
- __pyx_t_1 = __Pyx_PyLong_SubtractCObj(__pyx_mstate_global->__pyx_int_1, __pyx_v_t, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1079, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v__1_t = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1080
- * t2 = t * t
- * _1_t = 1 - t
- * _1_t_2 = _1_t * _1_t # <<<<<<<<<<<<<<
- * x = (
- * _1_t_2 * _1_t * pt1[0]
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v__1_t, __pyx_v__1_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1080, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v__1_t_2 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1082
- * _1_t_2 = _1_t * _1_t
- * x = (
- * _1_t_2 * _1_t * pt1[0] # <<<<<<<<<<<<<<
- * + 3 * (_1_t_2 * t * pt2[0] + _1_t * t2 * pt3[0])
- * + t2 * t * pt4[0]
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v__1_t_2, __pyx_v__1_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1082, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_pt1, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1082, __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_ERR(0, 1082, __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;
- /* "fontTools/misc/bezierTools.py":1083
- * x = (
- * _1_t_2 * _1_t * pt1[0]
- * + 3 * (_1_t_2 * t * pt2[0] + _1_t * t2 * pt3[0]) # <<<<<<<<<<<<<<
- * + t2 * t * pt4[0]
- * )
- */
- __pyx_t_2 = PyNumber_Multiply(__pyx_v__1_t_2, __pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1083, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_pt2, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1083, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1083, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Multiply(__pyx_v__1_t, __pyx_v_t2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1083, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_pt3, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1083, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_5 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1083, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Add(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1083, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_5 = __Pyx_PyLong_MultiplyCObj(__pyx_mstate_global->__pyx_int_3, __pyx_t_2, 3, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1083, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1083, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- /* "fontTools/misc/bezierTools.py":1084
- * _1_t_2 * _1_t * pt1[0]
- * + 3 * (_1_t_2 * t * pt2[0] + _1_t * t2 * pt3[0])
- * + t2 * t * pt4[0] # <<<<<<<<<<<<<<
- * )
- * y = (
- */
- __pyx_t_5 = PyNumber_Multiply(__pyx_v_t2, __pyx_v_t); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1084, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_pt4, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1084, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = PyNumber_Multiply(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1084, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1084, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_v_x = __pyx_t_3;
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1087
- * )
- * y = (
- * _1_t_2 * _1_t * pt1[1] # <<<<<<<<<<<<<<
- * + 3 * (_1_t_2 * t * pt2[1] + _1_t * t2 * pt3[1])
- * + t2 * t * pt4[1]
- */
- __pyx_t_3 = PyNumber_Multiply(__pyx_v__1_t_2, __pyx_v__1_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1087, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_pt1, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1087, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_2 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1087, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- /* "fontTools/misc/bezierTools.py":1088
- * y = (
- * _1_t_2 * _1_t * pt1[1]
- * + 3 * (_1_t_2 * t * pt2[1] + _1_t * t2 * pt3[1]) # <<<<<<<<<<<<<<
- * + t2 * t * pt4[1]
- * )
- */
- __pyx_t_4 = PyNumber_Multiply(__pyx_v__1_t_2, __pyx_v_t); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1088, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_pt2, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1088, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1088, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = PyNumber_Multiply(__pyx_v__1_t, __pyx_v_t2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1088, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_pt3, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1088, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1088, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = PyNumber_Add(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1088, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = __Pyx_PyLong_MultiplyCObj(__pyx_mstate_global->__pyx_int_3, __pyx_t_4, 3, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1088, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1088, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1089
- * _1_t_2 * _1_t * pt1[1]
- * + 3 * (_1_t_2 * t * pt2[1] + _1_t * t2 * pt3[1])
- * + t2 * t * pt4[1] # <<<<<<<<<<<<<<
- * )
- * return (x, y)
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_t2, __pyx_v_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1089, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_pt4, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1089, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_5 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1089, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Add(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1089, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_v_y = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1091
- * + t2 * t * pt4[1]
- * )
- * return (x, y) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1091, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_INCREF(__pyx_v_x);
- __Pyx_GIVEREF(__pyx_v_x);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_x) != (0)) __PYX_ERR(0, 1091, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_y);
- __Pyx_GIVEREF(__pyx_v_y);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y) != (0)) __PYX_ERR(0, 1091, __pyx_L1_error);
- __pyx_r = __pyx_t_2;
- __pyx_t_2 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1068
- *
- *
- * def cubicPointAtT(pt1, pt2, pt3, pt4, t): # <<<<<<<<<<<<<<
- * """Finds the point at time `t` on a cubic curve.
- *
- */
- /* function exit code */
- __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("fontTools.misc.bezierTools.cubicPointAtT", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_t2);
- __Pyx_XDECREF(__pyx_v__1_t);
- __Pyx_XDECREF(__pyx_v__1_t_2);
- __Pyx_XDECREF(__pyx_v_x);
- __Pyx_XDECREF(__pyx_v_y);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1094
- *
- *
- * @cython.returns(cython.complex) # <<<<<<<<<<<<<<
- * @cython.locals(
- * t=cython.double,
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_65cubicPointAtTC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_64cubicPointAtTC, "cubicPointAtTC(double complex pt1, double complex pt2, double complex pt3, double complex pt4, double t)\n\nFinds the point at time `t` on a cubic curve.\n\nArgs:\n pt1, pt2, pt3, pt4: Coordinates of the curve as complex numbers.\n t: The time along the curve.\n\nReturns:\n A complex number with the coordinates of the point.");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_65cubicPointAtTC = {"cubicPointAtTC", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_65cubicPointAtTC, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_64cubicPointAtTC};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_65cubicPointAtTC(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- __pyx_t_double_complex __pyx_v_pt1;
- __pyx_t_double_complex __pyx_v_pt2;
- __pyx_t_double_complex __pyx_v_pt3;
- __pyx_t_double_complex __pyx_v_pt4;
- double __pyx_v_t;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[5] = {0,0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("cubicPointAtTC (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pt1,&__pyx_mstate_global->__pyx_n_u_pt2,&__pyx_mstate_global->__pyx_n_u_pt3,&__pyx_mstate_global->__pyx_n_u_pt4,&__pyx_mstate_global->__pyx_n_u_t,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1094, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 5:
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1094, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1094, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1094, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1094, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1094, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "cubicPointAtTC", 0) < (0)) __PYX_ERR(0, 1094, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("cubicPointAtTC", 1, 5, 5, i); __PYX_ERR(0, 1094, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 5)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1094, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1094, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1094, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1094, __pyx_L3_error)
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1094, __pyx_L3_error)
- }
- __pyx_v_pt1 = __Pyx_PyComplex_As___pyx_t_double_complex(values[0]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1103, __pyx_L3_error)
- __pyx_v_pt2 = __Pyx_PyComplex_As___pyx_t_double_complex(values[1]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1103, __pyx_L3_error)
- __pyx_v_pt3 = __Pyx_PyComplex_As___pyx_t_double_complex(values[2]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1103, __pyx_L3_error)
- __pyx_v_pt4 = __Pyx_PyComplex_As___pyx_t_double_complex(values[3]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1103, __pyx_L3_error)
- __pyx_v_t = __Pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_t == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1103, __pyx_L3_error)
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("cubicPointAtTC", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 1094, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.cubicPointAtTC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_64cubicPointAtTC(__pyx_self, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_pt3, __pyx_v_pt4, __pyx_v_t);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_64cubicPointAtTC(CYTHON_UNUSED PyObject *__pyx_self, __pyx_t_double_complex __pyx_v_pt1, __pyx_t_double_complex __pyx_v_pt2, __pyx_t_double_complex __pyx_v_pt3, __pyx_t_double_complex __pyx_v_pt4, double __pyx_v_t) {
- double __pyx_v_t2;
- double __pyx_v__1_t;
- double __pyx_v__1_t_2;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- __pyx_t_double_complex __pyx_t_1;
- PyObject *__pyx_t_2 = NULL;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("cubicPointAtTC", 0);
- /* "fontTools/misc/bezierTools.py":1113
- * A complex number with the coordinates of the point.
- * """
- * t2 = t * t # <<<<<<<<<<<<<<
- * _1_t = 1 - t
- * _1_t_2 = _1_t * _1_t
- */
- __pyx_v_t2 = (__pyx_v_t * __pyx_v_t);
- /* "fontTools/misc/bezierTools.py":1114
- * """
- * t2 = t * t
- * _1_t = 1 - t # <<<<<<<<<<<<<<
- * _1_t_2 = _1_t * _1_t
- * return _1_t_2 * _1_t * pt1 + 3 * (_1_t_2 * t * pt2 + _1_t * t2 * pt3) + t2 * t * pt4
- */
- __pyx_v__1_t = (1.0 - __pyx_v_t);
- /* "fontTools/misc/bezierTools.py":1115
- * t2 = t * t
- * _1_t = 1 - t
- * _1_t_2 = _1_t * _1_t # <<<<<<<<<<<<<<
- * return _1_t_2 * _1_t * pt1 + 3 * (_1_t_2 * t * pt2 + _1_t * t2 * pt3) + t2 * t * pt4
- *
- */
- __pyx_v__1_t_2 = (__pyx_v__1_t * __pyx_v__1_t);
- /* "fontTools/misc/bezierTools.py":1116
- * _1_t = 1 - t
- * _1_t_2 = _1_t * _1_t
- * return _1_t_2 * _1_t * pt1 + 3 * (_1_t_2 * t * pt2 + _1_t * t2 * pt3) + t2 * t * pt4 # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = __Pyx_c_sum_double(__Pyx_c_sum_double(__Pyx_c_prod_double(__pyx_t_double_complex_from_parts((__pyx_v__1_t_2 * __pyx_v__1_t), 0), __pyx_v_pt1), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(3, 0), __Pyx_c_sum_double(__Pyx_c_prod_double(__pyx_t_double_complex_from_parts((__pyx_v__1_t_2 * __pyx_v_t), 0), __pyx_v_pt2), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts((__pyx_v__1_t * __pyx_v_t2), 0), __pyx_v_pt3)))), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts((__pyx_v_t2 * __pyx_v_t), 0), __pyx_v_pt4));
- __pyx_t_2 = __pyx_PyComplex_FromComplex(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1116, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_r = __pyx_t_2;
- __pyx_t_2 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1094
- *
- *
- * @cython.returns(cython.complex) # <<<<<<<<<<<<<<
- * @cython.locals(
- * t=cython.double,
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.cubicPointAtTC", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1119
- *
- *
- * def segmentPointAtT(seg, t): # <<<<<<<<<<<<<<
- * if len(seg) == 2:
- * return linePointAtT(*seg, t)
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_67segmentPointAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_66segmentPointAtT, "segmentPointAtT(seg, t)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_67segmentPointAtT = {"segmentPointAtT", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_67segmentPointAtT, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_66segmentPointAtT};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_67segmentPointAtT(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_seg = 0;
- PyObject *__pyx_v_t = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[2] = {0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("segmentPointAtT (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_seg,&__pyx_mstate_global->__pyx_n_u_t,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1119, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1119, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1119, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "segmentPointAtT", 0) < (0)) __PYX_ERR(0, 1119, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("segmentPointAtT", 1, 2, 2, i); __PYX_ERR(0, 1119, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 2)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1119, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1119, __pyx_L3_error)
- }
- __pyx_v_seg = values[0];
- __pyx_v_t = values[1];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("segmentPointAtT", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1119, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.segmentPointAtT", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_66segmentPointAtT(__pyx_self, __pyx_v_seg, __pyx_v_t);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_66segmentPointAtT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seg, PyObject *__pyx_v_t) {
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- Py_ssize_t __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;
- size_t __pyx_t_7;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("segmentPointAtT", 0);
- /* "fontTools/misc/bezierTools.py":1120
- *
- * def segmentPointAtT(seg, t):
- * if len(seg) == 2: # <<<<<<<<<<<<<<
- * return linePointAtT(*seg, t)
- * elif len(seg) == 3:
- */
- __pyx_t_1 = PyObject_Length(__pyx_v_seg); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1120, __pyx_L1_error)
- __pyx_t_2 = (__pyx_t_1 == 2);
- if (__pyx_t_2) {
- /* "fontTools/misc/bezierTools.py":1121
- * def segmentPointAtT(seg, t):
- * if len(seg) == 2:
- * return linePointAtT(*seg, t) # <<<<<<<<<<<<<<
- * elif len(seg) == 3:
- * return quadraticPointAtT(*seg, t)
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_linePointAtT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1121, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_seg); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1121, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1121, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_INCREF(__pyx_v_t);
- __Pyx_GIVEREF(__pyx_v_t);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_t) != (0)) __PYX_ERR(0, 1121, __pyx_L1_error);
- __pyx_t_6 = PyNumber_Add(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1121, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1121, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_r = __pyx_t_5;
- __pyx_t_5 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1120
- *
- * def segmentPointAtT(seg, t):
- * if len(seg) == 2: # <<<<<<<<<<<<<<
- * return linePointAtT(*seg, t)
- * elif len(seg) == 3:
- */
- }
- /* "fontTools/misc/bezierTools.py":1122
- * if len(seg) == 2:
- * return linePointAtT(*seg, t)
- * elif len(seg) == 3: # <<<<<<<<<<<<<<
- * return quadraticPointAtT(*seg, t)
- * elif len(seg) == 4:
- */
- __pyx_t_1 = PyObject_Length(__pyx_v_seg); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1122, __pyx_L1_error)
- __pyx_t_2 = (__pyx_t_1 == 3);
- if (__pyx_t_2) {
- /* "fontTools/misc/bezierTools.py":1123
- * return linePointAtT(*seg, t)
- * elif len(seg) == 3:
- * return quadraticPointAtT(*seg, t) # <<<<<<<<<<<<<<
- * elif len(seg) == 4:
- * return cubicPointAtT(*seg, t)
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_quadraticPointAtT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1123, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_seg); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1123, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1123, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_INCREF(__pyx_v_t);
- __Pyx_GIVEREF(__pyx_v_t);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_t) != (0)) __PYX_ERR(0, 1123, __pyx_L1_error);
- __pyx_t_4 = PyNumber_Add(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1123, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1123, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_r = __pyx_t_3;
- __pyx_t_3 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1122
- * if len(seg) == 2:
- * return linePointAtT(*seg, t)
- * elif len(seg) == 3: # <<<<<<<<<<<<<<
- * return quadraticPointAtT(*seg, t)
- * elif len(seg) == 4:
- */
- }
- /* "fontTools/misc/bezierTools.py":1124
- * elif len(seg) == 3:
- * return quadraticPointAtT(*seg, t)
- * elif len(seg) == 4: # <<<<<<<<<<<<<<
- * return cubicPointAtT(*seg, t)
- * raise ValueError("Unknown curve degree")
- */
- __pyx_t_1 = PyObject_Length(__pyx_v_seg); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1124, __pyx_L1_error)
- __pyx_t_2 = (__pyx_t_1 == 4);
- if (__pyx_t_2) {
- /* "fontTools/misc/bezierTools.py":1125
- * return quadraticPointAtT(*seg, t)
- * elif len(seg) == 4:
- * return cubicPointAtT(*seg, t) # <<<<<<<<<<<<<<
- * raise ValueError("Unknown curve degree")
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_cubicPointAtT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1125, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_seg); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1125, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1125, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_INCREF(__pyx_v_t);
- __Pyx_GIVEREF(__pyx_v_t);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_t) != (0)) __PYX_ERR(0, 1125, __pyx_L1_error);
- __pyx_t_6 = PyNumber_Add(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1125, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1125, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_r = __pyx_t_5;
- __pyx_t_5 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1124
- * elif len(seg) == 3:
- * return quadraticPointAtT(*seg, t)
- * elif len(seg) == 4: # <<<<<<<<<<<<<<
- * return cubicPointAtT(*seg, t)
- * raise ValueError("Unknown curve degree")
- */
- }
- /* "fontTools/misc/bezierTools.py":1126
- * elif len(seg) == 4:
- * return cubicPointAtT(*seg, t)
- * raise ValueError("Unknown curve degree") # <<<<<<<<<<<<<<
- *
- *
- */
- __pyx_t_6 = NULL;
- __pyx_t_7 = 1;
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unknown_curve_degree};
- __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
- if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1126, __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_ERR(0, 1126, __pyx_L1_error)
- /* "fontTools/misc/bezierTools.py":1119
- *
- *
- * def segmentPointAtT(seg, t): # <<<<<<<<<<<<<<
- * if len(seg) == 2:
- * return linePointAtT(*seg, t)
- */
- /* function exit code */
- __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("fontTools.misc.bezierTools.segmentPointAtT", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1134
- *
- *
- * def _line_t_of_pt(s, e, pt): # <<<<<<<<<<<<<<
- * sx, sy = s
- * ex, ey = e
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_69_line_t_of_pt(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_68_line_t_of_pt, "_line_t_of_pt(s, e, pt)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_69_line_t_of_pt = {"_line_t_of_pt", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_69_line_t_of_pt, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_68_line_t_of_pt};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_69_line_t_of_pt(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_s = 0;
- PyObject *__pyx_v_e = 0;
- PyObject *__pyx_v_pt = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[3] = {0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("_line_t_of_pt (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_s,&__pyx_mstate_global->__pyx_n_u_e,&__pyx_mstate_global->__pyx_n_u_pt,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1134, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1134, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1134, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1134, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_line_t_of_pt", 0) < (0)) __PYX_ERR(0, 1134, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_line_t_of_pt", 1, 3, 3, i); __PYX_ERR(0, 1134, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 3)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1134, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1134, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1134, __pyx_L3_error)
- }
- __pyx_v_s = values[0];
- __pyx_v_e = values[1];
- __pyx_v_pt = values[2];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("_line_t_of_pt", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 1134, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools._line_t_of_pt", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_68_line_t_of_pt(__pyx_self, __pyx_v_s, __pyx_v_e, __pyx_v_pt);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_68_line_t_of_pt(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_s, PyObject *__pyx_v_e, PyObject *__pyx_v_pt) {
- PyObject *__pyx_v_sx = NULL;
- PyObject *__pyx_v_sy = NULL;
- PyObject *__pyx_v_ex = NULL;
- PyObject *__pyx_v_ey = NULL;
- PyObject *__pyx_v_px = NULL;
- PyObject *__pyx_v_py = 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)(PyObject *);
- int __pyx_t_5;
- int __pyx_t_6;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("_line_t_of_pt", 0);
- /* "fontTools/misc/bezierTools.py":1135
- *
- * def _line_t_of_pt(s, e, pt):
- * sx, sy = s # <<<<<<<<<<<<<<
- * ex, ey = e
- * px, py = pt
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_s))) || (PyList_CheckExact(__pyx_v_s))) {
- PyObject* sequence = __pyx_v_s;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1135, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1135, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1135, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1135, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1135, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_s); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1135, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 1135, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L4_unpacking_done;
- __pyx_L3_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1135, __pyx_L1_error)
- __pyx_L4_unpacking_done:;
- }
- __pyx_v_sx = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_sy = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1136
- * def _line_t_of_pt(s, e, pt):
- * sx, sy = s
- * ex, ey = e # <<<<<<<<<<<<<<
- * px, py = pt
- * if abs(sx - ex) < epsilon and abs(sy - ey) < epsilon:
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_e))) || (PyList_CheckExact(__pyx_v_e))) {
- PyObject* sequence = __pyx_v_e;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1136, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1136, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1136, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1136, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1136, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_e); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1136, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- index = 1; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 1136, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L6_unpacking_done;
- __pyx_L5_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1136, __pyx_L1_error)
- __pyx_L6_unpacking_done:;
- }
- __pyx_v_ex = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_ey = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1137
- * sx, sy = s
- * ex, ey = e
- * px, py = pt # <<<<<<<<<<<<<<
- * if abs(sx - ex) < epsilon and abs(sy - ey) < epsilon:
- * # Line is a point!
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_pt))) || (PyList_CheckExact(__pyx_v_pt))) {
- PyObject* sequence = __pyx_v_pt;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1137, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1137, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1137, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1137, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1137, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_pt); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1137, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 1137, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L8_unpacking_done;
- __pyx_L7_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1137, __pyx_L1_error)
- __pyx_L8_unpacking_done:;
- }
- __pyx_v_px = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_py = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1138
- * ex, ey = e
- * px, py = pt
- * if abs(sx - ex) < epsilon and abs(sy - ey) < epsilon: # <<<<<<<<<<<<<<
- * # Line is a point!
- * return -1
- */
- __pyx_t_2 = PyNumber_Subtract(__pyx_v_sx, __pyx_v_ex); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1138, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyNumber_Absolute(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1138, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_epsilon); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1138, __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_ERR(0, 1138, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1138, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (__pyx_t_6) {
- } else {
- __pyx_t_5 = __pyx_t_6;
- goto __pyx_L10_bool_binop_done;
- }
- __pyx_t_3 = PyNumber_Subtract(__pyx_v_sy, __pyx_v_ey); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1138, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_2 = __Pyx_PyNumber_Absolute(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1138, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_epsilon); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1138, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1138, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1138, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_5 = __pyx_t_6;
- __pyx_L10_bool_binop_done:;
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":1140
- * if abs(sx - ex) < epsilon and abs(sy - ey) < epsilon:
- * # Line is a point!
- * return -1 # <<<<<<<<<<<<<<
- * # Use the largest
- * if abs(sx - ex) > abs(sy - ey):
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_INCREF(__pyx_mstate_global->__pyx_int_neg_1);
- __pyx_r = __pyx_mstate_global->__pyx_int_neg_1;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1138
- * ex, ey = e
- * px, py = pt
- * if abs(sx - ex) < epsilon and abs(sy - ey) < epsilon: # <<<<<<<<<<<<<<
- * # Line is a point!
- * return -1
- */
- }
- /* "fontTools/misc/bezierTools.py":1142
- * return -1
- * # Use the largest
- * if abs(sx - ex) > abs(sy - ey): # <<<<<<<<<<<<<<
- * return (px - sx) / (ex - sx)
- * else:
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_sx, __pyx_v_ex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1142, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = __Pyx_PyNumber_Absolute(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1142, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_sy, __pyx_v_ey); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1142, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyNumber_Absolute(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1142, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1142, __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_ERR(0, 1142, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":1143
- * # Use the largest
- * if abs(sx - ex) > abs(sy - ey):
- * return (px - sx) / (ex - sx) # <<<<<<<<<<<<<<
- * else:
- * return (py - sy) / (ey - sy)
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_px, __pyx_v_sx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1143, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Subtract(__pyx_v_ex, __pyx_v_sx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1143, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1143, __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;
- /* "fontTools/misc/bezierTools.py":1142
- * return -1
- * # Use the largest
- * if abs(sx - ex) > abs(sy - ey): # <<<<<<<<<<<<<<
- * return (px - sx) / (ex - sx)
- * else:
- */
- }
- /* "fontTools/misc/bezierTools.py":1145
- * return (px - sx) / (ex - sx)
- * else:
- * return (py - sy) / (ey - sy) # <<<<<<<<<<<<<<
- *
- *
- */
- /*else*/ {
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_3 = PyNumber_Subtract(__pyx_v_py, __pyx_v_sy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1145, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_2 = PyNumber_Subtract(__pyx_v_ey, __pyx_v_sy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1145, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1145, __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_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- }
- /* "fontTools/misc/bezierTools.py":1134
- *
- *
- * def _line_t_of_pt(s, e, pt): # <<<<<<<<<<<<<<
- * sx, sy = s
- * ex, ey = e
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_AddTraceback("fontTools.misc.bezierTools._line_t_of_pt", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_sx);
- __Pyx_XDECREF(__pyx_v_sy);
- __Pyx_XDECREF(__pyx_v_ex);
- __Pyx_XDECREF(__pyx_v_ey);
- __Pyx_XDECREF(__pyx_v_px);
- __Pyx_XDECREF(__pyx_v_py);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1148
- *
- *
- * def _both_points_are_on_same_side_of_origin(a, b, origin): # <<<<<<<<<<<<<<
- * xDiff = (a[0] - origin[0]) * (b[0] - origin[0])
- * yDiff = (a[1] - origin[1]) * (b[1] - origin[1])
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_71_both_points_are_on_same_side_of_origin(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_70_both_points_are_on_same_side_of_origin, "_both_points_are_on_same_side_of_origin(a, b, origin)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_71_both_points_are_on_same_side_of_origin = {"_both_points_are_on_same_side_of_origin", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_71_both_points_are_on_same_side_of_origin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_70_both_points_are_on_same_side_of_origin};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_71_both_points_are_on_same_side_of_origin(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_a = 0;
- PyObject *__pyx_v_b = 0;
- PyObject *__pyx_v_origin = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[3] = {0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("_both_points_are_on_same_side_of_origin (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_a,&__pyx_mstate_global->__pyx_n_u_b,&__pyx_mstate_global->__pyx_n_u_origin,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1148, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1148, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1148, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1148, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_both_points_are_on_same_side_of_origin", 0) < (0)) __PYX_ERR(0, 1148, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_both_points_are_on_same_side_of_origin", 1, 3, 3, i); __PYX_ERR(0, 1148, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 3)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1148, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1148, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1148, __pyx_L3_error)
- }
- __pyx_v_a = values[0];
- __pyx_v_b = values[1];
- __pyx_v_origin = values[2];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("_both_points_are_on_same_side_of_origin", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 1148, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools._both_points_are_on_same_side_of_origin", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_70_both_points_are_on_same_side_of_origin(__pyx_self, __pyx_v_a, __pyx_v_b, __pyx_v_origin);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_70_both_points_are_on_same_side_of_origin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_origin) {
- PyObject *__pyx_v_xDiff = NULL;
- PyObject *__pyx_v_yDiff = 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_RefNannySetupContext("_both_points_are_on_same_side_of_origin", 0);
- /* "fontTools/misc/bezierTools.py":1149
- *
- * def _both_points_are_on_same_side_of_origin(a, b, origin):
- * xDiff = (a[0] - origin[0]) * (b[0] - origin[0]) # <<<<<<<<<<<<<<
- * yDiff = (a[1] - origin[1]) * (b[1] - origin[1])
- * return not (xDiff <= 0.0 and yDiff <= 0.0)
- */
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_a, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1149, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_origin, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1149, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = PyNumber_Subtract(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1149, __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_t_2 = __Pyx_GetItemInt(__pyx_v_b, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1149, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_origin, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1149, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_4 = PyNumber_Subtract(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1149, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1149, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_v_xDiff = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1150
- * def _both_points_are_on_same_side_of_origin(a, b, origin):
- * xDiff = (a[0] - origin[0]) * (b[0] - origin[0])
- * yDiff = (a[1] - origin[1]) * (b[1] - origin[1]) # <<<<<<<<<<<<<<
- * return not (xDiff <= 0.0 and yDiff <= 0.0)
- *
- */
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_a, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1150, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_origin, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1150, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_3 = PyNumber_Subtract(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1150, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_b, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1150, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_origin, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1150, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyNumber_Subtract(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1150, __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_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1150, __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_yDiff = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1151
- * xDiff = (a[0] - origin[0]) * (b[0] - origin[0])
- * yDiff = (a[1] - origin[1]) * (b[1] - origin[1])
- * return not (xDiff <= 0.0 and yDiff <= 0.0) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyObject_RichCompare(__pyx_v_xDiff, __pyx_mstate_global->__pyx_float_0_0, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1151, __pyx_L1_error)
- __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1151, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_6) {
- } else {
- __pyx_t_5 = __pyx_t_6;
- goto __pyx_L3_bool_binop_done;
- }
- __pyx_t_1 = PyObject_RichCompare(__pyx_v_yDiff, __pyx_mstate_global->__pyx_float_0_0, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1151, __pyx_L1_error)
- __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1151, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_5 = __pyx_t_6;
- __pyx_L3_bool_binop_done:;
- __pyx_t_1 = __Pyx_PyBool_FromLong((!__pyx_t_5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1151, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1148
- *
- *
- * def _both_points_are_on_same_side_of_origin(a, b, origin): # <<<<<<<<<<<<<<
- * xDiff = (a[0] - origin[0]) * (b[0] - origin[0])
- * yDiff = (a[1] - origin[1]) * (b[1] - origin[1])
- */
- /* function exit code */
- __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("fontTools.misc.bezierTools._both_points_are_on_same_side_of_origin", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_xDiff);
- __Pyx_XDECREF(__pyx_v_yDiff);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1154
- *
- *
- * def lineLineIntersections(s1, e1, s2, e2): # <<<<<<<<<<<<<<
- * """Finds intersections between two line segments.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_73lineLineIntersections(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_72lineLineIntersections, "lineLineIntersections(s1, e1, s2, e2)\n\nFinds intersections between two line segments.\n\nArgs:\n s1, e1: Coordinates of the first line as 2D tuples.\n s2, e2: Coordinates of the second line as 2D tuples.\n\nReturns:\n A list of ``Intersection`` objects, each object having ``pt``, ``t1``\n and ``t2`` attributes containing the intersection point, time on first\n segment and time on second segment respectively.\n\nExamples::\n\n >>> a = lineLineIntersections( (310,389), (453, 222), (289, 251), (447, 367))\n >>> len(a)\n 1\n >>> intersection = a[0]\n >>> intersection.pt\n (374.44882952482897, 313.73458370177315)\n >>> (intersection.t1, intersection.t2)\n (0.45069111555824465, 0.5408153767394238)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_73lineLineIntersections = {"lineLineIntersections", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_73lineLineIntersections, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_72lineLineIntersections};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_73lineLineIntersections(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_s1 = 0;
- PyObject *__pyx_v_e1 = 0;
- PyObject *__pyx_v_s2 = 0;
- PyObject *__pyx_v_e2 = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[4] = {0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("lineLineIntersections (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_s1,&__pyx_mstate_global->__pyx_n_u_e1,&__pyx_mstate_global->__pyx_n_u_s2,&__pyx_mstate_global->__pyx_n_u_e2,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1154, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1154, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1154, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1154, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1154, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "lineLineIntersections", 0) < (0)) __PYX_ERR(0, 1154, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("lineLineIntersections", 1, 4, 4, i); __PYX_ERR(0, 1154, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 4)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1154, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1154, __pyx_L3_error)
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1154, __pyx_L3_error)
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1154, __pyx_L3_error)
- }
- __pyx_v_s1 = values[0];
- __pyx_v_e1 = values[1];
- __pyx_v_s2 = values[2];
- __pyx_v_e2 = values[3];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("lineLineIntersections", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 1154, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.lineLineIntersections", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_72lineLineIntersections(__pyx_self, __pyx_v_s1, __pyx_v_e1, __pyx_v_s2, __pyx_v_e2);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_72lineLineIntersections(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_s1, PyObject *__pyx_v_e1, PyObject *__pyx_v_s2, PyObject *__pyx_v_e2) {
- PyObject *__pyx_v_s1x = NULL;
- PyObject *__pyx_v_s1y = NULL;
- PyObject *__pyx_v_e1x = NULL;
- PyObject *__pyx_v_e1y = NULL;
- PyObject *__pyx_v_s2x = NULL;
- PyObject *__pyx_v_s2y = NULL;
- PyObject *__pyx_v_e2x = NULL;
- PyObject *__pyx_v_e2y = NULL;
- PyObject *__pyx_v_x = NULL;
- PyObject *__pyx_v_slope34 = NULL;
- PyObject *__pyx_v_y = NULL;
- PyObject *__pyx_v_pt = NULL;
- PyObject *__pyx_v_slope12 = 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)(PyObject *);
- int __pyx_t_5;
- PyObject *__pyx_t_6 = NULL;
- size_t __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;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("lineLineIntersections", 0);
- /* "fontTools/misc/bezierTools.py":1177
- * (0.45069111555824465, 0.5408153767394238)
- * """
- * s1x, s1y = s1 # <<<<<<<<<<<<<<
- * e1x, e1y = e1
- * s2x, s2y = s2
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_s1))) || (PyList_CheckExact(__pyx_v_s1))) {
- PyObject* sequence = __pyx_v_s1;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1177, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1177, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1177, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1177, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1177, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_s1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1177, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 1177, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L4_unpacking_done;
- __pyx_L3_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1177, __pyx_L1_error)
- __pyx_L4_unpacking_done:;
- }
- __pyx_v_s1x = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_s1y = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1178
- * """
- * s1x, s1y = s1
- * e1x, e1y = e1 # <<<<<<<<<<<<<<
- * s2x, s2y = s2
- * e2x, e2y = e2
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_e1))) || (PyList_CheckExact(__pyx_v_e1))) {
- PyObject* sequence = __pyx_v_e1;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1178, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1178, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1178, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1178, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1178, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_e1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1178, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- index = 1; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 1178, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L6_unpacking_done;
- __pyx_L5_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1178, __pyx_L1_error)
- __pyx_L6_unpacking_done:;
- }
- __pyx_v_e1x = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_e1y = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1179
- * s1x, s1y = s1
- * e1x, e1y = e1
- * s2x, s2y = s2 # <<<<<<<<<<<<<<
- * e2x, e2y = e2
- * if (
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_s2))) || (PyList_CheckExact(__pyx_v_s2))) {
- PyObject* sequence = __pyx_v_s2;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1179, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1179, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1179, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_s2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1179, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L7_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 1179, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L8_unpacking_done;
- __pyx_L7_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1179, __pyx_L1_error)
- __pyx_L8_unpacking_done:;
- }
- __pyx_v_s2x = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_s2y = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1180
- * e1x, e1y = e1
- * s2x, s2y = s2
- * e2x, e2y = e2 # <<<<<<<<<<<<<<
- * if (
- * math.isclose(s2x, e2x) and math.isclose(s1x, e1x) and not math.isclose(s1x, s2x)
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_e2))) || (PyList_CheckExact(__pyx_v_e2))) {
- PyObject* sequence = __pyx_v_e2;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1180, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1180, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1180, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1180, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1180, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_3 = PyObject_GetIter(__pyx_v_e2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1180, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
- index = 0; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L9_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_2);
- index = 1; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L9_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(0, 1180, __pyx_L1_error)
- __pyx_t_4 = NULL;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- goto __pyx_L10_unpacking_done;
- __pyx_L9_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_4 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1180, __pyx_L1_error)
- __pyx_L10_unpacking_done:;
- }
- __pyx_v_e2x = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_e2y = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1182
- * e2x, e2y = e2
- * if (
- * math.isclose(s2x, e2x) and math.isclose(s1x, e1x) and not math.isclose(s1x, s2x) # <<<<<<<<<<<<<<
- * ): # Parallel vertical
- * return []
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1182, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_isclose); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1182, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_6))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_s2x, __pyx_v_e2x};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1182, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1182, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_8) {
- } else {
- __pyx_t_5 = __pyx_t_8;
- goto __pyx_L12_bool_binop_done;
- }
- __pyx_t_6 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1182, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_isclose); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1182, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_6);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_s1x, __pyx_v_e1x};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1182, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1182, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_8) {
- } else {
- __pyx_t_5 = __pyx_t_8;
- goto __pyx_L12_bool_binop_done;
- }
- __pyx_t_3 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1182, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_isclose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1182, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_2))) {
- __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
- assert(__pyx_t_3);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
- __Pyx_INCREF(__pyx_t_3);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_s1x, __pyx_v_s2x};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1182, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1182, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_9 = (!__pyx_t_8);
- __pyx_t_5 = __pyx_t_9;
- __pyx_L12_bool_binop_done:;
- /* "fontTools/misc/bezierTools.py":1181
- * s2x, s2y = s2
- * e2x, e2y = e2
- * if ( # <<<<<<<<<<<<<<
- * math.isclose(s2x, e2x) and math.isclose(s1x, e1x) and not math.isclose(s1x, s2x)
- * ): # Parallel vertical
- */
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":1184
- * math.isclose(s2x, e2x) and math.isclose(s1x, e1x) and not math.isclose(s1x, s2x)
- * ): # Parallel vertical
- * return [] # <<<<<<<<<<<<<<
- * if (
- * math.isclose(s2y, e2y) and math.isclose(s1y, e1y) and not math.isclose(s1y, s2y)
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1184, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1181
- * s2x, s2y = s2
- * e2x, e2y = e2
- * if ( # <<<<<<<<<<<<<<
- * math.isclose(s2x, e2x) and math.isclose(s1x, e1x) and not math.isclose(s1x, s2x)
- * ): # Parallel vertical
- */
- }
- /* "fontTools/misc/bezierTools.py":1186
- * return []
- * if (
- * math.isclose(s2y, e2y) and math.isclose(s1y, e1y) and not math.isclose(s1y, s2y) # <<<<<<<<<<<<<<
- * ): # Parallel horizontal
- * return []
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1186, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_isclose); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1186, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_6))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_s2y, __pyx_v_e2y};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1186, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1186, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_9) {
- } else {
- __pyx_t_5 = __pyx_t_9;
- goto __pyx_L16_bool_binop_done;
- }
- __pyx_t_6 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1186, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_isclose); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1186, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_6);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_s1y, __pyx_v_e1y};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1186, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1186, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_9) {
- } else {
- __pyx_t_5 = __pyx_t_9;
- goto __pyx_L16_bool_binop_done;
- }
- __pyx_t_3 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1186, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_isclose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1186, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_2))) {
- __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
- assert(__pyx_t_3);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
- __Pyx_INCREF(__pyx_t_3);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_s1y, __pyx_v_s2y};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1186, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1186, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_8 = (!__pyx_t_9);
- __pyx_t_5 = __pyx_t_8;
- __pyx_L16_bool_binop_done:;
- /* "fontTools/misc/bezierTools.py":1185
- * ): # Parallel vertical
- * return []
- * if ( # <<<<<<<<<<<<<<
- * math.isclose(s2y, e2y) and math.isclose(s1y, e1y) and not math.isclose(s1y, s2y)
- * ): # Parallel horizontal
- */
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":1188
- * math.isclose(s2y, e2y) and math.isclose(s1y, e1y) and not math.isclose(s1y, s2y)
- * ): # Parallel horizontal
- * return [] # <<<<<<<<<<<<<<
- * if math.isclose(s2x, e2x) and math.isclose(s2y, e2y): # Line segment is tiny
- * return []
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1188, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1185
- * ): # Parallel vertical
- * return []
- * if ( # <<<<<<<<<<<<<<
- * math.isclose(s2y, e2y) and math.isclose(s1y, e1y) and not math.isclose(s1y, s2y)
- * ): # Parallel horizontal
- */
- }
- /* "fontTools/misc/bezierTools.py":1189
- * ): # Parallel horizontal
- * return []
- * if math.isclose(s2x, e2x) and math.isclose(s2y, e2y): # Line segment is tiny # <<<<<<<<<<<<<<
- * return []
- * if math.isclose(s1x, e1x) and math.isclose(s1y, e1y): # Line segment is tiny
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1189, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_isclose); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1189, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_6))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_s2x, __pyx_v_e2x};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1189, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1189, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_8) {
- } else {
- __pyx_t_5 = __pyx_t_8;
- goto __pyx_L20_bool_binop_done;
- }
- __pyx_t_6 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1189, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_isclose); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1189, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_6);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_s2y, __pyx_v_e2y};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1189, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1189, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_5 = __pyx_t_8;
- __pyx_L20_bool_binop_done:;
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":1190
- * return []
- * if math.isclose(s2x, e2x) and math.isclose(s2y, e2y): # Line segment is tiny
- * return [] # <<<<<<<<<<<<<<
- * if math.isclose(s1x, e1x) and math.isclose(s1y, e1y): # Line segment is tiny
- * return []
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1190, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1189
- * ): # Parallel horizontal
- * return []
- * if math.isclose(s2x, e2x) and math.isclose(s2y, e2y): # Line segment is tiny # <<<<<<<<<<<<<<
- * return []
- * if math.isclose(s1x, e1x) and math.isclose(s1y, e1y): # Line segment is tiny
- */
- }
- /* "fontTools/misc/bezierTools.py":1191
- * if math.isclose(s2x, e2x) and math.isclose(s2y, e2y): # Line segment is tiny
- * return []
- * if math.isclose(s1x, e1x) and math.isclose(s1y, e1y): # Line segment is tiny # <<<<<<<<<<<<<<
- * return []
- * if math.isclose(e1x, s1x):
- */
- __pyx_t_3 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1191, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_isclose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1191, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_2))) {
- __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
- assert(__pyx_t_3);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
- __Pyx_INCREF(__pyx_t_3);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_s1x, __pyx_v_e1x};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1191, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1191, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_8) {
- } else {
- __pyx_t_5 = __pyx_t_8;
- goto __pyx_L23_bool_binop_done;
- }
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1191, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_isclose); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1191, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_6))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_s1y, __pyx_v_e1y};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1191, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1191, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_5 = __pyx_t_8;
- __pyx_L23_bool_binop_done:;
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":1192
- * return []
- * if math.isclose(s1x, e1x) and math.isclose(s1y, e1y): # Line segment is tiny
- * return [] # <<<<<<<<<<<<<<
- * if math.isclose(e1x, s1x):
- * x = s1x
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1192, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1191
- * if math.isclose(s2x, e2x) and math.isclose(s2y, e2y): # Line segment is tiny
- * return []
- * if math.isclose(s1x, e1x) and math.isclose(s1y, e1y): # Line segment is tiny # <<<<<<<<<<<<<<
- * return []
- * if math.isclose(e1x, s1x):
- */
- }
- /* "fontTools/misc/bezierTools.py":1193
- * if math.isclose(s1x, e1x) and math.isclose(s1y, e1y): # Line segment is tiny
- * return []
- * if math.isclose(e1x, s1x): # <<<<<<<<<<<<<<
- * x = s1x
- * slope34 = (e2y - s2y) / (e2x - s2x)
- */
- __pyx_t_6 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1193, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_isclose); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1193, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_6);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_e1x, __pyx_v_s1x};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1193, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1193, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":1194
- * return []
- * if math.isclose(e1x, s1x):
- * x = s1x # <<<<<<<<<<<<<<
- * slope34 = (e2y - s2y) / (e2x - s2x)
- * y = slope34 * (x - s2x) + s2y
- */
- __Pyx_INCREF(__pyx_v_s1x);
- __pyx_v_x = __pyx_v_s1x;
- /* "fontTools/misc/bezierTools.py":1195
- * if math.isclose(e1x, s1x):
- * x = s1x
- * slope34 = (e2y - s2y) / (e2x - s2x) # <<<<<<<<<<<<<<
- * y = slope34 * (x - s2x) + s2y
- * pt = (x, y)
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_e2y, __pyx_v_s2y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1195, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = PyNumber_Subtract(__pyx_v_e2x, __pyx_v_s2x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1195, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1195, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_v_slope34 = __pyx_t_6;
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":1196
- * x = s1x
- * slope34 = (e2y - s2y) / (e2x - s2x)
- * y = slope34 * (x - s2x) + s2y # <<<<<<<<<<<<<<
- * pt = (x, y)
- * return [
- */
- __pyx_t_6 = PyNumber_Subtract(__pyx_v_x, __pyx_v_s2x); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1196, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_3 = PyNumber_Multiply(__pyx_v_slope34, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1196, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = PyNumber_Add(__pyx_t_3, __pyx_v_s2y); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1196, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_v_y = __pyx_t_6;
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":1197
- * slope34 = (e2y - s2y) / (e2x - s2x)
- * y = slope34 * (x - s2x) + s2y
- * pt = (x, y) # <<<<<<<<<<<<<<
- * return [
- * Intersection(
- */
- __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1197, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_INCREF(__pyx_v_x);
- __Pyx_GIVEREF(__pyx_v_x);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_x) != (0)) __PYX_ERR(0, 1197, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_y);
- __Pyx_GIVEREF(__pyx_v_y);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_y) != (0)) __PYX_ERR(0, 1197, __pyx_L1_error);
- __pyx_v_pt = ((PyObject*)__pyx_t_6);
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":1198
- * y = slope34 * (x - s2x) + s2y
- * pt = (x, y)
- * return [ # <<<<<<<<<<<<<<
- * Intersection(
- * pt=pt, t1=_line_t_of_pt(s1, e1, pt), t2=_line_t_of_pt(s2, e2, pt)
- */
- __Pyx_XDECREF(__pyx_r);
- /* "fontTools/misc/bezierTools.py":1199
- * pt = (x, y)
- * return [
- * Intersection( # <<<<<<<<<<<<<<
- * pt=pt, t1=_line_t_of_pt(s1, e1, pt), t2=_line_t_of_pt(s2, e2, pt)
- * )
- */
- __pyx_t_3 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Intersection); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1199, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- /* "fontTools/misc/bezierTools.py":1200
- * return [
- * Intersection(
- * pt=pt, t1=_line_t_of_pt(s1, e1, pt), t2=_line_t_of_pt(s2, e2, pt) # <<<<<<<<<<<<<<
- * )
- * ]
- */
- __pyx_t_10 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_line_t_of_pt); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1200, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_11))) {
- __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
- assert(__pyx_t_10);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
- __Pyx_INCREF(__pyx_t_10);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_10, __pyx_v_s1, __pyx_v_e1, __pyx_v_pt};
- __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1200, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- }
- __pyx_t_10 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_line_t_of_pt); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1200, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_12);
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_12))) {
- __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_12);
- assert(__pyx_t_10);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12);
- __Pyx_INCREF(__pyx_t_10);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_12, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_10, __pyx_v_s2, __pyx_v_e2, __pyx_v_pt};
- __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
- __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
- if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1200, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- }
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_1))) {
- __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
- assert(__pyx_t_3);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
- __Pyx_INCREF(__pyx_t_3);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 3 : 0)] = {__pyx_t_3, NULL};
- __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1199, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_12);
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_pt, __pyx_v_pt, __pyx_t_12, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 1199, __pyx_L1_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_t1, __pyx_t_2, __pyx_t_12, __pyx_callargs+1, 1) < (0)) __PYX_ERR(0, 1199, __pyx_L1_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_t2, __pyx_t_11, __pyx_t_12, __pyx_callargs+1, 2) < (0)) __PYX_ERR(0, 1199, __pyx_L1_error)
- __pyx_t_6 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12);
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1199, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- /* "fontTools/misc/bezierTools.py":1198
- * y = slope34 * (x - s2x) + s2y
- * pt = (x, y)
- * return [ # <<<<<<<<<<<<<<
- * Intersection(
- * pt=pt, t1=_line_t_of_pt(s1, e1, pt), t2=_line_t_of_pt(s2, e2, pt)
- */
- __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1198, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GIVEREF(__pyx_t_6);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_6) != (0)) __PYX_ERR(0, 1198, __pyx_L1_error);
- __pyx_t_6 = 0;
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1193
- * if math.isclose(s1x, e1x) and math.isclose(s1y, e1y): # Line segment is tiny
- * return []
- * if math.isclose(e1x, s1x): # <<<<<<<<<<<<<<
- * x = s1x
- * slope34 = (e2y - s2y) / (e2x - s2x)
- */
- }
- /* "fontTools/misc/bezierTools.py":1203
- * )
- * ]
- * if math.isclose(s2x, e2x): # <<<<<<<<<<<<<<
- * x = s2x
- * slope12 = (e1y - s1y) / (e1x - s1x)
- */
- __pyx_t_6 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1203, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_12);
- __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_isclose); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1203, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_11))) {
- __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_11);
- assert(__pyx_t_6);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_s2x, __pyx_v_e2x};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1203, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1203, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":1204
- * ]
- * if math.isclose(s2x, e2x):
- * x = s2x # <<<<<<<<<<<<<<
- * slope12 = (e1y - s1y) / (e1x - s1x)
- * y = slope12 * (x - s1x) + s1y
- */
- __Pyx_INCREF(__pyx_v_s2x);
- __pyx_v_x = __pyx_v_s2x;
- /* "fontTools/misc/bezierTools.py":1205
- * if math.isclose(s2x, e2x):
- * x = s2x
- * slope12 = (e1y - s1y) / (e1x - s1x) # <<<<<<<<<<<<<<
- * y = slope12 * (x - s1x) + s1y
- * pt = (x, y)
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_e1y, __pyx_v_s1y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1205, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_11 = PyNumber_Subtract(__pyx_v_e1x, __pyx_v_s1x); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1205, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1205, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __pyx_v_slope12 = __pyx_t_6;
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":1206
- * x = s2x
- * slope12 = (e1y - s1y) / (e1x - s1x)
- * y = slope12 * (x - s1x) + s1y # <<<<<<<<<<<<<<
- * pt = (x, y)
- * return [
- */
- __pyx_t_6 = PyNumber_Subtract(__pyx_v_x, __pyx_v_s1x); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1206, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_11 = PyNumber_Multiply(__pyx_v_slope12, __pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1206, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = PyNumber_Add(__pyx_t_11, __pyx_v_s1y); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1206, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __pyx_v_y = __pyx_t_6;
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":1207
- * slope12 = (e1y - s1y) / (e1x - s1x)
- * y = slope12 * (x - s1x) + s1y
- * pt = (x, y) # <<<<<<<<<<<<<<
- * return [
- * Intersection(
- */
- __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1207, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_INCREF(__pyx_v_x);
- __Pyx_GIVEREF(__pyx_v_x);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_x) != (0)) __PYX_ERR(0, 1207, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_y);
- __Pyx_GIVEREF(__pyx_v_y);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_y) != (0)) __PYX_ERR(0, 1207, __pyx_L1_error);
- __pyx_v_pt = ((PyObject*)__pyx_t_6);
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":1208
- * y = slope12 * (x - s1x) + s1y
- * pt = (x, y)
- * return [ # <<<<<<<<<<<<<<
- * Intersection(
- * pt=pt, t1=_line_t_of_pt(s1, e1, pt), t2=_line_t_of_pt(s2, e2, pt)
- */
- __Pyx_XDECREF(__pyx_r);
- /* "fontTools/misc/bezierTools.py":1209
- * pt = (x, y)
- * return [
- * Intersection( # <<<<<<<<<<<<<<
- * pt=pt, t1=_line_t_of_pt(s1, e1, pt), t2=_line_t_of_pt(s2, e2, pt)
- * )
- */
- __pyx_t_11 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Intersection); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1209, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- /* "fontTools/misc/bezierTools.py":1210
- * return [
- * Intersection(
- * pt=pt, t1=_line_t_of_pt(s1, e1, pt), t2=_line_t_of_pt(s2, e2, pt) # <<<<<<<<<<<<<<
- * )
- * ]
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_line_t_of_pt); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1210, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_s1, __pyx_v_e1, __pyx_v_pt};
- __pyx_t_12 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1210, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_12);
- }
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_line_t_of_pt); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1210, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_10))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_10);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_10, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_s2, __pyx_v_e2, __pyx_v_pt};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1210, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_1))) {
- __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1);
- assert(__pyx_t_11);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
- __Pyx_INCREF(__pyx_t_11);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 3 : 0)] = {__pyx_t_11, NULL};
- __pyx_t_10 = __Pyx_MakeVectorcallBuilderKwds(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1209, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_pt, __pyx_v_pt, __pyx_t_10, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 1209, __pyx_L1_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_t1, __pyx_t_12, __pyx_t_10, __pyx_callargs+1, 1) < (0)) __PYX_ERR(0, 1209, __pyx_L1_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_t2, __pyx_t_3, __pyx_t_10, __pyx_callargs+1, 2) < (0)) __PYX_ERR(0, 1209, __pyx_L1_error)
- __pyx_t_6 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_10);
- __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1209, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- /* "fontTools/misc/bezierTools.py":1208
- * y = slope12 * (x - s1x) + s1y
- * pt = (x, y)
- * return [ # <<<<<<<<<<<<<<
- * Intersection(
- * pt=pt, t1=_line_t_of_pt(s1, e1, pt), t2=_line_t_of_pt(s2, e2, pt)
- */
- __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1208, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GIVEREF(__pyx_t_6);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_6) != (0)) __PYX_ERR(0, 1208, __pyx_L1_error);
- __pyx_t_6 = 0;
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1203
- * )
- * ]
- * if math.isclose(s2x, e2x): # <<<<<<<<<<<<<<
- * x = s2x
- * slope12 = (e1y - s1y) / (e1x - s1x)
- */
- }
- /* "fontTools/misc/bezierTools.py":1214
- * ]
- *
- * slope12 = (e1y - s1y) / (e1x - s1x) # <<<<<<<<<<<<<<
- * slope34 = (e2y - s2y) / (e2x - s2x)
- * if math.isclose(slope12, slope34):
- */
- __pyx_t_1 = PyNumber_Subtract(__pyx_v_e1y, __pyx_v_s1y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1214, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_6 = PyNumber_Subtract(__pyx_v_e1x, __pyx_v_s1x); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1214, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_10 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1214, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_v_slope12 = __pyx_t_10;
- __pyx_t_10 = 0;
- /* "fontTools/misc/bezierTools.py":1215
- *
- * slope12 = (e1y - s1y) / (e1x - s1x)
- * slope34 = (e2y - s2y) / (e2x - s2x) # <<<<<<<<<<<<<<
- * if math.isclose(slope12, slope34):
- * return []
- */
- __pyx_t_10 = PyNumber_Subtract(__pyx_v_e2y, __pyx_v_s2y); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1215, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __pyx_t_6 = PyNumber_Subtract(__pyx_v_e2x, __pyx_v_s2x); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1215, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_10, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1215, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_v_slope34 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1216
- * slope12 = (e1y - s1y) / (e1x - s1x)
- * slope34 = (e2y - s2y) / (e2x - s2x)
- * if math.isclose(slope12, slope34): # <<<<<<<<<<<<<<
- * return []
- * x = (slope12 * s1x - s1y - slope34 * s2x + s2y) / (slope12 - slope34)
- */
- __pyx_t_6 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1216, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_isclose); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1216, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_6);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_slope12, __pyx_v_slope34};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1216, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1216, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":1217
- * slope34 = (e2y - s2y) / (e2x - s2x)
- * if math.isclose(slope12, slope34):
- * return [] # <<<<<<<<<<<<<<
- * x = (slope12 * s1x - s1y - slope34 * s2x + s2y) / (slope12 - slope34)
- * y = slope12 * (x - s1x) + s1y
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1217, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1216
- * slope12 = (e1y - s1y) / (e1x - s1x)
- * slope34 = (e2y - s2y) / (e2x - s2x)
- * if math.isclose(slope12, slope34): # <<<<<<<<<<<<<<
- * return []
- * x = (slope12 * s1x - s1y - slope34 * s2x + s2y) / (slope12 - slope34)
- */
- }
- /* "fontTools/misc/bezierTools.py":1218
- * if math.isclose(slope12, slope34):
- * return []
- * x = (slope12 * s1x - s1y - slope34 * s2x + s2y) / (slope12 - slope34) # <<<<<<<<<<<<<<
- * y = slope12 * (x - s1x) + s1y
- * pt = (x, y)
- */
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_slope12, __pyx_v_s1x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1218, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = PyNumber_Subtract(__pyx_t_1, __pyx_v_s1y); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1218, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Multiply(__pyx_v_slope34, __pyx_v_s2x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1218, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_6 = PyNumber_Subtract(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1218, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_v_s2y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1218, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = PyNumber_Subtract(__pyx_v_slope12, __pyx_v_slope34); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1218, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1218, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_v_x = __pyx_t_3;
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1219
- * return []
- * x = (slope12 * s1x - s1y - slope34 * s2x + s2y) / (slope12 - slope34)
- * y = slope12 * (x - s1x) + s1y # <<<<<<<<<<<<<<
- * pt = (x, y)
- * if _both_points_are_on_same_side_of_origin(
- */
- __pyx_t_3 = PyNumber_Subtract(__pyx_v_x, __pyx_v_s1x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1219, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_6 = PyNumber_Multiply(__pyx_v_slope12, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1219, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = PyNumber_Add(__pyx_t_6, __pyx_v_s1y); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1219, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_v_y = __pyx_t_3;
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1220
- * x = (slope12 * s1x - s1y - slope34 * s2x + s2y) / (slope12 - slope34)
- * y = slope12 * (x - s1x) + s1y
- * pt = (x, y) # <<<<<<<<<<<<<<
- * if _both_points_are_on_same_side_of_origin(
- * pt, e1, s1
- */
- __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1220, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_INCREF(__pyx_v_x);
- __Pyx_GIVEREF(__pyx_v_x);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_x) != (0)) __PYX_ERR(0, 1220, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_y);
- __Pyx_GIVEREF(__pyx_v_y);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_y) != (0)) __PYX_ERR(0, 1220, __pyx_L1_error);
- __pyx_v_pt = ((PyObject*)__pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1221
- * y = slope12 * (x - s1x) + s1y
- * pt = (x, y)
- * if _both_points_are_on_same_side_of_origin( # <<<<<<<<<<<<<<
- * pt, e1, s1
- * ) and _both_points_are_on_same_side_of_origin(pt, s2, e2):
- */
- __pyx_t_6 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_both_points_are_on_same_side_of); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1221, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- /* "fontTools/misc/bezierTools.py":1222
- * pt = (x, y)
- * if _both_points_are_on_same_side_of_origin(
- * pt, e1, s1 # <<<<<<<<<<<<<<
- * ) and _both_points_are_on_same_side_of_origin(pt, s2, e2):
- * return [
- */
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_1))) {
- __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
- assert(__pyx_t_6);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_6, __pyx_v_pt, __pyx_v_e1, __pyx_v_s1};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1221, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- /* "fontTools/misc/bezierTools.py":1221
- * y = slope12 * (x - s1x) + s1y
- * pt = (x, y)
- * if _both_points_are_on_same_side_of_origin( # <<<<<<<<<<<<<<
- * pt, e1, s1
- * ) and _both_points_are_on_same_side_of_origin(pt, s2, e2):
- */
- __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1221, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (__pyx_t_8) {
- } else {
- __pyx_t_5 = __pyx_t_8;
- goto __pyx_L29_bool_binop_done;
- }
- /* "fontTools/misc/bezierTools.py":1223
- * if _both_points_are_on_same_side_of_origin(
- * pt, e1, s1
- * ) and _both_points_are_on_same_side_of_origin(pt, s2, e2): # <<<<<<<<<<<<<<
- * return [
- * Intersection(
- */
- __pyx_t_1 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_both_points_are_on_same_side_of); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1223, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_6))) {
- __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
- assert(__pyx_t_1);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
- __Pyx_INCREF(__pyx_t_1);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_v_pt, __pyx_v_s2, __pyx_v_e2};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1223, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1223, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_5 = __pyx_t_8;
- __pyx_L29_bool_binop_done:;
- /* "fontTools/misc/bezierTools.py":1221
- * y = slope12 * (x - s1x) + s1y
- * pt = (x, y)
- * if _both_points_are_on_same_side_of_origin( # <<<<<<<<<<<<<<
- * pt, e1, s1
- * ) and _both_points_are_on_same_side_of_origin(pt, s2, e2):
- */
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":1224
- * pt, e1, s1
- * ) and _both_points_are_on_same_side_of_origin(pt, s2, e2):
- * return [ # <<<<<<<<<<<<<<
- * Intersection(
- * pt=pt, t1=_line_t_of_pt(s1, e1, pt), t2=_line_t_of_pt(s2, e2, pt)
- */
- __Pyx_XDECREF(__pyx_r);
- /* "fontTools/misc/bezierTools.py":1225
- * ) and _both_points_are_on_same_side_of_origin(pt, s2, e2):
- * return [
- * Intersection( # <<<<<<<<<<<<<<
- * pt=pt, t1=_line_t_of_pt(s1, e1, pt), t2=_line_t_of_pt(s2, e2, pt)
- * )
- */
- __pyx_t_6 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Intersection); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1225, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- /* "fontTools/misc/bezierTools.py":1226
- * return [
- * Intersection(
- * pt=pt, t1=_line_t_of_pt(s1, e1, pt), t2=_line_t_of_pt(s2, e2, pt) # <<<<<<<<<<<<<<
- * )
- * ]
- */
- __pyx_t_12 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_line_t_of_pt); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1226, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_11))) {
- __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
- assert(__pyx_t_12);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
- __Pyx_INCREF(__pyx_t_12);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_12, __pyx_v_s1, __pyx_v_e1, __pyx_v_pt};
- __pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1226, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- }
- __pyx_t_12 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_line_t_of_pt); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1226, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_2))) {
- __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_2);
- assert(__pyx_t_12);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
- __Pyx_INCREF(__pyx_t_12);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_12, __pyx_v_s2, __pyx_v_e2, __pyx_v_pt};
- __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1226, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- }
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_1))) {
- __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
- assert(__pyx_t_6);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 3 : 0)] = {__pyx_t_6, NULL};
- __pyx_t_2 = __Pyx_MakeVectorcallBuilderKwds(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1225, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_pt, __pyx_v_pt, __pyx_t_2, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 1225, __pyx_L1_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_t1, __pyx_t_10, __pyx_t_2, __pyx_callargs+1, 1) < (0)) __PYX_ERR(0, 1225, __pyx_L1_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_t2, __pyx_t_11, __pyx_t_2, __pyx_callargs+1, 2) < (0)) __PYX_ERR(0, 1225, __pyx_L1_error)
- __pyx_t_3 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2);
- __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1225, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- /* "fontTools/misc/bezierTools.py":1224
- * pt, e1, s1
- * ) and _both_points_are_on_same_side_of_origin(pt, s2, e2):
- * return [ # <<<<<<<<<<<<<<
- * Intersection(
- * pt=pt, t1=_line_t_of_pt(s1, e1, pt), t2=_line_t_of_pt(s2, e2, pt)
- */
- __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1224, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_3) != (0)) __PYX_ERR(0, 1224, __pyx_L1_error);
- __pyx_t_3 = 0;
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1221
- * y = slope12 * (x - s1x) + s1y
- * pt = (x, y)
- * if _both_points_are_on_same_side_of_origin( # <<<<<<<<<<<<<<
- * pt, e1, s1
- * ) and _both_points_are_on_same_side_of_origin(pt, s2, e2):
- */
- }
- /* "fontTools/misc/bezierTools.py":1229
- * )
- * ]
- * return [] # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1229, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1154
- *
- *
- * def lineLineIntersections(s1, e1, s2, e2): # <<<<<<<<<<<<<<
- * """Finds intersections between two line segments.
- *
- */
- /* function exit code */
- __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_XDECREF(__pyx_t_11);
- __Pyx_XDECREF(__pyx_t_12);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.lineLineIntersections", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_s1x);
- __Pyx_XDECREF(__pyx_v_s1y);
- __Pyx_XDECREF(__pyx_v_e1x);
- __Pyx_XDECREF(__pyx_v_e1y);
- __Pyx_XDECREF(__pyx_v_s2x);
- __Pyx_XDECREF(__pyx_v_s2y);
- __Pyx_XDECREF(__pyx_v_e2x);
- __Pyx_XDECREF(__pyx_v_e2y);
- __Pyx_XDECREF(__pyx_v_x);
- __Pyx_XDECREF(__pyx_v_slope34);
- __Pyx_XDECREF(__pyx_v_y);
- __Pyx_XDECREF(__pyx_v_pt);
- __Pyx_XDECREF(__pyx_v_slope12);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1232
- *
- *
- * def _alignment_transformation(segment): # <<<<<<<<<<<<<<
- * # Returns a transformation which aligns a segment horizontally at the
- * # origin. Apply this transformation to curves and root-find to find
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_75_alignment_transformation(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_74_alignment_transformation, "_alignment_transformation(segment)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_75_alignment_transformation = {"_alignment_transformation", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_75_alignment_transformation, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_74_alignment_transformation};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_75_alignment_transformation(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_segment = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[1] = {0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("_alignment_transformation (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_segment,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1232, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1232, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_alignment_transformation", 0) < (0)) __PYX_ERR(0, 1232, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_alignment_transformation", 1, 1, 1, i); __PYX_ERR(0, 1232, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 1)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1232, __pyx_L3_error)
- }
- __pyx_v_segment = values[0];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("_alignment_transformation", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1232, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools._alignment_transformation", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_74_alignment_transformation(__pyx_self, __pyx_v_segment);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_74_alignment_transformation(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_segment) {
- PyObject *__pyx_v_start = NULL;
- PyObject *__pyx_v_end = NULL;
- PyObject *__pyx_v_angle = 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;
- PyObject *__pyx_t_6 = NULL;
- PyObject *__pyx_t_7 = NULL;
- size_t __pyx_t_8;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("_alignment_transformation", 0);
- /* "fontTools/misc/bezierTools.py":1236
- * # origin. Apply this transformation to curves and root-find to find
- * # intersections with the segment.
- * start = segment[0] # <<<<<<<<<<<<<<
- * end = segment[-1]
- * angle = math.atan2(end[1] - start[1], end[0] - start[0])
- */
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_segment, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1236, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_start = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1237
- * # intersections with the segment.
- * start = segment[0]
- * end = segment[-1] # <<<<<<<<<<<<<<
- * angle = math.atan2(end[1] - start[1], end[0] - start[0])
- * return Identity.rotate(-angle).translate(-start[0], -start[1])
- */
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_segment, -1L, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1237, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_end = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1238
- * start = segment[0]
- * end = segment[-1]
- * angle = math.atan2(end[1] - start[1], end[0] - start[0]) # <<<<<<<<<<<<<<
- * return Identity.rotate(-angle).translate(-start[0], -start[1])
- *
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1238, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_atan2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1238, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_end, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1238, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_start, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1238, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_6 = PyNumber_Subtract(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1238, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_end, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1238, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_start, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1238, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_7 = PyNumber_Subtract(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1238, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_8 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_4))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
- __pyx_t_8 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_6, __pyx_t_7};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1238, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_v_angle = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1239
- * end = segment[-1]
- * angle = math.atan2(end[1] - start[1], end[0] - start[0])
- * return Identity.rotate(-angle).translate(-start[0], -start[1]) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_6 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Identity); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1239, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_rotate); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1239, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = PyNumber_Negative(__pyx_v_angle); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1239, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_8 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_6);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_8 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_2};
- __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1239, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- }
- __pyx_t_4 = __pyx_t_7;
- __Pyx_INCREF(__pyx_t_4);
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_start, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1239, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_2 = PyNumber_Negative(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1239, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_start, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1239, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_6 = PyNumber_Negative(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1239, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_8 = 0;
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_2, __pyx_t_6};
- __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_translate, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1239, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1232
- *
- *
- * def _alignment_transformation(segment): # <<<<<<<<<<<<<<
- * # Returns a transformation which aligns a segment horizontally at the
- * # origin. Apply this transformation to curves and root-find to find
- */
- /* function exit code */
- __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("fontTools.misc.bezierTools._alignment_transformation", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_start);
- __Pyx_XDECREF(__pyx_v_end);
- __Pyx_XDECREF(__pyx_v_angle);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1242
- *
- *
- * def _curve_line_intersections_t(curve, line): # <<<<<<<<<<<<<<
- * aligned_curve = _alignment_transformation(line).transformPoints(curve)
- * if len(curve) == 3:
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_77_curve_line_intersections_t(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_76_curve_line_intersections_t, "_curve_line_intersections_t(curve, line)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_77_curve_line_intersections_t = {"_curve_line_intersections_t", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_77_curve_line_intersections_t, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_76_curve_line_intersections_t};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_77_curve_line_intersections_t(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_curve = 0;
- PyObject *__pyx_v_line = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[2] = {0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("_curve_line_intersections_t (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_curve,&__pyx_mstate_global->__pyx_n_u_line,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1242, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1242, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1242, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_curve_line_intersections_t", 0) < (0)) __PYX_ERR(0, 1242, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_curve_line_intersections_t", 1, 2, 2, i); __PYX_ERR(0, 1242, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 2)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1242, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1242, __pyx_L3_error)
- }
- __pyx_v_curve = values[0];
- __pyx_v_line = values[1];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("_curve_line_intersections_t", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1242, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools._curve_line_intersections_t", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_76_curve_line_intersections_t(__pyx_self, __pyx_v_curve, __pyx_v_line);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_27_curve_line_intersections_t_2generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
- /* "fontTools/misc/bezierTools.py":1252
- * else:
- * raise ValueError("Unknown curve degree")
- * return sorted(i for i in intersections if 0.0 <= i <= 1) # <<<<<<<<<<<<<<
- *
- *
- */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_27_curve_line_intersections_t_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr *__pyx_cur_scope;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("genexpr", 0);
- __pyx_cur_scope = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr(__pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
- if (unlikely(!__pyx_cur_scope)) {
- __pyx_cur_scope = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr *)Py_None);
- __Pyx_INCREF(Py_None);
- __PYX_ERR(0, 1252, __pyx_L1_error)
- } else {
- __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
- }
- __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
- __Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
- __Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
- {
- __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_9fontTools_4misc_11bezierTools_27_curve_line_intersections_t_2generator4, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[4]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_curve_line_intersections_t_loca, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools); if (unlikely(!gen)) __PYX_ERR(0, 1252, __pyx_L1_error)
- __Pyx_DECREF(__pyx_cur_scope);
- __Pyx_RefNannyFinishContext();
- return (PyObject *) gen;
- }
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_AddTraceback("fontTools.misc.bezierTools._curve_line_intersections_t.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __Pyx_DECREF((PyObject *)__pyx_cur_scope);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_27_curve_line_intersections_t_2generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
- {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr *__pyx_cur_scope = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr *)__pyx_generator->closure);
- PyObject *__pyx_r = NULL;
- PyObject *__pyx_t_1 = NULL;
- Py_ssize_t __pyx_t_2;
- PyObject *(*__pyx_t_3)(PyObject *);
- PyObject *__pyx_t_4 = NULL;
- int __pyx_t_5;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("genexpr", 0);
- switch (__pyx_generator->resume_label) {
- case 0: goto __pyx_L3_first_run;
- default: /* CPython raises the right error here */
- __Pyx_RefNannyFinishContext();
- return NULL;
- }
- __pyx_L3_first_run:;
- if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1252, __pyx_L1_error)
- __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 1252, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_r);
- if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 1252, __pyx_L1_error) }
- if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) {
- __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = 0;
- __pyx_t_3 = NULL;
- } else {
- __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_genexpr_arg_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1252, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1252, __pyx_L1_error)
- }
- for (;;) {
- if (likely(!__pyx_t_3)) {
- if (likely(PyList_CheckExact(__pyx_t_1))) {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1252, __pyx_L1_error)
- #endif
- if (__pyx_t_2 >= __pyx_temp) break;
- }
- __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
- ++__pyx_t_2;
- } else {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1252, __pyx_L1_error)
- #endif
- if (__pyx_t_2 >= __pyx_temp) break;
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
- #else
- __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
- #endif
- ++__pyx_t_2;
- }
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1252, __pyx_L1_error)
- } else {
- __pyx_t_4 = __pyx_t_3(__pyx_t_1);
- if (unlikely(!__pyx_t_4)) {
- PyObject* exc_type = PyErr_Occurred();
- if (exc_type) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 1252, __pyx_L1_error)
- PyErr_Clear();
- }
- break;
- }
- }
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_i);
- __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_i, __pyx_t_4);
- __Pyx_GIVEREF(__pyx_t_4);
- __pyx_t_4 = 0;
- __pyx_t_4 = PyObject_RichCompare(__pyx_mstate_global->__pyx_float_0_0, __pyx_cur_scope->__pyx_v_i, Py_LE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1252, __pyx_L1_error)
- if (__Pyx_PyObject_IsTrue(__pyx_t_4)) {
- __Pyx_DECREF(__pyx_t_4);
- __pyx_t_4 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_i, __pyx_mstate_global->__pyx_int_1, Py_LE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1252, __pyx_L1_error)
- }
- __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1252, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- if (__pyx_t_5) {
- if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_cur_scope->__pyx_v_i))) __PYX_ERR(0, 1252, __pyx_L1_error)
- }
- }
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
- /* function exit code */
- goto __pyx_L0;
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_4);
- if (__Pyx_PyErr_Occurred()) {
- __Pyx_Generator_Replace_StopIteration(0);
- __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
- }
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- #if !CYTHON_USE_EXC_INFO_STACK
- __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
- #endif
- __pyx_generator->resume_label = -1;
- __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1242
- *
- *
- * def _curve_line_intersections_t(curve, line): # <<<<<<<<<<<<<<
- * aligned_curve = _alignment_transformation(line).transformPoints(curve)
- * if len(curve) == 3:
- */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_76_curve_line_intersections_t(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_curve, PyObject *__pyx_v_line) {
- PyObject *__pyx_v_aligned_curve = NULL;
- PyObject *__pyx_v_a = NULL;
- PyObject *__pyx_v_b = NULL;
- PyObject *__pyx_v_c = NULL;
- PyObject *__pyx_v_intersections = NULL;
- PyObject *__pyx_v_d = NULL;
- PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_27_curve_line_intersections_t_2generator4 = 0;
- 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;
- size_t __pyx_t_6;
- Py_ssize_t __pyx_t_7;
- int __pyx_t_8;
- PyObject *(*__pyx_t_9)(PyObject *);
- PyObject *__pyx_t_10 = NULL;
- PyObject *__pyx_t_11 = NULL;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("_curve_line_intersections_t", 0);
- /* "fontTools/misc/bezierTools.py":1243
- *
- * def _curve_line_intersections_t(curve, line):
- * aligned_curve = _alignment_transformation(line).transformPoints(curve) # <<<<<<<<<<<<<<
- * if len(curve) == 3:
- * a, b, c = calcQuadraticParameters(*aligned_curve)
- */
- __pyx_t_4 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_alignment_transformation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1243, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_6 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_5))) {
- __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
- assert(__pyx_t_4);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
- __Pyx_INCREF(__pyx_t_4);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
- __pyx_t_6 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_line};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1243, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- __pyx_t_2 = __pyx_t_3;
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_6 = 0;
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_curve};
- __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_transformPoints, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1243, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_v_aligned_curve = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1244
- * def _curve_line_intersections_t(curve, line):
- * aligned_curve = _alignment_transformation(line).transformPoints(curve)
- * if len(curve) == 3: # <<<<<<<<<<<<<<
- * a, b, c = calcQuadraticParameters(*aligned_curve)
- * intersections = solveQuadratic(a[1], b[1], c[1])
- */
- __pyx_t_7 = PyObject_Length(__pyx_v_curve); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1244, __pyx_L1_error)
- __pyx_t_8 = (__pyx_t_7 == 3);
- if (__pyx_t_8) {
- /* "fontTools/misc/bezierTools.py":1245
- * aligned_curve = _alignment_transformation(line).transformPoints(curve)
- * if len(curve) == 3:
- * a, b, c = calcQuadraticParameters(*aligned_curve) # <<<<<<<<<<<<<<
- * intersections = solveQuadratic(a[1], b[1], c[1])
- * elif len(curve) == 4:
- */
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_calcQuadraticParameters); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1245, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_v_aligned_curve); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1245, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1245, __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;
- if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
- PyObject* sequence = __pyx_t_2;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 3)) {
- if (size > 3) __Pyx_RaiseTooManyValuesError(3);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1245, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_3);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2);
- __Pyx_INCREF(__pyx_t_5);
- } else {
- __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1245, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_3);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1245, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_5 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1245, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_5);
- }
- #else
- __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1245, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1245, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1245, __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_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1245, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_9 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4);
- index = 0; __pyx_t_3 = __pyx_t_9(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_3);
- index = 1; __pyx_t_1 = __pyx_t_9(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L4_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- index = 2; __pyx_t_5 = __pyx_t_9(__pyx_t_4); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_5);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_4), 3) < (0)) __PYX_ERR(0, 1245, __pyx_L1_error)
- __pyx_t_9 = NULL;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- goto __pyx_L5_unpacking_done;
- __pyx_L4_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_9 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1245, __pyx_L1_error)
- __pyx_L5_unpacking_done:;
- }
- __pyx_v_a = __pyx_t_3;
- __pyx_t_3 = 0;
- __pyx_v_b = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_c = __pyx_t_5;
- __pyx_t_5 = 0;
- /* "fontTools/misc/bezierTools.py":1246
- * if len(curve) == 3:
- * a, b, c = calcQuadraticParameters(*aligned_curve)
- * intersections = solveQuadratic(a[1], b[1], c[1]) # <<<<<<<<<<<<<<
- * elif len(curve) == 4:
- * a, b, c, d = calcCubicParameters(*aligned_curve)
- */
- __pyx_t_5 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_solveQuadratic); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1246, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_a, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1246, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_b, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1246, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_c, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1246, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __pyx_t_6 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_1))) {
- __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
- assert(__pyx_t_5);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
- __Pyx_INCREF(__pyx_t_5);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
- __pyx_t_6 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, __pyx_t_10};
- __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_6, (4-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1246, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- }
- __pyx_v_intersections = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1244
- * def _curve_line_intersections_t(curve, line):
- * aligned_curve = _alignment_transformation(line).transformPoints(curve)
- * if len(curve) == 3: # <<<<<<<<<<<<<<
- * a, b, c = calcQuadraticParameters(*aligned_curve)
- * intersections = solveQuadratic(a[1], b[1], c[1])
- */
- goto __pyx_L3;
- }
- /* "fontTools/misc/bezierTools.py":1247
- * a, b, c = calcQuadraticParameters(*aligned_curve)
- * intersections = solveQuadratic(a[1], b[1], c[1])
- * elif len(curve) == 4: # <<<<<<<<<<<<<<
- * a, b, c, d = calcCubicParameters(*aligned_curve)
- * intersections = solveCubic(a[1], b[1], c[1], d[1])
- */
- __pyx_t_7 = PyObject_Length(__pyx_v_curve); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1247, __pyx_L1_error)
- __pyx_t_8 = (__pyx_t_7 == 4);
- if (likely(__pyx_t_8)) {
- /* "fontTools/misc/bezierTools.py":1248
- * intersections = solveQuadratic(a[1], b[1], c[1])
- * elif len(curve) == 4:
- * a, b, c, d = calcCubicParameters(*aligned_curve) # <<<<<<<<<<<<<<
- * intersections = solveCubic(a[1], b[1], c[1], d[1])
- * else:
- */
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_calcCubicParameters); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1248, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_v_aligned_curve); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1248, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1248, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if ((likely(PyTuple_CheckExact(__pyx_t_10))) || (PyList_CheckExact(__pyx_t_10))) {
- PyObject* sequence = __pyx_t_10;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 4)) {
- if (size > 4) __Pyx_RaiseTooManyValuesError(4);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1248, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2);
- __Pyx_INCREF(__pyx_t_4);
- __pyx_t_3 = PyTuple_GET_ITEM(sequence, 3);
- __Pyx_INCREF(__pyx_t_3);
- } else {
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1248, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1248, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_4 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1248, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_4);
- __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 3, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1248, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_3);
- }
- #else
- {
- Py_ssize_t i;
- PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_2,&__pyx_t_4,&__pyx_t_3};
- for (i=0; i < 4; i++) {
- PyObject* item = __Pyx_PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1248, __pyx_L1_error)
- __Pyx_GOTREF(item);
- *(temps[i]) = item;
- }
- }
- #endif
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- } else {
- Py_ssize_t index = -1;
- PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_2,&__pyx_t_4,&__pyx_t_3};
- __pyx_t_5 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1248, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __pyx_t_9 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_5);
- for (index=0; index < 4; index++) {
- PyObject* item = __pyx_t_9(__pyx_t_5); if (unlikely(!item)) goto __pyx_L6_unpacking_failed;
- __Pyx_GOTREF(item);
- *(temps[index]) = item;
- }
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_5), 4) < (0)) __PYX_ERR(0, 1248, __pyx_L1_error)
- __pyx_t_9 = NULL;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- goto __pyx_L7_unpacking_done;
- __pyx_L6_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_9 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1248, __pyx_L1_error)
- __pyx_L7_unpacking_done:;
- }
- __pyx_v_a = __pyx_t_1;
- __pyx_t_1 = 0;
- __pyx_v_b = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_c = __pyx_t_4;
- __pyx_t_4 = 0;
- __pyx_v_d = __pyx_t_3;
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1249
- * elif len(curve) == 4:
- * a, b, c, d = calcCubicParameters(*aligned_curve)
- * intersections = solveCubic(a[1], b[1], c[1], d[1]) # <<<<<<<<<<<<<<
- * else:
- * raise ValueError("Unknown curve degree")
- */
- __pyx_t_3 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_solveCubic); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1249, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_a, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1249, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_b, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1249, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_c, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1249, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_d, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1249, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __pyx_t_6 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_4))) {
- __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
- assert(__pyx_t_3);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
- __Pyx_INCREF(__pyx_t_3);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
- __pyx_t_6 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_t_2, __pyx_t_1, __pyx_t_5, __pyx_t_11};
- __pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (5-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1249, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- }
- __pyx_v_intersections = __pyx_t_10;
- __pyx_t_10 = 0;
- /* "fontTools/misc/bezierTools.py":1247
- * a, b, c = calcQuadraticParameters(*aligned_curve)
- * intersections = solveQuadratic(a[1], b[1], c[1])
- * elif len(curve) == 4: # <<<<<<<<<<<<<<
- * a, b, c, d = calcCubicParameters(*aligned_curve)
- * intersections = solveCubic(a[1], b[1], c[1], d[1])
- */
- goto __pyx_L3;
- }
- /* "fontTools/misc/bezierTools.py":1251
- * intersections = solveCubic(a[1], b[1], c[1], d[1])
- * else:
- * raise ValueError("Unknown curve degree") # <<<<<<<<<<<<<<
- * return sorted(i for i in intersections if 0.0 <= i <= 1)
- *
- */
- /*else*/ {
- __pyx_t_4 = NULL;
- __pyx_t_6 = 1;
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Unknown_curve_degree};
- __pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
- if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1251, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- }
- __Pyx_Raise(__pyx_t_10, 0, 0, 0);
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __PYX_ERR(0, 1251, __pyx_L1_error)
- }
- __pyx_L3:;
- /* "fontTools/misc/bezierTools.py":1252
- * else:
- * raise ValueError("Unknown curve degree")
- * return sorted(i for i in intersections if 0.0 <= i <= 1) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_10 = __pyx_pf_9fontTools_4misc_11bezierTools_27_curve_line_intersections_t_genexpr(NULL, __pyx_v_intersections); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1252, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_10);
- __pyx_t_4 = __Pyx_Generator_GetInlinedResult(__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1252, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- if (unlikely((PyList_Sort(__pyx_t_4) < 0))) __PYX_ERR(0, 1252, __pyx_L1_error)
- __pyx_r = __pyx_t_4;
- __pyx_t_4 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1242
- *
- *
- * def _curve_line_intersections_t(curve, line): # <<<<<<<<<<<<<<
- * aligned_curve = _alignment_transformation(line).transformPoints(curve)
- * if len(curve) == 3:
- */
- /* function exit code */
- __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_10);
- __Pyx_XDECREF(__pyx_t_11);
- __Pyx_AddTraceback("fontTools.misc.bezierTools._curve_line_intersections_t", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_aligned_curve);
- __Pyx_XDECREF(__pyx_v_a);
- __Pyx_XDECREF(__pyx_v_b);
- __Pyx_XDECREF(__pyx_v_c);
- __Pyx_XDECREF(__pyx_v_intersections);
- __Pyx_XDECREF(__pyx_v_d);
- __Pyx_XDECREF(__pyx_gb_9fontTools_4misc_11bezierTools_27_curve_line_intersections_t_2generator4);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1255
- *
- *
- * def curveLineIntersections(curve, line): # <<<<<<<<<<<<<<
- * """Finds intersections between a curve and a line.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_79curveLineIntersections(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_78curveLineIntersections, "curveLineIntersections(curve, line)\n\nFinds intersections between a curve and a line.\n\nArgs:\n curve: List of coordinates of the curve segment as 2D tuples.\n line: List of coordinates of the line segment as 2D tuples.\n\nReturns:\n A list of ``Intersection`` objects, each object having ``pt``, ``t1``\n and ``t2`` attributes containing the intersection point, time on first\n segment and time on second segment respectively.\n\nExamples::\n >>> curve = [ (100, 240), (30, 60), (210, 230), (160, 30) ]\n >>> line = [ (25, 260), (230, 20) ]\n >>> intersections = curveLineIntersections(curve, line)\n >>> len(intersections)\n 3\n >>> intersections[0].pt\n (84.9000930760723, 189.87306176459828)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_79curveLineIntersections = {"curveLineIntersections", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_79curveLineIntersections, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_78curveLineIntersections};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_79curveLineIntersections(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_curve = 0;
- PyObject *__pyx_v_line = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[2] = {0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("curveLineIntersections (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_curve,&__pyx_mstate_global->__pyx_n_u_line,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1255, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1255, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1255, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "curveLineIntersections", 0) < (0)) __PYX_ERR(0, 1255, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("curveLineIntersections", 1, 2, 2, i); __PYX_ERR(0, 1255, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 2)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1255, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1255, __pyx_L3_error)
- }
- __pyx_v_curve = values[0];
- __pyx_v_line = values[1];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("curveLineIntersections", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1255, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.curveLineIntersections", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_78curveLineIntersections(__pyx_self, __pyx_v_curve, __pyx_v_line);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_78curveLineIntersections(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_curve, PyObject *__pyx_v_line) {
- PyObject *__pyx_v_pointFinder = NULL;
- PyObject *__pyx_v_intersections = NULL;
- PyObject *__pyx_v_t = NULL;
- PyObject *__pyx_v_pt = NULL;
- PyObject *__pyx_v_line_t = NULL;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- Py_ssize_t __pyx_t_1;
- int __pyx_t_2;
- PyObject *__pyx_t_3 = NULL;
- PyObject *__pyx_t_4 = NULL;
- size_t __pyx_t_5;
- PyObject *__pyx_t_6 = NULL;
- PyObject *(*__pyx_t_7)(PyObject *);
- 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_RefNannySetupContext("curveLineIntersections", 0);
- /* "fontTools/misc/bezierTools.py":1276
- * (84.9000930760723, 189.87306176459828)
- * """
- * if len(curve) == 3: # <<<<<<<<<<<<<<
- * pointFinder = quadraticPointAtT
- * elif len(curve) == 4:
- */
- __pyx_t_1 = PyObject_Length(__pyx_v_curve); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1276, __pyx_L1_error)
- __pyx_t_2 = (__pyx_t_1 == 3);
- if (__pyx_t_2) {
- /* "fontTools/misc/bezierTools.py":1277
- * """
- * if len(curve) == 3:
- * pointFinder = quadraticPointAtT # <<<<<<<<<<<<<<
- * elif len(curve) == 4:
- * pointFinder = cubicPointAtT
- */
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_quadraticPointAtT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1277, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_v_pointFinder = __pyx_t_3;
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1276
- * (84.9000930760723, 189.87306176459828)
- * """
- * if len(curve) == 3: # <<<<<<<<<<<<<<
- * pointFinder = quadraticPointAtT
- * elif len(curve) == 4:
- */
- goto __pyx_L3;
- }
- /* "fontTools/misc/bezierTools.py":1278
- * if len(curve) == 3:
- * pointFinder = quadraticPointAtT
- * elif len(curve) == 4: # <<<<<<<<<<<<<<
- * pointFinder = cubicPointAtT
- * else:
- */
- __pyx_t_1 = PyObject_Length(__pyx_v_curve); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1278, __pyx_L1_error)
- __pyx_t_2 = (__pyx_t_1 == 4);
- if (likely(__pyx_t_2)) {
- /* "fontTools/misc/bezierTools.py":1279
- * pointFinder = quadraticPointAtT
- * elif len(curve) == 4:
- * pointFinder = cubicPointAtT # <<<<<<<<<<<<<<
- * else:
- * raise ValueError("Unknown curve degree")
- */
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_cubicPointAtT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1279, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_v_pointFinder = __pyx_t_3;
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1278
- * if len(curve) == 3:
- * pointFinder = quadraticPointAtT
- * elif len(curve) == 4: # <<<<<<<<<<<<<<
- * pointFinder = cubicPointAtT
- * else:
- */
- goto __pyx_L3;
- }
- /* "fontTools/misc/bezierTools.py":1281
- * pointFinder = cubicPointAtT
- * else:
- * raise ValueError("Unknown curve degree") # <<<<<<<<<<<<<<
- * intersections = []
- * for t in _curve_line_intersections_t(curve, line):
- */
- /*else*/ {
- __pyx_t_4 = NULL;
- __pyx_t_5 = 1;
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Unknown_curve_degree};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1281, __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_ERR(0, 1281, __pyx_L1_error)
- }
- __pyx_L3:;
- /* "fontTools/misc/bezierTools.py":1282
- * else:
- * raise ValueError("Unknown curve degree")
- * intersections = [] # <<<<<<<<<<<<<<
- * for t in _curve_line_intersections_t(curve, line):
- * pt = pointFinder(*curve, t)
- */
- __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1282, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_v_intersections = ((PyObject*)__pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1283
- * raise ValueError("Unknown curve degree")
- * intersections = []
- * for t in _curve_line_intersections_t(curve, line): # <<<<<<<<<<<<<<
- * pt = pointFinder(*curve, t)
- * # Back-project the point onto the line, to avoid problems with
- */
- __pyx_t_4 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_curve_line_intersections_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1283, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_5 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_6))) {
- __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
- assert(__pyx_t_4);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
- __Pyx_INCREF(__pyx_t_4);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
- __pyx_t_5 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_v_curve, __pyx_v_line};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1283, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
- __pyx_t_6 = __pyx_t_3; __Pyx_INCREF(__pyx_t_6);
- __pyx_t_1 = 0;
- __pyx_t_7 = NULL;
- } else {
- __pyx_t_1 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1283, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1283, __pyx_L1_error)
- }
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- for (;;) {
- if (likely(!__pyx_t_7)) {
- if (likely(PyList_CheckExact(__pyx_t_6))) {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_6);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1283, __pyx_L1_error)
- #endif
- if (__pyx_t_1 >= __pyx_temp) break;
- }
- __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_6, __pyx_t_1, __Pyx_ReferenceSharing_OwnStrongReference);
- ++__pyx_t_1;
- } else {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_6);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1283, __pyx_L1_error)
- #endif
- if (__pyx_t_1 >= __pyx_temp) break;
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_1));
- #else
- __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_6, __pyx_t_1);
- #endif
- ++__pyx_t_1;
- }
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1283, __pyx_L1_error)
- } else {
- __pyx_t_3 = __pyx_t_7(__pyx_t_6);
- if (unlikely(!__pyx_t_3)) {
- PyObject* exc_type = PyErr_Occurred();
- if (exc_type) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 1283, __pyx_L1_error)
- PyErr_Clear();
- }
- break;
- }
- }
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1284
- * intersections = []
- * for t in _curve_line_intersections_t(curve, line):
- * pt = pointFinder(*curve, t) # <<<<<<<<<<<<<<
- * # Back-project the point onto the line, to avoid problems with
- * # numerical accuracy in the case of vertical and horizontal lines
- */
- __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_v_curve); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1284, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1284, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_INCREF(__pyx_v_t);
- __Pyx_GIVEREF(__pyx_v_t);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_t) != (0)) __PYX_ERR(0, 1284, __pyx_L1_error);
- __pyx_t_8 = PyNumber_Add(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1284, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_pointFinder, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1284, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_XDECREF_SET(__pyx_v_pt, __pyx_t_4);
- __pyx_t_4 = 0;
- /* "fontTools/misc/bezierTools.py":1287
- * # Back-project the point onto the line, to avoid problems with
- * # numerical accuracy in the case of vertical and horizontal lines
- * line_t = _line_t_of_pt(*line, pt) # <<<<<<<<<<<<<<
- * pt = linePointAtT(*line, line_t)
- * intersections.append(Intersection(pt=pt, t1=t, t2=line_t))
- */
- __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_line_t_of_pt); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1287, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_8 = __Pyx_PySequence_Tuple(__pyx_v_line); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1287, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1287, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_INCREF(__pyx_v_pt);
- __Pyx_GIVEREF(__pyx_v_pt);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_pt) != (0)) __PYX_ERR(0, 1287, __pyx_L1_error);
- __pyx_t_9 = PyNumber_Add(__pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1287, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1287, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __Pyx_XDECREF_SET(__pyx_v_line_t, __pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1288
- * # numerical accuracy in the case of vertical and horizontal lines
- * line_t = _line_t_of_pt(*line, pt)
- * pt = linePointAtT(*line, line_t) # <<<<<<<<<<<<<<
- * intersections.append(Intersection(pt=pt, t1=t, t2=line_t))
- * return intersections
- */
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_linePointAtT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1288, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_9 = __Pyx_PySequence_Tuple(__pyx_v_line); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1288, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1288, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_INCREF(__pyx_v_line_t);
- __Pyx_GIVEREF(__pyx_v_line_t);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_line_t) != (0)) __PYX_ERR(0, 1288, __pyx_L1_error);
- __pyx_t_8 = PyNumber_Add(__pyx_t_9, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1288, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1288, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_DECREF_SET(__pyx_v_pt, __pyx_t_4);
- __pyx_t_4 = 0;
- /* "fontTools/misc/bezierTools.py":1289
- * line_t = _line_t_of_pt(*line, pt)
- * pt = linePointAtT(*line, line_t)
- * intersections.append(Intersection(pt=pt, t1=t, t2=line_t)) # <<<<<<<<<<<<<<
- * return intersections
- *
- */
- __pyx_t_8 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Intersection); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1289, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_8);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_8);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_5 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 3 : 0)] = {__pyx_t_8, NULL};
- __pyx_t_9 = __Pyx_MakeVectorcallBuilderKwds(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1289, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_9);
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_pt, __pyx_v_pt, __pyx_t_9, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 1289, __pyx_L1_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_t1, __pyx_v_t, __pyx_t_9, __pyx_callargs+1, 1) < (0)) __PYX_ERR(0, 1289, __pyx_L1_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_t2, __pyx_v_line_t, __pyx_t_9, __pyx_callargs+1, 2) < (0)) __PYX_ERR(0, 1289, __pyx_L1_error)
- __pyx_t_4 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9);
- __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1289, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- }
- __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_intersections, __pyx_t_4); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1289, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- /* "fontTools/misc/bezierTools.py":1283
- * raise ValueError("Unknown curve degree")
- * intersections = []
- * for t in _curve_line_intersections_t(curve, line): # <<<<<<<<<<<<<<
- * pt = pointFinder(*curve, t)
- * # Back-project the point onto the line, to avoid problems with
- */
- }
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":1290
- * pt = linePointAtT(*line, line_t)
- * intersections.append(Intersection(pt=pt, t1=t, t2=line_t))
- * return intersections # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_INCREF(__pyx_v_intersections);
- __pyx_r = __pyx_v_intersections;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1255
- *
- *
- * def curveLineIntersections(curve, line): # <<<<<<<<<<<<<<
- * """Finds intersections between a curve and a line.
- *
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_XDECREF(__pyx_t_4);
- __Pyx_XDECREF(__pyx_t_6);
- __Pyx_XDECREF(__pyx_t_8);
- __Pyx_XDECREF(__pyx_t_9);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.curveLineIntersections", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_pointFinder);
- __Pyx_XDECREF(__pyx_v_intersections);
- __Pyx_XDECREF(__pyx_v_t);
- __Pyx_XDECREF(__pyx_v_pt);
- __Pyx_XDECREF(__pyx_v_line_t);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1293
- *
- *
- * def _curve_bounds(c): # <<<<<<<<<<<<<<
- * if len(c) == 3:
- * return calcQuadraticBounds(*c)
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_81_curve_bounds(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_80_curve_bounds, "_curve_bounds(c)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_81_curve_bounds = {"_curve_bounds", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_81_curve_bounds, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_80_curve_bounds};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_81_curve_bounds(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_c = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[1] = {0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("_curve_bounds (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_c,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1293, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1293, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_curve_bounds", 0) < (0)) __PYX_ERR(0, 1293, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_curve_bounds", 1, 1, 1, i); __PYX_ERR(0, 1293, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 1)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1293, __pyx_L3_error)
- }
- __pyx_v_c = values[0];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("_curve_bounds", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1293, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools._curve_bounds", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_80_curve_bounds(__pyx_self, __pyx_v_c);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_80_curve_bounds(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_c) {
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- Py_ssize_t __pyx_t_1;
- int __pyx_t_2;
- PyObject *__pyx_t_3 = NULL;
- PyObject *__pyx_t_4 = NULL;
- PyObject *__pyx_t_5 = NULL;
- size_t __pyx_t_6;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("_curve_bounds", 0);
- /* "fontTools/misc/bezierTools.py":1294
- *
- * def _curve_bounds(c):
- * if len(c) == 3: # <<<<<<<<<<<<<<
- * return calcQuadraticBounds(*c)
- * elif len(c) == 4:
- */
- __pyx_t_1 = PyObject_Length(__pyx_v_c); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1294, __pyx_L1_error)
- __pyx_t_2 = (__pyx_t_1 == 3);
- if (__pyx_t_2) {
- /* "fontTools/misc/bezierTools.py":1295
- * def _curve_bounds(c):
- * if len(c) == 3:
- * return calcQuadraticBounds(*c) # <<<<<<<<<<<<<<
- * elif len(c) == 4:
- * return calcCubicBounds(*c)
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_calcQuadraticBounds); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1295, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_c); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1295, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1295, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __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;
- /* "fontTools/misc/bezierTools.py":1294
- *
- * def _curve_bounds(c):
- * if len(c) == 3: # <<<<<<<<<<<<<<
- * return calcQuadraticBounds(*c)
- * elif len(c) == 4:
- */
- }
- /* "fontTools/misc/bezierTools.py":1296
- * if len(c) == 3:
- * return calcQuadraticBounds(*c)
- * elif len(c) == 4: # <<<<<<<<<<<<<<
- * return calcCubicBounds(*c)
- * raise ValueError("Unknown curve degree")
- */
- __pyx_t_1 = PyObject_Length(__pyx_v_c); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1296, __pyx_L1_error)
- __pyx_t_2 = (__pyx_t_1 == 4);
- if (__pyx_t_2) {
- /* "fontTools/misc/bezierTools.py":1297
- * return calcQuadraticBounds(*c)
- * elif len(c) == 4:
- * return calcCubicBounds(*c) # <<<<<<<<<<<<<<
- * raise ValueError("Unknown curve degree")
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_calcCubicBounds); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1297, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_c); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1297, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1297, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_r = __pyx_t_3;
- __pyx_t_3 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1296
- * if len(c) == 3:
- * return calcQuadraticBounds(*c)
- * elif len(c) == 4: # <<<<<<<<<<<<<<
- * return calcCubicBounds(*c)
- * raise ValueError("Unknown curve degree")
- */
- }
- /* "fontTools/misc/bezierTools.py":1298
- * elif len(c) == 4:
- * return calcCubicBounds(*c)
- * raise ValueError("Unknown curve degree") # <<<<<<<<<<<<<<
- *
- *
- */
- __pyx_t_4 = NULL;
- __pyx_t_6 = 1;
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Unknown_curve_degree};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1298, __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_ERR(0, 1298, __pyx_L1_error)
- /* "fontTools/misc/bezierTools.py":1293
- *
- *
- * def _curve_bounds(c): # <<<<<<<<<<<<<<
- * if len(c) == 3:
- * return calcQuadraticBounds(*c)
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_XDECREF(__pyx_t_4);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_AddTraceback("fontTools.misc.bezierTools._curve_bounds", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1301
- *
- *
- * def _split_segment_at_t(c, t): # <<<<<<<<<<<<<<
- * if len(c) == 2:
- * s, e = c
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_83_split_segment_at_t(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_82_split_segment_at_t, "_split_segment_at_t(c, t)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_83_split_segment_at_t = {"_split_segment_at_t", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_83_split_segment_at_t, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_82_split_segment_at_t};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_83_split_segment_at_t(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_c = 0;
- PyObject *__pyx_v_t = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[2] = {0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("_split_segment_at_t (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_c,&__pyx_mstate_global->__pyx_n_u_t,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1301, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1301, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1301, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_split_segment_at_t", 0) < (0)) __PYX_ERR(0, 1301, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_split_segment_at_t", 1, 2, 2, i); __PYX_ERR(0, 1301, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 2)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1301, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1301, __pyx_L3_error)
- }
- __pyx_v_c = values[0];
- __pyx_v_t = values[1];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("_split_segment_at_t", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1301, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools._split_segment_at_t", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_82_split_segment_at_t(__pyx_self, __pyx_v_c, __pyx_v_t);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_82_split_segment_at_t(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_c, PyObject *__pyx_v_t) {
- PyObject *__pyx_v_s = NULL;
- PyObject *__pyx_v_e = NULL;
- PyObject *__pyx_v_midpoint = NULL;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- Py_ssize_t __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)(PyObject *);
- size_t __pyx_t_7;
- PyObject *__pyx_t_8 = NULL;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("_split_segment_at_t", 0);
- /* "fontTools/misc/bezierTools.py":1302
- *
- * def _split_segment_at_t(c, t):
- * if len(c) == 2: # <<<<<<<<<<<<<<
- * s, e = c
- * midpoint = linePointAtT(s, e, t)
- */
- __pyx_t_1 = PyObject_Length(__pyx_v_c); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1302, __pyx_L1_error)
- __pyx_t_2 = (__pyx_t_1 == 2);
- if (__pyx_t_2) {
- /* "fontTools/misc/bezierTools.py":1303
- * def _split_segment_at_t(c, t):
- * if len(c) == 2:
- * s, e = c # <<<<<<<<<<<<<<
- * midpoint = linePointAtT(s, e, t)
- * return [(s, midpoint), (midpoint, e)]
- */
- if ((likely(PyTuple_CheckExact(__pyx_v_c))) || (PyList_CheckExact(__pyx_v_c))) {
- PyObject* sequence = __pyx_v_c;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1303, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_3);
- __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_4);
- } else {
- __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1303, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_3);
- __pyx_t_4 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1303, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_4);
- }
- #else
- __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1303, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1303, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- #endif
- } else {
- Py_ssize_t index = -1;
- __pyx_t_5 = PyObject_GetIter(__pyx_v_c); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1303, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_5);
- index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L4_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_L4_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_4);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < (0)) __PYX_ERR(0, 1303, __pyx_L1_error)
- __pyx_t_6 = NULL;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- goto __pyx_L5_unpacking_done;
- __pyx_L4_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_6 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1303, __pyx_L1_error)
- __pyx_L5_unpacking_done:;
- }
- __pyx_v_s = __pyx_t_3;
- __pyx_t_3 = 0;
- __pyx_v_e = __pyx_t_4;
- __pyx_t_4 = 0;
- /* "fontTools/misc/bezierTools.py":1304
- * if len(c) == 2:
- * s, e = c
- * midpoint = linePointAtT(s, e, t) # <<<<<<<<<<<<<<
- * return [(s, midpoint), (midpoint, e)]
- * if len(c) == 3:
- */
- __pyx_t_3 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_linePointAtT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1304, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_5))) {
- __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
- assert(__pyx_t_3);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
- __Pyx_INCREF(__pyx_t_3);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_v_s, __pyx_v_e, __pyx_v_t};
- __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1304, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- }
- __pyx_v_midpoint = __pyx_t_4;
- __pyx_t_4 = 0;
- /* "fontTools/misc/bezierTools.py":1305
- * s, e = c
- * midpoint = linePointAtT(s, e, t)
- * return [(s, midpoint), (midpoint, e)] # <<<<<<<<<<<<<<
- * if len(c) == 3:
- * return splitQuadraticAtT(*c, t)
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1305, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_INCREF(__pyx_v_s);
- __Pyx_GIVEREF(__pyx_v_s);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_s) != (0)) __PYX_ERR(0, 1305, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_midpoint);
- __Pyx_GIVEREF(__pyx_v_midpoint);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_midpoint) != (0)) __PYX_ERR(0, 1305, __pyx_L1_error);
- __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1305, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_INCREF(__pyx_v_midpoint);
- __Pyx_GIVEREF(__pyx_v_midpoint);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_midpoint) != (0)) __PYX_ERR(0, 1305, __pyx_L1_error);
- __Pyx_INCREF(__pyx_v_e);
- __Pyx_GIVEREF(__pyx_v_e);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_e) != (0)) __PYX_ERR(0, 1305, __pyx_L1_error);
- __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1305, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_GIVEREF(__pyx_t_4);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_4) != (0)) __PYX_ERR(0, 1305, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_5);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_5) != (0)) __PYX_ERR(0, 1305, __pyx_L1_error);
- __pyx_t_4 = 0;
- __pyx_t_5 = 0;
- __pyx_r = __pyx_t_3;
- __pyx_t_3 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1302
- *
- * def _split_segment_at_t(c, t):
- * if len(c) == 2: # <<<<<<<<<<<<<<
- * s, e = c
- * midpoint = linePointAtT(s, e, t)
- */
- }
- /* "fontTools/misc/bezierTools.py":1306
- * midpoint = linePointAtT(s, e, t)
- * return [(s, midpoint), (midpoint, e)]
- * if len(c) == 3: # <<<<<<<<<<<<<<
- * return splitQuadraticAtT(*c, t)
- * elif len(c) == 4:
- */
- __pyx_t_1 = PyObject_Length(__pyx_v_c); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1306, __pyx_L1_error)
- __pyx_t_2 = (__pyx_t_1 == 3);
- if (__pyx_t_2) {
- /* "fontTools/misc/bezierTools.py":1307
- * return [(s, midpoint), (midpoint, e)]
- * if len(c) == 3:
- * return splitQuadraticAtT(*c, t) # <<<<<<<<<<<<<<
- * elif len(c) == 4:
- * return splitCubicAtT(*c, t)
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_splitQuadraticAtT_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1307, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = __Pyx_PySequence_Tuple(__pyx_v_c); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1307, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1307, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_INCREF(__pyx_v_t);
- __Pyx_GIVEREF(__pyx_v_t);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_t) != (0)) __PYX_ERR(0, 1307, __pyx_L1_error);
- __pyx_t_8 = PyNumber_Add(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1307, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1307, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __pyx_r = __pyx_t_4;
- __pyx_t_4 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1306
- * midpoint = linePointAtT(s, e, t)
- * return [(s, midpoint), (midpoint, e)]
- * if len(c) == 3: # <<<<<<<<<<<<<<
- * return splitQuadraticAtT(*c, t)
- * elif len(c) == 4:
- */
- }
- /* "fontTools/misc/bezierTools.py":1308
- * if len(c) == 3:
- * return splitQuadraticAtT(*c, t)
- * elif len(c) == 4: # <<<<<<<<<<<<<<
- * return splitCubicAtT(*c, t)
- * raise ValueError("Unknown curve degree")
- */
- __pyx_t_1 = PyObject_Length(__pyx_v_c); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1308, __pyx_L1_error)
- __pyx_t_2 = (__pyx_t_1 == 4);
- if (__pyx_t_2) {
- /* "fontTools/misc/bezierTools.py":1309
- * return splitQuadraticAtT(*c, t)
- * elif len(c) == 4:
- * return splitCubicAtT(*c, t) # <<<<<<<<<<<<<<
- * raise ValueError("Unknown curve degree")
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_splitCubicAtT_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1309, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_8 = __Pyx_PySequence_Tuple(__pyx_v_c); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1309, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1309, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_INCREF(__pyx_v_t);
- __Pyx_GIVEREF(__pyx_v_t);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_t) != (0)) __PYX_ERR(0, 1309, __pyx_L1_error);
- __pyx_t_5 = PyNumber_Add(__pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1309, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1309, __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_r = __pyx_t_3;
- __pyx_t_3 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1308
- * if len(c) == 3:
- * return splitQuadraticAtT(*c, t)
- * elif len(c) == 4: # <<<<<<<<<<<<<<
- * return splitCubicAtT(*c, t)
- * raise ValueError("Unknown curve degree")
- */
- }
- /* "fontTools/misc/bezierTools.py":1310
- * elif len(c) == 4:
- * return splitCubicAtT(*c, t)
- * raise ValueError("Unknown curve degree") # <<<<<<<<<<<<<<
- *
- *
- */
- __pyx_t_5 = NULL;
- __pyx_t_7 = 1;
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Unknown_curve_degree};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1310, __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_ERR(0, 1310, __pyx_L1_error)
- /* "fontTools/misc/bezierTools.py":1301
- *
- *
- * def _split_segment_at_t(c, t): # <<<<<<<<<<<<<<
- * if len(c) == 2:
- * s, e = c
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_XDECREF(__pyx_t_4);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_XDECREF(__pyx_t_8);
- __Pyx_AddTraceback("fontTools.misc.bezierTools._split_segment_at_t", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_s);
- __Pyx_XDECREF(__pyx_v_e);
- __Pyx_XDECREF(__pyx_v_midpoint);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1313
- *
- *
- * def _curve_curve_intersections_t( # <<<<<<<<<<<<<<
- * curve1, curve2, precision=1e-3, range1=None, range2=None
- * ):
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_85_curve_curve_intersections_t(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_84_curve_curve_intersections_t, "_curve_curve_intersections_t(curve1, curve2, precision=1e-3, range1=None, range2=None)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_85_curve_curve_intersections_t = {"_curve_curve_intersections_t", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_85_curve_curve_intersections_t, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_84_curve_curve_intersections_t};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_85_curve_curve_intersections_t(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_curve1 = 0;
- PyObject *__pyx_v_curve2 = 0;
- PyObject *__pyx_v_precision = 0;
- PyObject *__pyx_v_range1 = 0;
- PyObject *__pyx_v_range2 = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[5] = {0,0,0,0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("_curve_curve_intersections_t (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_curve1,&__pyx_mstate_global->__pyx_n_u_curve2,&__pyx_mstate_global->__pyx_n_u_precision,&__pyx_mstate_global->__pyx_n_u_range1,&__pyx_mstate_global->__pyx_n_u_range2,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1313, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 5:
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1313, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1313, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1313, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1313, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1313, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_curve_curve_intersections_t", 0) < (0)) __PYX_ERR(0, 1313, __pyx_L3_error)
- if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_float_1eneg_3)));
- /* "fontTools/misc/bezierTools.py":1314
- *
- * def _curve_curve_intersections_t(
- * curve1, curve2, precision=1e-3, range1=None, range2=None # <<<<<<<<<<<<<<
- * ):
- * bounds1 = _curve_bounds(curve1)
- */
- if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
- if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None));
- for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_curve_curve_intersections_t", 0, 2, 5, i); __PYX_ERR(0, 1313, __pyx_L3_error) }
- }
- } else {
- switch (__pyx_nargs) {
- case 5:
- values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1313, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 4:
- values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1313, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 3:
- values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1313, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1313, __pyx_L3_error)
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1313, __pyx_L3_error)
- break;
- default: goto __pyx_L5_argtuple_error;
- }
- if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_float_1eneg_3)));
- if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
- if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None));
- }
- __pyx_v_curve1 = values[0];
- __pyx_v_curve2 = values[1];
- __pyx_v_precision = values[2];
- __pyx_v_range1 = values[3];
- __pyx_v_range2 = values[4];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("_curve_curve_intersections_t", 0, 2, 5, __pyx_nargs); __PYX_ERR(0, 1313, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools._curve_curve_intersections_t", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_84_curve_curve_intersections_t(__pyx_self, __pyx_v_curve1, __pyx_v_curve2, __pyx_v_precision, __pyx_v_range1, __pyx_v_range2);
- /* "fontTools/misc/bezierTools.py":1313
- *
- *
- * def _curve_curve_intersections_t( # <<<<<<<<<<<<<<
- * curve1, curve2, precision=1e-3, range1=None, range2=None
- * ):
- */
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1329
- * return []
- *
- * def midpoint(r): # <<<<<<<<<<<<<<
- * return 0.5 * (r[0] + r[1])
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_1midpoint(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_1midpoint = {"midpoint", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_1midpoint, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_1midpoint(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_r = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[1] = {0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("midpoint (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_r,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1329, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1329, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "midpoint", 0) < (0)) __PYX_ERR(0, 1329, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("midpoint", 1, 1, 1, i); __PYX_ERR(0, 1329, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 1)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1329, __pyx_L3_error)
- }
- __pyx_v_r = values[0];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("midpoint", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1329, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools._curve_curve_intersections_t.midpoint", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_midpoint(__pyx_self, __pyx_v_r);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_midpoint(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_r) {
- 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("midpoint", 0);
- /* "fontTools/misc/bezierTools.py":1330
- *
- * def midpoint(r):
- * return 0.5 * (r[0] + r[1]) # <<<<<<<<<<<<<<
- *
- * # If they do overlap but they're tiny, approximate
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_r, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1330, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_r, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1330, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1330, __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_t_2 = PyNumber_Multiply(__pyx_mstate_global->__pyx_float_0_5, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1330, __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;
- /* "fontTools/misc/bezierTools.py":1329
- * return []
- *
- * def midpoint(r): # <<<<<<<<<<<<<<
- * return 0.5 * (r[0] + r[1])
- *
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_AddTraceback("fontTools.misc.bezierTools._curve_curve_intersections_t.midpoint", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1366
- * )
- *
- * unique_key = lambda ts: (int(ts[0] / precision), int(ts[1] / precision)) # <<<<<<<<<<<<<<
- * seen = set()
- * unique_values = []
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_2lambda3(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_2lambda3 = {"lambda3", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_2lambda3, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_2lambda3(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_ts = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[1] = {0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("lambda3 (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_ts,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1366, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1366, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "lambda3", 0) < (0)) __PYX_ERR(0, 1366, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("lambda3", 1, 1, 1, i); __PYX_ERR(0, 1366, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 1)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1366, __pyx_L3_error)
- }
- __pyx_v_ts = values[0];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("lambda3", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1366, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools._curve_curve_intersections_t.lambda3", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_lambda_funcdef_lambda3(__pyx_self, __pyx_v_ts);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_lambda_funcdef_lambda3(PyObject *__pyx_self, PyObject *__pyx_v_ts) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *__pyx_cur_scope;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *__pyx_outer_scope;
- 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("lambda3", 0);
- __pyx_outer_scope = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *) __Pyx_CyFunction_GetClosure(__pyx_self);
- __pyx_cur_scope = __pyx_outer_scope;
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_ts, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1366, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- if (unlikely(!__pyx_cur_scope->__pyx_v_precision)) { __Pyx_RaiseClosureNameError("precision"); __PYX_ERR(0, 1366, __pyx_L1_error) }
- __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_cur_scope->__pyx_v_precision); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1366, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1366, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_ts, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1366, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- if (unlikely(!__pyx_cur_scope->__pyx_v_precision)) { __Pyx_RaiseClosureNameError("precision"); __PYX_ERR(0, 1366, __pyx_L1_error) }
- __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_cur_scope->__pyx_v_precision); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1366, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1366, __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_ERR(0, 1366, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 1366, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 1366, __pyx_L1_error);
- __pyx_t_1 = 0;
- __pyx_t_2 = 0;
- __pyx_r = __pyx_t_3;
- __pyx_t_3 = 0;
- goto __pyx_L0;
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_3);
- __Pyx_AddTraceback("fontTools.misc.bezierTools._curve_curve_intersections_t.lambda3", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1313
- *
- *
- * def _curve_curve_intersections_t( # <<<<<<<<<<<<<<
- * curve1, curve2, precision=1e-3, range1=None, range2=None
- * ):
- */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_84_curve_curve_intersections_t(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_curve1, PyObject *__pyx_v_curve2, PyObject *__pyx_v_precision, PyObject *__pyx_v_range1, PyObject *__pyx_v_range2) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *__pyx_cur_scope;
- PyObject *__pyx_v_bounds1 = NULL;
- PyObject *__pyx_v_bounds2 = NULL;
- PyObject *__pyx_v_intersects = NULL;
- CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
- PyObject *__pyx_v_midpoint = 0;
- PyObject *__pyx_v_c11 = NULL;
- PyObject *__pyx_v_c12 = NULL;
- PyObject *__pyx_v_c11_range = NULL;
- PyObject *__pyx_v_c12_range = NULL;
- PyObject *__pyx_v_c21 = NULL;
- PyObject *__pyx_v_c22 = NULL;
- PyObject *__pyx_v_c21_range = NULL;
- PyObject *__pyx_v_c22_range = NULL;
- PyObject *__pyx_v_found = NULL;
- PyObject *__pyx_v_unique_key = NULL;
- PyObject *__pyx_v_seen = NULL;
- PyObject *__pyx_v_unique_values = NULL;
- PyObject *__pyx_v_ts = NULL;
- PyObject *__pyx_v_key = NULL;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- PyObject *__pyx_t_1 = NULL;
- PyObject *__pyx_t_2 = NULL;
- PyObject *__pyx_t_3 = NULL;
- size_t __pyx_t_4;
- int __pyx_t_5;
- int __pyx_t_6;
- PyObject *__pyx_t_7 = NULL;
- PyObject *(*__pyx_t_8)(PyObject *);
- int __pyx_t_9;
- Py_ssize_t __pyx_t_10;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("_curve_curve_intersections_t", 0);
- __pyx_cur_scope = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t(__pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t, __pyx_mstate_global->__pyx_empty_tuple, NULL);
- if (unlikely(!__pyx_cur_scope)) {
- __pyx_cur_scope = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *)Py_None);
- __Pyx_INCREF(Py_None);
- __PYX_ERR(0, 1313, __pyx_L1_error)
- } else {
- __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
- }
- __pyx_cur_scope->__pyx_v_precision = __pyx_v_precision;
- __Pyx_INCREF(__pyx_cur_scope->__pyx_v_precision);
- __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_precision);
- __Pyx_INCREF(__pyx_v_range1);
- __Pyx_INCREF(__pyx_v_range2);
- /* "fontTools/misc/bezierTools.py":1316
- * curve1, curve2, precision=1e-3, range1=None, range2=None
- * ):
- * bounds1 = _curve_bounds(curve1) # <<<<<<<<<<<<<<
- * bounds2 = _curve_bounds(curve2)
- *
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_curve_bounds); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1316, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_curve1};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1316, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_v_bounds1 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1317
- * ):
- * bounds1 = _curve_bounds(curve1)
- * bounds2 = _curve_bounds(curve2) # <<<<<<<<<<<<<<
- *
- * if not range1:
- */
- __pyx_t_3 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_curve_bounds); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1317, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_2))) {
- __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
- assert(__pyx_t_3);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
- __Pyx_INCREF(__pyx_t_3);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_curve2};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1317, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_v_bounds2 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1319
- * bounds2 = _curve_bounds(curve2)
- *
- * if not range1: # <<<<<<<<<<<<<<
- * range1 = (0.0, 1.0)
- * if not range2:
- */
- __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_range1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1319, __pyx_L1_error)
- __pyx_t_6 = (!__pyx_t_5);
- if (__pyx_t_6) {
- /* "fontTools/misc/bezierTools.py":1320
- *
- * if not range1:
- * range1 = (0.0, 1.0) # <<<<<<<<<<<<<<
- * if not range2:
- * range2 = (0.0, 1.0)
- */
- __Pyx_INCREF(__pyx_mstate_global->__pyx_tuple[1]);
- __Pyx_DECREF_SET(__pyx_v_range1, __pyx_mstate_global->__pyx_tuple[1]);
- /* "fontTools/misc/bezierTools.py":1319
- * bounds2 = _curve_bounds(curve2)
- *
- * if not range1: # <<<<<<<<<<<<<<
- * range1 = (0.0, 1.0)
- * if not range2:
- */
- }
- /* "fontTools/misc/bezierTools.py":1321
- * if not range1:
- * range1 = (0.0, 1.0)
- * if not range2: # <<<<<<<<<<<<<<
- * range2 = (0.0, 1.0)
- *
- */
- __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_range2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1321, __pyx_L1_error)
- __pyx_t_5 = (!__pyx_t_6);
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":1322
- * range1 = (0.0, 1.0)
- * if not range2:
- * range2 = (0.0, 1.0) # <<<<<<<<<<<<<<
- *
- * # If bounds don't intersect, go home
- */
- __Pyx_INCREF(__pyx_mstate_global->__pyx_tuple[1]);
- __Pyx_DECREF_SET(__pyx_v_range2, __pyx_mstate_global->__pyx_tuple[1]);
- /* "fontTools/misc/bezierTools.py":1321
- * if not range1:
- * range1 = (0.0, 1.0)
- * if not range2: # <<<<<<<<<<<<<<
- * range2 = (0.0, 1.0)
- *
- */
- }
- /* "fontTools/misc/bezierTools.py":1325
- *
- * # If bounds don't intersect, go home
- * intersects, _ = sectRect(bounds1, bounds2) # <<<<<<<<<<<<<<
- * if not intersects:
- * return []
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_sectRect); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1325, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_bounds1, __pyx_v_bounds2};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1325, __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;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1325, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_3);
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_2);
- } else {
- __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1325, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_3);
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1325, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- }
- #else
- __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1325, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1325, __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_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1325, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_t_8 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7);
- index = 0; __pyx_t_3 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_3);
- 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);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < (0)) __PYX_ERR(0, 1325, __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_ERR(0, 1325, __pyx_L1_error)
- __pyx_L6_unpacking_done:;
- }
- __pyx_v_intersects = __pyx_t_3;
- __pyx_t_3 = 0;
- __pyx_v__ = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1326
- * # If bounds don't intersect, go home
- * intersects, _ = sectRect(bounds1, bounds2)
- * if not intersects: # <<<<<<<<<<<<<<
- * return []
- *
- */
- __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_intersects); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1326, __pyx_L1_error)
- __pyx_t_6 = (!__pyx_t_5);
- if (__pyx_t_6) {
- /* "fontTools/misc/bezierTools.py":1327
- * intersects, _ = sectRect(bounds1, bounds2)
- * if not intersects:
- * return [] # <<<<<<<<<<<<<<
- *
- * def midpoint(r):
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1327, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1326
- * # If bounds don't intersect, go home
- * intersects, _ = sectRect(bounds1, bounds2)
- * if not intersects: # <<<<<<<<<<<<<<
- * return []
- *
- */
- }
- /* "fontTools/misc/bezierTools.py":1329
- * return []
- *
- * def midpoint(r): # <<<<<<<<<<<<<<
- * return 0.5 * (r[0] + r[1])
- *
- */
- __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_1midpoint, 0, __pyx_mstate_global->__pyx_n_u_curve_curve_intersections_t_loc, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[5])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1329, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_v_midpoint = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1333
- *
- * # If they do overlap but they're tiny, approximate
- * if rectArea(bounds1) < precision and rectArea(bounds2) < precision: # <<<<<<<<<<<<<<
- * return [(midpoint(range1), midpoint(range2))]
- *
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_rectArea); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1333, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_bounds1};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1333, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_cur_scope->__pyx_v_precision, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1333, __pyx_L1_error)
- __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_ERR(0, 1333, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (__pyx_t_5) {
- } else {
- __pyx_t_6 = __pyx_t_5;
- goto __pyx_L9_bool_binop_done;
- }
- __pyx_t_1 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_rectArea); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1333, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_2))) {
- __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
- assert(__pyx_t_1);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
- __Pyx_INCREF(__pyx_t_1);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_bounds2};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1333, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_cur_scope->__pyx_v_precision, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1333, __pyx_L1_error)
- __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_ERR(0, 1333, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_6 = __pyx_t_5;
- __pyx_L9_bool_binop_done:;
- if (__pyx_t_6) {
- /* "fontTools/misc/bezierTools.py":1334
- * # If they do overlap but they're tiny, approximate
- * if rectArea(bounds1) < precision and rectArea(bounds2) < precision:
- * return [(midpoint(range1), midpoint(range2))] # <<<<<<<<<<<<<<
- *
- * c11, c12 = _split_segment_at_t(curve1, 0.5)
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_2 = __pyx_pf_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_midpoint(__pyx_v_midpoint, __pyx_v_range1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1334, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_3 = __pyx_pf_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_midpoint(__pyx_v_midpoint, __pyx_v_range2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1334, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1334, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 1334, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 1334, __pyx_L1_error);
- __pyx_t_2 = 0;
- __pyx_t_3 = 0;
- __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1334, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 1334, __pyx_L1_error);
- __pyx_t_1 = 0;
- __pyx_r = __pyx_t_3;
- __pyx_t_3 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1333
- *
- * # If they do overlap but they're tiny, approximate
- * if rectArea(bounds1) < precision and rectArea(bounds2) < precision: # <<<<<<<<<<<<<<
- * return [(midpoint(range1), midpoint(range2))]
- *
- */
- }
- /* "fontTools/misc/bezierTools.py":1336
- * return [(midpoint(range1), midpoint(range2))]
- *
- * c11, c12 = _split_segment_at_t(curve1, 0.5) # <<<<<<<<<<<<<<
- * c11_range = (range1[0], midpoint(range1))
- * c12_range = (midpoint(range1), range1[1])
- */
- __pyx_t_1 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_split_segment_at_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1336, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_2))) {
- __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
- assert(__pyx_t_1);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
- __Pyx_INCREF(__pyx_t_1);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_v_curve1, __pyx_mstate_global->__pyx_float_0_5};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1336, __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;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1336, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1336, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1336, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1336, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1336, __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_ERR(0, 1336, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_8 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7);
- index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L11_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_L11_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < (0)) __PYX_ERR(0, 1336, __pyx_L1_error)
- __pyx_t_8 = NULL;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- goto __pyx_L12_unpacking_done;
- __pyx_L11_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __pyx_t_8 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1336, __pyx_L1_error)
- __pyx_L12_unpacking_done:;
- }
- __pyx_v_c11 = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_c12 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1337
- *
- * c11, c12 = _split_segment_at_t(curve1, 0.5)
- * c11_range = (range1[0], midpoint(range1)) # <<<<<<<<<<<<<<
- * c12_range = (midpoint(range1), range1[1])
- *
- */
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_range1, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1337, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_1 = __pyx_pf_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_midpoint(__pyx_v_midpoint, __pyx_v_range1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1337, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1337, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3) != (0)) __PYX_ERR(0, 1337, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 1337, __pyx_L1_error);
- __pyx_t_3 = 0;
- __pyx_t_1 = 0;
- __pyx_v_c11_range = ((PyObject*)__pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1338
- * c11, c12 = _split_segment_at_t(curve1, 0.5)
- * c11_range = (range1[0], midpoint(range1))
- * c12_range = (midpoint(range1), range1[1]) # <<<<<<<<<<<<<<
- *
- * c21, c22 = _split_segment_at_t(curve2, 0.5)
- */
- __pyx_t_2 = __pyx_pf_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_midpoint(__pyx_v_midpoint, __pyx_v_range1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1338, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_range1, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1338, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1338, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 1338, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 1338, __pyx_L1_error);
- __pyx_t_2 = 0;
- __pyx_t_1 = 0;
- __pyx_v_c12_range = ((PyObject*)__pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1340
- * c12_range = (midpoint(range1), range1[1])
- *
- * c21, c22 = _split_segment_at_t(curve2, 0.5) # <<<<<<<<<<<<<<
- * c21_range = (range2[0], midpoint(range2))
- * c22_range = (midpoint(range2), range2[1])
- */
- __pyx_t_1 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_split_segment_at_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1340, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_2))) {
- __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
- assert(__pyx_t_1);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
- __Pyx_INCREF(__pyx_t_1);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_v_curve2, __pyx_mstate_global->__pyx_float_0_5};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1340, __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;
- Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
- if (unlikely(size != 2)) {
- if (size > 2) __Pyx_RaiseTooManyValuesError(2);
- else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 1340, __pyx_L1_error)
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- if (likely(PyTuple_CheckExact(sequence))) {
- __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
- __Pyx_INCREF(__pyx_t_1);
- } else {
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1340, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1340, __pyx_L1_error)
- __Pyx_XGOTREF(__pyx_t_1);
- }
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1340, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1340, __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_ERR(0, 1340, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_8 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7);
- index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L13_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_L13_unpacking_failed;
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < (0)) __PYX_ERR(0, 1340, __pyx_L1_error)
- __pyx_t_8 = NULL;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- goto __pyx_L14_unpacking_done;
- __pyx_L13_unpacking_failed:;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __pyx_t_8 = NULL;
- if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 1340, __pyx_L1_error)
- __pyx_L14_unpacking_done:;
- }
- __pyx_v_c21 = __pyx_t_2;
- __pyx_t_2 = 0;
- __pyx_v_c22 = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1341
- *
- * c21, c22 = _split_segment_at_t(curve2, 0.5)
- * c21_range = (range2[0], midpoint(range2)) # <<<<<<<<<<<<<<
- * c22_range = (midpoint(range2), range2[1])
- *
- */
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_range2, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1341, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_1 = __pyx_pf_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_midpoint(__pyx_v_midpoint, __pyx_v_range2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1341, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1341, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3) != (0)) __PYX_ERR(0, 1341, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 1341, __pyx_L1_error);
- __pyx_t_3 = 0;
- __pyx_t_1 = 0;
- __pyx_v_c21_range = ((PyObject*)__pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1342
- * c21, c22 = _split_segment_at_t(curve2, 0.5)
- * c21_range = (range2[0], midpoint(range2))
- * c22_range = (midpoint(range2), range2[1]) # <<<<<<<<<<<<<<
- *
- * found = []
- */
- __pyx_t_2 = __pyx_pf_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_midpoint(__pyx_v_midpoint, __pyx_v_range2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1342, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_range2, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1342, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1342, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 1342, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 1342, __pyx_L1_error);
- __pyx_t_2 = 0;
- __pyx_t_1 = 0;
- __pyx_v_c22_range = ((PyObject*)__pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1344
- * c22_range = (midpoint(range2), range2[1])
- *
- * found = [] # <<<<<<<<<<<<<<
- * found.extend(
- * _curve_curve_intersections_t(
- */
- __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1344, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_v_found = ((PyObject*)__pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1346
- * found = []
- * found.extend(
- * _curve_curve_intersections_t( # <<<<<<<<<<<<<<
- * c11, c21, precision, range1=c11_range, range2=c21_range
- * )
- */
- __pyx_t_1 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_curve_curve_intersections_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1346, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- /* "fontTools/misc/bezierTools.py":1347
- * found.extend(
- * _curve_curve_intersections_t(
- * c11, c21, precision, range1=c11_range, range2=c21_range # <<<<<<<<<<<<<<
- * )
- * )
- */
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_2))) {
- __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
- assert(__pyx_t_1);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
- __Pyx_INCREF(__pyx_t_1);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4 + ((CYTHON_VECTORCALL) ? 2 : 0)] = {__pyx_t_1, __pyx_v_c11, __pyx_v_c21, __pyx_cur_scope->__pyx_v_precision};
- __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1346, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_range1, __pyx_v_c11_range, __pyx_t_7, __pyx_callargs+4, 0) < (0)) __PYX_ERR(0, 1346, __pyx_L1_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_range2, __pyx_v_c21_range, __pyx_t_7, __pyx_callargs+4, 1) < (0)) __PYX_ERR(0, 1346, __pyx_L1_error)
- __pyx_t_3 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7);
- __Pyx_XDECREF(__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;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1346, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- /* "fontTools/misc/bezierTools.py":1345
- *
- * found = []
- * found.extend( # <<<<<<<<<<<<<<
- * _curve_curve_intersections_t(
- * c11, c21, precision, range1=c11_range, range2=c21_range
- */
- __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_found, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 1345, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1351
- * )
- * found.extend(
- * _curve_curve_intersections_t( # <<<<<<<<<<<<<<
- * c12, c21, precision, range1=c12_range, range2=c21_range
- * )
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_curve_curve_intersections_t); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1351, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- /* "fontTools/misc/bezierTools.py":1352
- * found.extend(
- * _curve_curve_intersections_t(
- * c12, c21, precision, range1=c12_range, range2=c21_range # <<<<<<<<<<<<<<
- * )
- * )
- */
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_7))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4 + ((CYTHON_VECTORCALL) ? 2 : 0)] = {__pyx_t_2, __pyx_v_c12, __pyx_v_c21, __pyx_cur_scope->__pyx_v_precision};
- __pyx_t_1 = __Pyx_MakeVectorcallBuilderKwds(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1351, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_range1, __pyx_v_c12_range, __pyx_t_1, __pyx_callargs+4, 0) < (0)) __PYX_ERR(0, 1351, __pyx_L1_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_range2, __pyx_v_c21_range, __pyx_t_1, __pyx_callargs+4, 1) < (0)) __PYX_ERR(0, 1351, __pyx_L1_error)
- __pyx_t_3 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1);
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1351, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- /* "fontTools/misc/bezierTools.py":1350
- * )
- * )
- * found.extend( # <<<<<<<<<<<<<<
- * _curve_curve_intersections_t(
- * c12, c21, precision, range1=c12_range, range2=c21_range
- */
- __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_found, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 1350, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1356
- * )
- * found.extend(
- * _curve_curve_intersections_t( # <<<<<<<<<<<<<<
- * c11, c22, precision, range1=c11_range, range2=c22_range
- * )
- */
- __pyx_t_7 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_curve_curve_intersections_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1356, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- /* "fontTools/misc/bezierTools.py":1357
- * found.extend(
- * _curve_curve_intersections_t(
- * c11, c22, precision, range1=c11_range, range2=c22_range # <<<<<<<<<<<<<<
- * )
- * )
- */
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_1))) {
- __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
- assert(__pyx_t_7);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
- __Pyx_INCREF(__pyx_t_7);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4 + ((CYTHON_VECTORCALL) ? 2 : 0)] = {__pyx_t_7, __pyx_v_c11, __pyx_v_c22, __pyx_cur_scope->__pyx_v_precision};
- __pyx_t_2 = __Pyx_MakeVectorcallBuilderKwds(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1356, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_range1, __pyx_v_c11_range, __pyx_t_2, __pyx_callargs+4, 0) < (0)) __PYX_ERR(0, 1356, __pyx_L1_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_range2, __pyx_v_c22_range, __pyx_t_2, __pyx_callargs+4, 1) < (0)) __PYX_ERR(0, 1356, __pyx_L1_error)
- __pyx_t_3 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2);
- __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1356, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- /* "fontTools/misc/bezierTools.py":1355
- * )
- * )
- * found.extend( # <<<<<<<<<<<<<<
- * _curve_curve_intersections_t(
- * c11, c22, precision, range1=c11_range, range2=c22_range
- */
- __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_found, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 1355, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1361
- * )
- * found.extend(
- * _curve_curve_intersections_t( # <<<<<<<<<<<<<<
- * c12, c22, precision, range1=c12_range, range2=c22_range
- * )
- */
- __pyx_t_1 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_curve_curve_intersections_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1361, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- /* "fontTools/misc/bezierTools.py":1362
- * found.extend(
- * _curve_curve_intersections_t(
- * c12, c22, precision, range1=c12_range, range2=c22_range # <<<<<<<<<<<<<<
- * )
- * )
- */
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_2))) {
- __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
- assert(__pyx_t_1);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
- __Pyx_INCREF(__pyx_t_1);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[4 + ((CYTHON_VECTORCALL) ? 2 : 0)] = {__pyx_t_1, __pyx_v_c12, __pyx_v_c22, __pyx_cur_scope->__pyx_v_precision};
- __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1361, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_range1, __pyx_v_c12_range, __pyx_t_7, __pyx_callargs+4, 0) < (0)) __PYX_ERR(0, 1361, __pyx_L1_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_range2, __pyx_v_c22_range, __pyx_t_7, __pyx_callargs+4, 1) < (0)) __PYX_ERR(0, 1361, __pyx_L1_error)
- __pyx_t_3 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7);
- __Pyx_XDECREF(__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;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1361, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- /* "fontTools/misc/bezierTools.py":1360
- * )
- * )
- * found.extend( # <<<<<<<<<<<<<<
- * _curve_curve_intersections_t(
- * c12, c22, precision, range1=c12_range, range2=c22_range
- */
- __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_found, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 1360, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1366
- * )
- *
- * unique_key = lambda ts: (int(ts[0] / precision), int(ts[1] / precision)) # <<<<<<<<<<<<<<
- * seen = set()
- * unique_values = []
- */
- __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_28_curve_curve_intersections_t_2lambda3, 0, __pyx_mstate_global->__pyx_n_u_curve_curve_intersections_t_loc_2, ((PyObject*)__pyx_cur_scope), __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[6])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1366, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_v_unique_key = __pyx_t_3;
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1367
- *
- * unique_key = lambda ts: (int(ts[0] / precision), int(ts[1] / precision))
- * seen = set() # <<<<<<<<<<<<<<
- * unique_values = []
- *
- */
- __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1367, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_v_seen = ((PyObject*)__pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1368
- * unique_key = lambda ts: (int(ts[0] / precision), int(ts[1] / precision))
- * seen = set()
- * unique_values = [] # <<<<<<<<<<<<<<
- *
- * for ts in found:
- */
- __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1368, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_v_unique_values = ((PyObject*)__pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1370
- * unique_values = []
- *
- * for ts in found: # <<<<<<<<<<<<<<
- * key = unique_key(ts)
- * if key in seen:
- */
- __pyx_t_3 = __pyx_v_found; __Pyx_INCREF(__pyx_t_3);
- __pyx_t_10 = 0;
- for (;;) {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1370, __pyx_L1_error)
- #endif
- if (__pyx_t_10 >= __pyx_temp) break;
- }
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(__pyx_t_3, __pyx_t_10, __Pyx_ReferenceSharing_OwnStrongReference);
- ++__pyx_t_10;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1370, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_XDECREF_SET(__pyx_v_ts, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1371
- *
- * for ts in found:
- * key = unique_key(ts) # <<<<<<<<<<<<<<
- * if key in seen:
- * continue
- */
- __pyx_t_2 = __pyx_lambda_funcdef_lambda3(__pyx_v_unique_key, __pyx_v_ts); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1371, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1372
- * for ts in found:
- * key = unique_key(ts)
- * if key in seen: # <<<<<<<<<<<<<<
- * continue
- * seen.add(key)
- */
- __pyx_t_6 = (__Pyx_PySet_ContainsTF(__pyx_v_key, __pyx_v_seen, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1372, __pyx_L1_error)
- if (__pyx_t_6) {
- /* "fontTools/misc/bezierTools.py":1373
- * key = unique_key(ts)
- * if key in seen:
- * continue # <<<<<<<<<<<<<<
- * seen.add(key)
- * unique_values.append(ts)
- */
- goto __pyx_L15_continue;
- /* "fontTools/misc/bezierTools.py":1372
- * for ts in found:
- * key = unique_key(ts)
- * if key in seen: # <<<<<<<<<<<<<<
- * continue
- * seen.add(key)
- */
- }
- /* "fontTools/misc/bezierTools.py":1374
- * if key in seen:
- * continue
- * seen.add(key) # <<<<<<<<<<<<<<
- * unique_values.append(ts)
- *
- */
- __pyx_t_9 = PySet_Add(__pyx_v_seen, __pyx_v_key); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 1374, __pyx_L1_error)
- /* "fontTools/misc/bezierTools.py":1375
- * continue
- * seen.add(key)
- * unique_values.append(ts) # <<<<<<<<<<<<<<
- *
- * return unique_values
- */
- __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_unique_values, __pyx_v_ts); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 1375, __pyx_L1_error)
- /* "fontTools/misc/bezierTools.py":1370
- * unique_values = []
- *
- * for ts in found: # <<<<<<<<<<<<<<
- * key = unique_key(ts)
- * if key in seen:
- */
- __pyx_L15_continue:;
- }
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1377
- * unique_values.append(ts)
- *
- * return unique_values # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_INCREF(__pyx_v_unique_values);
- __pyx_r = __pyx_v_unique_values;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1313
- *
- *
- * def _curve_curve_intersections_t( # <<<<<<<<<<<<<<
- * curve1, curve2, precision=1e-3, range1=None, range2=None
- * ):
- */
- /* function exit code */
- __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("fontTools.misc.bezierTools._curve_curve_intersections_t", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_bounds1);
- __Pyx_XDECREF(__pyx_v_bounds2);
- __Pyx_XDECREF(__pyx_v_intersects);
- __Pyx_XDECREF(__pyx_v__);
- __Pyx_XDECREF(__pyx_v_midpoint);
- __Pyx_XDECREF(__pyx_v_c11);
- __Pyx_XDECREF(__pyx_v_c12);
- __Pyx_XDECREF(__pyx_v_c11_range);
- __Pyx_XDECREF(__pyx_v_c12_range);
- __Pyx_XDECREF(__pyx_v_c21);
- __Pyx_XDECREF(__pyx_v_c22);
- __Pyx_XDECREF(__pyx_v_c21_range);
- __Pyx_XDECREF(__pyx_v_c22_range);
- __Pyx_XDECREF(__pyx_v_found);
- __Pyx_XDECREF(__pyx_v_unique_key);
- __Pyx_XDECREF(__pyx_v_seen);
- __Pyx_XDECREF(__pyx_v_unique_values);
- __Pyx_XDECREF(__pyx_v_ts);
- __Pyx_XDECREF(__pyx_v_key);
- __Pyx_XDECREF(__pyx_v_range1);
- __Pyx_XDECREF(__pyx_v_range2);
- __Pyx_DECREF((PyObject *)__pyx_cur_scope);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1380
- *
- *
- * def _is_linelike(segment): # <<<<<<<<<<<<<<
- * maybeline = _alignment_transformation(segment).transformPoints(segment)
- * return all(math.isclose(p[1], 0.0) for p in maybeline)
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_87_is_linelike(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_86_is_linelike, "_is_linelike(segment)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_87_is_linelike = {"_is_linelike", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_87_is_linelike, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_86_is_linelike};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_87_is_linelike(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_segment = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[1] = {0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("_is_linelike (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_segment,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1380, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1380, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_is_linelike", 0) < (0)) __PYX_ERR(0, 1380, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_is_linelike", 1, 1, 1, i); __PYX_ERR(0, 1380, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 1)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1380, __pyx_L3_error)
- }
- __pyx_v_segment = values[0];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("_is_linelike", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1380, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools._is_linelike", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_86_is_linelike(__pyx_self, __pyx_v_segment);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_12_is_linelike_2generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
- /* "fontTools/misc/bezierTools.py":1382
- * def _is_linelike(segment):
- * maybeline = _alignment_transformation(segment).transformPoints(segment)
- * return all(math.isclose(p[1], 0.0) for p in maybeline) # <<<<<<<<<<<<<<
- *
- *
- */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_12_is_linelike_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr *__pyx_cur_scope;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("genexpr", 0);
- __pyx_cur_scope = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr(__pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
- if (unlikely(!__pyx_cur_scope)) {
- __pyx_cur_scope = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr *)Py_None);
- __Pyx_INCREF(Py_None);
- __PYX_ERR(0, 1382, __pyx_L1_error)
- } else {
- __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
- }
- __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
- __Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
- __Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
- {
- __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_9fontTools_4misc_11bezierTools_12_is_linelike_2generator5, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[7]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_is_linelike_locals_genexpr, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools); if (unlikely(!gen)) __PYX_ERR(0, 1382, __pyx_L1_error)
- __Pyx_DECREF(__pyx_cur_scope);
- __Pyx_RefNannyFinishContext();
- return (PyObject *) gen;
- }
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_AddTraceback("fontTools.misc.bezierTools._is_linelike.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __Pyx_DECREF((PyObject *)__pyx_cur_scope);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_12_is_linelike_2generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
- {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr *__pyx_cur_scope = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr *)__pyx_generator->closure);
- PyObject *__pyx_r = NULL;
- PyObject *__pyx_t_1 = NULL;
- Py_ssize_t __pyx_t_2;
- PyObject *(*__pyx_t_3)(PyObject *);
- PyObject *__pyx_t_4 = NULL;
- PyObject *__pyx_t_5 = NULL;
- PyObject *__pyx_t_6 = NULL;
- PyObject *__pyx_t_7 = NULL;
- size_t __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_RefNannyDeclarations
- __Pyx_RefNannySetupContext("genexpr", 0);
- switch (__pyx_generator->resume_label) {
- case 0: goto __pyx_L3_first_run;
- default: /* CPython raises the right error here */
- __Pyx_RefNannyFinishContext();
- return NULL;
- }
- __pyx_L3_first_run:;
- if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1382, __pyx_L1_error)
- if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 1382, __pyx_L1_error) }
- if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) {
- __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = 0;
- __pyx_t_3 = NULL;
- } else {
- __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_genexpr_arg_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1382, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1382, __pyx_L1_error)
- }
- for (;;) {
- if (likely(!__pyx_t_3)) {
- if (likely(PyList_CheckExact(__pyx_t_1))) {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1382, __pyx_L1_error)
- #endif
- if (__pyx_t_2 >= __pyx_temp) break;
- }
- __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
- ++__pyx_t_2;
- } else {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1382, __pyx_L1_error)
- #endif
- if (__pyx_t_2 >= __pyx_temp) break;
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
- #else
- __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
- #endif
- ++__pyx_t_2;
- }
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1382, __pyx_L1_error)
- } else {
- __pyx_t_4 = __pyx_t_3(__pyx_t_1);
- if (unlikely(!__pyx_t_4)) {
- PyObject* exc_type = PyErr_Occurred();
- if (exc_type) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 1382, __pyx_L1_error)
- PyErr_Clear();
- }
- break;
- }
- }
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_p);
- __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_p, __pyx_t_4);
- __Pyx_GIVEREF(__pyx_t_4);
- __pyx_t_4 = 0;
- __pyx_t_5 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_math); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1382, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_isclose); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1382, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_p, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1382, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_8 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_7))) {
- __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
- assert(__pyx_t_5);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
- __Pyx_INCREF(__pyx_t_5);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
- __pyx_t_8 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_mstate_global->__pyx_float_0_0};
- __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1382, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- }
- __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1382, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_10 = (!__pyx_t_9);
- if (__pyx_t_10) {
- __Pyx_XDECREF(__pyx_r);
- __Pyx_INCREF(Py_False);
- __pyx_r = Py_False;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- goto __pyx_L0;
- }
- }
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- /*else*/ {
- __Pyx_XDECREF(__pyx_r);
- __Pyx_INCREF(Py_True);
- __pyx_r = Py_True;
- goto __pyx_L0;
- }
- CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
- /* function exit code */
- 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);
- if (__Pyx_PyErr_Occurred()) {
- __Pyx_Generator_Replace_StopIteration(0);
- __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
- }
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- #if !CYTHON_USE_EXC_INFO_STACK
- __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
- #endif
- __pyx_generator->resume_label = -1;
- __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1380
- *
- *
- * def _is_linelike(segment): # <<<<<<<<<<<<<<
- * maybeline = _alignment_transformation(segment).transformPoints(segment)
- * return all(math.isclose(p[1], 0.0) for p in maybeline)
- */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_86_is_linelike(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_segment) {
- PyObject *__pyx_v_maybeline = NULL;
- PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_12_is_linelike_2generator5 = 0;
- 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;
- size_t __pyx_t_6;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("_is_linelike", 0);
- /* "fontTools/misc/bezierTools.py":1381
- *
- * def _is_linelike(segment):
- * maybeline = _alignment_transformation(segment).transformPoints(segment) # <<<<<<<<<<<<<<
- * return all(math.isclose(p[1], 0.0) for p in maybeline)
- *
- */
- __pyx_t_4 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_alignment_transformation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1381, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_6 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_5))) {
- __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
- assert(__pyx_t_4);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
- __Pyx_INCREF(__pyx_t_4);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
- __pyx_t_6 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_segment};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1381, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- __pyx_t_2 = __pyx_t_3;
- __Pyx_INCREF(__pyx_t_2);
- __pyx_t_6 = 0;
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_segment};
- __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_transformPoints, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1381, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_v_maybeline = __pyx_t_1;
- __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1382
- * def _is_linelike(segment):
- * maybeline = _alignment_transformation(segment).transformPoints(segment)
- * return all(math.isclose(p[1], 0.0) for p in maybeline) # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = __pyx_pf_9fontTools_4misc_11bezierTools_12_is_linelike_genexpr(NULL, __pyx_v_maybeline); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1382, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = __Pyx_Generator_GetInlinedResult(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1382, __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;
- /* "fontTools/misc/bezierTools.py":1380
- *
- *
- * def _is_linelike(segment): # <<<<<<<<<<<<<<
- * maybeline = _alignment_transformation(segment).transformPoints(segment)
- * return all(math.isclose(p[1], 0.0) for p in maybeline)
- */
- /* function exit code */
- __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("fontTools.misc.bezierTools._is_linelike", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_maybeline);
- __Pyx_XDECREF(__pyx_gb_9fontTools_4misc_11bezierTools_12_is_linelike_2generator5);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1385
- *
- *
- * def curveCurveIntersections(curve1, curve2): # <<<<<<<<<<<<<<
- * """Finds intersections between a curve and a curve.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_89curveCurveIntersections(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_88curveCurveIntersections, "curveCurveIntersections(curve1, curve2)\n\nFinds intersections between a curve and a curve.\n\nArgs:\n curve1: List of coordinates of the first curve segment as 2D tuples.\n curve2: List of coordinates of the second curve segment as 2D tuples.\n\nReturns:\n A list of ``Intersection`` objects, each object having ``pt``, ``t1``\n and ``t2`` attributes containing the intersection point, time on first\n segment and time on second segment respectively.\n\nExamples::\n >>> curve1 = [ (10,100), (90,30), (40,140), (220,220) ]\n >>> curve2 = [ (5,150), (180,20), (80,250), (210,190) ]\n >>> intersections = curveCurveIntersections(curve1, curve2)\n >>> len(intersections)\n 3\n >>> intersections[0].pt\n (81.7831487395506, 109.88904552375288)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_89curveCurveIntersections = {"curveCurveIntersections", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_89curveCurveIntersections, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_88curveCurveIntersections};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_89curveCurveIntersections(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_curve1 = 0;
- PyObject *__pyx_v_curve2 = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[2] = {0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("curveCurveIntersections (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_curve1,&__pyx_mstate_global->__pyx_n_u_curve2,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1385, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1385, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1385, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "curveCurveIntersections", 0) < (0)) __PYX_ERR(0, 1385, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("curveCurveIntersections", 1, 2, 2, i); __PYX_ERR(0, 1385, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 2)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1385, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1385, __pyx_L3_error)
- }
- __pyx_v_curve1 = values[0];
- __pyx_v_curve2 = values[1];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("curveCurveIntersections", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1385, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.curveCurveIntersections", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_88curveCurveIntersections(__pyx_self, __pyx_v_curve1, __pyx_v_curve2);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_88curveCurveIntersections(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_curve1, PyObject *__pyx_v_curve2) {
- PyObject *__pyx_v_line1 = NULL;
- PyObject *__pyx_v_line2 = NULL;
- PyObject *__pyx_v_hits = NULL;
- PyObject *__pyx_v_intersection_ts = NULL;
- PyObject *__pyx_8genexpr8__pyx_v_x = NULL;
- PyObject *__pyx_8genexpr9__pyx_v_ts = NULL;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- PyObject *__pyx_t_1 = NULL;
- PyObject *__pyx_t_2 = NULL;
- PyObject *__pyx_t_3 = NULL;
- size_t __pyx_t_4;
- int __pyx_t_5;
- Py_ssize_t __pyx_t_6;
- PyObject *(*__pyx_t_7)(PyObject *);
- PyObject *__pyx_t_8 = NULL;
- PyObject *__pyx_t_9 = NULL;
- PyObject *__pyx_t_10 = NULL;
- 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("curveCurveIntersections", 0);
- /* "fontTools/misc/bezierTools.py":1406
- * (81.7831487395506, 109.88904552375288)
- * """
- * if _is_linelike(curve1): # <<<<<<<<<<<<<<
- * line1 = curve1[0], curve1[-1]
- * if _is_linelike(curve2):
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_is_linelike); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1406, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_curve1};
- __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1406, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1406, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":1407
- * """
- * if _is_linelike(curve1):
- * line1 = curve1[0], curve1[-1] # <<<<<<<<<<<<<<
- * if _is_linelike(curve2):
- * line2 = curve2[0], curve2[-1]
- */
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_curve1, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1407, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_curve1, -1L, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1407, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1407, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 1407, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_3);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 1407, __pyx_L1_error);
- __pyx_t_1 = 0;
- __pyx_t_3 = 0;
- __pyx_v_line1 = ((PyObject*)__pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1408
- * if _is_linelike(curve1):
- * line1 = curve1[0], curve1[-1]
- * if _is_linelike(curve2): # <<<<<<<<<<<<<<
- * line2 = curve2[0], curve2[-1]
- * return lineLineIntersections(*line1, *line2)
- */
- __pyx_t_3 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_is_linelike); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1408, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_1))) {
- __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
- assert(__pyx_t_3);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
- __Pyx_INCREF(__pyx_t_3);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_curve2};
- __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1408, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- }
- __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1408, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":1409
- * line1 = curve1[0], curve1[-1]
- * if _is_linelike(curve2):
- * line2 = curve2[0], curve2[-1] # <<<<<<<<<<<<<<
- * return lineLineIntersections(*line1, *line2)
- * else:
- */
- __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_curve2, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1409, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_curve2, -1L, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1409, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1409, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 1409, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 1409, __pyx_L1_error);
- __pyx_t_2 = 0;
- __pyx_t_1 = 0;
- __pyx_v_line2 = ((PyObject*)__pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1410
- * if _is_linelike(curve2):
- * line2 = curve2[0], curve2[-1]
- * return lineLineIntersections(*line1, *line2) # <<<<<<<<<<<<<<
- * else:
- * hits = curveLineIntersections(curve2, line1)
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_lineLineIntersections); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1410, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_1 = PyNumber_Add(__pyx_v_line1, __pyx_v_line2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1410, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1410, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __pyx_r = __pyx_t_2;
- __pyx_t_2 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1408
- * if _is_linelike(curve1):
- * line1 = curve1[0], curve1[-1]
- * if _is_linelike(curve2): # <<<<<<<<<<<<<<
- * line2 = curve2[0], curve2[-1]
- * return lineLineIntersections(*line1, *line2)
- */
- }
- /* "fontTools/misc/bezierTools.py":1412
- * return lineLineIntersections(*line1, *line2)
- * else:
- * hits = curveLineIntersections(curve2, line1) # <<<<<<<<<<<<<<
- * # curve is passed first to this fn but is the second segment, so
- * # we need to swap t1/t2 in the result
- */
- /*else*/ {
- __pyx_t_1 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_curveLineIntersections); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1412, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_3))) {
- __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
- assert(__pyx_t_1);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
- __Pyx_INCREF(__pyx_t_1);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_v_curve2, __pyx_v_line1};
- __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1412, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- }
- __pyx_v_hits = __pyx_t_2;
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1415
- * # curve is passed first to this fn but is the second segment, so
- * # we need to swap t1/t2 in the result
- * return [Intersection(pt=x.pt, t1=x.t2, t2=x.t1) for x in hits] # <<<<<<<<<<<<<<
- * elif _is_linelike(curve2):
- * line2 = curve2[0], curve2[-1]
- */
- __Pyx_XDECREF(__pyx_r);
- { /* enter inner scope */
- __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1415, __pyx_L7_error)
- __Pyx_GOTREF(__pyx_t_2);
- if (likely(PyList_CheckExact(__pyx_v_hits)) || PyTuple_CheckExact(__pyx_v_hits)) {
- __pyx_t_3 = __pyx_v_hits; __Pyx_INCREF(__pyx_t_3);
- __pyx_t_6 = 0;
- __pyx_t_7 = NULL;
- } else {
- __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_hits); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1415, __pyx_L7_error)
- __Pyx_GOTREF(__pyx_t_3);
- __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1415, __pyx_L7_error)
- }
- for (;;) {
- if (likely(!__pyx_t_7)) {
- if (likely(PyList_CheckExact(__pyx_t_3))) {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1415, __pyx_L7_error)
- #endif
- if (__pyx_t_6 >= __pyx_temp) break;
- }
- __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_3, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference);
- ++__pyx_t_6;
- } else {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1415, __pyx_L7_error)
- #endif
- if (__pyx_t_6 >= __pyx_temp) break;
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6));
- #else
- __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_6);
- #endif
- ++__pyx_t_6;
- }
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1415, __pyx_L7_error)
- } else {
- __pyx_t_1 = __pyx_t_7(__pyx_t_3);
- if (unlikely(!__pyx_t_1)) {
- PyObject* exc_type = PyErr_Occurred();
- if (exc_type) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 1415, __pyx_L7_error)
- PyErr_Clear();
- }
- break;
- }
- }
- __Pyx_GOTREF(__pyx_t_1);
- __Pyx_XDECREF_SET(__pyx_8genexpr8__pyx_v_x, __pyx_t_1);
- __pyx_t_1 = 0;
- __pyx_t_8 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_Intersection); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1415, __pyx_L7_error)
- __Pyx_GOTREF(__pyx_t_9);
- __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr8__pyx_v_x, __pyx_mstate_global->__pyx_n_u_pt); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1415, __pyx_L7_error)
- __Pyx_GOTREF(__pyx_t_10);
- __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr8__pyx_v_x, __pyx_mstate_global->__pyx_n_u_t2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1415, __pyx_L7_error)
- __Pyx_GOTREF(__pyx_t_11);
- __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr8__pyx_v_x, __pyx_mstate_global->__pyx_n_u_t1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1415, __pyx_L7_error)
- __Pyx_GOTREF(__pyx_t_12);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_9))) {
- __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9);
- assert(__pyx_t_8);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
- __Pyx_INCREF(__pyx_t_8);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 3 : 0)] = {__pyx_t_8, NULL};
- __pyx_t_13 = __Pyx_MakeVectorcallBuilderKwds(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1415, __pyx_L7_error)
- __Pyx_GOTREF(__pyx_t_13);
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_pt, __pyx_t_10, __pyx_t_13, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 1415, __pyx_L7_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_t1, __pyx_t_11, __pyx_t_13, __pyx_callargs+1, 1) < (0)) __PYX_ERR(0, 1415, __pyx_L7_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_t2, __pyx_t_12, __pyx_t_13, __pyx_callargs+1, 2) < (0)) __PYX_ERR(0, 1415, __pyx_L7_error)
- __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_13);
- __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
- __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
- __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1415, __pyx_L7_error)
- __Pyx_GOTREF(__pyx_t_1);
- }
- if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 1415, __pyx_L7_error)
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- }
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_XDECREF(__pyx_8genexpr8__pyx_v_x); __pyx_8genexpr8__pyx_v_x = 0;
- goto __pyx_L11_exit_scope;
- __pyx_L7_error:;
- __Pyx_XDECREF(__pyx_8genexpr8__pyx_v_x); __pyx_8genexpr8__pyx_v_x = 0;
- goto __pyx_L1_error;
- __pyx_L11_exit_scope:;
- } /* exit inner scope */
- __pyx_r = __pyx_t_2;
- __pyx_t_2 = 0;
- goto __pyx_L0;
- }
- /* "fontTools/misc/bezierTools.py":1406
- * (81.7831487395506, 109.88904552375288)
- * """
- * if _is_linelike(curve1): # <<<<<<<<<<<<<<
- * line1 = curve1[0], curve1[-1]
- * if _is_linelike(curve2):
- */
- }
- /* "fontTools/misc/bezierTools.py":1416
- * # we need to swap t1/t2 in the result
- * return [Intersection(pt=x.pt, t1=x.t2, t2=x.t1) for x in hits]
- * elif _is_linelike(curve2): # <<<<<<<<<<<<<<
- * line2 = curve2[0], curve2[-1]
- * return curveLineIntersections(curve1, line2)
- */
- __pyx_t_3 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_is_linelike); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1416, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_1))) {
- __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
- assert(__pyx_t_3);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
- __Pyx_INCREF(__pyx_t_3);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_curve2};
- __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1416, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- }
- __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1416, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (__pyx_t_5) {
- /* "fontTools/misc/bezierTools.py":1417
- * return [Intersection(pt=x.pt, t1=x.t2, t2=x.t1) for x in hits]
- * elif _is_linelike(curve2):
- * line2 = curve2[0], curve2[-1] # <<<<<<<<<<<<<<
- * return curveLineIntersections(curve1, line2)
- *
- */
- __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_curve2, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1417, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_curve2, -1L, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1417, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1417, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- __Pyx_GIVEREF(__pyx_t_2);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 1417, __pyx_L1_error);
- __Pyx_GIVEREF(__pyx_t_1);
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 1417, __pyx_L1_error);
- __pyx_t_2 = 0;
- __pyx_t_1 = 0;
- __pyx_v_line2 = ((PyObject*)__pyx_t_3);
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1418
- * elif _is_linelike(curve2):
- * line2 = curve2[0], curve2[-1]
- * return curveLineIntersections(curve1, line2) # <<<<<<<<<<<<<<
- *
- * intersection_ts = _curve_curve_intersections_t(curve1, curve2)
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_curveLineIntersections); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1418, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_2))) {
- __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
- assert(__pyx_t_1);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
- __Pyx_INCREF(__pyx_t_1);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_v_curve1, __pyx_v_line2};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1418, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- __pyx_r = __pyx_t_3;
- __pyx_t_3 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1416
- * # we need to swap t1/t2 in the result
- * return [Intersection(pt=x.pt, t1=x.t2, t2=x.t1) for x in hits]
- * elif _is_linelike(curve2): # <<<<<<<<<<<<<<
- * line2 = curve2[0], curve2[-1]
- * return curveLineIntersections(curve1, line2)
- */
- }
- /* "fontTools/misc/bezierTools.py":1420
- * return curveLineIntersections(curve1, line2)
- *
- * intersection_ts = _curve_curve_intersections_t(curve1, curve2) # <<<<<<<<<<<<<<
- * return [
- * Intersection(pt=segmentPointAtT(curve1, ts[0]), t1=ts[0], t2=ts[1])
- */
- __pyx_t_2 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_curve_curve_intersections_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1420, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_1))) {
- __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
- assert(__pyx_t_2);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
- __Pyx_INCREF(__pyx_t_2);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_curve1, __pyx_v_curve2};
- __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1420, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_3);
- }
- __pyx_v_intersection_ts = __pyx_t_3;
- __pyx_t_3 = 0;
- /* "fontTools/misc/bezierTools.py":1421
- *
- * intersection_ts = _curve_curve_intersections_t(curve1, curve2)
- * return [ # <<<<<<<<<<<<<<
- * Intersection(pt=segmentPointAtT(curve1, ts[0]), t1=ts[0], t2=ts[1])
- * for ts in intersection_ts
- */
- __Pyx_XDECREF(__pyx_r);
- { /* enter inner scope */
- __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1421, __pyx_L14_error)
- __Pyx_GOTREF(__pyx_t_3);
- /* "fontTools/misc/bezierTools.py":1423
- * return [
- * Intersection(pt=segmentPointAtT(curve1, ts[0]), t1=ts[0], t2=ts[1])
- * for ts in intersection_ts # <<<<<<<<<<<<<<
- * ]
- *
- */
- if (likely(PyList_CheckExact(__pyx_v_intersection_ts)) || PyTuple_CheckExact(__pyx_v_intersection_ts)) {
- __pyx_t_1 = __pyx_v_intersection_ts; __Pyx_INCREF(__pyx_t_1);
- __pyx_t_6 = 0;
- __pyx_t_7 = NULL;
- } else {
- __pyx_t_6 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_intersection_ts); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1423, __pyx_L14_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1423, __pyx_L14_error)
- }
- for (;;) {
- if (likely(!__pyx_t_7)) {
- if (likely(PyList_CheckExact(__pyx_t_1))) {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1423, __pyx_L14_error)
- #endif
- if (__pyx_t_6 >= __pyx_temp) break;
- }
- __pyx_t_2 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference);
- ++__pyx_t_6;
- } else {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1423, __pyx_L14_error)
- #endif
- if (__pyx_t_6 >= __pyx_temp) break;
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_2 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_6));
- #else
- __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_6);
- #endif
- ++__pyx_t_6;
- }
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1423, __pyx_L14_error)
- } else {
- __pyx_t_2 = __pyx_t_7(__pyx_t_1);
- if (unlikely(!__pyx_t_2)) {
- PyObject* exc_type = PyErr_Occurred();
- if (exc_type) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 1423, __pyx_L14_error)
- PyErr_Clear();
- }
- break;
- }
- }
- __Pyx_GOTREF(__pyx_t_2);
- __Pyx_XDECREF_SET(__pyx_8genexpr9__pyx_v_ts, __pyx_t_2);
- __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1422
- * intersection_ts = _curve_curve_intersections_t(curve1, curve2)
- * return [
- * Intersection(pt=segmentPointAtT(curve1, ts[0]), t1=ts[0], t2=ts[1]) # <<<<<<<<<<<<<<
- * for ts in intersection_ts
- * ]
- */
- __pyx_t_9 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_Intersection); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1422, __pyx_L14_error)
- __Pyx_GOTREF(__pyx_t_13);
- __pyx_t_11 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_segmentPointAtT); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1422, __pyx_L14_error)
- __Pyx_GOTREF(__pyx_t_10);
- __pyx_t_8 = __Pyx_GetItemInt(__pyx_8genexpr9__pyx_v_ts, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1422, __pyx_L14_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_10))) {
- __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
- assert(__pyx_t_11);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10);
- __Pyx_INCREF(__pyx_t_11);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_10, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_v_curve1, __pyx_t_8};
- __pyx_t_12 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1422, __pyx_L14_error)
- __Pyx_GOTREF(__pyx_t_12);
- }
- __pyx_t_10 = __Pyx_GetItemInt(__pyx_8genexpr9__pyx_v_ts, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1422, __pyx_L14_error)
- __Pyx_GOTREF(__pyx_t_10);
- __pyx_t_8 = __Pyx_GetItemInt(__pyx_8genexpr9__pyx_v_ts, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1422, __pyx_L14_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_4 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_13))) {
- __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_13);
- assert(__pyx_t_9);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_13);
- __Pyx_INCREF(__pyx_t_9);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_13, __pyx__function);
- __pyx_t_4 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 3 : 0)] = {__pyx_t_9, NULL};
- __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1422, __pyx_L14_error)
- __Pyx_GOTREF(__pyx_t_11);
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_pt, __pyx_t_12, __pyx_t_11, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 1422, __pyx_L14_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_t1, __pyx_t_10, __pyx_t_11, __pyx_callargs+1, 1) < (0)) __PYX_ERR(0, 1422, __pyx_L14_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_t2, __pyx_t_8, __pyx_t_11, __pyx_callargs+1, 2) < (0)) __PYX_ERR(0, 1422, __pyx_L14_error)
- __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_13, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11);
- __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
- __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
- __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1422, __pyx_L14_error)
- __Pyx_GOTREF(__pyx_t_2);
- }
- if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 1421, __pyx_L14_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1423
- * return [
- * Intersection(pt=segmentPointAtT(curve1, ts[0]), t1=ts[0], t2=ts[1])
- * for ts in intersection_ts # <<<<<<<<<<<<<<
- * ]
- *
- */
- }
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- __Pyx_XDECREF(__pyx_8genexpr9__pyx_v_ts); __pyx_8genexpr9__pyx_v_ts = 0;
- goto __pyx_L18_exit_scope;
- __pyx_L14_error:;
- __Pyx_XDECREF(__pyx_8genexpr9__pyx_v_ts); __pyx_8genexpr9__pyx_v_ts = 0;
- goto __pyx_L1_error;
- __pyx_L18_exit_scope:;
- } /* exit inner scope */
- __pyx_r = __pyx_t_3;
- __pyx_t_3 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1385
- *
- *
- * def curveCurveIntersections(curve1, curve2): # <<<<<<<<<<<<<<
- * """Finds intersections between a curve and a curve.
- *
- */
- /* function exit code */
- __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_XDECREF(__pyx_t_12);
- __Pyx_XDECREF(__pyx_t_13);
- __Pyx_AddTraceback("fontTools.misc.bezierTools.curveCurveIntersections", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_line1);
- __Pyx_XDECREF(__pyx_v_line2);
- __Pyx_XDECREF(__pyx_v_hits);
- __Pyx_XDECREF(__pyx_v_intersection_ts);
- __Pyx_XDECREF(__pyx_8genexpr8__pyx_v_x);
- __Pyx_XDECREF(__pyx_8genexpr9__pyx_v_ts);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1427
- *
- *
- * def segmentSegmentIntersections(seg1, seg2): # <<<<<<<<<<<<<<
- * """Finds intersections between two segments.
- *
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_91segmentSegmentIntersections(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_90segmentSegmentIntersections, "segmentSegmentIntersections(seg1, seg2)\n\nFinds intersections between two segments.\n\nArgs:\n seg1: List of coordinates of the first segment as 2D tuples.\n seg2: List of coordinates of the second segment as 2D tuples.\n\nReturns:\n A list of ``Intersection`` objects, each object having ``pt``, ``t1``\n and ``t2`` attributes containing the intersection point, time on first\n segment and time on second segment respectively.\n\nExamples::\n >>> curve1 = [ (10,100), (90,30), (40,140), (220,220) ]\n >>> curve2 = [ (5,150), (180,20), (80,250), (210,190) ]\n >>> intersections = segmentSegmentIntersections(curve1, curve2)\n >>> len(intersections)\n 3\n >>> intersections[0].pt\n (81.7831487395506, 109.88904552375288)\n >>> curve3 = [ (100, 240), (30, 60), (210, 230), (160, 30) ]\n >>> line = [ (25, 260), (230, 20) ]\n >>> intersections = segmentSegmentIntersections(curve3, line)\n >>> len(intersections)\n 3\n >>> intersections[0].pt\n (84.9000930760723, 189.87306176459828)");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_91segmentSegmentIntersections = {"segmentSegmentIntersections", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_91segmentSegmentIntersections, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_90segmentSegmentIntersections};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_91segmentSegmentIntersections(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_seg1 = 0;
- PyObject *__pyx_v_seg2 = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[2] = {0,0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("segmentSegmentIntersections (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_seg1,&__pyx_mstate_global->__pyx_n_u_seg2,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1427, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 2:
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1427, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1427, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "segmentSegmentIntersections", 0) < (0)) __PYX_ERR(0, 1427, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("segmentSegmentIntersections", 1, 2, 2, i); __PYX_ERR(0, 1427, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 2)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1427, __pyx_L3_error)
- values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1427, __pyx_L3_error)
- }
- __pyx_v_seg1 = values[0];
- __pyx_v_seg2 = values[1];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("segmentSegmentIntersections", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1427, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.segmentSegmentIntersections", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_90segmentSegmentIntersections(__pyx_self, __pyx_v_seg1, __pyx_v_seg2);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_90segmentSegmentIntersections(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seg1, PyObject *__pyx_v_seg2) {
- int __pyx_v_swapped;
- PyObject *__pyx_v_intersections = NULL;
- PyObject *__pyx_9genexpr10__pyx_v_i = NULL;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- Py_ssize_t __pyx_t_1;
- Py_ssize_t __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;
- size_t __pyx_t_9;
- int __pyx_t_10;
- PyObject *__pyx_t_11 = NULL;
- PyObject *(*__pyx_t_12)(PyObject *);
- 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_RefNannySetupContext("segmentSegmentIntersections", 0);
- __Pyx_INCREF(__pyx_v_seg1);
- __Pyx_INCREF(__pyx_v_seg2);
- /* "fontTools/misc/bezierTools.py":1457
- * """
- * # Arrange by degree
- * swapped = False # <<<<<<<<<<<<<<
- * if len(seg2) > len(seg1):
- * seg2, seg1 = seg1, seg2
- */
- __pyx_v_swapped = 0;
- /* "fontTools/misc/bezierTools.py":1458
- * # Arrange by degree
- * swapped = False
- * if len(seg2) > len(seg1): # <<<<<<<<<<<<<<
- * seg2, seg1 = seg1, seg2
- * swapped = True
- */
- __pyx_t_1 = PyObject_Length(__pyx_v_seg2); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1458, __pyx_L1_error)
- __pyx_t_2 = PyObject_Length(__pyx_v_seg1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1458, __pyx_L1_error)
- __pyx_t_3 = (__pyx_t_1 > __pyx_t_2);
- if (__pyx_t_3) {
- /* "fontTools/misc/bezierTools.py":1459
- * swapped = False
- * if len(seg2) > len(seg1):
- * seg2, seg1 = seg1, seg2 # <<<<<<<<<<<<<<
- * swapped = True
- * if len(seg1) > 2:
- */
- __pyx_t_4 = __pyx_v_seg1;
- __pyx_t_5 = __pyx_v_seg2;
- __pyx_v_seg2 = __pyx_t_4;
- __pyx_t_4 = 0;
- __pyx_v_seg1 = __pyx_t_5;
- __pyx_t_5 = 0;
- /* "fontTools/misc/bezierTools.py":1460
- * if len(seg2) > len(seg1):
- * seg2, seg1 = seg1, seg2
- * swapped = True # <<<<<<<<<<<<<<
- * if len(seg1) > 2:
- * if len(seg2) > 2:
- */
- __pyx_v_swapped = 1;
- /* "fontTools/misc/bezierTools.py":1458
- * # Arrange by degree
- * swapped = False
- * if len(seg2) > len(seg1): # <<<<<<<<<<<<<<
- * seg2, seg1 = seg1, seg2
- * swapped = True
- */
- }
- /* "fontTools/misc/bezierTools.py":1461
- * seg2, seg1 = seg1, seg2
- * swapped = True
- * if len(seg1) > 2: # <<<<<<<<<<<<<<
- * if len(seg2) > 2:
- * intersections = curveCurveIntersections(seg1, seg2)
- */
- __pyx_t_2 = PyObject_Length(__pyx_v_seg1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1461, __pyx_L1_error)
- __pyx_t_3 = (__pyx_t_2 > 2);
- if (__pyx_t_3) {
- /* "fontTools/misc/bezierTools.py":1462
- * swapped = True
- * if len(seg1) > 2:
- * if len(seg2) > 2: # <<<<<<<<<<<<<<
- * intersections = curveCurveIntersections(seg1, seg2)
- * else:
- */
- __pyx_t_2 = PyObject_Length(__pyx_v_seg2); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1462, __pyx_L1_error)
- __pyx_t_3 = (__pyx_t_2 > 2);
- if (__pyx_t_3) {
- /* "fontTools/misc/bezierTools.py":1463
- * if len(seg1) > 2:
- * if len(seg2) > 2:
- * intersections = curveCurveIntersections(seg1, seg2) # <<<<<<<<<<<<<<
- * else:
- * intersections = curveLineIntersections(seg1, seg2)
- */
- __pyx_t_7 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_curveCurveIntersections); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1463, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_9 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_8))) {
- __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
- assert(__pyx_t_7);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
- __Pyx_INCREF(__pyx_t_7);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
- __pyx_t_9 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_v_seg1, __pyx_v_seg2};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1463, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- __pyx_v_intersections = __pyx_t_6;
- __pyx_t_6 = 0;
- /* "fontTools/misc/bezierTools.py":1462
- * swapped = True
- * if len(seg1) > 2:
- * if len(seg2) > 2: # <<<<<<<<<<<<<<
- * intersections = curveCurveIntersections(seg1, seg2)
- * else:
- */
- goto __pyx_L5;
- }
- /* "fontTools/misc/bezierTools.py":1465
- * intersections = curveCurveIntersections(seg1, seg2)
- * else:
- * intersections = curveLineIntersections(seg1, seg2) # <<<<<<<<<<<<<<
- * elif len(seg1) == 2 and len(seg2) == 2:
- * intersections = lineLineIntersections(*seg1, *seg2)
- */
- /*else*/ {
- __pyx_t_8 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_curveLineIntersections); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1465, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __pyx_t_9 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_7))) {
- __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
- assert(__pyx_t_8);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
- __Pyx_INCREF(__pyx_t_8);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
- __pyx_t_9 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_v_seg1, __pyx_v_seg2};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1465, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- __pyx_v_intersections = __pyx_t_6;
- __pyx_t_6 = 0;
- }
- __pyx_L5:;
- /* "fontTools/misc/bezierTools.py":1461
- * seg2, seg1 = seg1, seg2
- * swapped = True
- * if len(seg1) > 2: # <<<<<<<<<<<<<<
- * if len(seg2) > 2:
- * intersections = curveCurveIntersections(seg1, seg2)
- */
- goto __pyx_L4;
- }
- /* "fontTools/misc/bezierTools.py":1466
- * else:
- * intersections = curveLineIntersections(seg1, seg2)
- * elif len(seg1) == 2 and len(seg2) == 2: # <<<<<<<<<<<<<<
- * intersections = lineLineIntersections(*seg1, *seg2)
- * else:
- */
- __pyx_t_2 = PyObject_Length(__pyx_v_seg1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1466, __pyx_L1_error)
- __pyx_t_10 = (__pyx_t_2 == 2);
- if (__pyx_t_10) {
- } else {
- __pyx_t_3 = __pyx_t_10;
- goto __pyx_L6_bool_binop_done;
- }
- __pyx_t_2 = PyObject_Length(__pyx_v_seg2); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1466, __pyx_L1_error)
- __pyx_t_10 = (__pyx_t_2 == 2);
- __pyx_t_3 = __pyx_t_10;
- __pyx_L6_bool_binop_done:;
- if (likely(__pyx_t_3)) {
- /* "fontTools/misc/bezierTools.py":1467
- * intersections = curveLineIntersections(seg1, seg2)
- * elif len(seg1) == 2 and len(seg2) == 2:
- * intersections = lineLineIntersections(*seg1, *seg2) # <<<<<<<<<<<<<<
- * else:
- * raise ValueError("Couldn't work out which intersection function to use")
- */
- __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_lineLineIntersections); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1467, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_7 = __Pyx_PySequence_Tuple(__pyx_v_seg1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1467, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __pyx_t_8 = __Pyx_PySequence_Tuple(__pyx_v_seg2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1467, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_11 = PyNumber_Add(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1467, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_11);
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_11, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1467, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __pyx_v_intersections = __pyx_t_8;
- __pyx_t_8 = 0;
- /* "fontTools/misc/bezierTools.py":1466
- * else:
- * intersections = curveLineIntersections(seg1, seg2)
- * elif len(seg1) == 2 and len(seg2) == 2: # <<<<<<<<<<<<<<
- * intersections = lineLineIntersections(*seg1, *seg2)
- * else:
- */
- goto __pyx_L4;
- }
- /* "fontTools/misc/bezierTools.py":1469
- * intersections = lineLineIntersections(*seg1, *seg2)
- * else:
- * raise ValueError("Couldn't work out which intersection function to use") # <<<<<<<<<<<<<<
- * if not swapped:
- * return intersections
- */
- /*else*/ {
- __pyx_t_11 = NULL;
- __pyx_t_9 = 1;
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_mstate_global->__pyx_kp_u_Couldn_t_work_out_which_intersec};
- __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
- if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1469, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- }
- __Pyx_Raise(__pyx_t_8, 0, 0, 0);
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __PYX_ERR(0, 1469, __pyx_L1_error)
- }
- __pyx_L4:;
- /* "fontTools/misc/bezierTools.py":1470
- * else:
- * raise ValueError("Couldn't work out which intersection function to use")
- * if not swapped: # <<<<<<<<<<<<<<
- * return intersections
- * return [Intersection(pt=i.pt, t1=i.t2, t2=i.t1) for i in intersections]
- */
- __pyx_t_3 = (!__pyx_v_swapped);
- if (__pyx_t_3) {
- /* "fontTools/misc/bezierTools.py":1471
- * raise ValueError("Couldn't work out which intersection function to use")
- * if not swapped:
- * return intersections # <<<<<<<<<<<<<<
- * return [Intersection(pt=i.pt, t1=i.t2, t2=i.t1) for i in intersections]
- *
- */
- __Pyx_XDECREF(__pyx_r);
- __Pyx_INCREF(__pyx_v_intersections);
- __pyx_r = __pyx_v_intersections;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1470
- * else:
- * raise ValueError("Couldn't work out which intersection function to use")
- * if not swapped: # <<<<<<<<<<<<<<
- * return intersections
- * return [Intersection(pt=i.pt, t1=i.t2, t2=i.t1) for i in intersections]
- */
- }
- /* "fontTools/misc/bezierTools.py":1472
- * if not swapped:
- * return intersections
- * return [Intersection(pt=i.pt, t1=i.t2, t2=i.t1) for i in intersections] # <<<<<<<<<<<<<<
- *
- *
- */
- __Pyx_XDECREF(__pyx_r);
- { /* enter inner scope */
- __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1472, __pyx_L11_error)
- __Pyx_GOTREF(__pyx_t_8);
- if (likely(PyList_CheckExact(__pyx_v_intersections)) || PyTuple_CheckExact(__pyx_v_intersections)) {
- __pyx_t_11 = __pyx_v_intersections; __Pyx_INCREF(__pyx_t_11);
- __pyx_t_2 = 0;
- __pyx_t_12 = NULL;
- } else {
- __pyx_t_2 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_v_intersections); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1472, __pyx_L11_error)
- __Pyx_GOTREF(__pyx_t_11);
- __pyx_t_12 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1472, __pyx_L11_error)
- }
- for (;;) {
- if (likely(!__pyx_t_12)) {
- if (likely(PyList_CheckExact(__pyx_t_11))) {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_11);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1472, __pyx_L11_error)
- #endif
- if (__pyx_t_2 >= __pyx_temp) break;
- }
- __pyx_t_6 = __Pyx_PyList_GetItemRefFast(__pyx_t_11, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
- ++__pyx_t_2;
- } else {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_11);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1472, __pyx_L11_error)
- #endif
- if (__pyx_t_2 >= __pyx_temp) break;
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_6 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_2));
- #else
- __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_11, __pyx_t_2);
- #endif
- ++__pyx_t_2;
- }
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1472, __pyx_L11_error)
- } else {
- __pyx_t_6 = __pyx_t_12(__pyx_t_11);
- if (unlikely(!__pyx_t_6)) {
- PyObject* exc_type = PyErr_Occurred();
- if (exc_type) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 1472, __pyx_L11_error)
- PyErr_Clear();
- }
- break;
- }
- }
- __Pyx_GOTREF(__pyx_t_6);
- __Pyx_XDECREF_SET(__pyx_9genexpr10__pyx_v_i, __pyx_t_6);
- __pyx_t_6 = 0;
- __pyx_t_7 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_Intersection); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1472, __pyx_L11_error)
- __Pyx_GOTREF(__pyx_t_13);
- __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr10__pyx_v_i, __pyx_mstate_global->__pyx_n_u_pt); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1472, __pyx_L11_error)
- __Pyx_GOTREF(__pyx_t_14);
- __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr10__pyx_v_i, __pyx_mstate_global->__pyx_n_u_t2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1472, __pyx_L11_error)
- __Pyx_GOTREF(__pyx_t_15);
- __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr10__pyx_v_i, __pyx_mstate_global->__pyx_n_u_t1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1472, __pyx_L11_error)
- __Pyx_GOTREF(__pyx_t_16);
- __pyx_t_9 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_13))) {
- __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_13);
- assert(__pyx_t_7);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_13);
- __Pyx_INCREF(__pyx_t_7);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_13, __pyx__function);
- __pyx_t_9 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 3 : 0)] = {__pyx_t_7, NULL};
- __pyx_t_17 = __Pyx_MakeVectorcallBuilderKwds(3); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1472, __pyx_L11_error)
- __Pyx_GOTREF(__pyx_t_17);
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_pt, __pyx_t_14, __pyx_t_17, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 1472, __pyx_L11_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_t1, __pyx_t_15, __pyx_t_17, __pyx_callargs+1, 1) < (0)) __PYX_ERR(0, 1472, __pyx_L11_error)
- if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_t2, __pyx_t_16, __pyx_t_17, __pyx_callargs+1, 2) < (0)) __PYX_ERR(0, 1472, __pyx_L11_error)
- __pyx_t_6 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_13, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_17);
- __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
- __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
- __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
- __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
- __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1472, __pyx_L11_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- if (unlikely(__Pyx_ListComp_Append(__pyx_t_8, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 1472, __pyx_L11_error)
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- }
- __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_XDECREF(__pyx_9genexpr10__pyx_v_i); __pyx_9genexpr10__pyx_v_i = 0;
- goto __pyx_L15_exit_scope;
- __pyx_L11_error:;
- __Pyx_XDECREF(__pyx_9genexpr10__pyx_v_i); __pyx_9genexpr10__pyx_v_i = 0;
- goto __pyx_L1_error;
- __pyx_L15_exit_scope:;
- } /* exit inner scope */
- __pyx_r = __pyx_t_8;
- __pyx_t_8 = 0;
- goto __pyx_L0;
- /* "fontTools/misc/bezierTools.py":1427
- *
- *
- * def segmentSegmentIntersections(seg1, seg2): # <<<<<<<<<<<<<<
- * """Finds intersections between two segments.
- *
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_6);
- __Pyx_XDECREF(__pyx_t_7);
- __Pyx_XDECREF(__pyx_t_8);
- __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("fontTools.misc.bezierTools.segmentSegmentIntersections", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_intersections);
- __Pyx_XDECREF(__pyx_9genexpr10__pyx_v_i);
- __Pyx_XDECREF(__pyx_v_seg1);
- __Pyx_XDECREF(__pyx_v_seg2);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1475
- *
- *
- * def _segmentrepr(obj): # <<<<<<<<<<<<<<
- * """
- * >>> _segmentrepr([1, [2, 3], [], [[2, [3, 4], [0.1, 2.2]]]])
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_93_segmentrepr(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_92_segmentrepr, "_segmentrepr(obj)\n\n>>> _segmentrepr([1, [2, 3], [], [[2, [3, 4], [0.1, 2.2]]]])\n'(1, (2, 3), (), ((2, (3, 4), (0.1, 2.2))))'");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_93_segmentrepr = {"_segmentrepr", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_93_segmentrepr, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_92_segmentrepr};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_93_segmentrepr(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_obj = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[1] = {0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("_segmentrepr (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_obj,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1475, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1475, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_segmentrepr", 0) < (0)) __PYX_ERR(0, 1475, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_segmentrepr", 1, 1, 1, i); __PYX_ERR(0, 1475, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 1)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1475, __pyx_L3_error)
- }
- __pyx_v_obj = values[0];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("_segmentrepr", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1475, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools._segmentrepr", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_92_segmentrepr(__pyx_self, __pyx_v_obj);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_12_segmentrepr_2generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
- /* "fontTools/misc/bezierTools.py":1485
- * return "%g" % obj
- * else:
- * return "(%s)" % ", ".join(_segmentrepr(x) for x in it) # <<<<<<<<<<<<<<
- *
- *
- */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_12_segmentrepr_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr *__pyx_cur_scope;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("genexpr", 0);
- __pyx_cur_scope = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr(__pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
- if (unlikely(!__pyx_cur_scope)) {
- __pyx_cur_scope = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr *)Py_None);
- __Pyx_INCREF(Py_None);
- __PYX_ERR(0, 1485, __pyx_L1_error)
- } else {
- __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
- }
- __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
- __Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
- __Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
- {
- __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_9fontTools_4misc_11bezierTools_12_segmentrepr_2generator6, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[8]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_segmentrepr_locals_genexpr, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools); if (unlikely(!gen)) __PYX_ERR(0, 1485, __pyx_L1_error)
- __Pyx_DECREF(__pyx_cur_scope);
- __Pyx_RefNannyFinishContext();
- return (PyObject *) gen;
- }
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_AddTraceback("fontTools.misc.bezierTools._segmentrepr.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __Pyx_DECREF((PyObject *)__pyx_cur_scope);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_12_segmentrepr_2generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
- {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr *__pyx_cur_scope = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr *)__pyx_generator->closure);
- PyObject *__pyx_r = NULL;
- PyObject *__pyx_t_1 = NULL;
- Py_ssize_t __pyx_t_2;
- PyObject *(*__pyx_t_3)(PyObject *);
- PyObject *__pyx_t_4 = NULL;
- PyObject *__pyx_t_5 = NULL;
- PyObject *__pyx_t_6 = NULL;
- size_t __pyx_t_7;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("genexpr", 0);
- switch (__pyx_generator->resume_label) {
- case 0: goto __pyx_L3_first_run;
- default: /* CPython raises the right error here */
- __Pyx_RefNannyFinishContext();
- return NULL;
- }
- __pyx_L3_first_run:;
- if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1485, __pyx_L1_error)
- __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 1485, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_r);
- if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 1485, __pyx_L1_error) }
- if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) {
- __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = 0;
- __pyx_t_3 = NULL;
- } else {
- __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_genexpr_arg_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1485, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1485, __pyx_L1_error)
- }
- for (;;) {
- if (likely(!__pyx_t_3)) {
- if (likely(PyList_CheckExact(__pyx_t_1))) {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1485, __pyx_L1_error)
- #endif
- if (__pyx_t_2 >= __pyx_temp) break;
- }
- __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
- ++__pyx_t_2;
- } else {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1485, __pyx_L1_error)
- #endif
- if (__pyx_t_2 >= __pyx_temp) break;
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
- #else
- __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
- #endif
- ++__pyx_t_2;
- }
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1485, __pyx_L1_error)
- } else {
- __pyx_t_4 = __pyx_t_3(__pyx_t_1);
- if (unlikely(!__pyx_t_4)) {
- PyObject* exc_type = PyErr_Occurred();
- if (exc_type) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 1485, __pyx_L1_error)
- PyErr_Clear();
- }
- break;
- }
- }
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_x);
- __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_x, __pyx_t_4);
- __Pyx_GIVEREF(__pyx_t_4);
- __pyx_t_4 = 0;
- __pyx_t_5 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_segmentrepr); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1485, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- __pyx_t_7 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_6))) {
- __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
- assert(__pyx_t_5);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
- __Pyx_INCREF(__pyx_t_5);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
- __pyx_t_7 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_x};
- __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1485, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- }
- if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 1485, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- }
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
- /* function exit code */
- goto __pyx_L0;
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_XDECREF(__pyx_t_4);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_XDECREF(__pyx_t_6);
- if (__Pyx_PyErr_Occurred()) {
- __Pyx_Generator_Replace_StopIteration(0);
- __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
- }
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- #if !CYTHON_USE_EXC_INFO_STACK
- __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
- #endif
- __pyx_generator->resume_label = -1;
- __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1475
- *
- *
- * def _segmentrepr(obj): # <<<<<<<<<<<<<<
- * """
- * >>> _segmentrepr([1, [2, 3], [], [[2, [3, 4], [0.1, 2.2]]]])
- */
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_92_segmentrepr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) {
- PyObject *__pyx_v_it = NULL;
- PyObject *__pyx_gb_9fontTools_4misc_11bezierTools_12_segmentrepr_2generator6 = 0;
- 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;
- PyObject *__pyx_t_7 = NULL;
- PyObject *__pyx_t_8 = NULL;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("_segmentrepr", 0);
- /* "fontTools/misc/bezierTools.py":1480
- * '(1, (2, 3), (), ((2, (3, 4), (0.1, 2.2))))'
- * """
- * try: # <<<<<<<<<<<<<<
- * it = iter(obj)
- * except TypeError:
- */
- {
- __Pyx_PyThreadState_declare
- __Pyx_PyThreadState_assign
- __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:*/ {
- /* "fontTools/misc/bezierTools.py":1481
- * """
- * try:
- * it = iter(obj) # <<<<<<<<<<<<<<
- * except TypeError:
- * return "%g" % obj
- */
- __pyx_t_4 = PyObject_GetIter(__pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1481, __pyx_L3_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_v_it = __pyx_t_4;
- __pyx_t_4 = 0;
- /* "fontTools/misc/bezierTools.py":1480
- * '(1, (2, 3), (), ((2, (3, 4), (0.1, 2.2))))'
- * """
- * try: # <<<<<<<<<<<<<<
- * it = iter(obj)
- * except TypeError:
- */
- }
- /* "fontTools/misc/bezierTools.py":1485
- * return "%g" % obj
- * else:
- * return "(%s)" % ", ".join(_segmentrepr(x) for x in it) # <<<<<<<<<<<<<<
- *
- *
- */
- /*else:*/ {
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_4 = __pyx_pf_9fontTools_4misc_11bezierTools_12_segmentrepr_genexpr(NULL, __pyx_v_it); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1485, __pyx_L5_except_error)
- __Pyx_GOTREF(__pyx_t_4);
- __pyx_t_5 = __Pyx_Generator_GetInlinedResult(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1485, __pyx_L5_except_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_t_4 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u_, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1485, __pyx_L5_except_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_5 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_s_2, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1485, __pyx_L5_except_error)
- __Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __pyx_r = __pyx_t_5;
- __pyx_t_5 = 0;
- goto __pyx_L6_except_return;
- }
- __pyx_L3_error:;
- __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
- /* "fontTools/misc/bezierTools.py":1482
- * try:
- * it = iter(obj)
- * except TypeError: # <<<<<<<<<<<<<<
- * return "%g" % obj
- * else:
- */
- __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_TypeError))));
- if (__pyx_t_6) {
- __Pyx_AddTraceback("fontTools.misc.bezierTools._segmentrepr", __pyx_clineno, __pyx_lineno, __pyx_filename);
- if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(0, 1482, __pyx_L5_except_error)
- __Pyx_XGOTREF(__pyx_t_5);
- __Pyx_XGOTREF(__pyx_t_4);
- __Pyx_XGOTREF(__pyx_t_7);
- /* "fontTools/misc/bezierTools.py":1483
- * it = iter(obj)
- * except TypeError:
- * return "%g" % obj # <<<<<<<<<<<<<<
- * else:
- * return "(%s)" % ", ".join(_segmentrepr(x) for x in it)
- */
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_8 = __Pyx_PyUnicode_FormatSafe(__pyx_mstate_global->__pyx_kp_u_g, __pyx_v_obj); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1483, __pyx_L5_except_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_r = __pyx_t_8;
- __pyx_t_8 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- goto __pyx_L6_except_return;
- }
- goto __pyx_L5_except_error;
- /* "fontTools/misc/bezierTools.py":1480
- * '(1, (2, 3), (), ((2, (3, 4), (0.1, 2.2))))'
- * """
- * try: # <<<<<<<<<<<<<<
- * it = iter(obj)
- * except TypeError:
- */
- __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;
- }
- /* "fontTools/misc/bezierTools.py":1475
- *
- *
- * def _segmentrepr(obj): # <<<<<<<<<<<<<<
- * """
- * >>> _segmentrepr([1, [2, 3], [], [[2, [3, 4], [0.1, 2.2]]]])
- */
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_4);
- __Pyx_XDECREF(__pyx_t_5);
- __Pyx_XDECREF(__pyx_t_7);
- __Pyx_XDECREF(__pyx_t_8);
- __Pyx_AddTraceback("fontTools.misc.bezierTools._segmentrepr", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_it);
- __Pyx_XDECREF(__pyx_gb_9fontTools_4misc_11bezierTools_12_segmentrepr_2generator6);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* "fontTools/misc/bezierTools.py":1488
- *
- *
- * def printSegments(segments): # <<<<<<<<<<<<<<
- * """Helper for the doctests, displaying each segment in a list of
- * segments on a single line as a tuple.
- */
- /* Python wrapper */
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_95printSegments(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ); /*proto*/
- PyDoc_STRVAR(__pyx_doc_9fontTools_4misc_11bezierTools_94printSegments, "printSegments(segments)\n\nHelper for the doctests, displaying each segment in a list of\nsegments on a single line as a tuple.");
- static PyMethodDef __pyx_mdef_9fontTools_4misc_11bezierTools_95printSegments = {"printSegments", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9fontTools_4misc_11bezierTools_95printSegments, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9fontTools_4misc_11bezierTools_94printSegments};
- static PyObject *__pyx_pw_9fontTools_4misc_11bezierTools_95printSegments(PyObject *__pyx_self,
- #if CYTHON_METH_FASTCALL
- PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
- #else
- PyObject *__pyx_args, PyObject *__pyx_kwds
- #endif
- ) {
- PyObject *__pyx_v_segments = 0;
- #if !CYTHON_METH_FASTCALL
- CYTHON_UNUSED Py_ssize_t __pyx_nargs;
- #endif
- CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
- PyObject* values[1] = {0};
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("printSegments (wrapper)", 0);
- #if !CYTHON_METH_FASTCALL
- #if CYTHON_ASSUME_SAFE_SIZE
- __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
- #else
- __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
- #endif
- #endif
- __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
- {
- PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_segments,0};
- const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 1488, __pyx_L3_error)
- if (__pyx_kwds_len > 0) {
- switch (__pyx_nargs) {
- case 1:
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1488, __pyx_L3_error)
- CYTHON_FALLTHROUGH;
- case 0: break;
- default: goto __pyx_L5_argtuple_error;
- }
- const Py_ssize_t kwd_pos_args = __pyx_nargs;
- if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "printSegments", 0) < (0)) __PYX_ERR(0, 1488, __pyx_L3_error)
- for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
- if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("printSegments", 1, 1, 1, i); __PYX_ERR(0, 1488, __pyx_L3_error) }
- }
- } else if (unlikely(__pyx_nargs != 1)) {
- goto __pyx_L5_argtuple_error;
- } else {
- values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
- if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1488, __pyx_L3_error)
- }
- __pyx_v_segments = values[0];
- }
- goto __pyx_L6_skip;
- __pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("printSegments", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1488, __pyx_L3_error)
- __pyx_L6_skip:;
- goto __pyx_L4_argument_unpacking_done;
- __pyx_L3_error:;
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_AddTraceback("fontTools.misc.bezierTools.printSegments", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __Pyx_RefNannyFinishContext();
- return NULL;
- __pyx_L4_argument_unpacking_done:;
- __pyx_r = __pyx_pf_9fontTools_4misc_11bezierTools_94printSegments(__pyx_self, __pyx_v_segments);
- /* function exit code */
- for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
- Py_XDECREF(values[__pyx_temp]);
- }
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_94printSegments(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_segments) {
- PyObject *__pyx_v_segment = NULL;
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- PyObject *__pyx_t_1 = NULL;
- Py_ssize_t __pyx_t_2;
- PyObject *(*__pyx_t_3)(PyObject *);
- 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;
- size_t __pyx_t_9;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("printSegments", 0);
- /* "fontTools/misc/bezierTools.py":1492
- * segments on a single line as a tuple.
- * """
- * for segment in segments: # <<<<<<<<<<<<<<
- * print(_segmentrepr(segment))
- *
- */
- if (likely(PyList_CheckExact(__pyx_v_segments)) || PyTuple_CheckExact(__pyx_v_segments)) {
- __pyx_t_1 = __pyx_v_segments; __Pyx_INCREF(__pyx_t_1);
- __pyx_t_2 = 0;
- __pyx_t_3 = NULL;
- } else {
- __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_segments); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1492, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1492, __pyx_L1_error)
- }
- for (;;) {
- if (likely(!__pyx_t_3)) {
- if (likely(PyList_CheckExact(__pyx_t_1))) {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1492, __pyx_L1_error)
- #endif
- if (__pyx_t_2 >= __pyx_temp) break;
- }
- __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
- ++__pyx_t_2;
- } else {
- {
- Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1492, __pyx_L1_error)
- #endif
- if (__pyx_t_2 >= __pyx_temp) break;
- }
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
- #else
- __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
- #endif
- ++__pyx_t_2;
- }
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1492, __pyx_L1_error)
- } else {
- __pyx_t_4 = __pyx_t_3(__pyx_t_1);
- if (unlikely(!__pyx_t_4)) {
- PyObject* exc_type = PyErr_Occurred();
- if (exc_type) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 1492, __pyx_L1_error)
- PyErr_Clear();
- }
- break;
- }
- }
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_XDECREF_SET(__pyx_v_segment, __pyx_t_4);
- __pyx_t_4 = 0;
- /* "fontTools/misc/bezierTools.py":1493
- * """
- * for segment in segments:
- * print(_segmentrepr(segment)) # <<<<<<<<<<<<<<
- *
- *
- */
- __pyx_t_5 = NULL;
- __pyx_t_7 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_segmentrepr); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1493, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_9 = 1;
- #if CYTHON_UNPACK_METHODS
- if (unlikely(PyMethod_Check(__pyx_t_8))) {
- __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
- assert(__pyx_t_7);
- PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
- __Pyx_INCREF(__pyx_t_7);
- __Pyx_INCREF(__pyx__function);
- __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
- __pyx_t_9 = 0;
- }
- #endif
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_segment};
- __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1493, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
- }
- __pyx_t_9 = 1;
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6};
- __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_print, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1493, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- }
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- /* "fontTools/misc/bezierTools.py":1492
- * segments on a single line as a tuple.
- * """
- * for segment in segments: # <<<<<<<<<<<<<<
- * print(_segmentrepr(segment))
- *
- */
- }
- __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- /* "fontTools/misc/bezierTools.py":1488
- *
- *
- * def printSegments(segments): # <<<<<<<<<<<<<<
- * """Helper for the doctests, displaying each segment in a list of
- * segments on a single line as a tuple.
- */
- /* function exit code */
- __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_AddTraceback("fontTools.misc.bezierTools.printSegments", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XDECREF(__pyx_v_segment);
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
- }
- /* #### Code section: module_exttypes ### */
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_defaults(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
- PyObject *o;
- o = __Pyx_AllocateExtensionType(t, 1);
- if (unlikely(!o)) return 0;
- return o;
- }
- static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_defaults(PyObject *o) {
- struct __pyx_defaults *p = (struct __pyx_defaults *)o;
- #if CYTHON_USE_TP_FINALIZE
- if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
- if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_defaults) {
- if (PyObject_CallFinalizerFromDealloc(o)) return;
- }
- }
- #endif
- PyObject_GC_UnTrack(o);
- Py_CLEAR(p->arg0);
- PyTypeObject *tp = Py_TYPE(o);
- #if CYTHON_USE_TYPE_SLOTS
- (*tp->tp_free)(o);
- #else
- {
- freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
- if (tp_free) tp_free(o);
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(tp);
- #endif
- }
- static int __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_defaults(PyObject *o, visitproc v, void *a) {
- int e;
- struct __pyx_defaults *p = (struct __pyx_defaults *)o;
- {
- e = __Pyx_call_type_traverse(o, 1, v, a);
- if (e) return e;
- }
- if (p->arg0) {
- e = (*v)(p->arg0, a); if (e) return e;
- }
- return 0;
- }
- static int __pyx_tp_clear_9fontTools_4misc_11bezierTools___pyx_defaults(PyObject *o) {
- PyObject* tmp;
- struct __pyx_defaults *p = (struct __pyx_defaults *)o;
- tmp = ((PyObject*)p->arg0);
- p->arg0 = Py_None; Py_INCREF(Py_None);
- Py_XDECREF(tmp);
- return 0;
- }
- #if CYTHON_USE_TYPE_SPECS
- static PyType_Slot __pyx_type_9fontTools_4misc_11bezierTools___pyx_defaults_slots[] = {
- {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_defaults},
- {Py_tp_traverse, (void *)__pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_defaults},
- {Py_tp_clear, (void *)__pyx_tp_clear_9fontTools_4misc_11bezierTools___pyx_defaults},
- {Py_tp_new, (void *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_defaults},
- {0, 0},
- };
- static PyType_Spec __pyx_type_9fontTools_4misc_11bezierTools___pyx_defaults_spec = {
- "fontTools.misc.bezierTools.__pyx_defaults",
- sizeof(struct __pyx_defaults),
- 0,
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
- __pyx_type_9fontTools_4misc_11bezierTools___pyx_defaults_slots,
- };
- #else
- static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_defaults = {
- PyVarObject_HEAD_INIT(0, 0)
- "fontTools.misc.bezierTools.""__pyx_defaults", /*tp_name*/
- sizeof(struct __pyx_defaults), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_defaults, /*tp_dealloc*/
- 0, /*tp_vectorcall_offset*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_as_async*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash*/
- 0, /*tp_call*/
- 0, /*tp_str*/
- 0, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
- 0, /*tp_doc*/
- __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_defaults, /*tp_traverse*/
- __pyx_tp_clear_9fontTools_4misc_11bezierTools___pyx_defaults, /*tp_clear*/
- 0, /*tp_richcompare*/
- 0, /*tp_weaklistoffset*/
- 0, /*tp_iter*/
- 0, /*tp_iternext*/
- 0, /*tp_methods*/
- 0, /*tp_members*/
- 0, /*tp_getset*/
- 0, /*tp_base*/
- 0, /*tp_dict*/
- 0, /*tp_descr_get*/
- 0, /*tp_descr_set*/
- #if !CYTHON_USE_TYPE_SPECS
- 0, /*tp_dictoffset*/
- #endif
- 0, /*tp_init*/
- 0, /*tp_alloc*/
- __pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_defaults, /*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*/
- 0, /*tp_version_tag*/
- #if CYTHON_USE_TP_FINALIZE
- 0, /*tp_finalize*/
- #else
- NULL, /*tp_finalize*/
- #endif
- #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
- 0, /*tp_vectorcall*/
- #endif
- #if __PYX_NEED_TP_PRINT_SLOT == 1
- 0, /*tp_print*/
- #endif
- #if PY_VERSION_HEX >= 0x030C0000
- 0, /*tp_watched*/
- #endif
- #if PY_VERSION_HEX >= 0x030d00A4
- 0, /*tp_versions_used*/
- #endif
- #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
- 0, /*tp_pypy_flags*/
- #endif
- };
- #endif
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
- PyObject *o;
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr > 0) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr))))
- {
- o = (PyObject*)__pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr[--__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr];
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(Py_TYPE(o));
- #endif
- memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr));
- #if CYTHON_COMPILING_IN_LIMITED_API
- (void) PyObject_Init(o, t);
- #else
- (void) PyObject_INIT(o, t);
- #endif
- PyObject_GC_Track(o);
- } else
- #endif
- {
- o = __Pyx_AllocateExtensionType(t, 1);
- if (unlikely(!o)) return 0;
- }
- return o;
- }
- static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr(PyObject *o) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr *)o;
- #if CYTHON_USE_TP_FINALIZE
- if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
- if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr) {
- if (PyObject_CallFinalizerFromDealloc(o)) return;
- }
- }
- #endif
- PyObject_GC_UnTrack(o);
- Py_CLEAR(p->__pyx_genexpr_arg_0);
- Py_CLEAR(p->__pyx_v_t);
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr < 8) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(Py_TYPE(o), __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr))))
- {
- __pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr[__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr *)o);
- } else
- #endif
- {
- PyTypeObject *tp = Py_TYPE(o);
- #if CYTHON_USE_TYPE_SLOTS
- (*tp->tp_free)(o);
- #else
- {
- freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
- if (tp_free) tp_free(o);
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(tp);
- #endif
- }
- }
- static int __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr(PyObject *o, visitproc v, void *a) {
- int e;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr *)o;
- {
- e = __Pyx_call_type_traverse(o, 1, v, a);
- if (e) return e;
- }
- if (p->__pyx_genexpr_arg_0) {
- e = (*v)(p->__pyx_genexpr_arg_0, a); if (e) return e;
- }
- if (p->__pyx_v_t) {
- e = (*v)(p->__pyx_v_t, a); if (e) return e;
- }
- return 0;
- }
- #if CYTHON_USE_TYPE_SPECS
- static PyType_Slot __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr_slots[] = {
- {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr},
- {Py_tp_traverse, (void *)__pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr},
- {Py_tp_new, (void *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr},
- {0, 0},
- };
- static PyType_Spec __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr_spec = {
- "fontTools.misc.bezierTools.__pyx_scope_struct__genexpr",
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr),
- 0,
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
- __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr_slots,
- };
- #else
- static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr = {
- PyVarObject_HEAD_INIT(0, 0)
- "fontTools.misc.bezierTools.""__pyx_scope_struct__genexpr", /*tp_name*/
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr, /*tp_dealloc*/
- 0, /*tp_vectorcall_offset*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_as_async*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash*/
- 0, /*tp_call*/
- 0, /*tp_str*/
- 0, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
- 0, /*tp_doc*/
- __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr, /*tp_traverse*/
- 0, /*tp_clear*/
- 0, /*tp_richcompare*/
- 0, /*tp_weaklistoffset*/
- 0, /*tp_iter*/
- 0, /*tp_iternext*/
- 0, /*tp_methods*/
- 0, /*tp_members*/
- 0, /*tp_getset*/
- 0, /*tp_base*/
- 0, /*tp_dict*/
- 0, /*tp_descr_get*/
- 0, /*tp_descr_set*/
- #if !CYTHON_USE_TYPE_SPECS
- 0, /*tp_dictoffset*/
- #endif
- 0, /*tp_init*/
- 0, /*tp_alloc*/
- __pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr, /*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*/
- 0, /*tp_version_tag*/
- #if CYTHON_USE_TP_FINALIZE
- 0, /*tp_finalize*/
- #else
- NULL, /*tp_finalize*/
- #endif
- #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
- 0, /*tp_vectorcall*/
- #endif
- #if __PYX_NEED_TP_PRINT_SLOT == 1
- 0, /*tp_print*/
- #endif
- #if PY_VERSION_HEX >= 0x030C0000
- 0, /*tp_watched*/
- #endif
- #if PY_VERSION_HEX >= 0x030d00A4
- 0, /*tp_versions_used*/
- #endif
- #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
- 0, /*tp_pypy_flags*/
- #endif
- };
- #endif
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
- PyObject *o;
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr > 0) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr))))
- {
- o = (PyObject*)__pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr[--__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr];
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(Py_TYPE(o));
- #endif
- memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr));
- #if CYTHON_COMPILING_IN_LIMITED_API
- (void) PyObject_Init(o, t);
- #else
- (void) PyObject_INIT(o, t);
- #endif
- PyObject_GC_Track(o);
- } else
- #endif
- {
- o = __Pyx_AllocateExtensionType(t, 1);
- if (unlikely(!o)) return 0;
- }
- return o;
- }
- static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr(PyObject *o) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr *)o;
- #if CYTHON_USE_TP_FINALIZE
- if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
- if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr) {
- if (PyObject_CallFinalizerFromDealloc(o)) return;
- }
- }
- #endif
- PyObject_GC_UnTrack(o);
- Py_CLEAR(p->__pyx_genexpr_arg_0);
- Py_CLEAR(p->__pyx_v_t);
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr < 8) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(Py_TYPE(o), __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr))))
- {
- __pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr[__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr *)o);
- } else
- #endif
- {
- PyTypeObject *tp = Py_TYPE(o);
- #if CYTHON_USE_TYPE_SLOTS
- (*tp->tp_free)(o);
- #else
- {
- freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
- if (tp_free) tp_free(o);
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(tp);
- #endif
- }
- }
- static int __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr(PyObject *o, visitproc v, void *a) {
- int e;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr *)o;
- {
- e = __Pyx_call_type_traverse(o, 1, v, a);
- if (e) return e;
- }
- if (p->__pyx_genexpr_arg_0) {
- e = (*v)(p->__pyx_genexpr_arg_0, a); if (e) return e;
- }
- if (p->__pyx_v_t) {
- e = (*v)(p->__pyx_v_t, a); if (e) return e;
- }
- return 0;
- }
- #if CYTHON_USE_TYPE_SPECS
- static PyType_Slot __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr_slots[] = {
- {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr},
- {Py_tp_traverse, (void *)__pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr},
- {Py_tp_new, (void *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr},
- {0, 0},
- };
- static PyType_Spec __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr_spec = {
- "fontTools.misc.bezierTools.__pyx_scope_struct_1_genexpr",
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr),
- 0,
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
- __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr_slots,
- };
- #else
- static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr = {
- PyVarObject_HEAD_INIT(0, 0)
- "fontTools.misc.bezierTools.""__pyx_scope_struct_1_genexpr", /*tp_name*/
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr, /*tp_dealloc*/
- 0, /*tp_vectorcall_offset*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_as_async*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash*/
- 0, /*tp_call*/
- 0, /*tp_str*/
- 0, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
- 0, /*tp_doc*/
- __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr, /*tp_traverse*/
- 0, /*tp_clear*/
- 0, /*tp_richcompare*/
- 0, /*tp_weaklistoffset*/
- 0, /*tp_iter*/
- 0, /*tp_iternext*/
- 0, /*tp_methods*/
- 0, /*tp_members*/
- 0, /*tp_getset*/
- 0, /*tp_base*/
- 0, /*tp_dict*/
- 0, /*tp_descr_get*/
- 0, /*tp_descr_set*/
- #if !CYTHON_USE_TYPE_SPECS
- 0, /*tp_dictoffset*/
- #endif
- 0, /*tp_init*/
- 0, /*tp_alloc*/
- __pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr, /*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*/
- 0, /*tp_version_tag*/
- #if CYTHON_USE_TP_FINALIZE
- 0, /*tp_finalize*/
- #else
- NULL, /*tp_finalize*/
- #endif
- #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
- 0, /*tp_vectorcall*/
- #endif
- #if __PYX_NEED_TP_PRINT_SLOT == 1
- 0, /*tp_print*/
- #endif
- #if PY_VERSION_HEX >= 0x030C0000
- 0, /*tp_watched*/
- #endif
- #if PY_VERSION_HEX >= 0x030d00A4
- 0, /*tp_versions_used*/
- #endif
- #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
- 0, /*tp_pypy_flags*/
- #endif
- };
- #endif
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
- PyObject *o;
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC > 0) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC))))
- {
- o = (PyObject*)__pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC[--__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC];
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(Py_TYPE(o));
- #endif
- memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC));
- #if CYTHON_COMPILING_IN_LIMITED_API
- (void) PyObject_Init(o, t);
- #else
- (void) PyObject_INIT(o, t);
- #endif
- PyObject_GC_Track(o);
- } else
- #endif
- {
- o = __Pyx_AllocateExtensionType(t, 1);
- if (unlikely(!o)) return 0;
- }
- return o;
- }
- static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC(PyObject *o) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC *)o;
- #if CYTHON_USE_TP_FINALIZE
- if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
- if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC) {
- if (PyObject_CallFinalizerFromDealloc(o)) return;
- }
- }
- #endif
- PyObject_GC_UnTrack(o);
- Py_CLEAR(p->__pyx_v_ts);
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC < 8) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(Py_TYPE(o), __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC))))
- {
- __pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC[__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC *)o);
- } else
- #endif
- {
- PyTypeObject *tp = Py_TYPE(o);
- #if CYTHON_USE_TYPE_SLOTS
- (*tp->tp_free)(o);
- #else
- {
- freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
- if (tp_free) tp_free(o);
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(tp);
- #endif
- }
- }
- static int __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC(PyObject *o, visitproc v, void *a) {
- int e;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC *)o;
- {
- e = __Pyx_call_type_traverse(o, 1, v, a);
- if (e) return e;
- }
- if (p->__pyx_v_ts) {
- e = (*v)(p->__pyx_v_ts, a); if (e) return e;
- }
- return 0;
- }
- #if CYTHON_USE_TYPE_SPECS
- static PyType_Slot __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC_slots[] = {
- {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC},
- {Py_tp_traverse, (void *)__pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC},
- {Py_tp_new, (void *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC},
- {0, 0},
- };
- static PyType_Spec __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC_spec = {
- "fontTools.misc.bezierTools.__pyx_scope_struct_2_splitCubicAtTC",
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC),
- 0,
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
- __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC_slots,
- };
- #else
- static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC = {
- PyVarObject_HEAD_INIT(0, 0)
- "fontTools.misc.bezierTools.""__pyx_scope_struct_2_splitCubicAtTC", /*tp_name*/
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC, /*tp_dealloc*/
- 0, /*tp_vectorcall_offset*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_as_async*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash*/
- 0, /*tp_call*/
- 0, /*tp_str*/
- 0, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
- 0, /*tp_doc*/
- __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC, /*tp_traverse*/
- 0, /*tp_clear*/
- 0, /*tp_richcompare*/
- 0, /*tp_weaklistoffset*/
- 0, /*tp_iter*/
- 0, /*tp_iternext*/
- 0, /*tp_methods*/
- 0, /*tp_members*/
- 0, /*tp_getset*/
- 0, /*tp_base*/
- 0, /*tp_dict*/
- 0, /*tp_descr_get*/
- 0, /*tp_descr_set*/
- #if !CYTHON_USE_TYPE_SPECS
- 0, /*tp_dictoffset*/
- #endif
- 0, /*tp_init*/
- 0, /*tp_alloc*/
- __pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC, /*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*/
- 0, /*tp_version_tag*/
- #if CYTHON_USE_TP_FINALIZE
- 0, /*tp_finalize*/
- #else
- NULL, /*tp_finalize*/
- #endif
- #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
- 0, /*tp_vectorcall*/
- #endif
- #if __PYX_NEED_TP_PRINT_SLOT == 1
- 0, /*tp_print*/
- #endif
- #if PY_VERSION_HEX >= 0x030C0000
- 0, /*tp_watched*/
- #endif
- #if PY_VERSION_HEX >= 0x030d00A4
- 0, /*tp_versions_used*/
- #endif
- #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
- 0, /*tp_pypy_flags*/
- #endif
- };
- #endif
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
- PyObject *o;
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC > 0) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC))))
- {
- o = (PyObject*)__pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC[--__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC];
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(Py_TYPE(o));
- #endif
- memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC));
- #if CYTHON_COMPILING_IN_LIMITED_API
- (void) PyObject_Init(o, t);
- #else
- (void) PyObject_INIT(o, t);
- #endif
- PyObject_GC_Track(o);
- } else
- #endif
- {
- o = __Pyx_AllocateExtensionType(t, 1);
- if (unlikely(!o)) return 0;
- }
- return o;
- }
- static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC(PyObject *o) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC *)o;
- #if CYTHON_USE_TP_FINALIZE
- if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
- if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC) {
- if (PyObject_CallFinalizerFromDealloc(o)) return;
- }
- }
- #endif
- PyObject_GC_UnTrack(o);
- Py_CLEAR(p->__pyx_v_i);
- Py_CLEAR(p->__pyx_v_pt1);
- Py_CLEAR(p->__pyx_v_pt2);
- Py_CLEAR(p->__pyx_v_pt3);
- Py_CLEAR(p->__pyx_v_pt4);
- Py_CLEAR(p->__pyx_v_ts);
- Py_CLEAR(p->__pyx_t_0);
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC < 8) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(Py_TYPE(o), __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC))))
- {
- __pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC[__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC *)o);
- } else
- #endif
- {
- PyTypeObject *tp = Py_TYPE(o);
- #if CYTHON_USE_TYPE_SLOTS
- (*tp->tp_free)(o);
- #else
- {
- freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
- if (tp_free) tp_free(o);
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(tp);
- #endif
- }
- }
- static int __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC(PyObject *o, visitproc v, void *a) {
- int e;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC *)o;
- {
- e = __Pyx_call_type_traverse(o, 1, v, a);
- if (e) return e;
- }
- if (p->__pyx_v_i) {
- e = (*v)(p->__pyx_v_i, a); if (e) return e;
- }
- if (p->__pyx_v_pt1) {
- e = (*v)(p->__pyx_v_pt1, a); if (e) return e;
- }
- if (p->__pyx_v_pt2) {
- e = (*v)(p->__pyx_v_pt2, a); if (e) return e;
- }
- if (p->__pyx_v_pt3) {
- e = (*v)(p->__pyx_v_pt3, a); if (e) return e;
- }
- if (p->__pyx_v_pt4) {
- e = (*v)(p->__pyx_v_pt4, a); if (e) return e;
- }
- if (p->__pyx_v_ts) {
- e = (*v)(p->__pyx_v_ts, a); if (e) return e;
- }
- if (p->__pyx_t_0) {
- e = (*v)(p->__pyx_t_0, a); if (e) return e;
- }
- return 0;
- }
- #if CYTHON_USE_TYPE_SPECS
- static PyType_Slot __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC_slots[] = {
- {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC},
- {Py_tp_traverse, (void *)__pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC},
- {Py_tp_new, (void *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC},
- {0, 0},
- };
- static PyType_Spec __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC_spec = {
- "fontTools.misc.bezierTools.__pyx_scope_struct_3__splitCubicAtTC",
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC),
- 0,
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
- __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC_slots,
- };
- #else
- static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC = {
- PyVarObject_HEAD_INIT(0, 0)
- "fontTools.misc.bezierTools.""__pyx_scope_struct_3__splitCubicAtTC", /*tp_name*/
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC, /*tp_dealloc*/
- 0, /*tp_vectorcall_offset*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_as_async*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash*/
- 0, /*tp_call*/
- 0, /*tp_str*/
- 0, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
- 0, /*tp_doc*/
- __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC, /*tp_traverse*/
- 0, /*tp_clear*/
- 0, /*tp_richcompare*/
- 0, /*tp_weaklistoffset*/
- 0, /*tp_iter*/
- 0, /*tp_iternext*/
- 0, /*tp_methods*/
- 0, /*tp_members*/
- 0, /*tp_getset*/
- 0, /*tp_base*/
- 0, /*tp_dict*/
- 0, /*tp_descr_get*/
- 0, /*tp_descr_set*/
- #if !CYTHON_USE_TYPE_SPECS
- 0, /*tp_dictoffset*/
- #endif
- 0, /*tp_init*/
- 0, /*tp_alloc*/
- __pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC, /*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*/
- 0, /*tp_version_tag*/
- #if CYTHON_USE_TP_FINALIZE
- 0, /*tp_finalize*/
- #else
- NULL, /*tp_finalize*/
- #endif
- #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
- 0, /*tp_vectorcall*/
- #endif
- #if __PYX_NEED_TP_PRINT_SLOT == 1
- 0, /*tp_print*/
- #endif
- #if PY_VERSION_HEX >= 0x030C0000
- 0, /*tp_watched*/
- #endif
- #if PY_VERSION_HEX >= 0x030d00A4
- 0, /*tp_versions_used*/
- #endif
- #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
- 0, /*tp_pypy_flags*/
- #endif
- };
- #endif
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
- PyObject *o;
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr > 0) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr))))
- {
- o = (PyObject*)__pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr[--__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr];
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(Py_TYPE(o));
- #endif
- memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr));
- #if CYTHON_COMPILING_IN_LIMITED_API
- (void) PyObject_Init(o, t);
- #else
- (void) PyObject_INIT(o, t);
- #endif
- PyObject_GC_Track(o);
- } else
- #endif
- {
- o = __Pyx_AllocateExtensionType(t, 1);
- if (unlikely(!o)) return 0;
- }
- return o;
- }
- static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr(PyObject *o) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr *)o;
- #if CYTHON_USE_TP_FINALIZE
- if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
- if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr) {
- if (PyObject_CallFinalizerFromDealloc(o)) return;
- }
- }
- #endif
- PyObject_GC_UnTrack(o);
- Py_CLEAR(p->__pyx_genexpr_arg_0);
- Py_CLEAR(p->__pyx_v_i);
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr < 8) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(Py_TYPE(o), __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr))))
- {
- __pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr[__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr *)o);
- } else
- #endif
- {
- PyTypeObject *tp = Py_TYPE(o);
- #if CYTHON_USE_TYPE_SLOTS
- (*tp->tp_free)(o);
- #else
- {
- freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
- if (tp_free) tp_free(o);
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(tp);
- #endif
- }
- }
- static int __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr(PyObject *o, visitproc v, void *a) {
- int e;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr *)o;
- {
- e = __Pyx_call_type_traverse(o, 1, v, a);
- if (e) return e;
- }
- if (p->__pyx_genexpr_arg_0) {
- e = (*v)(p->__pyx_genexpr_arg_0, a); if (e) return e;
- }
- if (p->__pyx_v_i) {
- e = (*v)(p->__pyx_v_i, a); if (e) return e;
- }
- return 0;
- }
- #if CYTHON_USE_TYPE_SPECS
- static PyType_Slot __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr_slots[] = {
- {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr},
- {Py_tp_traverse, (void *)__pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr},
- {Py_tp_new, (void *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr},
- {0, 0},
- };
- static PyType_Spec __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr_spec = {
- "fontTools.misc.bezierTools.__pyx_scope_struct_4_genexpr",
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr),
- 0,
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
- __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr_slots,
- };
- #else
- static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr = {
- PyVarObject_HEAD_INIT(0, 0)
- "fontTools.misc.bezierTools.""__pyx_scope_struct_4_genexpr", /*tp_name*/
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr, /*tp_dealloc*/
- 0, /*tp_vectorcall_offset*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_as_async*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash*/
- 0, /*tp_call*/
- 0, /*tp_str*/
- 0, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
- 0, /*tp_doc*/
- __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr, /*tp_traverse*/
- 0, /*tp_clear*/
- 0, /*tp_richcompare*/
- 0, /*tp_weaklistoffset*/
- 0, /*tp_iter*/
- 0, /*tp_iternext*/
- 0, /*tp_methods*/
- 0, /*tp_members*/
- 0, /*tp_getset*/
- 0, /*tp_base*/
- 0, /*tp_dict*/
- 0, /*tp_descr_get*/
- 0, /*tp_descr_set*/
- #if !CYTHON_USE_TYPE_SPECS
- 0, /*tp_dictoffset*/
- #endif
- 0, /*tp_init*/
- 0, /*tp_alloc*/
- __pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr, /*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*/
- 0, /*tp_version_tag*/
- #if CYTHON_USE_TP_FINALIZE
- 0, /*tp_finalize*/
- #else
- NULL, /*tp_finalize*/
- #endif
- #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
- 0, /*tp_vectorcall*/
- #endif
- #if __PYX_NEED_TP_PRINT_SLOT == 1
- 0, /*tp_print*/
- #endif
- #if PY_VERSION_HEX >= 0x030C0000
- 0, /*tp_watched*/
- #endif
- #if PY_VERSION_HEX >= 0x030d00A4
- 0, /*tp_versions_used*/
- #endif
- #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
- 0, /*tp_pypy_flags*/
- #endif
- };
- #endif
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
- PyObject *o;
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t > 0) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t))))
- {
- o = (PyObject*)__pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t[--__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t];
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(Py_TYPE(o));
- #endif
- memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t));
- #if CYTHON_COMPILING_IN_LIMITED_API
- (void) PyObject_Init(o, t);
- #else
- (void) PyObject_INIT(o, t);
- #endif
- PyObject_GC_Track(o);
- } else
- #endif
- {
- o = __Pyx_AllocateExtensionType(t, 1);
- if (unlikely(!o)) return 0;
- }
- return o;
- }
- static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t(PyObject *o) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *)o;
- #if CYTHON_USE_TP_FINALIZE
- if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
- if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t) {
- if (PyObject_CallFinalizerFromDealloc(o)) return;
- }
- }
- #endif
- PyObject_GC_UnTrack(o);
- Py_CLEAR(p->__pyx_v_precision);
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t < 8) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(Py_TYPE(o), __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t))))
- {
- __pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t[__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *)o);
- } else
- #endif
- {
- PyTypeObject *tp = Py_TYPE(o);
- #if CYTHON_USE_TYPE_SLOTS
- (*tp->tp_free)(o);
- #else
- {
- freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
- if (tp_free) tp_free(o);
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(tp);
- #endif
- }
- }
- static int __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t(PyObject *o, visitproc v, void *a) {
- int e;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *)o;
- {
- e = __Pyx_call_type_traverse(o, 1, v, a);
- if (e) return e;
- }
- if (p->__pyx_v_precision) {
- e = (*v)(p->__pyx_v_precision, a); if (e) return e;
- }
- return 0;
- }
- static int __pyx_tp_clear_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t(PyObject *o) {
- PyObject* tmp;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *)o;
- tmp = ((PyObject*)p->__pyx_v_precision);
- p->__pyx_v_precision = Py_None; Py_INCREF(Py_None);
- Py_XDECREF(tmp);
- return 0;
- }
- #if CYTHON_USE_TYPE_SPECS
- static PyType_Slot __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t_slots[] = {
- {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t},
- {Py_tp_traverse, (void *)__pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t},
- {Py_tp_clear, (void *)__pyx_tp_clear_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t},
- {Py_tp_new, (void *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t},
- {0, 0},
- };
- static PyType_Spec __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t_spec = {
- "fontTools.misc.bezierTools.__pyx_scope_struct_5__curve_curve_intersections_t",
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t),
- 0,
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
- __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t_slots,
- };
- #else
- static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t = {
- PyVarObject_HEAD_INIT(0, 0)
- "fontTools.misc.bezierTools.""__pyx_scope_struct_5__curve_curve_intersections_t", /*tp_name*/
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t, /*tp_dealloc*/
- 0, /*tp_vectorcall_offset*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_as_async*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash*/
- 0, /*tp_call*/
- 0, /*tp_str*/
- 0, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
- 0, /*tp_doc*/
- __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t, /*tp_traverse*/
- __pyx_tp_clear_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t, /*tp_clear*/
- 0, /*tp_richcompare*/
- 0, /*tp_weaklistoffset*/
- 0, /*tp_iter*/
- 0, /*tp_iternext*/
- 0, /*tp_methods*/
- 0, /*tp_members*/
- 0, /*tp_getset*/
- 0, /*tp_base*/
- 0, /*tp_dict*/
- 0, /*tp_descr_get*/
- 0, /*tp_descr_set*/
- #if !CYTHON_USE_TYPE_SPECS
- 0, /*tp_dictoffset*/
- #endif
- 0, /*tp_init*/
- 0, /*tp_alloc*/
- __pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t, /*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*/
- 0, /*tp_version_tag*/
- #if CYTHON_USE_TP_FINALIZE
- 0, /*tp_finalize*/
- #else
- NULL, /*tp_finalize*/
- #endif
- #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
- 0, /*tp_vectorcall*/
- #endif
- #if __PYX_NEED_TP_PRINT_SLOT == 1
- 0, /*tp_print*/
- #endif
- #if PY_VERSION_HEX >= 0x030C0000
- 0, /*tp_watched*/
- #endif
- #if PY_VERSION_HEX >= 0x030d00A4
- 0, /*tp_versions_used*/
- #endif
- #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
- 0, /*tp_pypy_flags*/
- #endif
- };
- #endif
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
- PyObject *o;
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr > 0) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr))))
- {
- o = (PyObject*)__pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr[--__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr];
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(Py_TYPE(o));
- #endif
- memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr));
- #if CYTHON_COMPILING_IN_LIMITED_API
- (void) PyObject_Init(o, t);
- #else
- (void) PyObject_INIT(o, t);
- #endif
- PyObject_GC_Track(o);
- } else
- #endif
- {
- o = __Pyx_AllocateExtensionType(t, 1);
- if (unlikely(!o)) return 0;
- }
- return o;
- }
- static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr(PyObject *o) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr *)o;
- #if CYTHON_USE_TP_FINALIZE
- if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
- if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr) {
- if (PyObject_CallFinalizerFromDealloc(o)) return;
- }
- }
- #endif
- PyObject_GC_UnTrack(o);
- Py_CLEAR(p->__pyx_genexpr_arg_0);
- Py_CLEAR(p->__pyx_v_p);
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr < 8) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(Py_TYPE(o), __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr))))
- {
- __pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr[__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr *)o);
- } else
- #endif
- {
- PyTypeObject *tp = Py_TYPE(o);
- #if CYTHON_USE_TYPE_SLOTS
- (*tp->tp_free)(o);
- #else
- {
- freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
- if (tp_free) tp_free(o);
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(tp);
- #endif
- }
- }
- static int __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr(PyObject *o, visitproc v, void *a) {
- int e;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr *)o;
- {
- e = __Pyx_call_type_traverse(o, 1, v, a);
- if (e) return e;
- }
- if (p->__pyx_genexpr_arg_0) {
- e = (*v)(p->__pyx_genexpr_arg_0, a); if (e) return e;
- }
- if (p->__pyx_v_p) {
- e = (*v)(p->__pyx_v_p, a); if (e) return e;
- }
- return 0;
- }
- #if CYTHON_USE_TYPE_SPECS
- static PyType_Slot __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr_slots[] = {
- {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr},
- {Py_tp_traverse, (void *)__pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr},
- {Py_tp_new, (void *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr},
- {0, 0},
- };
- static PyType_Spec __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr_spec = {
- "fontTools.misc.bezierTools.__pyx_scope_struct_6_genexpr",
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr),
- 0,
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
- __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr_slots,
- };
- #else
- static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr = {
- PyVarObject_HEAD_INIT(0, 0)
- "fontTools.misc.bezierTools.""__pyx_scope_struct_6_genexpr", /*tp_name*/
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr, /*tp_dealloc*/
- 0, /*tp_vectorcall_offset*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_as_async*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash*/
- 0, /*tp_call*/
- 0, /*tp_str*/
- 0, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
- 0, /*tp_doc*/
- __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr, /*tp_traverse*/
- 0, /*tp_clear*/
- 0, /*tp_richcompare*/
- 0, /*tp_weaklistoffset*/
- 0, /*tp_iter*/
- 0, /*tp_iternext*/
- 0, /*tp_methods*/
- 0, /*tp_members*/
- 0, /*tp_getset*/
- 0, /*tp_base*/
- 0, /*tp_dict*/
- 0, /*tp_descr_get*/
- 0, /*tp_descr_set*/
- #if !CYTHON_USE_TYPE_SPECS
- 0, /*tp_dictoffset*/
- #endif
- 0, /*tp_init*/
- 0, /*tp_alloc*/
- __pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr, /*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*/
- 0, /*tp_version_tag*/
- #if CYTHON_USE_TP_FINALIZE
- 0, /*tp_finalize*/
- #else
- NULL, /*tp_finalize*/
- #endif
- #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
- 0, /*tp_vectorcall*/
- #endif
- #if __PYX_NEED_TP_PRINT_SLOT == 1
- 0, /*tp_print*/
- #endif
- #if PY_VERSION_HEX >= 0x030C0000
- 0, /*tp_watched*/
- #endif
- #if PY_VERSION_HEX >= 0x030d00A4
- 0, /*tp_versions_used*/
- #endif
- #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
- 0, /*tp_pypy_flags*/
- #endif
- };
- #endif
- static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
- PyObject *o;
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr > 0) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr))))
- {
- o = (PyObject*)__pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr[--__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr];
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(Py_TYPE(o));
- #endif
- memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr));
- #if CYTHON_COMPILING_IN_LIMITED_API
- (void) PyObject_Init(o, t);
- #else
- (void) PyObject_INIT(o, t);
- #endif
- PyObject_GC_Track(o);
- } else
- #endif
- {
- o = __Pyx_AllocateExtensionType(t, 1);
- if (unlikely(!o)) return 0;
- }
- return o;
- }
- static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr(PyObject *o) {
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr *)o;
- #if CYTHON_USE_TP_FINALIZE
- if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
- if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr) {
- if (PyObject_CallFinalizerFromDealloc(o)) return;
- }
- }
- #endif
- PyObject_GC_UnTrack(o);
- Py_CLEAR(p->__pyx_genexpr_arg_0);
- Py_CLEAR(p->__pyx_v_x);
- #if CYTHON_USE_FREELISTS
- if (likely((int)(__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr < 8) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(Py_TYPE(o), __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr))))
- {
- __pyx_mstate_global->__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr[__pyx_mstate_global->__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr *)o);
- } else
- #endif
- {
- PyTypeObject *tp = Py_TYPE(o);
- #if CYTHON_USE_TYPE_SLOTS
- (*tp->tp_free)(o);
- #else
- {
- freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
- if (tp_free) tp_free(o);
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- Py_DECREF(tp);
- #endif
- }
- }
- static int __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr(PyObject *o, visitproc v, void *a) {
- int e;
- struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr *p = (struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr *)o;
- {
- e = __Pyx_call_type_traverse(o, 1, v, a);
- if (e) return e;
- }
- if (p->__pyx_genexpr_arg_0) {
- e = (*v)(p->__pyx_genexpr_arg_0, a); if (e) return e;
- }
- if (p->__pyx_v_x) {
- e = (*v)(p->__pyx_v_x, a); if (e) return e;
- }
- return 0;
- }
- #if CYTHON_USE_TYPE_SPECS
- static PyType_Slot __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr_slots[] = {
- {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr},
- {Py_tp_traverse, (void *)__pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr},
- {Py_tp_new, (void *)__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr},
- {0, 0},
- };
- static PyType_Spec __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr_spec = {
- "fontTools.misc.bezierTools.__pyx_scope_struct_7_genexpr",
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr),
- 0,
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
- __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr_slots,
- };
- #else
- static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr = {
- PyVarObject_HEAD_INIT(0, 0)
- "fontTools.misc.bezierTools.""__pyx_scope_struct_7_genexpr", /*tp_name*/
- sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr, /*tp_dealloc*/
- 0, /*tp_vectorcall_offset*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_as_async*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash*/
- 0, /*tp_call*/
- 0, /*tp_str*/
- 0, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
- 0, /*tp_doc*/
- __pyx_tp_traverse_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr, /*tp_traverse*/
- 0, /*tp_clear*/
- 0, /*tp_richcompare*/
- 0, /*tp_weaklistoffset*/
- 0, /*tp_iter*/
- 0, /*tp_iternext*/
- 0, /*tp_methods*/
- 0, /*tp_members*/
- 0, /*tp_getset*/
- 0, /*tp_base*/
- 0, /*tp_dict*/
- 0, /*tp_descr_get*/
- 0, /*tp_descr_set*/
- #if !CYTHON_USE_TYPE_SPECS
- 0, /*tp_dictoffset*/
- #endif
- 0, /*tp_init*/
- 0, /*tp_alloc*/
- __pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr, /*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*/
- 0, /*tp_version_tag*/
- #if CYTHON_USE_TP_FINALIZE
- 0, /*tp_finalize*/
- #else
- NULL, /*tp_finalize*/
- #endif
- #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
- 0, /*tp_vectorcall*/
- #endif
- #if __PYX_NEED_TP_PRINT_SLOT == 1
- 0, /*tp_print*/
- #endif
- #if PY_VERSION_HEX >= 0x030C0000
- 0, /*tp_watched*/
- #endif
- #if PY_VERSION_HEX >= 0x030d00A4
- 0, /*tp_versions_used*/
- #endif
- #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
- 0, /*tp_pypy_flags*/
- #endif
- };
- #endif
- static PyMethodDef __pyx_methods[] = {
- {0, 0, 0, 0}
- };
- /* #### Code section: initfunc_declarations ### */
- static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(__pyx_mstatetype *__pyx_mstate); /*proto*/
- static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(__pyx_mstatetype *__pyx_mstate); /*proto*/
- static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void); /*proto*/
- static CYTHON_SMALL_CODE int __Pyx_InitConstants(__pyx_mstatetype *__pyx_mstate); /*proto*/
- static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
- static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
- static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
- static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
- static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
- static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
- static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
- static CYTHON_SMALL_CODE int __Pyx_CreateCodeObjects(__pyx_mstatetype *__pyx_mstate); /*proto*/
- /* #### Code section: init_module ### */
- static int __Pyx_modinit_global_init_code(__pyx_mstatetype *__pyx_mstate) {
- __Pyx_RefNannyDeclarations
- CYTHON_UNUSED_VAR(__pyx_mstate);
- __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0);
- /*--- Global init code ---*/
- __Pyx_RefNannyFinishContext();
- return 0;
- }
- static int __Pyx_modinit_variable_export_code(__pyx_mstatetype *__pyx_mstate) {
- __Pyx_RefNannyDeclarations
- CYTHON_UNUSED_VAR(__pyx_mstate);
- __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0);
- /*--- Variable export code ---*/
- __Pyx_RefNannyFinishContext();
- return 0;
- }
- static int __Pyx_modinit_function_export_code(__pyx_mstatetype *__pyx_mstate) {
- __Pyx_RefNannyDeclarations
- CYTHON_UNUSED_VAR(__pyx_mstate);
- __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0);
- /*--- Function export code ---*/
- __Pyx_RefNannyFinishContext();
- return 0;
- }
- static int __Pyx_modinit_type_init_code(__pyx_mstatetype *__pyx_mstate) {
- __Pyx_RefNannyDeclarations
- CYTHON_UNUSED_VAR(__pyx_mstate);
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0);
- /*--- Type init code ---*/
- #if CYTHON_USE_TYPE_SPECS
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_defaults = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9fontTools_4misc_11bezierTools___pyx_defaults_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_defaults)) __PYX_ERR(0, 815, __pyx_L1_error)
- if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9fontTools_4misc_11bezierTools___pyx_defaults_spec, __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_defaults) < (0)) __PYX_ERR(0, 815, __pyx_L1_error)
- #else
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_defaults = &__pyx_type_9fontTools_4misc_11bezierTools___pyx_defaults;
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- #endif
- #if !CYTHON_USE_TYPE_SPECS
- if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_defaults) < (0)) __PYX_ERR(0, 815, __pyx_L1_error)
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_defaults);
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_defaults->tp_dictoffset && __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_defaults->tp_getattro == PyObject_GenericGetAttr)) {
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_defaults->tp_getattro = PyObject_GenericGetAttr;
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr)) __PYX_ERR(0, 546, __pyx_L1_error)
- if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr_spec, __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr) < (0)) __PYX_ERR(0, 546, __pyx_L1_error)
- #else
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr = &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr;
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- #endif
- #if !CYTHON_USE_TYPE_SPECS
- if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr) < (0)) __PYX_ERR(0, 546, __pyx_L1_error)
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr);
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr->tp_dictoffset && __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr->tp_getattro == PyObject_GenericGetAttr)) {
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr->tp_getattro = PyObject_GenericGetAttr;
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr)) __PYX_ERR(0, 583, __pyx_L1_error)
- if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr_spec, __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr) < (0)) __PYX_ERR(0, 583, __pyx_L1_error)
- #else
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr = &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr;
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- #endif
- #if !CYTHON_USE_TYPE_SPECS
- if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr) < (0)) __PYX_ERR(0, 583, __pyx_L1_error)
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr);
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr->tp_dictoffset && __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr->tp_getattro == PyObject_GenericGetAttr)) {
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr->tp_getattro = PyObject_GenericGetAttr;
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC)) __PYX_ERR(0, 644, __pyx_L1_error)
- if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC_spec, __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC) < (0)) __PYX_ERR(0, 644, __pyx_L1_error)
- #else
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC = &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC;
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- #endif
- #if !CYTHON_USE_TYPE_SPECS
- if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC) < (0)) __PYX_ERR(0, 644, __pyx_L1_error)
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC);
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC->tp_dictoffset && __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC->tp_getattro == PyObject_GenericGetAttr)) {
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC->tp_getattro = PyObject_GenericGetAttr;
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC)) __PYX_ERR(0, 770, __pyx_L1_error)
- if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC_spec, __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC) < (0)) __PYX_ERR(0, 770, __pyx_L1_error)
- #else
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC = &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC;
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- #endif
- #if !CYTHON_USE_TYPE_SPECS
- if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC) < (0)) __PYX_ERR(0, 770, __pyx_L1_error)
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC);
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC->tp_dictoffset && __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC->tp_getattro == PyObject_GenericGetAttr)) {
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC->tp_getattro = PyObject_GenericGetAttr;
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr)) __PYX_ERR(0, 1252, __pyx_L1_error)
- if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr_spec, __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr) < (0)) __PYX_ERR(0, 1252, __pyx_L1_error)
- #else
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr = &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr;
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- #endif
- #if !CYTHON_USE_TYPE_SPECS
- if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr) < (0)) __PYX_ERR(0, 1252, __pyx_L1_error)
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr);
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr->tp_dictoffset && __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr->tp_getattro == PyObject_GenericGetAttr)) {
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr->tp_getattro = PyObject_GenericGetAttr;
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t)) __PYX_ERR(0, 1313, __pyx_L1_error)
- if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t_spec, __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t) < (0)) __PYX_ERR(0, 1313, __pyx_L1_error)
- #else
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t = &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t;
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- #endif
- #if !CYTHON_USE_TYPE_SPECS
- if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t) < (0)) __PYX_ERR(0, 1313, __pyx_L1_error)
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t);
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t->tp_dictoffset && __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t->tp_getattro == PyObject_GenericGetAttr)) {
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t->tp_getattro = PyObject_GenericGetAttr;
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr)) __PYX_ERR(0, 1382, __pyx_L1_error)
- if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr_spec, __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr) < (0)) __PYX_ERR(0, 1382, __pyx_L1_error)
- #else
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr = &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr;
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- #endif
- #if !CYTHON_USE_TYPE_SPECS
- if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr) < (0)) __PYX_ERR(0, 1382, __pyx_L1_error)
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr);
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr->tp_dictoffset && __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr->tp_getattro == PyObject_GenericGetAttr)) {
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr->tp_getattro = PyObject_GenericGetAttr;
- }
- #endif
- #if CYTHON_USE_TYPE_SPECS
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr)) __PYX_ERR(0, 1485, __pyx_L1_error)
- if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr_spec, __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr) < (0)) __PYX_ERR(0, 1485, __pyx_L1_error)
- #else
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr = &__pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr;
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- #endif
- #if !CYTHON_USE_TYPE_SPECS
- if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr) < (0)) __PYX_ERR(0, 1485, __pyx_L1_error)
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr);
- #endif
- #if !CYTHON_COMPILING_IN_LIMITED_API
- if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr->tp_dictoffset && __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr->tp_getattro == PyObject_GenericGetAttr)) {
- __pyx_mstate->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr->tp_getattro = PyObject_GenericGetAttr;
- }
- #endif
- __Pyx_RefNannyFinishContext();
- return 0;
- __pyx_L1_error:;
- __Pyx_RefNannyFinishContext();
- return -1;
- }
- static int __Pyx_modinit_type_import_code(__pyx_mstatetype *__pyx_mstate) {
- __Pyx_RefNannyDeclarations
- CYTHON_UNUSED_VAR(__pyx_mstate);
- __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0);
- /*--- Type import code ---*/
- __Pyx_RefNannyFinishContext();
- return 0;
- }
- static int __Pyx_modinit_variable_import_code(__pyx_mstatetype *__pyx_mstate) {
- __Pyx_RefNannyDeclarations
- CYTHON_UNUSED_VAR(__pyx_mstate);
- __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0);
- /*--- Variable import code ---*/
- __Pyx_RefNannyFinishContext();
- return 0;
- }
- static int __Pyx_modinit_function_import_code(__pyx_mstatetype *__pyx_mstate) {
- __Pyx_RefNannyDeclarations
- CYTHON_UNUSED_VAR(__pyx_mstate);
- __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0);
- /*--- Function import code ---*/
- __Pyx_RefNannyFinishContext();
- return 0;
- }
- #if CYTHON_PEP489_MULTI_PHASE_INIT
- static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/
- static int __pyx_pymod_exec_bezierTools(PyObject* module); /*proto*/
- static PyModuleDef_Slot __pyx_moduledef_slots[] = {
- {Py_mod_create, (void*)__pyx_pymod_create},
- {Py_mod_exec, (void*)__pyx_pymod_exec_bezierTools},
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- {Py_mod_gil, __Pyx_FREETHREADING_COMPATIBLE},
- #endif
- #if PY_VERSION_HEX >= 0x030C0000 && CYTHON_USE_MODULE_STATE
- {Py_mod_multiple_interpreters, Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED},
- #endif
- {0, NULL}
- };
- #endif
- #ifdef __cplusplus
- namespace {
- struct PyModuleDef __pyx_moduledef =
- #else
- static struct PyModuleDef __pyx_moduledef =
- #endif
- {
- PyModuleDef_HEAD_INIT,
- "bezierTools",
- __pyx_k_fontTools_misc_bezierTools_py_to, /* m_doc */
- #if CYTHON_USE_MODULE_STATE
- sizeof(__pyx_mstatetype), /* m_size */
- #else
- (CYTHON_PEP489_MULTI_PHASE_INIT) ? 0 : -1, /* m_size */
- #endif
- __pyx_methods /* m_methods */,
- #if CYTHON_PEP489_MULTI_PHASE_INIT
- __pyx_moduledef_slots, /* m_slots */
- #else
- NULL, /* m_reload */
- #endif
- #if CYTHON_USE_MODULE_STATE
- __pyx_m_traverse, /* m_traverse */
- __pyx_m_clear, /* m_clear */
- NULL /* m_free */
- #else
- NULL, /* m_traverse */
- NULL, /* m_clear */
- NULL /* m_free */
- #endif
- };
- #ifdef __cplusplus
- } /* anonymous namespace */
- #endif
- /* PyModInitFuncType */
- #ifndef CYTHON_NO_PYINIT_EXPORT
- #define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC
- #else
- #ifdef __cplusplus
- #define __Pyx_PyMODINIT_FUNC extern "C" PyObject *
- #else
- #define __Pyx_PyMODINIT_FUNC PyObject *
- #endif
- #endif
- __Pyx_PyMODINIT_FUNC PyInit_bezierTools(void) CYTHON_SMALL_CODE; /*proto*/
- __Pyx_PyMODINIT_FUNC PyInit_bezierTools(void)
- #if CYTHON_PEP489_MULTI_PHASE_INIT
- {
- return PyModuleDef_Init(&__pyx_moduledef);
- }
- /* ModuleCreationPEP489 */
- #if CYTHON_COMPILING_IN_LIMITED_API && (__PYX_LIMITED_VERSION_HEX < 0x03090000\
- || ((defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)) && __PYX_LIMITED_VERSION_HEX < 0x030A0000))
- static PY_INT64_T __Pyx_GetCurrentInterpreterId(void) {
- {
- PyObject *module = PyImport_ImportModule("_interpreters"); // 3.13+ I think
- if (!module) {
- PyErr_Clear(); // just try the 3.8-3.12 version
- module = PyImport_ImportModule("_xxsubinterpreters");
- if (!module) goto bad;
- }
- PyObject *current = PyObject_CallMethod(module, "get_current", NULL);
- Py_DECREF(module);
- if (!current) goto bad;
- if (PyTuple_Check(current)) {
- PyObject *new_current = PySequence_GetItem(current, 0);
- Py_DECREF(current);
- current = new_current;
- if (!new_current) goto bad;
- }
- long long as_c_int = PyLong_AsLongLong(current);
- Py_DECREF(current);
- return as_c_int;
- }
- bad:
- PySys_WriteStderr("__Pyx_GetCurrentInterpreterId failed. Try setting the C define CYTHON_PEP489_MULTI_PHASE_INIT=0\n");
- return -1;
- }
- #endif
- #if !CYTHON_USE_MODULE_STATE
- static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) {
- static PY_INT64_T main_interpreter_id = -1;
- #if CYTHON_COMPILING_IN_GRAAL && defined(GRAALPY_VERSION_NUM) && GRAALPY_VERSION_NUM > 0x19000000
- PY_INT64_T current_id = GraalPyInterpreterState_GetIDFromThreadState(PyThreadState_Get());
- #elif CYTHON_COMPILING_IN_GRAAL
- PY_INT64_T current_id = PyInterpreterState_GetIDFromThreadState(PyThreadState_Get());
- #elif CYTHON_COMPILING_IN_LIMITED_API && (__PYX_LIMITED_VERSION_HEX < 0x03090000\
- || ((defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)) && __PYX_LIMITED_VERSION_HEX < 0x030A0000))
- PY_INT64_T current_id = __Pyx_GetCurrentInterpreterId();
- #elif CYTHON_COMPILING_IN_LIMITED_API
- PY_INT64_T current_id = PyInterpreterState_GetID(PyInterpreterState_Get());
- #else
- PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp);
- #endif
- if (unlikely(current_id == -1)) {
- return -1;
- }
- if (main_interpreter_id == -1) {
- main_interpreter_id = current_id;
- return 0;
- } else if (unlikely(main_interpreter_id != current_id)) {
- PyErr_SetString(
- PyExc_ImportError,
- "Interpreter change detected - this module can only be loaded into one interpreter per process.");
- return -1;
- }
- return 0;
- }
- #endif
- static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none)
- {
- PyObject *value = PyObject_GetAttrString(spec, from_name);
- int result = 0;
- if (likely(value)) {
- if (allow_none || value != Py_None) {
- result = PyDict_SetItemString(moddict, to_name, value);
- }
- Py_DECREF(value);
- } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
- PyErr_Clear();
- } else {
- result = -1;
- }
- return result;
- }
- static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) {
- PyObject *module = NULL, *moddict, *modname;
- CYTHON_UNUSED_VAR(def);
- #if !CYTHON_USE_MODULE_STATE
- if (__Pyx_check_single_interpreter())
- return NULL;
- #endif
- if (__pyx_m)
- return __Pyx_NewRef(__pyx_m);
- modname = PyObject_GetAttrString(spec, "name");
- if (unlikely(!modname)) goto bad;
- module = PyModule_NewObject(modname);
- Py_DECREF(modname);
- if (unlikely(!module)) goto bad;
- moddict = PyModule_GetDict(module);
- if (unlikely(!moddict)) goto bad;
- if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad;
- if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad;
- if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad;
- if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad;
- return module;
- bad:
- Py_XDECREF(module);
- return NULL;
- }
- static CYTHON_SMALL_CODE int __pyx_pymod_exec_bezierTools(PyObject *__pyx_pyinit_module)
- #endif
- {
- int stringtab_initialized = 0;
- #if CYTHON_USE_MODULE_STATE
- int pystate_addmodule_run = 0;
- #endif
- __pyx_mstatetype *__pyx_mstate = NULL;
- PyObject *__pyx_t_1 = NULL;
- PyObject *__pyx_t_2 = NULL;
- Py_ssize_t __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;
- size_t __pyx_t_9;
- 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_RefNannyDeclarations
- #if CYTHON_PEP489_MULTI_PHASE_INIT
- if (__pyx_m) {
- if (__pyx_m == __pyx_pyinit_module) return 0;
- PyErr_SetString(PyExc_RuntimeError, "Module 'bezierTools' has already been imported. Re-initialisation is not supported.");
- return -1;
- }
- #else
- if (__pyx_m) return __Pyx_NewRef(__pyx_m);
- #endif
- /*--- Module creation code ---*/
- #if CYTHON_PEP489_MULTI_PHASE_INIT
- __pyx_t_1 = __pyx_pyinit_module;
- Py_INCREF(__pyx_t_1);
- #else
- __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
- #endif
- #if CYTHON_USE_MODULE_STATE
- {
- int add_module_result = __Pyx_State_AddModule(__pyx_t_1, &__pyx_moduledef);
- __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "bezierTools" pseudovariable */
- if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
- pystate_addmodule_run = 1;
- }
- #else
- __pyx_m = __pyx_t_1;
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- PyUnstable_Module_SetGIL(__pyx_m, Py_MOD_GIL_USED);
- #endif
- __pyx_mstate = __pyx_mstate_global;
- CYTHON_UNUSED_VAR(__pyx_t_1);
- __pyx_mstate->__pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_mstate->__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error)
- Py_INCREF(__pyx_mstate->__pyx_d);
- __pyx_mstate->__pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_mstate->__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error)
- __pyx_mstate->__pyx_cython_runtime = __Pyx_PyImport_AddModuleRef("cython_runtime"); if (unlikely(!__pyx_mstate->__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_mstate->__pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
- /* ImportRefnannyAPI */
- #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("PyInit_bezierTools", 0);
- __Pyx_init_runtime_version();
- if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- __pyx_mstate->__pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_mstate->__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error)
- __pyx_mstate->__pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_mstate->__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error)
- __pyx_mstate->__pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_mstate->__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error)
- /*--- Library function declarations ---*/
- /*--- Initialize various global constants etc. ---*/
- if (__Pyx_InitConstants(__pyx_mstate) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- stringtab_initialized = 1;
- if (__Pyx_InitGlobals() < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (__pyx_module_is_main_fontTools__misc__bezierTools) {
- if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_name, __pyx_mstate_global->__pyx_n_u_main) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- }
- {
- PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (!PyDict_GetItemString(modules, "fontTools.misc.bezierTools")) {
- if (unlikely((PyDict_SetItemString(modules, "fontTools.misc.bezierTools", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
- }
- }
- /*--- Builtin init code ---*/
- if (__Pyx_InitCachedBuiltins(__pyx_mstate) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- /*--- Constants init code ---*/
- if (__Pyx_InitCachedConstants(__pyx_mstate) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (__Pyx_CreateCodeObjects(__pyx_mstate) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- /*--- Global type/function init code ---*/
- (void)__Pyx_modinit_global_init_code(__pyx_mstate);
- (void)__Pyx_modinit_variable_export_code(__pyx_mstate);
- (void)__Pyx_modinit_function_export_code(__pyx_mstate);
- if (unlikely((__Pyx_modinit_type_init_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
- (void)__Pyx_modinit_type_import_code(__pyx_mstate);
- (void)__Pyx_modinit_variable_import_code(__pyx_mstate);
- (void)__Pyx_modinit_function_import_code(__pyx_mstate);
- /*--- Execution code ---*/
- /* "fontTools/misc/bezierTools.py":5
- * """
- *
- * from fontTools.misc.arrayTools import calcBounds, sectRect, rectArea # <<<<<<<<<<<<<<
- * from fontTools.misc.transform import Identity
- * import math
- */
- {
- PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_calcBounds,__pyx_mstate_global->__pyx_n_u_sectRect,__pyx_mstate_global->__pyx_n_u_rectArea};
- __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_fontTools_misc_arrayTools, __pyx_imported_names, 3, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error)
- }
- __pyx_t_2 = __pyx_t_1;
- __Pyx_GOTREF(__pyx_t_2);
- {
- PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_calcBounds,__pyx_mstate_global->__pyx_n_u_sectRect,__pyx_mstate_global->__pyx_n_u_rectArea};
- for (__pyx_t_3=0; __pyx_t_3 < 3; __pyx_t_3++) {
- __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_3], __pyx_t_4) < (0)) __PYX_ERR(0, 5, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- }
- }
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":6
- *
- * from fontTools.misc.arrayTools import calcBounds, sectRect, rectArea
- * from fontTools.misc.transform import Identity # <<<<<<<<<<<<<<
- * import math
- * from collections import namedtuple
- */
- {
- PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Identity};
- __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_fontTools_misc_transform, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error)
- }
- __pyx_t_2 = __pyx_t_1;
- __Pyx_GOTREF(__pyx_t_2);
- {
- PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Identity};
- __pyx_t_3 = 0; {
- __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_3], __pyx_t_4) < (0)) __PYX_ERR(0, 6, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- }
- }
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":7
- * from fontTools.misc.arrayTools import calcBounds, sectRect, rectArea
- * from fontTools.misc.transform import Identity
- * import math # <<<<<<<<<<<<<<
- * from collections import namedtuple
- *
- */
- __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_math, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error)
- __pyx_t_2 = __pyx_t_1;
- __Pyx_GOTREF(__pyx_t_2);
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_math, __pyx_t_2) < (0)) __PYX_ERR(0, 7, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":8
- * from fontTools.misc.transform import Identity
- * import math
- * from collections import namedtuple # <<<<<<<<<<<<<<
- *
- * try:
- */
- {
- PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_namedtuple};
- __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_collections, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __pyx_L1_error)
- }
- __pyx_t_2 = __pyx_t_1;
- __Pyx_GOTREF(__pyx_t_2);
- {
- PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_namedtuple};
- __pyx_t_3 = 0; {
- __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_3], __pyx_t_4) < (0)) __PYX_ERR(0, 8, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- }
- }
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":10
- * from collections import namedtuple
- *
- * try: # <<<<<<<<<<<<<<
- * import cython
- * except (AttributeError, ImportError):
- */
- {
- (void)__pyx_t_1; (void)__pyx_t_5; (void)__pyx_t_6; /* mark used */
- /*try:*/ {
- /* "fontTools/misc/bezierTools.py":11
- *
- * try:
- * import cython # <<<<<<<<<<<<<<
- * except (AttributeError, ImportError):
- * # if cython not installed, use mock module with no-op decorators and types
- */
- }
- }
- /* "fontTools/misc/bezierTools.py":15
- * # if cython not installed, use mock module with no-op decorators and types
- * from fontTools.misc import cython
- * COMPILED = cython.compiled # <<<<<<<<<<<<<<
- *
- *
- */
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_COMPILED, Py_True) < (0)) __PYX_ERR(0, 15, __pyx_L1_error)
- /* "fontTools/misc/bezierTools.py":18
- *
- *
- * EPSILON = 1e-9 # <<<<<<<<<<<<<<
- *
- *
- */
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_EPSILON, __pyx_mstate_global->__pyx_float_1eneg_9) < (0)) __PYX_ERR(0, 18, __pyx_L1_error)
- /* "fontTools/misc/bezierTools.py":21
- *
- *
- * Intersection = namedtuple("Intersection", ["pt", "t1", "t2"]) # <<<<<<<<<<<<<<
- *
- *
- */
- __pyx_t_4 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_namedtuple); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 21, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __pyx_t_8 = __Pyx_PyList_Pack(3, __pyx_mstate_global->__pyx_n_u_pt, __pyx_mstate_global->__pyx_n_u_t1, __pyx_mstate_global->__pyx_n_u_t2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 21, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_9 = 1;
- {
- PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Intersection, __pyx_t_8};
- __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- }
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_Intersection, __pyx_t_2) < (0)) __PYX_ERR(0, 21, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":24
- *
- *
- * __all__ = [ # <<<<<<<<<<<<<<
- * "approximateCubicArcLength",
- * "approximateCubicArcLengthC",
- */
- __pyx_t_2 = __Pyx_PyList_Pack(28, __pyx_mstate_global->__pyx_n_u_approximateCubicArcLength, __pyx_mstate_global->__pyx_n_u_approximateCubicArcLengthC, __pyx_mstate_global->__pyx_n_u_approximateQuadraticArcLength, __pyx_mstate_global->__pyx_n_u_approximateQuadraticArcLengthC, __pyx_mstate_global->__pyx_n_u_calcCubicArcLength, __pyx_mstate_global->__pyx_n_u_calcCubicArcLengthC, __pyx_mstate_global->__pyx_n_u_calcQuadraticArcLength, __pyx_mstate_global->__pyx_n_u_calcQuadraticArcLengthC, __pyx_mstate_global->__pyx_n_u_calcCubicBounds, __pyx_mstate_global->__pyx_n_u_calcQuadraticBounds, __pyx_mstate_global->__pyx_n_u_splitLine, __pyx_mstate_global->__pyx_n_u_splitQuadratic, __pyx_mstate_global->__pyx_n_u_splitCubic, __pyx_mstate_global->__pyx_n_u_splitQuadraticAtT_2, __pyx_mstate_global->__pyx_n_u_splitCubicAtT_2, __pyx_mstate_global->__pyx_n_u_splitCubicAtTC, __pyx_mstate_global->__pyx_n_u_splitCubicIntoTwoAtTC, __pyx_mstate_global->__pyx_n_u_solveQuadratic, __pyx_mstate_global->__pyx_n_u_solveCubic, __pyx_mstate_global->__pyx_n_u_quadraticPointAtT, __pyx_mstate_global->__pyx_n_u_cubicPointAtT, __pyx_mstate_global->__pyx_n_u_cubicPointAtTC, __pyx_mstate_global->__pyx_n_u_linePointAtT, __pyx_mstate_global->__pyx_n_u_segmentPointAtT, __pyx_mstate_global->__pyx_n_u_lineLineIntersections, __pyx_mstate_global->__pyx_n_u_curveLineIntersections, __pyx_mstate_global->__pyx_n_u_curveCurveIntersections, __pyx_mstate_global->__pyx_n_u_segmentSegmentIntersections); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_all, __pyx_t_2) < (0)) __PYX_ERR(0, 24, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":56
- *
- *
- * def calcCubicArcLength(pt1, pt2, pt3, pt4, tolerance=0.005): # <<<<<<<<<<<<<<
- * """Calculates the arc length for a cubic Bezier segment.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_1calcCubicArcLength, 0, __pyx_mstate_global->__pyx_n_u_calcCubicArcLength, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[9])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 56, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[2]);
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_calcCubicArcLength, __pyx_t_2) < (0)) __PYX_ERR(0, 56, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":75
- *
- *
- * def _split_cubic_into_two(p0, p1, p2, p3): # <<<<<<<<<<<<<<
- * mid = (p0 + 3 * (p1 + p2) + p3) * 0.125
- * deriv3 = (p3 + p2 - p1 - p0) * 0.125
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_3_split_cubic_into_two, 0, __pyx_mstate_global->__pyx_n_u_split_cubic_into_two, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[10])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 75, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_split_cubic_into_two, __pyx_t_2) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":84
- *
- *
- * @cython.returns(cython.double) # <<<<<<<<<<<<<<
- * @cython.locals(
- * p0=cython.complex,
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_5_calcCubicArcLengthCRecurse, 0, __pyx_mstate_global->__pyx_n_u_calcCubicArcLengthCRecurse, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[11])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 84, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_calcCubicArcLengthCRecurse, __pyx_t_2) < (0)) __PYX_ERR(0, 84, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":115
- * mult=cython.double,
- * )
- * def calcCubicArcLengthC(pt1, pt2, pt3, pt4, tolerance=0.005): # <<<<<<<<<<<<<<
- * """Calculates the arc length for a cubic Bezier segment.
- *
- */
- __pyx_t_2 = PyFloat_FromDouble(((double)0.005)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- /* "fontTools/misc/bezierTools.py":104
- *
- *
- * @cython.returns(cython.double) # <<<<<<<<<<<<<<
- * @cython.locals(
- * pt1=cython.complex,
- */
- __pyx_t_7 = PyTuple_Pack(1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 104, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_7calcCubicArcLengthC, 0, __pyx_mstate_global->__pyx_n_u_calcCubicArcLengthC, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[12])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_7);
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_calcCubicArcLengthC, __pyx_t_2) < (0)) __PYX_ERR(0, 104, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":129
- *
- *
- * epsilonDigits = 6 # <<<<<<<<<<<<<<
- * epsilon = 1e-10
- *
- */
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_epsilonDigits, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 129, __pyx_L1_error)
- /* "fontTools/misc/bezierTools.py":130
- *
- * epsilonDigits = 6
- * epsilon = 1e-10 # <<<<<<<<<<<<<<
- *
- *
- */
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_epsilon, __pyx_mstate_global->__pyx_float_1eneg_10) < (0)) __PYX_ERR(0, 130, __pyx_L1_error)
- /* "fontTools/misc/bezierTools.py":151
- *
- *
- * def calcQuadraticArcLength(pt1, pt2, pt3): # <<<<<<<<<<<<<<
- * """Calculates the arc length for a quadratic Bezier segment.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_9calcQuadraticArcLength, 0, __pyx_mstate_global->__pyx_n_u_calcQuadraticArcLength, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[13])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_calcQuadraticArcLength, __pyx_t_2) < (0)) __PYX_ERR(0, 151, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":186
- *
- *
- * @cython.returns(cython.double) # <<<<<<<<<<<<<<
- * @cython.locals(
- * pt1=cython.complex,
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_11calcQuadraticArcLengthC, 0, __pyx_mstate_global->__pyx_n_u_calcQuadraticArcLengthC, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[14])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 186, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_calcQuadraticArcLengthC, __pyx_t_2) < (0)) __PYX_ERR(0, 186, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":237
- *
- *
- * def approximateQuadraticArcLength(pt1, pt2, pt3): # <<<<<<<<<<<<<<
- * """Calculates the arc length for a quadratic Bezier segment.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_13approximateQuadraticArcLength, 0, __pyx_mstate_global->__pyx_n_u_approximateQuadraticArcLength, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[15])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 237, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_approximateQuadraticArcLength, __pyx_t_2) < (0)) __PYX_ERR(0, 237, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":254
- *
- *
- * @cython.returns(cython.double) # <<<<<<<<<<<<<<
- * @cython.locals(
- * pt1=cython.complex,
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_15approximateQuadraticArcLengthC, 0, __pyx_mstate_global->__pyx_n_u_approximateQuadraticArcLengthC, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[16])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_approximateQuadraticArcLengthC, __pyx_t_2) < (0)) __PYX_ERR(0, 254, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":298
- *
- *
- * def calcQuadraticBounds(pt1, pt2, pt3): # <<<<<<<<<<<<<<
- * """Calculates the bounding rectangle for a quadratic Bezier segment.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_17calcQuadraticBounds, 0, __pyx_mstate_global->__pyx_n_u_calcQuadraticBounds, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[17])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 298, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_calcQuadraticBounds, __pyx_t_2) < (0)) __PYX_ERR(0, 298, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":332
- *
- *
- * def approximateCubicArcLength(pt1, pt2, pt3, pt4): # <<<<<<<<<<<<<<
- * """Approximates the arc length for a cubic Bezier segment.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_19approximateCubicArcLength, 0, __pyx_mstate_global->__pyx_n_u_approximateCubicArcLength, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[18])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 332, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_approximateCubicArcLength, __pyx_t_2) < (0)) __PYX_ERR(0, 332, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":362
- *
- *
- * @cython.returns(cython.double) # <<<<<<<<<<<<<<
- * @cython.locals(
- * pt1=cython.complex,
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_21approximateCubicArcLengthC, 0, __pyx_mstate_global->__pyx_n_u_approximateCubicArcLengthC, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[19])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 362, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_approximateCubicArcLengthC, __pyx_t_2) < (0)) __PYX_ERR(0, 362, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":412
- *
- *
- * def calcCubicBounds(pt1, pt2, pt3, pt4): # <<<<<<<<<<<<<<
- * """Calculates the bounding rectangle for a quadratic Bezier segment.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_23calcCubicBounds, 0, __pyx_mstate_global->__pyx_n_u_calcCubicBounds, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[20])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 412, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_calcCubicBounds, __pyx_t_2) < (0)) __PYX_ERR(0, 412, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":450
- *
- *
- * def splitLine(pt1, pt2, where, isHorizontal): # <<<<<<<<<<<<<<
- * """Split a line at a given coordinate.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_25splitLine, 0, __pyx_mstate_global->__pyx_n_u_splitLine, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[21])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 450, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_splitLine, __pyx_t_2) < (0)) __PYX_ERR(0, 450, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":507
- *
- *
- * def splitQuadratic(pt1, pt2, pt3, where, isHorizontal): # <<<<<<<<<<<<<<
- * """Split a quadratic Bezier curve at a given coordinate.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_27splitQuadratic, 0, __pyx_mstate_global->__pyx_n_u_splitQuadratic, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[22])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 507, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_splitQuadratic, __pyx_t_2) < (0)) __PYX_ERR(0, 507, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":552
- *
- *
- * def splitCubic(pt1, pt2, pt3, pt4, where, isHorizontal): # <<<<<<<<<<<<<<
- * """Split a cubic Bezier curve at a given coordinate.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_29splitCubic, 0, __pyx_mstate_global->__pyx_n_u_splitCubic, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[23])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 552, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_splitCubic, __pyx_t_2) < (0)) __PYX_ERR(0, 552, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":589
- *
- *
- * def splitQuadraticAtT(pt1, pt2, pt3, *ts): # <<<<<<<<<<<<<<
- * """Split a quadratic Bezier curve at one or more values of t.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_31splitQuadraticAtT, 0, __pyx_mstate_global->__pyx_n_u_splitQuadraticAtT_2, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[24])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 589, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_splitQuadraticAtT_2, __pyx_t_2) < (0)) __PYX_ERR(0, 589, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":613
- *
- *
- * def splitCubicAtT(pt1, pt2, pt3, pt4, *ts): # <<<<<<<<<<<<<<
- * """Split a cubic Bezier curve at one or more values of t.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_33splitCubicAtT, 0, __pyx_mstate_global->__pyx_n_u_splitCubicAtT_2, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[25])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 613, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_splitCubicAtT_2, __pyx_t_2) < (0)) __PYX_ERR(0, 613, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":644
- *
- *
- * @cython.locals( # <<<<<<<<<<<<<<
- * pt1=cython.complex,
- * pt2=cython.complex,
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_35splitCubicAtTC, 0, __pyx_mstate_global->__pyx_n_u_splitCubicAtTC, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[2])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 644, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_splitCubicAtTC, __pyx_t_2) < (0)) __PYX_ERR(0, 644, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":668
- *
- *
- * @cython.returns(cython.complex) # <<<<<<<<<<<<<<
- * @cython.locals(
- * t=cython.double,
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_38splitCubicIntoTwoAtTC, 0, __pyx_mstate_global->__pyx_n_u_splitCubicIntoTwoAtTC, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[26])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 668, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_splitCubicIntoTwoAtTC, __pyx_t_2) < (0)) __PYX_ERR(0, 668, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":708
- *
- *
- * def _splitQuadraticAtT(a, b, c, *ts): # <<<<<<<<<<<<<<
- * ts = list(ts)
- * segments = []
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_40_splitQuadraticAtT, 0, __pyx_mstate_global->__pyx_n_u_splitQuadraticAtT, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[27])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 708, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_splitQuadraticAtT, __pyx_t_2) < (0)) __PYX_ERR(0, 708, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":735
- *
- *
- * def _splitCubicAtT(a, b, c, d, *ts): # <<<<<<<<<<<<<<
- * ts = list(ts)
- * ts.insert(0, 0.0)
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_42_splitCubicAtT, 0, __pyx_mstate_global->__pyx_n_u_splitCubicAtT, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[28])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 735, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_splitCubicAtT, __pyx_t_2) < (0)) __PYX_ERR(0, 735, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":770
- *
- *
- * @cython.locals( # <<<<<<<<<<<<<<
- * a=cython.complex,
- * b=cython.complex,
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_44_splitCubicAtTC, 0, __pyx_mstate_global->__pyx_n_u_splitCubicAtTC_2, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[3])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 770, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_splitCubicAtTC_2, __pyx_t_2) < (0)) __PYX_ERR(0, 770, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":812
- * #
- *
- * from math import sqrt, acos, cos, pi # <<<<<<<<<<<<<<
- *
- *
- */
- {
- PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_sqrt,__pyx_mstate_global->__pyx_n_u_acos,__pyx_mstate_global->__pyx_n_u_cos,__pyx_mstate_global->__pyx_n_u_pi};
- __pyx_t_6 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_math, __pyx_imported_names, 4, NULL, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 812, __pyx_L1_error)
- }
- __pyx_t_2 = __pyx_t_6;
- __Pyx_GOTREF(__pyx_t_2);
- {
- PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_sqrt,__pyx_mstate_global->__pyx_n_u_acos,__pyx_mstate_global->__pyx_n_u_cos,__pyx_mstate_global->__pyx_n_u_pi};
- for (__pyx_t_3=0; __pyx_t_3 < 4; __pyx_t_3++) {
- __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 812, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_3], __pyx_t_7) < (0)) __PYX_ERR(0, 812, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- }
- }
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":815
- *
- *
- * def solveQuadratic(a, b, c, sqrt=sqrt): # <<<<<<<<<<<<<<
- * """Solve a quadratic equation.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_47solveQuadratic, 0, __pyx_mstate_global->__pyx_n_u_solveQuadratic, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[29])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 815, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (!__Pyx_CyFunction_InitDefaults(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_9fontTools_4misc_11bezierTools___pyx_defaults)) __PYX_ERR(0, 815, __pyx_L1_error)
- __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_sqrt); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 815, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __Pyx_CyFunction_Defaults(struct __pyx_defaults, __pyx_t_2)->arg0 = __pyx_t_7;
- __Pyx_GIVEREF(__pyx_t_7);
- __pyx_t_7 = 0;
- __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_2, __pyx_pf_9fontTools_4misc_11bezierTools_96__defaults__);
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_solveQuadratic, __pyx_t_2) < (0)) __PYX_ERR(0, 815, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":848
- *
- *
- * def solveCubic(a, b, c, d): # <<<<<<<<<<<<<<
- * """Solve a cubic equation.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_49solveCubic, 0, __pyx_mstate_global->__pyx_n_u_solveCubic, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[30])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 848, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_solveCubic, __pyx_t_2) < (0)) __PYX_ERR(0, 848, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":945
- *
- *
- * def calcQuadraticParameters(pt1, pt2, pt3): # <<<<<<<<<<<<<<
- * x2, y2 = pt2
- * x3, y3 = pt3
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_51calcQuadraticParameters, 0, __pyx_mstate_global->__pyx_n_u_calcQuadraticParameters, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[31])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 945, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_calcQuadraticParameters, __pyx_t_2) < (0)) __PYX_ERR(0, 945, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":956
- *
- *
- * def calcCubicParameters(pt1, pt2, pt3, pt4): # <<<<<<<<<<<<<<
- * x2, y2 = pt2
- * x3, y3 = pt3
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_53calcCubicParameters, 0, __pyx_mstate_global->__pyx_n_u_calcCubicParameters, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[32])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 956, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_calcCubicParameters, __pyx_t_2) < (0)) __PYX_ERR(0, 956, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":988
- *
- *
- * def calcQuadraticPoints(a, b, c): # <<<<<<<<<<<<<<
- * ax, ay = a
- * bx, by = b
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_55calcQuadraticPoints, 0, __pyx_mstate_global->__pyx_n_u_calcQuadraticPoints, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[33])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 988, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_calcQuadraticPoints, __pyx_t_2) < (0)) __PYX_ERR(0, 988, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1001
- *
- *
- * def calcCubicPoints(a, b, c, d): # <<<<<<<<<<<<<<
- * ax, ay = a
- * bx, by = b
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_57calcCubicPoints, 0, __pyx_mstate_global->__pyx_n_u_calcCubicPoints, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[34])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1001, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_calcCubicPoints, __pyx_t_2) < (0)) __PYX_ERR(0, 1001, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1040
- *
- *
- * def linePointAtT(pt1, pt2, t): # <<<<<<<<<<<<<<
- * """Finds the point at time `t` on a line.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_59linePointAtT, 0, __pyx_mstate_global->__pyx_n_u_linePointAtT, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[35])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1040, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_linePointAtT, __pyx_t_2) < (0)) __PYX_ERR(0, 1040, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1053
- *
- *
- * def quadraticPointAtT(pt1, pt2, pt3, t): # <<<<<<<<<<<<<<
- * """Finds the point at time `t` on a quadratic curve.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_61quadraticPointAtT, 0, __pyx_mstate_global->__pyx_n_u_quadraticPointAtT, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[36])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1053, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_quadraticPointAtT, __pyx_t_2) < (0)) __PYX_ERR(0, 1053, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1068
- *
- *
- * def cubicPointAtT(pt1, pt2, pt3, pt4, t): # <<<<<<<<<<<<<<
- * """Finds the point at time `t` on a cubic curve.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_63cubicPointAtT, 0, __pyx_mstate_global->__pyx_n_u_cubicPointAtT, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[37])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1068, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_cubicPointAtT, __pyx_t_2) < (0)) __PYX_ERR(0, 1068, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1094
- *
- *
- * @cython.returns(cython.complex) # <<<<<<<<<<<<<<
- * @cython.locals(
- * t=cython.double,
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_65cubicPointAtTC, 0, __pyx_mstate_global->__pyx_n_u_cubicPointAtTC, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[38])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1094, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_cubicPointAtTC, __pyx_t_2) < (0)) __PYX_ERR(0, 1094, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1119
- *
- *
- * def segmentPointAtT(seg, t): # <<<<<<<<<<<<<<
- * if len(seg) == 2:
- * return linePointAtT(*seg, t)
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_67segmentPointAtT, 0, __pyx_mstate_global->__pyx_n_u_segmentPointAtT, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[39])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1119, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_segmentPointAtT, __pyx_t_2) < (0)) __PYX_ERR(0, 1119, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1134
- *
- *
- * def _line_t_of_pt(s, e, pt): # <<<<<<<<<<<<<<
- * sx, sy = s
- * ex, ey = e
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_69_line_t_of_pt, 0, __pyx_mstate_global->__pyx_n_u_line_t_of_pt, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[40])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1134, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_line_t_of_pt, __pyx_t_2) < (0)) __PYX_ERR(0, 1134, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1148
- *
- *
- * def _both_points_are_on_same_side_of_origin(a, b, origin): # <<<<<<<<<<<<<<
- * xDiff = (a[0] - origin[0]) * (b[0] - origin[0])
- * yDiff = (a[1] - origin[1]) * (b[1] - origin[1])
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_71_both_points_are_on_same_side_of_origin, 0, __pyx_mstate_global->__pyx_n_u_both_points_are_on_same_side_of, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[41])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1148, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_both_points_are_on_same_side_of, __pyx_t_2) < (0)) __PYX_ERR(0, 1148, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1154
- *
- *
- * def lineLineIntersections(s1, e1, s2, e2): # <<<<<<<<<<<<<<
- * """Finds intersections between two line segments.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_73lineLineIntersections, 0, __pyx_mstate_global->__pyx_n_u_lineLineIntersections, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[42])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1154, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_lineLineIntersections, __pyx_t_2) < (0)) __PYX_ERR(0, 1154, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1232
- *
- *
- * def _alignment_transformation(segment): # <<<<<<<<<<<<<<
- * # Returns a transformation which aligns a segment horizontally at the
- * # origin. Apply this transformation to curves and root-find to find
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_75_alignment_transformation, 0, __pyx_mstate_global->__pyx_n_u_alignment_transformation, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[43])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1232, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_alignment_transformation, __pyx_t_2) < (0)) __PYX_ERR(0, 1232, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1242
- *
- *
- * def _curve_line_intersections_t(curve, line): # <<<<<<<<<<<<<<
- * aligned_curve = _alignment_transformation(line).transformPoints(curve)
- * if len(curve) == 3:
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_77_curve_line_intersections_t, 0, __pyx_mstate_global->__pyx_n_u_curve_line_intersections_t, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[44])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1242, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_curve_line_intersections_t, __pyx_t_2) < (0)) __PYX_ERR(0, 1242, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1255
- *
- *
- * def curveLineIntersections(curve, line): # <<<<<<<<<<<<<<
- * """Finds intersections between a curve and a line.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_79curveLineIntersections, 0, __pyx_mstate_global->__pyx_n_u_curveLineIntersections, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[45])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1255, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_curveLineIntersections, __pyx_t_2) < (0)) __PYX_ERR(0, 1255, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1293
- *
- *
- * def _curve_bounds(c): # <<<<<<<<<<<<<<
- * if len(c) == 3:
- * return calcQuadraticBounds(*c)
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_81_curve_bounds, 0, __pyx_mstate_global->__pyx_n_u_curve_bounds, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[46])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1293, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_curve_bounds, __pyx_t_2) < (0)) __PYX_ERR(0, 1293, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1301
- *
- *
- * def _split_segment_at_t(c, t): # <<<<<<<<<<<<<<
- * if len(c) == 2:
- * s, e = c
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_83_split_segment_at_t, 0, __pyx_mstate_global->__pyx_n_u_split_segment_at_t, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[47])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1301, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_split_segment_at_t, __pyx_t_2) < (0)) __PYX_ERR(0, 1301, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1313
- *
- *
- * def _curve_curve_intersections_t( # <<<<<<<<<<<<<<
- * curve1, curve2, precision=1e-3, range1=None, range2=None
- * ):
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_85_curve_curve_intersections_t, 0, __pyx_mstate_global->__pyx_n_u_curve_curve_intersections_t, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[48])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1313, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[3]);
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_curve_curve_intersections_t, __pyx_t_2) < (0)) __PYX_ERR(0, 1313, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1380
- *
- *
- * def _is_linelike(segment): # <<<<<<<<<<<<<<
- * maybeline = _alignment_transformation(segment).transformPoints(segment)
- * return all(math.isclose(p[1], 0.0) for p in maybeline)
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_87_is_linelike, 0, __pyx_mstate_global->__pyx_n_u_is_linelike, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[49])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1380, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_is_linelike, __pyx_t_2) < (0)) __PYX_ERR(0, 1380, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1385
- *
- *
- * def curveCurveIntersections(curve1, curve2): # <<<<<<<<<<<<<<
- * """Finds intersections between a curve and a curve.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_89curveCurveIntersections, 0, __pyx_mstate_global->__pyx_n_u_curveCurveIntersections, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[50])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1385, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_curveCurveIntersections, __pyx_t_2) < (0)) __PYX_ERR(0, 1385, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1427
- *
- *
- * def segmentSegmentIntersections(seg1, seg2): # <<<<<<<<<<<<<<
- * """Finds intersections between two segments.
- *
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_91segmentSegmentIntersections, 0, __pyx_mstate_global->__pyx_n_u_segmentSegmentIntersections, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[51])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1427, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_segmentSegmentIntersections, __pyx_t_2) < (0)) __PYX_ERR(0, 1427, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1475
- *
- *
- * def _segmentrepr(obj): # <<<<<<<<<<<<<<
- * """
- * >>> _segmentrepr([1, [2, 3], [], [[2, [3, 4], [0.1, 2.2]]]])
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_93_segmentrepr, 0, __pyx_mstate_global->__pyx_n_u_segmentrepr, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[52])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1475, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_segmentrepr, __pyx_t_2) < (0)) __PYX_ERR(0, 1475, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1488
- *
- *
- * def printSegments(segments): # <<<<<<<<<<<<<<
- * """Helper for the doctests, displaying each segment in a list of
- * segments on a single line as a tuple.
- */
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9fontTools_4misc_11bezierTools_95printSegments, 0, __pyx_mstate_global->__pyx_n_u_printSegments, NULL, __pyx_mstate_global->__pyx_n_u_fontTools_misc_bezierTools, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[53])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1488, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
- PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
- #endif
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_printSegments, __pyx_t_2) < (0)) __PYX_ERR(0, 1488, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1496
- *
- *
- * if __name__ == "__main__": # <<<<<<<<<<<<<<
- * import sys
- * import doctest
- */
- __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1496, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- __pyx_t_10 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_main, Py_EQ)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1496, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- if (__pyx_t_10) {
- /* "fontTools/misc/bezierTools.py":1497
- *
- * if __name__ == "__main__":
- * import sys # <<<<<<<<<<<<<<
- * import doctest
- *
- */
- __pyx_t_6 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_sys, 0, 0, NULL, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1497, __pyx_L1_error)
- __pyx_t_2 = __pyx_t_6;
- __Pyx_GOTREF(__pyx_t_2);
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_sys, __pyx_t_2) < (0)) __PYX_ERR(0, 1497, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1498
- * if __name__ == "__main__":
- * import sys
- * import doctest # <<<<<<<<<<<<<<
- *
- * sys.exit(doctest.testmod().failed)
- */
- __pyx_t_6 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_doctest, 0, 0, NULL, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1498, __pyx_L1_error)
- __pyx_t_2 = __pyx_t_6;
- __Pyx_GOTREF(__pyx_t_2);
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_doctest, __pyx_t_2) < (0)) __PYX_ERR(0, 1498, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1500
- * import doctest
- *
- * sys.exit(doctest.testmod().failed) # <<<<<<<<<<<<<<
- */
- __pyx_t_7 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_sys); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1500, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1500, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_4);
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __pyx_t_11 = NULL;
- __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_doctest); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1500, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_12);
- __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_testmod); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1500, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_13);
- __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
- __pyx_t_9 = 1;
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL};
- __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_13, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
- __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
- if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1500, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_8);
- }
- __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_failed); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1500, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_13);
- __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
- __pyx_t_9 = 1;
- {
- PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_13};
- __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
- __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
- __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1500, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- }
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "fontTools/misc/bezierTools.py":1496
- *
- *
- * if __name__ == "__main__": # <<<<<<<<<<<<<<
- * import sys
- * import doctest
- */
- }
- /* "fontTools/misc/bezierTools.py":1
- * # -*- coding: utf-8 -*- # <<<<<<<<<<<<<<
- * """fontTools.misc.bezierTools.py -- tools for working with Bezier path segments.
- * """
- */
- __pyx_t_2 = __Pyx_PyDict_NewPresized(15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_2);
- if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_calcQuadraticArcLength_line_151, __pyx_mstate_global->__pyx_kp_u_Calculates_the_arc_length_for_a) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_calcQuadraticBounds_line_298, __pyx_mstate_global->__pyx_kp_u_Calculates_the_bounding_rectangl) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_approximateCubicArcLength_line_3, __pyx_mstate_global->__pyx_kp_u_Approximates_the_arc_length_for) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_calcCubicBounds_line_412, __pyx_mstate_global->__pyx_kp_u_Calculates_the_bounding_rectangl_2) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_splitLine_line_450, __pyx_mstate_global->__pyx_kp_u_Split_a_line_at_a_given_coordina) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_splitQuadratic_line_507, __pyx_mstate_global->__pyx_kp_u_Split_a_quadratic_Bezier_curve_a) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_splitCubic_line_552, __pyx_mstate_global->__pyx_kp_u_Split_a_cubic_Bezier_curve_at_a) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_splitQuadraticAtT_line_589, __pyx_mstate_global->__pyx_kp_u_Split_a_quadratic_Bezier_curve_a_2) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_splitCubicAtT_line_613, __pyx_mstate_global->__pyx_kp_u_Split_a_cubic_Bezier_curve_at_on) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_solveCubic_line_848, __pyx_mstate_global->__pyx_kp_u_Solve_a_cubic_equation_Solves_a) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_lineLineIntersections_line_1154, __pyx_mstate_global->__pyx_kp_u_Finds_intersections_between_two) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_curveLineIntersections_line_1255, __pyx_mstate_global->__pyx_kp_u_Finds_intersections_between_a_cu) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_curveCurveIntersections_line_138, __pyx_mstate_global->__pyx_kp_u_Finds_intersections_between_a_cu_2) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_segmentSegmentIntersections_line, __pyx_mstate_global->__pyx_kp_u_Finds_intersections_between_two_2) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_segmentrepr_line_1475, __pyx_mstate_global->__pyx_kp_u_segmentrepr_1_2_3_2_3_4_0_1_2) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_test, __pyx_t_2) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /*--- Wrapped vars code ---*/
- goto __pyx_L0;
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_2);
- __Pyx_XDECREF(__pyx_t_4);
- __Pyx_XDECREF(__pyx_t_7);
- __Pyx_XDECREF(__pyx_t_8);
- __Pyx_XDECREF(__pyx_t_11);
- __Pyx_XDECREF(__pyx_t_12);
- __Pyx_XDECREF(__pyx_t_13);
- if (__pyx_m) {
- if (__pyx_mstate->__pyx_d && stringtab_initialized) {
- __Pyx_AddTraceback("init fontTools.misc.bezierTools", __pyx_clineno, __pyx_lineno, __pyx_filename);
- }
- #if !CYTHON_USE_MODULE_STATE
- Py_CLEAR(__pyx_m);
- #else
- Py_DECREF(__pyx_m);
- if (pystate_addmodule_run) {
- PyObject *tp, *value, *tb;
- PyErr_Fetch(&tp, &value, &tb);
- PyState_RemoveModule(&__pyx_moduledef);
- PyErr_Restore(tp, value, tb);
- }
- #endif
- } else if (!PyErr_Occurred()) {
- PyErr_SetString(PyExc_ImportError, "init fontTools.misc.bezierTools");
- }
- __pyx_L0:;
- __Pyx_RefNannyFinishContext();
- #if CYTHON_PEP489_MULTI_PHASE_INIT
- return (__pyx_m != NULL) ? 0 : -1;
- #else
- return __pyx_m;
- #endif
- }
- /* #### Code section: pystring_table ### */
- /* #### Code section: cached_builtins ### */
- static int __Pyx_InitCachedBuiltins(__pyx_mstatetype *__pyx_mstate) {
- CYTHON_UNUSED_VAR(__pyx_mstate);
- __pyx_builtin_round = __Pyx_GetBuiltinName(__pyx_mstate->__pyx_n_u_round); if (!__pyx_builtin_round) __PYX_ERR(0, 906, __pyx_L1_error)
- __pyx_builtin_print = __Pyx_GetBuiltinName(__pyx_mstate->__pyx_n_u_print); if (!__pyx_builtin_print) __PYX_ERR(0, 1493, __pyx_L1_error)
- /* Cached unbound methods */
- __pyx_mstate->__pyx_umethod_PyDict_Type_items.type = (PyObject*)&PyDict_Type;
- __pyx_mstate->__pyx_umethod_PyDict_Type_items.method_name = &__pyx_mstate->__pyx_n_u_items;
- __pyx_mstate->__pyx_umethod_PyDict_Type_pop.type = (PyObject*)&PyDict_Type;
- __pyx_mstate->__pyx_umethod_PyDict_Type_pop.method_name = &__pyx_mstate->__pyx_n_u_pop;
- __pyx_mstate->__pyx_umethod_PyDict_Type_values.type = (PyObject*)&PyDict_Type;
- __pyx_mstate->__pyx_umethod_PyDict_Type_values.method_name = &__pyx_mstate->__pyx_n_u_values;
- return 0;
- __pyx_L1_error:;
- return -1;
- }
- /* #### Code section: cached_constants ### */
- static int __Pyx_InitCachedConstants(__pyx_mstatetype *__pyx_mstate) {
- __Pyx_RefNannyDeclarations
- CYTHON_UNUSED_VAR(__pyx_mstate);
- __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
- /* "fontTools/misc/bezierTools.py":639
- * # segment should always start at pt1 and the last segment should end at pt4,
- * # so we set those values directly before returning.
- * split[0] = (pt1, *split[0][1:]) # <<<<<<<<<<<<<<
- * split[-1] = (*split[-1][:-1], pt4)
- * return split
- */
- __pyx_mstate_global->__pyx_slice[0] = PySlice_New(__pyx_mstate_global->__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_slice[0])) __PYX_ERR(0, 639, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_mstate_global->__pyx_slice[0]);
- __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
- /* "fontTools/misc/bezierTools.py":640
- * # so we set those values directly before returning.
- * split[0] = (pt1, *split[0][1:])
- * split[-1] = (*split[-1][:-1], pt4) # <<<<<<<<<<<<<<
- * return split
- *
- */
- __pyx_mstate_global->__pyx_slice[1] = PySlice_New(Py_None, __pyx_mstate_global->__pyx_int_neg_1, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_slice[1])) __PYX_ERR(0, 640, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_mstate_global->__pyx_slice[1]);
- __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[1]);
- /* "fontTools/misc/bezierTools.py":711
- * ts = list(ts)
- * segments = []
- * ts.insert(0, 0.0) # <<<<<<<<<<<<<<
- * ts.append(1.0)
- * ax, ay = a
- */
- __pyx_mstate_global->__pyx_tuple[0] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_int_0, __pyx_mstate_global->__pyx_float_0_0); if (unlikely(!__pyx_mstate_global->__pyx_tuple[0])) __PYX_ERR(0, 711, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[0]);
- __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[0]);
- /* "fontTools/misc/bezierTools.py":1320
- *
- * if not range1:
- * range1 = (0.0, 1.0) # <<<<<<<<<<<<<<
- * if not range2:
- * range2 = (0.0, 1.0)
- */
- __pyx_mstate_global->__pyx_tuple[1] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_float_0_0, __pyx_mstate_global->__pyx_float_1_0); if (unlikely(!__pyx_mstate_global->__pyx_tuple[1])) __PYX_ERR(0, 1320, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[1]);
- __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[1]);
- /* "fontTools/misc/bezierTools.py":56
- *
- *
- * def calcCubicArcLength(pt1, pt2, pt3, pt4, tolerance=0.005): # <<<<<<<<<<<<<<
- * """Calculates the arc length for a cubic Bezier segment.
- *
- */
- __pyx_mstate_global->__pyx_tuple[2] = PyTuple_Pack(1, ((PyObject*)__pyx_mstate_global->__pyx_float_0_005)); if (unlikely(!__pyx_mstate_global->__pyx_tuple[2])) __PYX_ERR(0, 56, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[2]);
- __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[2]);
- /* "fontTools/misc/bezierTools.py":1313
- *
- *
- * def _curve_curve_intersections_t( # <<<<<<<<<<<<<<
- * curve1, curve2, precision=1e-3, range1=None, range2=None
- * ):
- */
- __pyx_mstate_global->__pyx_tuple[3] = PyTuple_Pack(3, ((PyObject*)__pyx_mstate_global->__pyx_float_1eneg_3), Py_None, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_tuple[3])) __PYX_ERR(0, 1313, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[3]);
- __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[3]);
- #if CYTHON_IMMORTAL_CONSTANTS
- {
- PyObject **table = __pyx_mstate->__pyx_tuple;
- for (Py_ssize_t i=0; i<4; ++i) {
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- #if PY_VERSION_HEX < 0x030E0000
- if (_Py_IsOwnedByCurrentThread(table[i]) && Py_REFCNT(table[i]) == 1)
- #else
- if (PyUnstable_Object_IsUniquelyReferenced(table[i]))
- #endif
- {
- Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL);
- }
- #else
- Py_SET_REFCNT(table[i], _Py_IMMORTAL_INITIAL_REFCNT);
- #endif
- }
- }
- #endif
- #if CYTHON_IMMORTAL_CONSTANTS
- {
- PyObject **table = __pyx_mstate->__pyx_slice;
- for (Py_ssize_t i=0; i<2; ++i) {
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- #if PY_VERSION_HEX < 0x030E0000
- if (_Py_IsOwnedByCurrentThread(table[i]) && Py_REFCNT(table[i]) == 1)
- #else
- if (PyUnstable_Object_IsUniquelyReferenced(table[i]))
- #endif
- {
- Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL);
- }
- #else
- Py_SET_REFCNT(table[i], _Py_IMMORTAL_INITIAL_REFCNT);
- #endif
- }
- }
- #endif
- __Pyx_RefNannyFinishContext();
- return 0;
- __pyx_L1_error:;
- __Pyx_RefNannyFinishContext();
- return -1;
- }
- /* #### Code section: init_constants ### */
- static int __Pyx_InitConstants(__pyx_mstatetype *__pyx_mstate) {
- CYTHON_UNUSED_VAR(__pyx_mstate);
- {
- const struct { const unsigned int length: 11; } index[] = {{2},{942},{1182},{542},{600},{52},{742},{779},{749},{1065},{33},{884},{1246},{768},{1293},{1557},{661},{20},{1},{1},{36},{26},{33},{30},{35},{34},{7},{6},{2},{2},{9},{33},{4},{39},{119},{24},{21},{24},{21},{20},{28},{25},{4},{6},{8},{8},{2},{7},{8},{12},{3},{20},{1},{2},{1},{2},{5},{1},{1},{2},{4},{3},{3},{2},{2},{4},{13},{25},{7},{5},{6},{25},{26},{29},{30},{4},{5},{18},{5},{2},{3},{3},{2},{3},{3},{1},{2},{3},{3},{39},{7},{7},{3},{2},{3},{2},{3},{1},{2},{3},{9},{3},{9},{3},{3},{3},{9},{3},{9},{10},{18},{19},{27},{15},{19},{15},{22},{23},{19},{23},{19},{17},{18},{5},{11},{3},{13},{14},{5},{6},{6},{23},{22},{13},{28},{46},{46},{27},{44},{2},{2},{1},{2},{2},{3},{3},{5},{7},{7},{6},{7},{2},{2},{1},{2},{3},{3},{2},{3},{3},{3},{7},{13},{2},{4},{2},{6},{25},{26},{24},{5},{8},{7},{4},{1},{6},{15},{13},{10},{12},{13},{12},{29},{7},{2},{5},{3},{8},{4},{5},{5},{21},{12},{6},{13},{8},{4},{9},{3},{5},{8},{10},{4},{1},{8},{10},{4},{3},{4},{4},{3},{8},{6},{1},{2},{2},{2},{2},{2},{8},{11},{6},{3},{9},{5},{13},{2},{3},{4},{4},{3},{4},{4},{3},{3},{2},{2},{17},{12},{1},{3},{3},{6},{6},{8},{5},{6},{5},{1},{2},{3},{3},{2},{3},{3},{5},{8},{4},{3},{4},{4},{7},{15},{27},{12},{29},{8},{4},{12},{10},{7},{7},{9},{10},{14},{5},{10},{14},{14},{15},{13},{21},{27},{9},{14},{18},{17},{31},{21},{19},{4},{5},{7},{2},{2},{3},{1},{2},{4},{4},{2},{8},{7},{5},{5},{9},{15},{9},{2},{3},{10},{13},{2},{2},{2},{2},{2},{5},{6},{5},{1},{2},{2},{2},{2},{2},{5},{6},{1},{2},{2},{2},{2},{5},{6},{205},{2},{204},{22},{42},{24},{87},{182},{141},{37},{127},{95},{40},{31},{106},{31},{61},{172},{23},{105},{94},{92},{151},{651},{404},{145},{155},{92},{102},{120},{386},{269},{87},{145},{244},{30},{252},{187},{43},{2},{2},{2},{179},{2},{568},{143},{104},{54},{80},{129},{38},{90}};
- #if (CYTHON_COMPRESS_STRINGS) == 2 /* compression: bz2 (6697 bytes) */
- const char* const cstring = "BZh91AY&SYl\266\355\314\000\014\337\377\377\377\377\377\337\177\377\377\377\377\347\377\357\377\377\377\367\300@@@@@X@P@@@@\000@\000`\036\357wy}\267\276\357+\324<\356\327\336\032\273\271\336=\356\357{z\361f\301<\037z\311\\\362\341D\372\373\275\034\373\026o\226\357\273\236\236\236\200\367\261\362:)\356\364s\327N\215\034@M\203{\300( E\013\342\200 \037\tB \204\023\324\236M1\265\006\247\264\001\032jz\236\023\010S\324z\233ML#L\230A\210h\006\215\000\323M\000\006\202I\023\002i\2414\ni4\315I\345\033)\211\3523SF\236\246\200\315!\220\006\200h\000\320\000\014\232\000\r\002S@IE=#\322\206\020\306\232!\223LG\240\023?M)\244`@a\001\210\014\002i\202\006\231\006\023L\t4\222EOD\324\336\223D\364\323SOMM\030\232\033Q\210h\321\223cM\"6I\241\240\000i\241\240\311\221\351\032\000\000\010\244H\323F\232MS\304\365O\324\361'\222\203z\221\243\030\240\3204\315#@z@\000h\320\000d\003@\332\231\r\000$D!4\t\202b\t\204dL\3214\247\236\245\017\0014!\240\323@\003@\000\000\001\223@\000Q'P}Z\227U\331\231\320,Zu6\333\034f\334\304e\240\260f\276\343:v%\205U\023\374\333\257\333t\256E|\256w7w\311\213]^\261\276H7\377d\353\026\236\271\374\275\213m0\224\220J\222\232\n0\224:E\037\"!\245\304\230\240\247&\036\032\323\003u\207\004\201L\301$\224E\"\265\n\223\230\004\320\246\004\3479\314\377\241\354\263033@PP \261`\240\306AH\214\210\301`\n\002\222*\300TE\001`\260\006<\240\010J\210\252*\225B\265=\262\004Y!JR\222$\211X\227q/\374%e\343\022\024\305\006&!]\366HU4\306\010\301\001\245\2446\206\300\030\311\030\202\213\010\260\005\200\240\252\013\025d\016\021LGT\210\001m\"\006\254\314\303z]\311\370d\304\201\231\005\366\271\332\001\345C\236\000\374!y\352k\215\007r.\364\262\361\350\026l+Lt\346\222\347I\020C\314\204\005\316\263\236y\226\001|\252\211\370M\203\310\362qs\327\353\317|\013\330\345\301\237\014\217\"\213Fx\306r,8\003!GdPQf\326\340W\t\034\205\366\003\342\373\257AM\216l\245Q\321\003Cm\355\006\2771}\325\315\332\013\264\355@\306\220v\372\375t\027\247\317zW\336\001Pc\001\244\337\247\017HJ\273\301\203h\210\301w\207L4\304\355""\245\262\250\244Pp:\233O\026rtl\026c\001\246\226\177\005\365ld\265\220\330C\024\031\256\252W\332\301f\233\023HrH{\307%\026ET\245\031@\363\206H\232\211\257\223\252\244&\t\203(\262\240\273\221/}P\244a\202\243\035\264E\223M8\264\"\227RU\235J\257sh$[;\335\221\235A#$\202\251\031\010\262FH}\225\222\n\225=\004\325*\211\n\265Y\235\352\032\006\354\262\003<\267\022W\025\322\270]\\\214+T\252k\211\000E@\245\026\241\246x\342\225\212\225\014\252@\203\003\301\364\244\310]P\242\223\232\216UR<A>1\221\300}\235s\274\222I\002\230\225\311\002\210\367G3B\036\207Q\316\211\365\020\212A\n\260B;\220\262 \0206\222\230\016\257\347(\213\277\211\322\"\312/=v\350\252\364`\016D\004\003\202\"#\030\000\376\335\361W\267\317\213n\022l\025\001U!\014ci\374\220\001\360\271`\376\347\211\0317\237\021\355\310fg\014\227\202\326\006\330\263[R>\375vC\020\005\013S\320\272\353!B^\003\035f \375\002\241\2543\2535\342r\337\230\265\001\321@\302\230\271\262\203\222C~\010\242\276\370BJ\231\331\016\235\210\032\032\021\206\315\336\207\356\3518\264-1\201\240\332\363\200\373L\221\262\331\rz\005T\356\270/\336\266\027\000\305\213\204u\246\235p\312\214\317&\302\240Xn\006\206\354c\244\205\016\037|\305f\022\013\2637\036'\341!\242\333`\252\235\305\273\027\203\263`\300\030%aM\350\272\030\271\246\026\256;\016\261\203\215vz\236\242#K\225\316>\007\206\201\021\004\006L&L\215\311\223\226@1\202\204}i0\034\304G\315pb@\276\254-i\006\204j\2707\0030\0237\262\250\177w\026b\014\207\005Cx\361R\005q\026\030\"b\321^\304\342\340T3\014\205@\222\001\203\"\002\0245\245H\3032+\233R4\\\265O\235F\251\2646[+j\207v\370\312/\217\266Z\333\332\345\021\311F\023i\016gx5\204\356m\315\272g\013\252\"\244yF\312f\307\205\226\020\357\364;\236\026\301\221\021{\313\252\244TE\013\026\303\334\010\367\306\"\026)b\202\001D^\224\357\224\241EOP\367\341\351\330\013\026W22X\227\357\262\347\266h\314\365\r\267\347\231\232\276\314\371\026@\276\263\270\376^\233\225.\310d2\036\276<\377\007\320u\005!m\006\210\230\371K\224\006\023H\335\032\206\260\331\024\346\246\344\222\3541I""\315\024\201\023\nX\262\213\330\321\201\r\"\310\002\301a\005\204\322\022\211 \254\030\304\202\300PP\240\326E\017\013\271\244&2\010VB\034s\262\367|n\214\265\234<\374|\275\351\264*\236.\344\222\370A\335YqgNL\003*^\003\343K\007\035\001\352E@`\222N\222d\223\010pBL\006\202c\031B%\341\267$\210/v\272\033@\332\002\262\002\222\025\r\314.P\352}*Bj\013\246U\010\240\310a\316\007\010,?\317$J\362\"\325|)N\224v\267\372>\247g\262{>\316\265\345\322L\331\234\267\362L\322\361x\263x_\036w:\250f\205Lp\200\230\003,D\0242\276\232\001&\204\023\021\rs\367liXEEUE$\010\004\005Y\326\365\220s\262\344[\t\235\005\324m\263D\314\351\225\032\336n03v\261*B\2501\202\210\263q\036\201\224X\203m1\225\273&\031+f\223c\177\2357A\336\0336\366YZ\0023\351\237\005\t\207\240\3403(f\032E\342\300X\006\337\263\312\261}\304\022H\331-\214O\357\363\372\217:\361\347\362\375\030\233\023le\344r\266\327\324\351\032\244\260hou\275\2647\016\321`\203\330\031i\340\232\016s\337\275\343\321\347\332\232L-9\3557^r\232\035\271\366M\317<\260\222\332\215\263F\250B\004\030>!\004\250\201\332qL\224\032\202\344\333e\202{N\326\330l\311\032q^\323\367\272o\260\364\363L\314\037=E\251l\363\004A_\335\3768\356\257\270u\3719N \330\337\227i\255\267\300\302wjD\334ZT\030\250s^r\006\225\223H\245Z(\250\266P\215\021j\033\2317\032/xSyL\tL\224\320\233\230\006H\320(^v\363A\200\260\027O\"T\301\217\277D\312\005C\221\301\232\024\272\3032\230\342\"\333%\020\250\002\220-\220\2536\222\220\246(\r\206\033\204\3406\300\251\220u.\250\260\205BRw\020\224M\362\2070\2570\031q\220f$\324\2559\334\3530\263\3102]\361>l\221RZX\227\t\002fb\363\007'Z\221|a\014^\363\030\302e\3078~es\211\213\261\221#\003+\003\007\237\364\377\307s\323\337\33018plNv\211\324\351J2\r\202.\\\306\330\347\304\220\304\237\004\220y\303\004\022\001\206@2\316\354\342\231\267Q\374\272\307S\032\205!ye3wC\345\tTg\0243$\362D\233\022\004`\214g$\323\320\211\n\266d\315\t\035\017\220\306&7<\033\303\310l\363\376\211\341\207c\234xJ\236\033\036\016\275_;?\257\327\313+cIS\267\031JR\212-t\310\274\345U\021\220\030""\013\210b\016\316\004\3428x\211\221\307\0334\301\201\206\"\207Q&Lj\241\320\237\007\222E\002vS\ru\014\350\310\217\263\316\346\034\304l\352S\241\316\243V\223V\234\272Y\202G)\n\260BFF\265L\302\024\2461\026vl\320\232\352\004d@\236p)\3330 K,N\334\013O\267\006\300\311\222f!@\007\247\254\206\224\206p\354\350^\246n\201J\302\017\305\361-]\265M\332\362\360H^\265{\216\226\273`\360\245Sj\256\243\243\215\371\323\024\261bw\221\363g\315\216\316d1\3059\316t\240\025\001\022\232\010TD\227\341\360\325\n\311^\303kl\355\2059\372\273\034\332.)\245;\021sB\241\034\332\263\211\245aI\245r\001\310\264{\204/\333\204\267aI\342H\236z\274\276\351\315\314\031ey]\244e\014\037\221\2269\352\320(\371\341^\\\345\245Z\225'K2\244\327\276\030eD\t@IBT\225\tiQ\r\372\272\271T\364\362\365\320:jy\013\350t\026\260uZ\353\257'\243\003\n\343\325\324S\014\320\303-ns8^s\3415$W\\d\306rD\225yy\202\317'\036<x\243\212G\020\342\035\351\316\356\271~\217\017\010\274\305\323e\254\304\304b\3439\211\231J\270ss\023]\333\n\006\000\322\312\262\210\312\t[,g4\2477y\261\356\003\203H\304\274\201-\370\025+\t \2446\301\217&R\323%\320\265\211U\213H\244\006\300g\306Hu\3512\2622$S\001\316\234\353\206\022#B\317S\037\274\336\006\361o\336|\356\007W\265\344p\335\313y\313y\r\374X\334q(?\223\250E\271\0238\224\254\251X\006\030\034\253\t\365\241\027\3111\0260\246\025\253+ai\363\\\316k\231\315~.k\236\273y.\313n\020fq\236\374\r[\226\330\014l\034\225\010\306s\217\026a\344\214'\034h[\002\353K7$6\235\035r\201\014\253Q\014\251\224\225r\307\034\n\301\3630\234\030\203qG\036\007\r\341m\014\350\327\321\343e\224X4\314\300c\221=\036mlj\362&6\334a2\020\265\025 \2462\251\021\2529\316b\024}\211\031?p\265Z^%h;9\372\273\326\244b?SL\315F\304\322s(?\rd\234\324-9J\231-22\263\006l\205s\227\367~\220\227\243\300\022\312\256oN?*r2\324\034\rX\225\367\336>\237\032\331\r\215\025\333\305u\371}W\007W\227g{J\372`\203\276\007r1Qs\222(\030\026\005\003\2659p\240\026\365K\325\341*6i\006\266k\020\2741\022\204\243\342\210C\016\363\337\364\346B\324#0\252/p\367\025\256\263\313\216""\322\034\035\357R\351\304\325\004\307\360\247h\032\266@\246_i\231n>\230\030\260\211\202\301\"\010\010\211M\025\242\354dd\373\371\247\245\2719;0\036\343\016\370c\005'\010\253d`\243C\206N\0318@\341\207\014\3419G\201\236\251\013\366}\017\204\335>St\360]\370j\203P\321h\032\032z\262\242\344%@\242[P\350\212\\e\305\211\315O\"\231tVF.=\240<)B\220\365\275\177Y\353\207\2004Z\262a\231\216\266*\377<\347\200\205\276IHMQvu\251\353\344uF\030\334\377\2019s\376\035W}\317J:\365#\223\222\017\267\212=\271\217g\263\315\364\323\360\263\030\245\210\214\255\270C\023\216SK5\2001wv\007*UG\232\236erB\272\034\014j\305K\2124M\244z\271\240\206&\245\0341Vf \207\243^\307(3\344Z\"&\306\316\224\340\0031\000\317A.+\201\2707nE\355\222H\263\205\341+ \260X\025Q\277\035\371\357\013\010\3110\272\215w;\273t\234\216\357t\321\006\200h\221\2747\233\240y\227\336<D\302d\3050\231\261\343wW\361\245(\346`r\221\367uL\317\031A\220nL\335\355\300\336s\370\325&\362\2263\246\363\205D\340eT\337\216\223\202\022Z2u\024t\375\361U\324\354A\360\037F\357o\267\327\205\237\256\037\221\325\341]S\211\222\236\212z\352V\267\304\016\252=\332\224\240\262\347\204Z\205Q\016a\373\277#\246\254\355\306\233\274\374\376\030\330\307Nr\276\026Yr\262\013\213\314\271Y\245\207_\314\003F\022(\025\010\nar\201\3208\003\353\213\342P@\360^\337\334\225\355\214\233\031pp\363\0270\032\370qF+S\326C\232_\276U\374 \231\245\242\027-mS\t\212\346b\375\226E\332\027\353[\317\232\006\202\266\250\302`\026\363~z\2415~\201\342\300.\340s\177\235c\3542:y6\370#\276p\212\301\261\207\241`\300\022\305SS\2216\213\265r\350\326\202\004a\000E\340\346\200#4\360\300)\273\357eG\000iP!I\031\244\235\205.\332V^z\n\010:\272] \013\303\367\210\210\024X\225q2\202\023;\031\020$\210\226M+\"S\331\213\232|\037G\261\343\354+\255\355\270\370\311 \302\336\301\374\372z\240\nh;\201\323\020\354]\375\030j\032\026\303\250\222\342\002\346#z\016\002\340\270/\214\343\225#3\346C\022\206v\007!\237\233\322\365SUi\307n\010H\355cHyD&\224\010&\002\273\272\275y\375\272U\244\231AY\2318sr\255\231\234\306\263d""\202\310HMHg\345\331h\324>J\354mBB\302\n\235V\256\005\202FC\014\355\006F\222\025\341\343v\033\026{Y\010\367\236\341\201\004L\204o\212N\331\331\021\223 \215\262l\341\330\220\035\211v\001\330\227`v\021\350\210\274\2614\007#\n\010\266\260h\346\350i\304ETj/,\346I\247\007\034U\326\031\272H\004\2073'\035WA\212\004TA_#y\264\360\340\034\022\340\267\371\321\347V\363sf\003x\314\343\001\373\335\340\266\021\270d\234\226\t\033%\t\260\251X\003\263\002\207i\023K\227\0016\314\220#Sg\005\025\030\340O=!6\306\233U\205\361\375\256\024\266\n\342e\336\312(\202`PG\243<\207\344tA5\364\366\363T,\316\273[\262\3250\306-\251JQ\231Q&\003\rRC\033lm\214\222)\265B(\333\036\207\246M\330Z\245d^ti\010\302\250\217F\220\315,\017\367\010\206\014i\241\"\315h\n\007\327\227\237H\262=\261y~\214\207\322\366\337\360\005\331r\353\362\251\004\260\006\222b\006\233\227\316,\320\324J\320\031\0255\307B\344*\231\225\037b2\032\264\354\025\2540bM\210\266\260\016\364\322\013\314\360\000g\330':,\013c\r\014X\302Et\215\244%\247\026\3409\214\t\242!U\261$\300\376J)\352$\250\317\026F\222\226\034D\267\205Z\205\\\032\307z.d\273\035@K\246\311\244t\272C\273x\232e\323vU\312\300\204\r6\330\274\023S\370\007T\235\234\252dj\342\252\200t\357>\031D.\230\010_7\2777\036\316d\205\210c\327\"\361/i\351\250\260UE\302\000\221\364\t9I*}\200\343\303\202\315\322v\203\030\332\006!;\342\360\302\022B\357Hi97\2303\276\344Oxx{\203n\204T\0220`\252\202\304\021\210\212\214D\030\250\242\212\253\023\301'6f}\036\367\222+J\377\221#J\361\033\261\210\237\270^\317\202\017@,@\237\214\037G\221v \037\320\214\r\215\002bb\030\232W\264\207\036\260\366q\3460\013\00786\245h\314\226^\276\344\032\332CH\031\265\013\336y\030\020\0145#\001\332\310\016r\001A\222A\246\227Xq]T\261\003\232\302\313w@_#\210\034D\302\305\210\027\3324\234w\357\314\207\313\321x]\225\205\024\007WJ\016\320\321G\314c\257\226\360\347\016d\263@7\376\006\036\325\205\020\004,\341\274\3474\260\033J\224\303=NdY\243,\010X-\205\016\224\223B\347d\370\314\346~:4\354>G\245\014\360c1+\211\n\346il\235\275-\210""\344d5\246\211 \030\232\252a\340H**\006\375\377\303$=\031A9\346\300\240\r\033\304\007\026\000A]\267\363x\007\2621\326\257\022\2619\310Zh\240\204\327L \317\214\"\002B\264\344\251\331\3351\003\266\334hq\203\232k\355\273\215\211y\014\230p\2155\320\301(!\031!\241!\016\036_o\201\2417\310\310M\362\025V@R\357SI\337Z\270\003P\260\215\311\324\316!\232\204\320\200\235\205\006F\003 `5hL\311'\220\240 0@F\n\272\226\2245%,\020\022\002#\025\036\343\226\210*Kj\370\\\200/.N\347\3039\363bHwG\225\340t!8\201Y#m\275Icx\275<\211u|m\003\324\031\201\200\301\243K3\264^\225\0175h\002)\2000=\320\177P]\351ZR%\246\363\237!C?&\031S\014\\v`\200\340\272\230-6\360\007EVg\006.qFZ\371\276>\201\342\2341\300<\324\232j\354\324\016I\036S\031\271\202\317\267\351\347\346\246\201\205H\371\373\204pI\202\032\354%\264\006\304rf\316L\034\270-\341\355\013\360\247K\204\033f\031\027\006wT:\260\233\002e\217\004{P[u~\330\250\2747\322\202\241H\r\372\276\270k\337\366sd\247\"2;\364o^\357\213\371>o\231\312E\002\005D\276\224|\365*\3304V\"\030V\013\013M\206\345\304[\036\253Z\363\275\361\320\003\267 3\241\n\021J\017\247\345\251&\216\233\312tt\353\n\205ru\240F\325\226\207X\330\204\362\347@ew\322\010\225,WZ\331d3/I\343\230(Xi1;\357\022\232\006\"\201\"\220\206\326)*%lx\332\306K\301JZ-\006\r T+Z\032h;\023\355\200\255\270 \033\246%\036\002\2060\3069\000\340\231^x\374C\024\273\303\234\344\322\220HD \201@kJ\200\340\250\230\025L u\252\030H\201\204\243\353H\267\262D\237\251\036\213\253\325\333Jv\365\323\021.\261,\206)b\226p\250P\210\303,\222'\317\323|\205\216\313\3423R\373\335DxQ\303\245*\275 U\322\355\254\\\014\220a\361\234u\364C\222\332\227\266{\256a\337\241mL\024V&\020o\020\344\350\326\257\305\036,\007\336\276.\256\026]\347q1\007\001\017\206\274\2478\341\270\301\326\204\005\301\316F\016p\350\315\212\321L+\321\263\344\264\260l\231\266\000\346i\005#\213\301Q7\016\373\353\315S\270A\334%\334.\344w\007j\347F\215\341\244\314\232r#\235\242\201\260\031\262T\002cbj\244lL*S\240\233\321k\232>zQ4Wq\013\225z\263 \354\362x\004\362\262\255""\007\256\201\010\r8\013\014\242P\206\003hS\302RG\202\023\006*\252Z\232\235\316\253\241\314\352\260r)\0057\205\376\352{\262\021RZA\"\335v@\331Y\025F\220-\301 \263b\342\356\360lH\310\326\014`\205>J\310\300F.\000\300\310mU\306\364\320\\\301\264(\030%l\263u\003\313\276\230\254XQ6\357E\373n\263r\204\002\200\311Q0\200\2602\333\321\034\236\331\350\325\3037\300\302N\334\3319\345\242\267\"\3026d\201\322H\034*GIt\241\320.\2014\007\033G\245\310H\025\210`\313\034C\200\020\010A\021\005\367e\030\215\304\014U[V\337\205\\\275\\\262\252\220n~~q%\001\205\362\001\002\005\2311+2\377\206\346\014\312\367nF\340\334\033\205\270\366\232>\037G\037G\243R:|\236\316\215m\t\014\006\201\264\213\322\264\355F\275z\326\277V\301\352\301p\r\321\355^\241VEF\352/[\2278\254Lq\357Y\306\014\3678G?\030\343\307~\203\330u\365\337\316}\002Y'\035q\326\374\257=\365\004\322\231\363\304p\242\350\335\320v\362\234\336E\2450\325\034\231;.Yx\374\353\3149mJ\214b\356,q\312\3340|\334\347\230d\347\t\035!\307\303E\265\331\035\264C\277\363\206\217\361\346\245G\301\332N\257W\255*Y\304\271ob\013P\275\321\274\363\312\030\n \300X!\003\357\376&A\210\261N\222T\205aS\224 W\342\014\261\345Bv\262\004\261\023\207\327\310R\204\366\372$\277\307\327\222\305GI\243\230\\K\006\025+\252X\232\205\225=\255\217d\020?e\242\010\300\362\3540Ly\300\223f\025\247\257\345\373\226\372\332)p\315g\300\260\203\021\230\260\321\242`v\251\210G\277\373;Q\233\202\206\323y\223\",D\351\035\021}\224\355\t\311\321\321\325_HCdLK\260\315\006\354\224\035]\260\034=\203v\227f\032N#{\341\005\257\221\346{9\r\226\313Aa\252\027k,d\304\"x\226%\016T\020\002\376\252\010\007\233\034)vo\345~\022;\270ND\177\240z\246\242\324}]\027%:Y\203\262\352\224O\017Gl\233\350\177,78\355\325\351>W\343O\037\322\361v5\344 \256\333`;\250`T\337\201E\nQ\355[\030n\325\024\306\360A\202*\221\021\3619\036\256\2751\370\347\006\331\232S\344X\210\231\177\\O6\354;M\333\267R\354X\271\361\275o\365\344\366\241\343\357'\222\207\313\r\203}20\351\3503\ne\2718<\242\351\220\3632\212\032\025\2233\321\301u^+t>#""\213\367\236^\370_N\334\2244K\210\345a\345\np\340\321T\205C\241\3071\341C\327\335m\337\310\341\206\200\344\004\0335A\276F\223{\314\\\014#\227C\301\337\021\273\275\027\"97\323\020\316(\204\327r\241\302<\302(\226d\2416J\241\314\032\330t\304z\233\26699 \375\220\320\241\334t\210\345\202a\023.\232Sxd\301\014\343\016\n\213=\000\364w\206\356\361\267o7\262\240\345p^\315\022L\306H\302\023bS\352\234\234\236\2653\356\336\233\242E\202\272\014\266\177\237B\356w\010m\324,\336'V\235?O\347z\335i\3258\216\313P\373[\212\030\203\306T\353\205\2315\037\357\340u\375N\244z\374g\024+\256>\273*\360\026h0\330a\257?[\304f\326)\270p\353t\372\217[2\034O\031\356\021:\365\362j\237\002\244w\304t\177\377\376\035\217\027\331\360\374o\032\236P\361\343\300\374\317\356\364\031\216Z\2146\326\331h\233\316.?\350\237U\017\366\207\375\354^\307`\316\347\262lr&\273#\225\366\251Y\360~\207d=\0272S\263Q.^\310\206\276\355\343\354\177/?\3204\214=KV\\\364!\227\321\030\211\211\277\213\214\343\274~7\235\347M\220v\271\272\263-\037l<\376\267L\361\347W\252qkI\220\320j\234L0x\373\216\242y\223\315\0310\366\204\350\245\017\367\340\252&\335\033\217\004\337\313\320\0274p^\n\267v\227\034\201PJ8t\0317\326\271\215q\212\356\363\323&Q\360\261\332Q\223\264\333\326?\234\001\227\023d\236\347\014\203\3312(*\017p\361\3300\371\023\200\357\3424\227'\201C\272\344\216bv\314^\261\274\354\216TU\036\212\212\236\000\301\214\366l\246.\3434\n*\246L\252\252\212\350]\213\312b\367r\343\034/n\023x\267\220\242J\336@\352\034\375\275\377~r\300\217\210\336\341)\331\017\314\357\267\373\233\371\003y\231 EF7\262\344\306\273\217\030\306\370\030\201\356\200\313\223\251|\237\177\250n\375\354\301\214\352\251\000\252]\276a0\273\n0\270wE\031U/w\327\006&V\302\247\207\033\n\220\0306;\367\261\376M\3108b\021W\246\306<\212\347;\241D\337/_\025\373\256\302\257\344\277J\370\233\2528R\261\376\267x\035|\323\351\206\0073\225y\367\305]\004\347w/^G\251x\267\350q\363\312+y.\333\267n\343\230\270\254\367y\316_^\332\266\340\345rV\257\236\326m\026\236\370\034\356\023\252\276""\225\255\240\360[\266\177\026x\226\337Kr\345\262\001Wkk\207\275qU\316}\233In\255ql\214\245\253#\337Z\266U\377\252\225r\265\213\025S\303^\266uB\220\250\246l\233>;\362H7e$/I\321\327\3175\222Mb\355\335s\203[_\\\354kj\026\213r&\251\347\263@\325\241\245\251\352\034\304\323\371vj\223Gu\2217\317\022*\321\230v\016AS\305\224\346wt\017L\212NN#\004Z|\\t(\311\253\320\227\307Ma,\003\364p\2256+\226\327\244-'\333\275\320QN^C\264c\262\233\302i\310\204\\:I\231\246\234M.\321Y)N\006\004S9\216\321\216'{L\202\305\rBT\256\262b!\016g\014i\245\2574E,(\215<\2172\232\356\320\236^\310\203\007\251\232\230\234\353\350\300\220{\274\321j]B5\334jI3cD\350\223\365pN\245\tp4\022K\355\253\235U\216\367\211\331\256\266h\"\322\314\225g\327\202\226\235;\313^\311\365\253e\005F\031\0253A\201owS\212\235\344\314FJr\3038\242K@\352\240\034\247P<\353\211j\313\3321=\333\352L\307\245\232\231-l#\t|\rB\204\313l\211\333\"/\206\207\227c\362\"\370\\\023\377\027rE8P\220l\266\355\314";
- PyObject *data = __Pyx_DecompressString(cstring, 6697, 2);
- if (unlikely(!data)) __PYX_ERR(0, 1, __pyx_L1_error)
- const char* const bytes = __Pyx_PyBytes_AsString(data);
- #if !CYTHON_ASSUME_SAFE_MACROS
- if (likely(bytes)); else { Py_DECREF(data); __PYX_ERR(0, 1, __pyx_L1_error) }
- #endif
- #elif (CYTHON_COMPRESS_STRINGS) != 0 /* compression: zlib (6885 bytes) */
- const char* const cstring = "x\332\355[KW\033I\22666\270\260\r\266\301\330\3453]\335'1\270\014nP)\362\241\007]\345i\036v\227\317qU\233WU\365q\327\210\224\224\200\272\204Rd\246@\352\3233\343\245\226Zj\251\245\226:3\033-uf\305RK\226\374\204\372\t\363\335\210L\275%\300\217\251\3563\215!32\0367n\334\270\367\273\367F\246\027\244\345t\3322\263\211\003\3351l\311\3317$\335\212II#\265\347\354K\273\246%\351R,\023M\304\244\025\343\257\t\303\222lc\357\300H9\276\2337%\374l\333\030\364\007=c\333\213\257\314\250\3568\246t\230\321\343\226\356d,C:N\200F\352+MJ\233\211\224\003\352\246\2447gk\231\310\307\211m\032\206\264\264\233I\305\226vbz2\266J\323.[\261W\274\313\216\313\214\2354\217\301F4\343H\007&\346\320c\261\214E\324,\303\316$=\276\226\255={\211\227\350'\355\260\205\264#\343O\301\237\272$\255\232)\3072\223\036_\346._\270\273B\335\226\3445\311\311\244\223\206\355\222\3330\260\236T\013\305\345\246\214\216\364d\306p\373=\317\352\007\030\266\264t\263\321\363\331\263g\255\213n_\324\334\234\177A\362\317/Hs\262\266 1?/\006\233E\334\250}\276A\215\205\375>\277\252(r8\020\n+r\210\005/;\221\346\0258m\255Y\244)[&\322T_(\244\311\376\240\032V\265\260_y\277yDI\324\315K3R2\2212~'\031Y=\346\270\033'\331\373f&\031\227\242\006\346\366\373\232\214\250a_\270\365\207}\000N\026\233\234\3042v\372\202\234(\001_X\016\004\003\001\231i\001% \277\037#\213Z/V\3327\300\037RC*\013hJ\320\257\211\235^\205ad\222\375m\325\265\276~\366\332e\027K\322\246\243[\216\260\204\376\206\340k\031#/I_\353\251x\322\270\314 eIz\236\212\237?\342C\230\033\201\307\272'\207\036\373\320v'\301\033\007i'\347I\252A\n\226v)\262\215\355\r5w\324L\222\246\353\226\2134\rz\241\313\022o\330*\n\241\336\304\245#\303\302`=\371\356\263\320\022\344\246\212\252\347\254\202\371\203\276\240\237\300\210\251r \354\367\207.\273\246\2768\007\355\367\313\341`\200iZ@\325\344\200\362n\322\352&,\373}0\337\020\223U%\034R\375\301\300\245\005\264\310\032\273\254\265\221\366\313>M\221\203J\210\005TU\013\311\332\245H\253\rpR\373\352\317\002jZ<\227df\034;\0217\032\363\004\002\276@\353O\360""\3358\0300\177\3224\323\211\324\236\024\325c?5\210\253\236\236u\240S\324\314\244\342\324\3332b\216\236\332\003d|\024\224\322\337\r\247\364w@*\375|\254\302\0323\326b\3021\016DG\254>\r\317\202\345\221(\372\310egg.\373M\"\265 \345\3705\373\215\236\245\262\236\235\337\331\271\004\332\255\020e\273]_\373\331\030\357\304\233I\221}\376\371\213\223m\361\351\335\241\303\034h-H\374\322h\375\250\332\361\241c\273_`\003y\310\320)\345\013\306\204\255\373\030\324z\355cO\352\027\014\004\373\356\2467A\332\202\234\347\036=\336\225\274\337G\322\343\356i\265>\250\357\226\335(\250IZ\321|\032\"-U\241\271\371\217\024P}\010}\203Z\220/\223\377\010\275\242p-\365\304\221\216M\353'\302D\351x?\021\333\227\300\227a\331\330\241\204\231\222(\257\340\005$!\031\333x\221\000Wm=l\004|\316\261a\244x\306c\035!\270\002\014\350<T\355\251y\274\323\222\364*as\234\210\231\246\005\235\340\352\355*\235 \343jo\207\356yT\210\374@\"\324\241\017\215~\372\233t\251\355\354\274lY\340\316\216dF\377\2022`\334\320!\037\361$\355\353G\244\312;;iggg\001w\207\355\3544\250\221\020P%c4\322;+\201\304\013\274\221\033\322\023)\317\036\332$\315\roAr\022\007\206D\202OXv3\250j,\004d\275\036\030h\342\321k\202\251\245\211\324\221\221\314\265[\216\275\264\324\256\333\\\276_Io\\]\222U\256K\n\212\001aA\214j\025\241m\001\224Q\224~l\243\301\305+h\220\275\311\356@EDB\035\235\333\365\345+\301\300+Ph\225\263=\307\253\0278\351v[A\014;\327F\243E\337\373O\364\306\377\243/\335\024\341\\H\365!\326\362\207\025D/\376\240\254\300\210Ba_(\250\370\003,\210h)\034\222C\202\360\305\265\234\227\373\2539\033\250\242|\213/\244\355\274\217<\220\230\253\r\203\250\375S\357iK<\305_p!4\354_P\2748\216\tK\220e\377\202\334\255\306b\027\304xm\201\271\330\217\200V\366\"[Yk\330\017\013_\314\014V\351\322\303\016\330\202;\337G1\005\346\013\206\024\246B\371\303\232\346\017\220?\201)\204\302~U\323d\370\n9t\001Sp\216\3156\230\265{\032\202\215\225\220!\254\3663\000N\242\267\336\3332\306\312=\307\272Z\320c\360\377G5o?S\201n\221\\\272\021\026 \017\325TBa\256\357\032 P\226e""\256\261\2410\312\032\343\365j\020\210\037\010\316wk\236\336\222\266\365\3256\314\256C\341\372\266\267i\242\022Dt\242\206BrX\223U\000p\230\346f\212/\250 \025T\202~\026\014*Lk\347\244\315\000|\010d\333\311;r[\030\246B\277\303\214!#Fn\251\252\001\215\3022M\365\207\230\246\004\0030\000UV.\250\354\203\365\334\330\273\010\334\017\006z\264^\010\346\377\t\360\377\010\000\357\256`S\334\376~A\276m\375\312/\031\031\236+1\345\227\216\017y\377W\211\350\027\273P\371-\323L\332_\034$\354\330\027Q\236)\363\n_:\267i&)Ft\337\001\031H\31594\211\321\274\321\226\236\352O\263\364O\372\255\024u\3571~\215C\020\376\247\310\306\014zQ\263 E\241%\334@\020qZ\224V\353\311\236\010\244/\301\016\215\335\335D,a\210C\230\247\331\377\371\357\247\215\366h\257\366\377j\266\307z\2647[\343\324\232\262\221\267;\022\244xp.\332X\246\t\250\224\2765\035\003\240\240;\034\031,\336\337\210\213^\t[J\031\t\324[\322^F\267@\332@\223c6Y\006\342\231\226\203\312\224iQ\016\352\002\215\224I%\0163\2068\326\266\247\007\373C\233\344\315\263\3529\030\034~\027\003\22457\372\274YT(O_\344\331\272\354\353p]-\243\027\031\357\262\030\246\253\032\342e9\354k#%\373\340I\031\317\373\007Q\"\305\322\032\244\202\276\000\331\312\242\034\362\005\265\016j\214)a\371\002$y\207E\325\007:\001\037\247\255\370\2246j\214\332\274\313\200E\312|\252Ps\251\350\356\367\313J@cLVZ\010\372}\302\231\362K_\202\215z\237\317\307\357\341\306\321\210\020'\255>\014?\254)L\326\214E\277\3266b^\372\n`\"6\247ym\316\266ee\304I\356f:\231p:\337\273\272\311\032\325\357\301\203\244Z|\352\007?\027\363hp\303]\222^\233v\202;@\335;Y\201\376\332\234\311\306)GsP\302\376\332\264\022\177%\365N.Ik\t\313\365\236\356\204\226\236\023c\033\207ib\274\364\022\355\220\300B\203\020\375\354\354p\036\340\243\023n<\223\206\341\301\212\370Q\354\237Z\204\360;)\261+\355\352I\033\2117\250\246.N&%\375\320-\314\001p@\001T[vjKs<\354hOY\243\006-\220\216\022\233\242m\252\\\242\365\204\350\030l\330\231X\314\260\355\335L2\351\nhA\342\247\241|\332\216\260\004\002\336\003\267\311\366\274z\3601#?\247s""\375\221=\307g\020j}\261\363\306\005\211\277\276}A\022n=\036\274\354i\345\007ae0'\260{\315;\321T\230\217h\001>\334CF\224Z\307\270Uh\014\2048\330\210\207P\260I\342\343,\201\232\311\342{\313\322\007\034\t\002\177\303>\026\324X\220\007}\276`8\344WA\t\274\371C\234\315\240O\r\252L%jmtZ\353]!\204B\360\025aF\357\207\202\336r\031ui\251\013Cp\262\026\356\"\327ZO\3354\237\354\227\333\030\t\323\213\300\200\334\306\2608\336\365\005\203\001%`,2\217\344`t3S\244\335\342\323\016\341\023\271\311}4\210{\352\330M\200\263\007#\334y\300\360\256\240pN\026\334O\325\226\235\255\013k\033\334\332\337\235\251\\\222\177\272\004?\344*\2640\205\025\035k\3427\316E\320\247\250J\010d\003\276N\353jo\"\031h\2760\247\245*\356\360\260\302\311\211\3466\261x\372/\016|.\343\317\273\336\202v\236\031u\274\375l{\215\331\277\357\305\274\274x\r\362\316N\236\017\377\307\362\361m'\202\2565\267\275\214\021\306L]\373;x>\340\375\375{\313K\250\213\273w:6\353xg+\354\212l\240\257\357\321:\277k\230\363\252z\277 \274\354\344\274\330w\366\0170\301 \362\235\257N?\360\274\375c\222\0176q\363\325\373\300X\250\331M\353\232Z\353\303\324y\013vA\271e\336^rn\366\322\272V\254uN\353\201a\327+\377\367Hw\376\231\352\3742\251\216\263o\031\306\337m\256\323\370\226e\320\3071\347&9\203\276\247y\277\211\317O\256\264\363\3419x\351H\354\202\334\321\374\347%\\\"\326\241\236J\260#\334lTR\240\305;\007\265\217\304e_\350G\320&\313\n\035\206\252\276\200\252\212\024E\024\273\022\236\326\372f\030)\002=E\343\257\233\332\007\264\326\213D*\020\014\006\333\347\362\213#\"\346\327T\245%\037\362\226=#\375\360\303\017\322\313'\007R\312t8\362%\223\260\024\344A\256\375\354\232\311\244y\314?\2763\350\325\006,\006&\0367\354\204\245Ga\003\037P\021\373'\246\027\323\303\256\322\245\324\365|\247\360\216Y\342?N\206\330\211\245\227O\021\233\037z\266\246Y\2756\274_n\370\3611\347\"\254\rH\373.\310`\240%;\014\366B\247`\013:\211l\266G\332\266\235\372)e\036\247\334\335\212\033{\330 \337\277\366\375\352_\232\343\221\277\242\310\363\035\237\302\271-*\023-\335\037\344\272""\035\230\306\346{|\204\351\266\312\341\320|\237\317.\274\361JH\233\357\375\201\222\327C\326\264\371x\302&\3640Rt}\274\267\027K\330\242\034\357\371\346\335\033\3124u~\356\261=?\340=\227\327U\225\203B\204\244\016\021w\000}R9\367\206-Hod\010\377G\334\351\217\036\336\000EUz\360\373\030\275\305\220\177\304\217 \360\204^{\314\321\000\332\036\372\243\2079\032\300\343Jw\300<~\236\360\001\255\2635\330\20165\017\365\335\332\220\032\232o;\231p\353\003Li\251w+5M\236oD\306\336vB\277\272\224\333\353\037\nw\264y\r\376\340|\204E\034\376'\343\037/\255\376\361\233\327/_=_[[{\376z\363\345\253?~\3732N\237\236:\271V\351BU\"\221\327\271,\376\326\0221'\362\255\221u6\214\335\365uecC\336\220#\353JD\327\231\316\"\212\316\262:\313\351\262\256\3501\323\326\223\211\275\224\021\217p\305\210\360'\022P\304\261\364\224\275kZ\007\374\375^\004-I\\\350\313V\250\270\221\212\367U\364\276\r\253--\335J>\260qU\267b\373\272\235H\341\222K\305\022\246/fZf\006a\264a\353\216\236\222\365\254\236\305E\321szN\326sJ4\312\242,\033e\271H\324t\366#\002\335#\272eD\260\026[?0\"\364\231|\304\334\215\210h\222\177\277k3q\223\243f6\212\177r4\027\315\311\261\030\2131\372\215@\"{F\214\311\370\365\312\331\030\313\305d\206_\267F\226\361\353\226a\253\302D\273\377\363Zw\315j\244G\335\206\201m\261\215\016\300h<\276\326-,\205t\240Y\305W\332\033Gz\327\256\366\300\224\266\252\366Y\232\325B\246\221XR\267\355\310\236\341\320\367\321\364\210M\211$R\244@1\203\376W@,i\322w\017\311\244\013\003P\272X\203U\030E\333\303*\327C\361\t\201\370\200\240\017\250\365\0062W\215\305>\272\017\342\332\366\202\034v5\240\315\367e\322\304R\355g\276\203D\234\253\316\305z\177\231\324\017\242q\375\231\333\317\025D\257i{55\351\354\031)#\233\266b\331X.\036\367\307Y\234e\343,\0277\222\216\316/\021Y\334\224\270a%\216\224\270\031s\014\333\211g\3439\303`\006\313\032,g\310\206\2345\344\034\014\325H\333\211$\342#q[\203\266;\266\2215\262\330\256\334\256\236\000\2567\336\367\373\350}\277O\267\220\247\362\347\216\206\226\017\001:Z\032`\261K\202\217D\350\333\352H\304]""\307>&L$R6\375g\244\226%GP\333*\201\306\203\335\232EG\022\330F\317\326\351\201D\227L\374\324V\356\022\035x\"\245Kp\235\264\1772r\336\326\210\021)\203\321E\356\351\320\250\322\323F\276ON\304\275\001-\322N$r\200\\\224\256\316\376\201\236\213rr\320\023\374\276v\032\372\02290\343\231\244\201{&\351\240w\212 \207_\343<\200\003\227\216\031\375\213\271\273\313\360'c{\010\207\326\020\025\n<J\247\375i\226\226\323J:\221vy\341w\372\216\013\t<7\275\264\t\3104\340\236\3015\017\252\332\"\253\264\2038\027\277Y\374\345\020\356\342\027E\031E%\355\250\351l:w\330f\311\230!\022AUR\260jYkk\326\272\314\201\214\361\253L\207\031\313\226\241\363\257\037,\323\001R[\334\316lf\263\254\315r\266l\313Y[\316\021N\030$\316\r\332MD\022p\272\364\r\031}\002\346\205\272\342\346\315< hh\365\330\255\345\256=\367(#Z\201\006\332\206\343\n\035\245\270\261\253c\037\354\244\2316\230\314o\212\n\227\237\34134}?/5\000\216{\350\246\257\217\264\205\003m\017\253\355m\253}zb]\346\326\261\331\336\243{\035^ \321\036!D\272\202\211s*\272\010\013\n\021\016\267\004>f\30496\335JWx\021\035\216\337>\264\034\233\336+\330\307\344\352\343v\326\316\341\237\3430\207Ed\374)\216\034\211\020\344\210+T\035\031\017\324a\3372\217\0353i@]bF\003\022\204\237\340\217\364_}P<6\3057.\021\030\246[\0229\333\221\377\210\035\311G\312\221\312\237E%?\275\312f\375Y\226\225\263JV\315\256%vw\263\033\244\204\271\034\313\3119%\247\346\250.\307\353\336\016\375\354\2772r3?\231\227\363\353\247\303\267p\333\310\037\236\016\217\347\267\013\217\n\313\247\303w\362Va\262 \0276\n\250\0359\035\245\347\373\205hq\270\270R\214\226\256\225\202\345G\345\225r\2642\\Y\251\030U\271\272Y\273Z{\\\263N\356\235\254\234D\353\2577\352\033\233g \033\004\265\265\342\325\342|I.m\225'\313\n\206\014\235\366k8\033\276\231\237\315\307\nS\2306\203\211\364\323\316\212\263\341\261\3742x|\\8*\376\271\374/\225@\365~U/2,\347\351\225\221\321\267\177+00?z\267p\275\240\027\234b\2404Yb\247\243\267\362_\026\016\213C\247cS\205\027\305\351\242Z<*m\224\016O\307\356\325\357\315\225\257\226\347*""\323gT\236/OP\371\347\353W\306\247@\347Ui\250t\257\264\\\332.\317\224\327\313FE\251\350\225Lu\2556R[?\275q\277\260^\320\273&\272S\277\363\270\264^\332/\203\317\007\365\007re\272\022\2522Z.\032\247\n\313\205\315\342\235\322ay\264r\025-Z\365\032\344\266^\215\327fj\033\265\303\223\241\323\321\261\374\213\3024\3262ze\344F\376V\001\203\306\363\353\371$xf\365+\277-\263\237?\27322V\277\365\033\010\206o\310\203\30216\343zi\257\274Q>\252|_]\251\356\326\226\337B\276w\353w\371j\352\362Jm\272\006\016~\305e\364\371\300-\027\233\362\2748\t\tYX\220\302\351Z\225\311\212Z\261 \347h\355ZM\256m\237<:Y=\261\352\353\233\365\315\355\372\366w ;5\220l\213\362\\+\262\"\266\347f\376Q~5\177\214\212\253\305G\305\325\342!\364I\206\234\037\225W1\335\275\312re\235:\315\200\020)\241\002\021\037\236}0:c\030s\330\312\365f\341\032Wt\273\205\310F\311\346\n\036\303\352\345\312F\305\256NW\025H\340j\355Qm\245\026=\271v\302N\260\266\033\357K\300cF\346\033\013\345\351\267\261::M\242S^\311\353y[H\226\226\266\016\353\230,\250\005\253x\257\270\\\334,]-\315\226\242\345ke\306e0q:\374\311\333L~%o\200\301\037\320<D:;\322\260&\350\327wd\004C\345\251\362Ve\212\344\005\035~Z\236.\007+\217+V=\274U\337\332\206\241\024\330[n\265J>Z\270Z\230\201\036_-\316\202\303\341\322J\tFz\2333\241\360\235\221\213[\334\030h\277n\344\3577\330\273_\214\227\036\225\276./\237\336\270\235\217c\001/\033\334\216\224\327\261\272\007W\026}\264)cy\025\022\230\022\310s\253~\353\363\222^:*o\203\237L\025\312\355\332\000\251\367\023\3106P\375\0242\375\374\344\023R\311\r4\007\010\007lHf\253>1\313\315\367q9S\201\264\356\026n\026\247\211\247\211\374\027\305\t\330\324\277b\231\254\374\307*\253.W\377\355D>Y\207\321\222\212\220\314\034\262X\241nFQ+\361\305?\303\250\0310}\255\244\226h\317~?\3049yT\232\346h\370\242\362\244:Y\r\324>=\271z2-\364k\034X\265Y\030*\334+\254B\002\223E\205C'+\255\226\254\362}\250\306De\246\262Y\275Z}T]\255Z\265{\265\345\332\246;\370\031)\347=\014\337\202\3704H{\232\224\r\025\247\243\277\202\210I\257\3537?\343\020\331\243t&\372""\362\301$\373\251\342F1#\266\352\335\210p\016\316\\\005 e'\005\230\001\325\303\267\313$'G\030\027\337\376\365\242^$\361\254\014\271k\020\263A+\3523\032,\301\251\312\365\257^{.\342F\237U\022\013P\230\372l\240\022\255\016WW\352\317\334!\200gn\005\202\017R\234\027Cb\313g\353\267\t}\215\262F.\346n\3416\255\246s\273\277\205\260\227\373m4\343\n\367k,!\006\350_+\017\t,\036\317\377\201\373\025\030\334\0230\312\310l\3278\362\333\240K\233:\202y\343\334O\220\275k\325\241\352\004iL\250\020$\354.\276(=-/s'\302*kh\204\317\252\222\210\276\006\347\267@sB\220\236 q\334\307\312\206N\275\002\325L\320\023o\233\342\332\204\342'o-!&\3019\337\327\007\200\205\331B\014k\375\002\376\224\235\272\235\326\n\334\346\005B\221*\220\325=\342\312\340\216N\024\217K\200\002\227\024\330z\345\nt\232\213y\010\022\277q7\377\037\256T \206\321\374\010pG\367\340o\275\273 \366u\245a\374\244\200\207\247|\005\033\034\275V9`\361-\346\326p\017Pi\000(\267`B\354\254\223\036\341\367\204\220\tQ\374\2524\344=L`\311\321\342xi]\340\272%\204\303\315\037\020\262I\236\202\334\352st\234\346\0005R\344\020{\010\201@eOo\334\001;s\300\355\3453\010i\030\240\264\001\3377\305\325(\000\370\034\275\315\241s\2134\210\306\t\344\005ln\271\016\345\250aZ\215\312h\361\272\013\215q\300\302s(\004;\247\221\324\351\026\3714X\t\346>\033m\032\332\017\250\272\207\3361\276\247c\023. ]-\315\270.f\r\301\304\343\312\341\351\370]\216\314\204\232n/\271\025`E%\305*\254\253\253\250\3555\352\254\263\275\253\310e9\214Pn\350l\224;3<,\027\276\307\326\306J\023\234\314\325\3624\255p\205\273\016.\275[\334g\"\036\273K\332\354\355\317\243\302\n\264w\222\243-\247\n\353;\235\232-}S\301\236\336\316\037p\237\357\025\316<\323\235D(\3304d\376D\0101\0016\276\206<\377D\230\327\260r\212\"\310\240G\337fA\377\006&[B\360\371\0208<O\241\2300\210\207\330\353\371R\010X\261L\212\370\240~\207\020>D\0265\001\307|\210\020\370k\370\225uz\024}\003\360E\323\227\353\213(\226T\370S2Nx)!\321\237J\237\226oU\202U\nA\001\235\037\276\021K\237$C\272M\306\213x\364\014\246|\035eh\371_\212C""\305\t\332\032\025:>}:6.\264\222\357\317}\354\347rq\235\360\237\307\001\334\376\373\334D\270\345\0204\367}\330\202\340Y\217\212&f\220\235\014\365\250\000\003\034y\343\305\317aC/\312\263e\375<\206<\374\364\346\313@\315\364\236\017\377w\254\365\027R\223,\353xh\247\277\334\227\366E\326\373\376\263|\322p\017\303 \271\017\034\237\001f\022H\251\024v\022\230\016\235u\364\212\361\370\211\034\201\353\217\266\340\002V\001\267\274{[\305\333!\341,\270\227\271\376v\217\207\271\023^Q\247\364\364p\360\266\323m\233c>\341\024\017v\306)1!\313\020\005\027\214\304\314\300\334\311\302\347<\002i\026\032p\357\026\310\021\336q%5z\333+\334q\223\213\326\340\367\"\225\236\037&\241\005\204\0378\267\203\230Ts\203\257\214\333(\222\352\301\215\343n\322\034A\000>>Yx\202x|\017\261\361\223\312\375\212N\342\377\204\207\350FI+\013]n\333\001.\355^\333\360\241E\177\373\275\244\353\356V\273\034l\310\260w\345\031\027\312\347\365\207\277-\313\310/\236 ,\333Cz;}\332\"\016\326\020\006e\342\"\363\022g\0106\200^D\362\017\312\207\225\213t\270\225\327`Y1\004C[\245\007\360\335\323Dv\252>\265H\221a]Y\255\261\332\262gYA\370\347\365S\036\007\304\353\223\363\334\371\217>,\336F.t\310\263\265\365\262^v\020NR\216{\203\316D\276GLu(F\304\nS\365\373s\302\361>,\336\344|,\303\321\301\363\300<\301\013ez\025\275rx\326\000~\370\247\t~\364\360{\036\265O\211\034\376\206W\030\315_\023\361\330h\376*\222n/q\245@\365\223\267G\334\231s\371O\363ho\2024\306A\310\274*\\3-h\211\207\033\334\277\210x\201\"3$\226-J\342\372\036l\222\233\337\337\345\212\262\322\310\357m7nu\0253\346%\211\035\217\"-\246\360\351wHE\034$\343o\260\344\373\310#n \307zq2s\262)R\t\276\267\205\317(-&\025\342{\365\031\022\262!\nByJ\006 \372y\366\312\310\365\267[\010\257\235B\000{\367\035\262\277\243\372\342\357kC\265\3735\343D\253\277^?s\321\365\360tPa\23435\\x^\374\r\366p\004\0327[\211a&\245\032\257M\237\333<\206\034\204l\205\372\235\2155O\347(\255lB\005E[3\356\241\r\304{\241ng\"\376:\275>\232\037BL\255\223T\226\350x\253\307\332\3533K\325\351\252\306\317\300z,\221G5""\024m)y\036\017\177\217Pp\235\007u\254\177=\026D\032\354\305\207\"\010\224a\244NI\341\234\212\203\306k\374\030\305\252z\361\242\027F\"\334\354\311\372M\260.\302n(\366\351\2551RP\356\376(\3239\346'\231\317K\277&']\230\246\353\317_^\031\271\223\327=}\rx\007F\004\035{\205\357\212<\272\234nmf\302\332\364\374\221\010\245?\253\177\246\300\"_T\247\317\250L\247\177\001\260\313\255\363;\216V\303\374x\350:p\031\354?\254?\\\304\036\034\023\3766\314\260\031\252\n_\374\n\325t\260\263\315\375\253\0014\327\313\031\344\220#\325\365\002e\220>\262\326\007\302V{\334FHX_C\332\333\305\307\220\247Z\312\302\374G*\333\325Yh\325lm\377D?\311\324\267\266\317\304\204\227\353M\254\206`\344\317\371\321\316,\235z\362\203\226\313\265\362\355D\365=\367\220(\206\004\210\016g9'\342\324\204\262\035\3277L\210\361c\017\021q\335\245!vq\021\3262\214,h\004\206;^[\257\305OfOt\n\203G?\366\034\210\246\357\362\270m\033>\305=\364\272\323Y\341\255\364\245\233w\322\326<l\311\212\263\300\234)\250A\246\262Z\311\022\342\020\306\216\272\351z\343\014|\206\307\\\365O|e\335\215\313O\257\337\254\337d\310\\f+\361\352\364%\3042\226g\365+\323\245\t:GkI\362=]\346>\364ll\212G;\343\367\271\241\022\376Rfq\343\266{\222*\302bY\304r\302\343L\234\216M\"\027'\203\301`\230YC\254\224\003\016\227\2279\334\334\027\2079U\335%\336\360\256^\244\030+\270I\310!m\327\227\3740U\361\216*\356\025^\225n\226\247;z\337\251\337\221x>\354:B:\215\345&\364\357\"\t%\371=\245ut\315s\207\3225\212\016\332\307\375'\022\364\241\036\2434\257\303\337\260\364m\250\313\r\361.\202{j\227\213\307P\253\266j\316\005\217#\032\364\304\253\212\026/\377\200\016\"Z|\370\203B+$L\025\304\221K}\234\316i?\025\301\334\033l\311\023l\"6e\262\360k~V\314\221\365\317\020z\240\324\310\331\376\014\237?S\336\252\334\203v\331P\023!\356\237\347z\035\230u\235|\315\365;I\035\313\177\313\317\275\334\256\004\2657\363\023\371\317\021\335\030\360\334+t\000(\216n\002\000\337\307\356\321g\274$\346\377_\376\243\024\271";
- PyObject *data = __Pyx_DecompressString(cstring, 6885, 1);
- if (unlikely(!data)) __PYX_ERR(0, 1, __pyx_L1_error)
- const char* const bytes = __Pyx_PyBytes_AsString(data);
- #if !CYTHON_ASSUME_SAFE_MACROS
- if (likely(bytes)); else { Py_DECREF(data); __PYX_ERR(0, 1, __pyx_L1_error) }
- #endif
- #else /* compression: none (22843 bytes) */
- const char* const bytes = ", Approximates the arc length for a cubic Bezier segment.\n\n Uses Gauss-Lobatto quadrature with n=5 points to approximate arc length.\n See :func:`calcCubicArcLength` for a slower but more accurate result.\n\n Args:\n pt1,pt2,pt3,pt4: Control points of the Bezier as 2D tuples.\n\n Returns:\n Arc length value.\n\n Example::\n\n >>> approximateCubicArcLength((0, 0), (25, 100), (75, 100), (100, 0))\n 190.04332968932817\n >>> approximateCubicArcLength((0, 0), (50, 0), (100, 50), (100, 100))\n 154.8852074945903\n >>> approximateCubicArcLength((0, 0), (50, 0), (100, 0), (150, 0)) # line; exact result should be 150.\n 149.99999999999991\n >>> approximateCubicArcLength((0, 0), (50, 0), (100, 0), (-50, 0)) # cusp; exact result should be 150.\n 136.9267662156362\n >>> approximateCubicArcLength((0, 0), (50, 0), (100, -50), (-50, 0)) # cusp\n 154.80848416537057\n Calculates the arc length for a quadratic Bezier segment.\n\n Args:\n pt1: Start point of the Bezier as 2D tuple.\n pt2: Handle point of the Bezier as 2D tuple.\n pt3: End point of the Bezier as 2D tuple.\n\n Returns:\n Arc length value.\n\n Example::\n\n >>> calcQuadraticArcLength((0, 0), (0, 0), (0, 0)) # empty segment\n 0.0\n >>> calcQuadraticArcLength((0, 0), (50, 0), (80, 0)) # collinear points\n 80.0\n >>> calcQuadraticArcLength((0, 0), (0, 50), (0, 80)) # collinear points vertical\n 80.0\n >>> calcQuadraticArcLength((0, 0), (50, 20), (100, 40)) # collinear points\n 107.70329614269008\n >>> calcQuadraticArcLength((0, 0), (0, 100), (100, 0))\n 154.02976155645263\n >>> calcQuadraticArcLength((0, 0), (0, 50), (100, 0))\n 120.21581243984076\n >>> calcQuadraticArcLength((0, 0), (50, -10), (80, 50))\n 102.53273816445825\n >>> calcQuadraticArcLength((0, 0), (40, 0), (-40, 0)) # c""ollinear points, control point outside\n 66.66666666666667\n >>> calcQuadraticArcLength((0, 0), (40, 0), (0, 0)) # collinear points, looping back\n 40.0\n Calculates the bounding rectangle for a quadratic Bezier segment.\n\n Args:\n pt1: Start point of the Bezier as a 2D tuple.\n pt2: Handle point of the Bezier as a 2D tuple.\n pt3: End point of the Bezier as a 2D tuple.\n\n Returns:\n A four-item tuple representing the bounding rectangle ``(xMin, yMin, xMax, yMax)``.\n\n Example::\n\n >>> calcQuadraticBounds((0, 0), (50, 100), (100, 0))\n (0, 0, 100, 50.0)\n >>> calcQuadraticBounds((0, 0), (100, 0), (100, 100))\n (0.0, 0.0, 100, 100)\n Calculates the bounding rectangle for a quadratic Bezier segment.\n\n Args:\n pt1,pt2,pt3,pt4: Control points of the Bezier as 2D tuples.\n\n Returns:\n A four-item tuple representing the bounding rectangle ``(xMin, yMin, xMax, yMax)``.\n\n Example::\n\n >>> calcCubicBounds((0, 0), (25, 100), (75, 100), (100, 0))\n (0, 0, 100, 75.0)\n >>> calcCubicBounds((0, 0), (50, 0), (100, 50), (100, 100))\n (0.0, 0.0, 100, 100)\n >>> print(\"%f %f %f %f\" % calcCubicBounds((50, 0), (0, 100), (100, 100), (50, 0)))\n 35.566243 0.000000 64.433757 75.000000\n Couldn't work out which intersection function to useFinds intersections between a curve and a line.\n\n Args:\n curve: List of coordinates of the curve segment as 2D tuples.\n line: List of coordinates of the line segment as 2D tuples.\n\n Returns:\n A list of ``Intersection`` objects, each object having ``pt``, ``t1``\n and ``t2`` attributes containing the intersection point, time on first\n segment and time on second segment respectively.\n\n Examples::\n >>> curve = [ (100, 240), (30, 60), (210, 230), (160, 30) ]\n >>> line = [ (25, 260), (230, 20) ]\n >>> intersections"" = curveLineIntersections(curve, line)\n >>> len(intersections)\n 3\n >>> intersections[0].pt\n (84.9000930760723, 189.87306176459828)\n Finds intersections between a curve and a curve.\n\n Args:\n curve1: List of coordinates of the first curve segment as 2D tuples.\n curve2: List of coordinates of the second curve segment as 2D tuples.\n\n Returns:\n A list of ``Intersection`` objects, each object having ``pt``, ``t1``\n and ``t2`` attributes containing the intersection point, time on first\n segment and time on second segment respectively.\n\n Examples::\n >>> curve1 = [ (10,100), (90,30), (40,140), (220,220) ]\n >>> curve2 = [ (5,150), (180,20), (80,250), (210,190) ]\n >>> intersections = curveCurveIntersections(curve1, curve2)\n >>> len(intersections)\n 3\n >>> intersections[0].pt\n (81.7831487395506, 109.88904552375288)\n Finds intersections between two line segments.\n\n Args:\n s1, e1: Coordinates of the first line as 2D tuples.\n s2, e2: Coordinates of the second line as 2D tuples.\n\n Returns:\n A list of ``Intersection`` objects, each object having ``pt``, ``t1``\n and ``t2`` attributes containing the intersection point, time on first\n segment and time on second segment respectively.\n\n Examples::\n\n >>> a = lineLineIntersections( (310,389), (453, 222), (289, 251), (447, 367))\n >>> len(a)\n 1\n >>> intersection = a[0]\n >>> intersection.pt\n (374.44882952482897, 313.73458370177315)\n >>> (intersection.t1, intersection.t2)\n (0.45069111555824465, 0.5408153767394238)\n Finds intersections between two segments.\n\n Args:\n seg1: List of coordinates of the first segment as 2D tuples.\n seg2: List of coordinates of the second segment as 2D tuples.\n\n Returns:\n A list of ``Intersection`` objects, each ob""ject having ``pt``, ``t1``\n and ``t2`` attributes containing the intersection point, time on first\n segment and time on second segment respectively.\n\n Examples::\n >>> curve1 = [ (10,100), (90,30), (40,140), (220,220) ]\n >>> curve2 = [ (5,150), (180,20), (80,250), (210,190) ]\n >>> intersections = segmentSegmentIntersections(curve1, curve2)\n >>> len(intersections)\n 3\n >>> intersections[0].pt\n (81.7831487395506, 109.88904552375288)\n >>> curve3 = [ (100, 240), (30, 60), (210, 230), (160, 30) ]\n >>> line = [ (25, 260), (230, 20) ]\n >>> intersections = segmentSegmentIntersections(curve3, line)\n >>> len(intersections)\n 3\n >>> intersections[0].pt\n (84.9000930760723, 189.87306176459828)\n\n Lib/fontTools/misc/bezierTools.pySolve a cubic equation.\n\n Solves *a*x*x*x + b*x*x + c*x + d = 0* where a, b, c and d are real.\n\n Args:\n a: coefficient of *x\302\263*\n b: coefficient of *x\302\262*\n c: coefficient of *x*\n d: constant term\n\n Returns:\n A list of roots. Note that the returned list is neither guaranteed to\n be sorted nor to contain unique values!\n\n Examples::\n\n >>> solveCubic(1, 1, -6, 0)\n [-3.0, -0.0, 2.0]\n >>> solveCubic(-10.0, -9.0, 48.0, -29.0)\n [-2.9, 1.0, 1.0]\n >>> solveCubic(-9.875, -9.0, 47.625, -28.75)\n [-2.911392, 1.0, 1.0]\n >>> solveCubic(1.0, -4.5, 6.75, -3.375)\n [1.5, 1.5, 1.5]\n >>> solveCubic(-12.0, 18.0, -9.0, 1.50023651123)\n [0.5, 0.5, 0.5]\n >>> solveCubic(\n ... 9.0, 0.0, 0.0, -7.62939453125e-05\n ... ) == [-0.0, -0.0, -0.0]\n True\n Split a cubic Bezier curve at a given coordinate.\n\n Args:\n pt1,pt2,pt3,pt4: Control points of the Bezier as 2D tuples.\n where: Position at which to split the curve.\n isHorizontal: Dire""ction of the ray splitting the curve. If true,\n ``where`` is interpreted as a Y coordinate; if false, then\n ``where`` is interpreted as an X coordinate.\n\n Returns:\n A list of two curve segments (each curve segment being four 2D tuples)\n if the curve was successfully split, or a list containing the original\n curve.\n\n Example::\n\n >>> printSegments(splitCubic((0, 0), (25, 100), (75, 100), (100, 0), 150, False))\n ((0, 0), (25, 100), (75, 100), (100, 0))\n >>> printSegments(splitCubic((0, 0), (25, 100), (75, 100), (100, 0), 50, False))\n ((0, 0), (12.5, 50), (31.25, 75), (50, 75))\n ((50, 75), (68.75, 75), (87.5, 50), (100, 0))\n >>> printSegments(splitCubic((0, 0), (25, 100), (75, 100), (100, 0), 25, True))\n ((0, 0), (2.29379, 9.17517), (4.79804, 17.5085), (7.47414, 25))\n ((7.47414, 25), (31.2886, 91.6667), (68.7114, 91.6667), (92.5259, 25))\n ((92.5259, 25), (95.202, 17.5085), (97.7062, 9.17517), (100, 1.77636e-15))\n Split a cubic Bezier curve at one or more values of t.\n\n Args:\n pt1,pt2,pt3,pt4: Control points of the Bezier as 2D tuples.\n *ts: Positions at which to split the curve.\n\n Returns:\n A list of curve segments (each curve segment being four 2D tuples).\n\n Examples::\n\n >>> printSegments(splitCubicAtT((0, 0), (25, 100), (75, 100), (100, 0), 0.5))\n ((0, 0), (12.5, 50), (31.25, 75), (50, 75))\n ((50, 75), (68.75, 75), (87.5, 50), (100, 0))\n >>> printSegments(splitCubicAtT((0, 0), (25, 100), (75, 100), (100, 0), 0.5, 0.75))\n ((0, 0), (12.5, 50), (31.25, 75), (50, 75))\n ((50, 75), (59.375, 75), (68.75, 68.75), (77.3438, 56.25))\n ((77.3438, 56.25), (85.9375, 43.75), (93.75, 25), (100, 0))\n Split a line at a given coordinate.\n\n Args:\n pt1: Start point of line as 2D tuple.\n pt2: End point of line as 2D tuple.\n where:"" Position at which to split the line.\n isHorizontal: Direction of the ray splitting the line. If true,\n ``where`` is interpreted as a Y coordinate; if false, then\n ``where`` is interpreted as an X coordinate.\n\n Returns:\n A list of two line segments (each line segment being two 2D tuples)\n if the line was successfully split, or a list containing the original\n line.\n\n Example::\n\n >>> printSegments(splitLine((0, 0), (100, 100), 50, True))\n ((0, 0), (50, 50))\n ((50, 50), (100, 100))\n >>> printSegments(splitLine((0, 0), (100, 100), 100, True))\n ((0, 0), (100, 100))\n >>> printSegments(splitLine((0, 0), (100, 100), 0, True))\n ((0, 0), (0, 0))\n ((0, 0), (100, 100))\n >>> printSegments(splitLine((0, 0), (100, 100), 0, False))\n ((0, 0), (0, 0))\n ((0, 0), (100, 100))\n >>> printSegments(splitLine((100, 0), (0, 0), 50, False))\n ((100, 0), (50, 0))\n ((50, 0), (0, 0))\n >>> printSegments(splitLine((0, 100), (0, 0), 50, True))\n ((0, 100), (0, 50))\n ((0, 50), (0, 0))\n Split a quadratic Bezier curve at a given coordinate.\n\n Args:\n pt1,pt2,pt3: Control points of the Bezier as 2D tuples.\n where: Position at which to split the curve.\n isHorizontal: Direction of the ray splitting the curve. If true,\n ``where`` is interpreted as a Y coordinate; if false, then\n ``where`` is interpreted as an X coordinate.\n\n Returns:\n A list of two curve segments (each curve segment being three 2D tuples)\n if the curve was successfully split, or a list containing the original\n curve.\n\n Example::\n\n >>> printSegments(splitQuadratic((0, 0), (50, 100), (100, 0), 150, False))\n ((0, 0), (50, 100), (100, 0))\n >>> printSegments(splitQuadratic((0, 0), (50, 100), (100, 0), 50, False))\n ((0, 0), (25"", 50), (50, 50))\n ((50, 50), (75, 50), (100, 0))\n >>> printSegments(splitQuadratic((0, 0), (50, 100), (100, 0), 25, False))\n ((0, 0), (12.5, 25), (25, 37.5))\n ((25, 37.5), (62.5, 75), (100, 0))\n >>> printSegments(splitQuadratic((0, 0), (50, 100), (100, 0), 25, True))\n ((0, 0), (7.32233, 14.6447), (14.6447, 25))\n ((14.6447, 25), (50, 75), (85.3553, 25))\n ((85.3553, 25), (92.6777, 14.6447), (100, -7.10543e-15))\n >>> # XXX I'm not at all sure if the following behavior is desirable:\n >>> printSegments(splitQuadratic((0, 0), (50, 100), (100, 0), 50, True))\n ((0, 0), (25, 50), (50, 50))\n ((50, 50), (50, 50), (50, 50))\n ((50, 50), (75, 50), (100, 0))\n Split a quadratic Bezier curve at one or more values of t.\n\n Args:\n pt1,pt2,pt3: Control points of the Bezier as 2D tuples.\n *ts: Positions at which to split the curve.\n\n Returns:\n A list of curve segments (each curve segment being three 2D tuples).\n\n Examples::\n\n >>> printSegments(splitQuadraticAtT((0, 0), (50, 100), (100, 0), 0.5))\n ((0, 0), (25, 50), (50, 50))\n ((50, 50), (75, 50), (100, 0))\n >>> printSegments(splitQuadraticAtT((0, 0), (50, 100), (100, 0), 0.5, 0.75))\n ((0, 0), (25, 50), (50, 50))\n ((50, 50), (62.5, 50), (75, 37.5))\n ((75, 37.5), (87.5, 25), (100, 0))\n Unknown curve degree.?approximateCubicArcLength (line 332)calcCubicBounds (line 412)calcQuadraticArcLength (line 151)calcQuadraticBounds (line 298)curveCurveIntersections (line 1385)curveLineIntersections (line 1255)disableenable%ggcisenabledlineLineIntersections (line 1154)(%s)segmentSegmentIntersections (line 1427)\n >>> _segmentrepr([1, [2, 3], [], [[2, [3, 4], [0.1, 2.2]]]])\n '(1, (2, 3), (), ((2, (3, 4), (0.1, 2.2))))'\n _segmentrepr (line 1475)solveCubic (line 848)splitCubicAtT (line 613)splitCubic (line 552)splitLine (line 450)splitQuadr""aticAtT (line 589)splitQuadratic (line 507)_1_t_1_t_2_2_t_1_tCOMPILEDDDEPSILONIdentityIntersectionLen__Pyx_PyDict_NextRefQQ3RR2R2_Q3_aa1a1_3a1xa1ya2a3acosaligned_curve_alignment_transformation__all__angleappendapproximateCubicArcLengthapproximateCubicArcLengthCapproximateQuadraticArcLengthapproximateQuadraticArcLengthCarchasinhasyncio.coroutinesatan2axax2ax3ayay2ay3bb1b1xb1y_both_points_are_on_same_side_of_originbounds1bounds2boxbxbx2byby2cc1c11c11_rangec12c12_rangec1xc1yc21c21_rangec22c22_rangecalcBoundscalcCubicArcLengthcalcCubicArcLengthC_calcCubicArcLengthCRecursecalcCubicBoundscalcCubicParameterscalcCubicPointscalcQuadraticArcLengthcalcQuadraticArcLengthCcalcQuadraticBoundscalcQuadraticParameterscalcQuadraticPoints__class_getitem__cline_in_tracebackclosecollectionscoscubicPointAtTcubicPointAtTCcurvecurve1curve2curveCurveIntersectionscurveLineIntersections_curve_bounds_curve_curve_intersections_t_curve_curve_intersections_t.<locals>.midpoint_curve_curve_intersections_t.<locals>.<lambda>_curve_line_intersections_t_curve_line_intersections_t.<locals>.genexprcxcydd0d1d1xd1ydeltadelta_2delta_3deriv3doctestdxdyee1e1xe1ye2e2xe2yendepsilonepsilonDigitsexexiteyfailedfontTools.misc.arrayToolsfontTools.misc.bezierToolsfontTools.misc.transformfound__func__genexprhitsiinsertintersection_tsintersectionsintersectsisHorizontal_is_coroutine_is_linelike_is_linelike.<locals>.genexpriscloseititemskey<lambda>lineline1line2lineLineIntersectionslinePointAtTline_t_line_t_of_pt__main__mathmaybelinemidmidPtmidpoint__module__multn__name__namedtuplenextobjoff1off2oneorigDistoriginpp0p1p2p3pipointAtTpointFinderpointspopprecisionprintprintSegmentsptpt1pt1xpt1ypt2pt2xpt2ypt3pt4pxpyquadraticPointAtT__qualname__rrDDrQ2range1range2rectArearootsrotateroundss1s1xs1ys2s2xs2yscalesectRectseensegseg1seg2segmentsegmentPointAtTsegmentSegmentIntersections_segmentrepr_segmentrepr.<locals>.genexprsegmentssend__set_name__setdefaultslope12slope34solutionssolveCubicsolveQuadraticsplitsplitCubic_splitCubicAt""TsplitCubicAtTC_splitCubicAtTCsplitCubicAtTsplitCubicIntoTwoAtTCsplitCubic.<locals>.genexprsplitLinesplitQuadratic_splitQuadraticAtTsplitQuadraticAtTsplitQuadratic.<locals>.genexpr_split_cubic_into_two_split_segment_at_tsqrtstartswappedsxsysystt1t1_2t1_3t2__test__testmodthetathrowtolerancetransformPointstranslatetstwounique_keyunique_valuesv0v1v2v3v4valuevalueswherexx0x1x2x3x4xDiffxRootsyy1y2y3y4yDiffyRoots\200\001\3600\000\005\n\210\022\2102\210Q\330\004\013\2102\210R\210q\330\004\r\210U\220\"\220A\330\004\017\210r\220\022\2202\220R\220q\330\004\005\330\010\017\210r\220\025\220b\230\004\230B\230b\240\003\2407\250\"\250B\250b\260\004\260B\260e\2702\270S\300\002\300%\300r\310\023\310B\310b\320PR\320RS\340\004\013\2107\220\"\220D\230\002\230)\2402\240T\250\022\2503\250b\260\001\330\004\013\2107\220\"\220D\230\002\230)\2402\240T\250\022\2503\250b\260\001\340\004\n\210$\210c\220\024\220R\220u\230B\230a\330\004\n\210$\210c\220\024\220R\220u\230B\230a\340\004\014\210A\210U\220%\220v\230\\\250\032\2606\270\025\270a\2301\200\001\360*\000\005\010\200|\2201\220A\330\010\020\220\006\220a\220t\2306\240\022\2401\330\010\013\210<\220q\230\001\330\014\024\220F\230!\2304\230v\240R\240q\330\014\023\320\023(\250\002\250(\260!\340\014\023\320\023)\250\021\250(\260!\360\006\000\r\024\2201\220L\240\001\240\023\240A\240U\250#\250Q\250e\2603\260a\260u\270D\300\005\300Q\330\t\025\220Q\220a\330\010\020\220\006\220a\220t\2306\240\022\2401\330\010\017\320\017%\240Q\240h\250a\340\004\026\320\0262\260!\2608\2701\330\004\013\2101\330\010\024\220A\220S\230\017\240q\250\010\260\002\260!\2605\270\003\2702\270Q\270d\300#\300R\300q\310\001\330\010\014\210F\220!\200\001\360\010\000\005\t\210\013\2201\330\010\r\210Q\210l\230!\2301\320\000+\2501\360\034\000\005\014\320\013\036\230a\330\010\017\210r\220\026\220w\230b\240\006\240g\250R\250v\260W\270B\270f\300A\200\001\330\004\020\320\020)\250\021\250(\3202B\300!\3001\330\004\033\2301\200\001\360&\000\005\n\210\022\2102\210Q\330\004\013\2102\210R\210q\330""\004\r\210U\220\"\220A\330\004\013\2107\220\"\220E\230\022\2304\230r\240\022\2403\240g\250R\250r\260\022\2604\260r\270\025\270b\300\003\3002\300U\310\"\310C\310r\320QS\320SU\320UV\200\001\360\024\000\005\n\210\022\2102\210Q\330\004\013\2102\210R\210q\330\004\r\210U\220\"\220A\330\004\005\330\010\017\210r\220\025\220b\230\003\2301\230A\330\010\n\210\"\210C\210w\220b\230\002\230\"\230C\230q\240\003\2402\240U\250\"\250C\250r\260\023\260A\260Q\330\010\n\210#\210R\210r\220\022\2203\220a\220q\340\004\005\330\010\017\210r\220\025\220b\230\003\2301\230A\330\010\n\210\"\210C\210w\220b\230\002\230\"\230C\230q\240\003\2402\240U\250\"\250C\250r\260\023\260A\260Q\330\010\n\210#\210R\210r\220\022\2203\220a\220q\340\004\014\210C\210q\200\001\360\024\000\005\n\210\022\2102\210S\220\003\2202\220R\220s\230\"\230C\230q\240\003\2402\240R\240s\250\"\250B\250c\260\022\2602\260R\260s\270!\2703\270b\300\002\300\"\300B\300b\310\003\3101\310A\330\004\t\210\022\2102\210S\220\003\2202\220R\220s\230\"\230C\230q\240\003\2402\240R\240s\250\"\250B\250c\260\022\2602\260R\260s\270!\2703\270b\300\002\300\"\300B\300b\310\003\3101\310A\330\004\014\210C\210q\200\001\3602\000\005\014\320\013%\240Q\330\010\017\210r\220\026\220w\230b\240\006\240g\250R\250v\260W\270B\270a\200\001\360\022\000\005\014\2103\210a\210s\220\"\220A\330\004\n\210#\210Q\210c\220\022\2204\220r\230\023\230A\230S\240\002\240$\240b\250\003\2501\250C\250r\260\021\330\004\007\200u\210B\210e\2202\220X\230S\240\001\330\010\020\220\005\220R\220u\230B\230a\340\010\r\210V\320\023(\250\001\250\024\250T\260\024\260Q\330\010\017\320\017*\250!\2507\260%\260r\3209T\320TU\330\014\023\2201\200\001\330\004\013\2103\210b\220\002\220#\220S\230\002\230$\230b\240\004\240B\240a\330\004\016\210c\220\022\2203\220b\230\003\2302\230T\240\022\2401\330\004\005\330\010\t\210\025\210c\220\022\2204\220r\230\025\230d\240\"\240H\250A\330\t\016\210d\220\"\220I\230S\240\002\240$\240b\250\005\250Q\200\001\360\026\000-.\360\024\000\005\014\2104\210r\220\024\220R\220q""\330\004\013\320\013&\240a\240v\250U\260%\260u\270A\200\001\360\034\000\005\014\320\013)\250\021\250'\260\022\2606\270\027\300\002\300&\310\007\310r\320QR\200\001\3606\000\005\010\200s\210#\210T\320\021$\240A\240U\250%\250u\260A\330\004\020\220\n\230!\330\010\t\210\021\210/\230\021\230!\230?\250!\2501\250O\2701\270A\270^\3102\310Q\340\004\026\220a\220q\330\004\007\200t\2101\330\010\017\210r\220\025\220e\2305\240\001\330\004\013\210>\230\021\230#\230S\240\003\2404\240q\200\001\360@\001\000\005\014\320\013\"\240!\2407\250\"\250F\260'\270\022\2706\300\027\310\002\310!\200\001\360\024\000\005\r\210A\210S\220\001\220\023\220C\220r\230\022\2303\230b\240\003\2401\240C\240r\250\025\250c\260\021\260#\260S\270\002\270\"\270C\270r\300\023\300A\300S\310\002\310!\200\001\360>\000\005\n\210\023\210A\210T\220\022\2205\230\002\230!\330\004\t\210\023\210A\330\010\033\2302\230Q\330\010\n\320\n\034\230B\230a\330\010\n\320\n\034\230B\230a\330\010\n\320\n\034\230B\230a\340\004\t\210\023\210A\210T\220\022\2204\220r\230\024\230R\230u\240B\240a\330\004\t\210\023\210A\330\010\033\2302\230Q\330\010\n\320\n\034\230B\230a\330\010\n\320\n\034\230B\230a\330\010\n\320\n\034\230B\230a\340\004\t\210\023\210A\210T\220\022\2205\230\002\230!\340\004\013\2103\210b\220\003\2202\220S\230\002\230#\230R\230q\200A\330\010\017\210t\2203\220a\220q\230\003\2302\230Q\230a\230q\200\001\360B\001\000\005\n\210\023\210A\330\010\033\2302\230T\240\022\320#5\260R\260t\2702\320=P\320PR\320RS\340\004\t\210\023\210A\210T\220\022\2205\230\002\230!\330\004\t\210\023\210A\330\010\034\230B\230d\240\"\320$6\260b\270\004\270B\320>P\320PR\320RS\360\006\000\005\014\2103\210b\220\003\2202\220Q\200\001\360F\001\000\005\010\200s\210$\320\016%\240Q\240e\2505\260\001\330\004\020\220\016\230a\330\010\t\210\021\210/\230\021\230!\230?\250!\2501\250N\270\"\270A\340\004\026\220a\220q\330\004\007\200t\2101\330\010\017\210r\220\025\220e\2301\330\004\013\320\013\035\230Q\230c\240\023\240D\250\001\200\001\360\010\000\005\r\210G\2201\220A\330""\004\n\210'\220\022\2201\330\004\014\210D\220\006\220a\220s\230!\2303\230b\240\005\240Q\240d\250#\250Q\250c\260\022\2605\270\001\270\021\330\004\013\2108\2207\230!\2301\230F\240*\250A\250Q\250e\2601\260D\270\001\270\025\270a\270q\200\001\360H\001\000\005\013\210'\220\021\330\004\n\210'\220\021\340\004\t\210\025\210b\220\001\330\004\t\210\025\210b\220\001\340\004\t\210\021\330\004\t\210\021\340\004\t\210\024\210S\220\001\220\021\340\004\007\200r\210\023\210A\330\010\017\210r\220\025\220a\330\004\t\210\026\210s\220$\220c\230\021\230/\250\022\2501\330\004\007\200r\210\023\210D\220\001\330\010\020\220\003\2202\220R\220r\230\024\230S\240\002\240\"\240B\240a\330\010\017\210r\220\025\220i\230w\240a\340\010\017\210r\220\025\220a\200\001\360L\001\000\005\010\200s\210!\2103\210b\220\001\360\006\000\t\020\210~\230Q\230c\240\023\240A\330\004\010\210\005\210Q\210a\330\004\t\210\022\2102\210Q\330\004\t\210\022\2102\210Q\330\004\t\210\022\2102\210Q\340\004\t\210\023\210B\210c\220\022\2204\220r\230\024\230R\230q\330\004\t\210\024\210R\210s\220\"\220C\220r\230\023\230B\230d\240\"\240C\240r\250\023\250B\250e\2602\260T\270\022\2701\340\004\t\210\022\2102\210Q\330\004\t\210\022\2102\210R\210r\220\021\330\004\t\210\025\210c\220\022\220=\240\001\330\004\t\210\025\210c\220\021\220$\220b\230\r\240Q\340\004\014\210C\210r\220\021\340\004\007\200s\210#\210T\220\024\220S\230\003\2301\330\010\014\210E\220\021\220!\2203\220b\230\005\230Q\330\010\017\210q\220\003\2203\220a\330\t\017\210s\220(\230\"\230A\340\010\020\220\004\220I\230R\230r\240\024\240Q\240e\2506\260\021\330\010\016\210e\2202\220T\230\021\230!\330\010\017\210s\220\"\220A\330\010\r\210T\220\022\2203\220a\220v\230R\230u\240B\240a\330\010\r\210T\220\022\2203\220b\230\006\230b\240\004\240B\240d\250\"\250E\260\022\2601\330\010\r\210T\220\022\2203\220b\230\006\230b\240\004\240B\240d\250\"\250E\260\022\2601\330\010\014\210D\220\013\2301\230A\230T\240\024\240Q\340\010\013\2103\210b\220\003\2202\220X\230T\240\023\240B\240c\250\022\2501\330""\014\021\220\025\220e\2305\240\002\240#\240R\240s\250\"\250D\260\002\260%\260q\330\r\020\220\002\220#\220R\220q\330\014\021\220\025\220e\2302\230S\240\002\240$\240b\250\005\250Q\330\014\021\220\025\220a\220t\2301\330\r\020\220\002\220#\220R\220q\330\014\021\220\025\220a\220t\2301\330\014\021\220\025\220e\2302\230S\240\002\240$\240b\250\005\250Q\340\014\021\220\025\220a\220t\2301\330\014\021\220\025\220a\220t\2301\330\014\021\220\025\220a\220t\2301\330\010\017\210q\220\004\220D\230\001\340\010\014\210C\210q\220\004\220A\220W\230B\230c\240\021\240$\240b\250\002\250!\330\010\014\210B\210b\220\002\220\"\220A\330\010\013\2102\210S\220\001\330\014\020\220\001\220\021\330\010\014\210E\220\021\220\"\220B\220c\230\022\2305\240\001\330\010\017\210q\220\001\200\001\330\024$\240M\260\021\340\004\016\210m\2301\230A\330\004\016\210m\2301\230A\340\004\007\200t\2101\330\010\022\220%\220q\330\004\007\200t\2101\330\010\022\220%\220q\360\006\000\005\021\220\004\220H\230A\230Y\240a\330\004\007\200t\2101\330\010\017\210q\340\004\005\360\010\000\005\010\200x\210q\220\t\230\022\230:\240T\250\030\260\021\260)\2702\270Q\330\010\017\210r\220\030\230\021\230)\2408\2501\250A\340\004\t\210\026\320\017\"\240!\2408\2501\330\004\021\220\026\220q\230\004\230H\240A\240Q\330\004\021\220\030\230\021\230)\2406\250\021\250!\340\004\t\210\026\320\017\"\240!\2408\2501\330\004\021\220\026\220q\230\004\230H\240A\240Q\330\004\021\220\030\230\021\230)\2406\250\021\250!\340\004\014\210A\330\004\t\210\027\220\001\330\010$\240A\330\014\021\220\025\220k\240\027\250\013\2607\270!\360\006\000\005\n\210\027\220\001\330\010$\240A\330\014\021\220\025\220k\240\027\250\013\2607\270!\360\006\000\005\n\210\027\220\001\330\010$\240A\330\014\021\220\025\220k\240\027\250\013\2607\270!\360\006\000\005\n\210\027\220\001\330\010$\240A\330\014\021\220\025\220k\240\027\250\013\2607\270!\360\010\000\005\022\220\021\330\004\016\210a\330\004\024\220A\340\004\010\210\006\210a\330\010\016\210j\230\001\230\021\330\010\013\2104\210s""\220!\330\014\r\330\010\014\210D\220\001\220\021\330\010\025\220W\230A\230Q\340\004\013\2101\200\001\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\n\210#\210R\210t\2202\220Q\330\004\n\210#\210R\210t\2202\220Q\330\004\n\210#\210R\210t\2202\220T\230\022\2301\330\004\n\210#\210R\210t\2202\220T\230\022\2301\330\004\t\210\023\210B\210c\220\022\2203\220b\230\001\330\004\t\210\023\210B\210c\220\022\2203\220b\230\001\330\004\013\2101\210D\220\006\220d\230&\240\004\240F\250$\250a\200\001\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\t\210\021\330\004\t\210\021\330\004\n\210#\210R\210u\220B\220a\330\004\n\210#\210R\210u\220B\220a\330\004\n\210#\210R\210t\2202\220T\230\022\2301\330\004\n\210#\210R\210t\2202\220T\230\022\2301\330\004\t\210\023\210B\210c\220\022\2203\220b\230\001\330\004\t\210\023\210B\210c\220\022\2203\220b\230\001\330\004\013\2101\210D\220\006\220d\230&\240\004\240F\250$\250a\200\001\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\n\210#\210R\210t\2202\220Q\330\004\n\210#\210R\210t\2202\220Q\330\004\t\210\023\210B\210c\220\022\2201\330\004\t\210\023\210B\210c\220\022\2201\330\004\013\2101\210D\220\006\220d\230&\240\004\240A\200\001\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\t\210\021\330\004\t\210\021\330\004\n\210#\210R\210u\220B\220a\330\004\n\210#\210R\210u\220B\220a\330\004\t\210\023\210B\210c\220\022\2201\330\004\t\210\023\210B\210c\220\022\2201\330\004\013\2101\210D\220\006\220d\230&\240\004\240A\200\001\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\007\200s\210!\2103\210b\220\004\220B\220h\230d\240#\240Q\240c\250\022\2504\250r\260\021\340\010\020\220\001\340\004\007\200s\210!\2103\210b\220\004\220B\220c\230\021\230#\230R\230q\330\010\020\220\003\2202\220T\230\023\230C\230r\240\021\340\010\020\220\003\2202\220T\230\023""\230C\230r\240\021\200\001\330\004\t\210\024\210Q\210a\330\004\006\200g\210Q\210c\220\021\330\004\006\200g\210Q\210a\330\004\017\210q\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\010\210\005\210U\220!\2203\220a\220t\2302\230Q\330\010\r\210R\210q\220\001\330\010\r\210R\210q\220\002\220\"\220A\330\010\020\220\003\2202\220Q\340\010\022\220&\230\002\230!\330\010\022\220&\230\002\230!\330\010\017\210s\220\"\220A\330\010\017\210s\220\"\220A\360\006\000\t\017\210c\220\022\2201\330\010\016\210c\220\022\2201\330\010\017\210r\220\022\2203\220b\230\003\2302\230T\240\022\2401\330\010\017\210r\220\022\2203\220b\230\003\2302\230T\240\022\2401\330\010\017\210r\220\022\2203\220b\230\003\2302\230S\240\002\240\"\240B\240c\250\022\2506\260\022\2601\330\010\017\210r\220\022\2203\220b\230\003\2302\230S\240\002\240\"\240B\240c\250\022\2506\260\022\2601\330\010\016\210c\220\022\2205\230\002\230#\230R\230u\240B\240c\250\022\2503\250b\260\001\330\010\016\210c\220\022\2205\230\002\230#\230R\230u\240B\240c\250\022\2503\250b\260\001\330\010\r\210U\220%\220v\230_\250A\330\r\022\220'\230\025\230g\240U\250'\260\025\260a\340\010\020\220\007\220r\230\025\230e\2405\250\001\330\004\013\2101\200\001\330\004\t\210\024\210Q\210a\330\004\017\210q\330\004\006\200g\210Q\210c\220\021\330\004\006\200g\210Q\210a\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\010\210\005\210Q\330\004\010\210\005\210U\220!\2203\220a\220t\2302\230Q\330\010\r\210R\210q\220\001\330\010\r\210R\210q\220\002\220\"\220A\330\010\020\220\003\2202\220Q\340\010\022\220&\230\002\230!\330\010\016\210c\220\022\2201\330\010\016\210c\220\022\2201\330\010\017\210r\220\022\2203\220b\230\003\2302\230T\240\022\2401\330\010\017\210r\220\022\2203\220b\230\003\2302\230T\240\022\2401\330\010\017\210s\220\"\220A\330\010\016\210c\220\022\2205\230\002\230#\230R\230s\240\"\240A\330\010\016\210c\220\022\2205\230\002\230#\230R\230s\240\"\240A\340\010\r\210U\220&\320\030+\2502\250U""\260'\270\025\270g\300U\310!\330\010\020\220\007\220r\230\025\230e\2401\330\004\013\2101\200\001\330\004\r\210Q\210a\210s\220\"\220F\230!\2304\230s\240!\2401\240C\240r\250\026\250q\260\001\330\004\r\210Q\210a\210s\220\"\220F\230!\2304\230s\240!\2401\240C\240r\250\026\250q\260\001\330\004\013\2105\220\006\220c\230\024\230T\240\026\240s\250!\200\001\330\004\024\320\024-\250Q\250e\3203C\3001\300A\330\004\007\200s\210!\2107\220#\220Q\330\010\013\2103\210d\320\022)\250\022\2501\330\010\030\230\016\240a\240q\250\001\250\024\250Q\250a\250t\2601\260A\260Q\330\t\014\210A\210W\220C\220q\330\010\013\2103\210c\220\024\320\025(\250\002\250!\330\010\030\230\n\240!\2401\240A\240T\250\021\250!\2504\250q\260\001\260\024\260Q\260a\260q\340\010\016\210j\230\001\230\021\330\004\021\220\021\220!\200\001\360@\001\000\005\n\210\024\210R\210q\330\004\t\210\024\210R\210q\330\004\010\210\003\2102\210Q\330\004\010\210\002\210\"\210A\330\004\014\210C\210q\220\001\330\004\007\200v\210S\220\001\330\010\017\210s\220!\2204\220r\230\021\330\004\017\210t\2201\220C\220q\330\004\007\200s\210!\210:\220R\220q\330\010\013\2104\210q\220\004\220D\230\003\2301\330\014\023\2203\220a\220t\2302\230Q\330\010\013\2104\210s\220!\2205\230\003\2301\230A\330\010\020\220\002\220\"\220B\220b\230\002\230\"\230C\230s\240\"\240B\240a\330\004\t\210\024\210Q\210c\220\024\220R\220q\330\004\t\210\024\210Q\210c\220\024\220R\220q\330\004\n\210#\210Q\210b\220\003\220;\230a\230t\2402\240[\260\001\260\025\260b\270\t\300\023\300F\310#\310S\320PR\320RS\330\004\013\2101\220\034\230S\240\001\240\022\2401\240C\240r\250\034\260S\270\001\270\022\2701\270C\270r\300\021\200\001\360$\000\005\006\200T\210\026\210t\2206\230\024\230V\2404\240v\320-@\300\001\300\025\300e\3105\320PQ\340\004\n\210#\210R\210q\330\004\n\210#\210R\210q\330\004\n\210#\210R\210q\330\004\n\210#\210R\210q\330\004\r\210Q\210b\220\004\220E\230\036\240q\250\005\250U\260$\260c\270\022\2703\270d\300!\330\004\r\210Q\210b\220\004\220E\230\036\240q\250\005\250U\260$\260c\270""\022\2703\270d\300!\330\004\014\210G\2202\220Q\340\004\r\210Q\340\014\017\210r\220\022\2202\220R\220r\230\022\2302\230S\240\002\240\"\240B\240b\250\002\250#\250R\250r\260\022\2601\330\014\017\210r\220\022\2202\220R\220r\230\022\2302\230S\240\002\240\"\240B\240b\250\002\250#\250R\250r\260\022\2601\340\010\014\210E\220\021\330\006\010\210\001\210\025\210a\330\004\013\210:\220Q\220a\200\001\360$\000\005\006\200T\210\026\210t\2206\230\024\230V\320#:\270!\2705\300\005\300Q\330\004\n\210#\210R\210q\330\004\n\210#\210R\210q\330\004\014\210A\330\004\007\200t\2103\210a\330\010\r\210W\220A\220Q\220c\230\022\2301\330\004\007\200t\2103\210a\330\010\r\210W\220A\220Q\220c\230\022\2301\330\004\r\210Q\330\t\014\210B\210b\220\002\220\"\220B\220c\230\022\2302\230R\230t\2403\240b\250\002\250\"\250B\250b\260\003\2602\260R\260r\270\021\330\010\014\210E\220\021\330\010\013\2102\210S\220\004\220A\330\006\010\210\001\210\025\210a\330\004\013\210:\220Q\220a\200\001\360\n\000\005\006\330\010\r\210T\220\021\220!\330\013\014\330\010\017\210u\220B\220a\340\010\017\210w\220b\230\004\230E\240\035\250a\200\001\220!\250a\200\001\360<\000\005\017\210a\330\004\007\200s\210!\2106\220\022\2203\220a\220q\330\010\016\210g\220V\2301\330\010\022\220!\330\004\007\200s\210!\2106\220\022\2201\330\010\013\2103\210a\210v\220R\220q\330\014\034\320\0343\2601\260F\270!\340\014\034\320\0342\260!\2606\270\021\330\t\014\210A\210V\2203\220b\230\004\230C\230q\240\006\240c\250\021\330\010\030\320\030-\250R\250w\260a\340\010\016\210j\230\001\230\021\330\004\007\200t\2101\330\010\017\210q\330\004\013\2101\210L\230\001\230\023\230A\230U\240#\240Q\240e\2503\250a\250u\260D\270\005\270Q\220q\200\001\360.\000\005\n\210\026\210q\330\004\t\210\026\210q\330\004\t\210\026\210q\330\004\t\210\026\210q\330\004\005\330\010\014\210H\220A\220U\230%\230t\2404\240x\250q\260\005\260U\270$\270d\300$\300h\310a\310u\320TU\340\010\017\210q\330\004\005\330\010\014\210H\220A\220U\230%\230t\2404\240x\250q\260\005\260U\270$\270d\300$\300h\310a""\310u\320TU\340\010\017\210q\330\004\007\200t\2108\2201\220E\230\025\230d\240$\240h\250a\250u\260A\330\010\017\210q\330\004\007\200t\2108\2201\220E\230\025\230d\240$\240h\250a\250u\260A\330\010\017\210q\330\004\007\200t\2108\2201\220E\230\021\330\010\014\210A\330\010\023\2204\220r\230\025\230c\240\024\240R\240q\330\010\014\210H\220C\220r\230\022\2305\240\002\240!\330\010\016\210c\220\021\330\010\017\210q\330\014\030\230\001\330\020\023\2204\220s\230-\240q\250\004\250D\260\005\260S\270\r\300Q\300d\310$\310a\360\006\000\005\010\200t\2108\2201\220E\230\021\330\010\014\210A\330\010\023\2204\220r\230\025\230c\240\024\240R\240q\330\010\014\210H\220C\220r\230\022\2305\240\002\240!\330\010\016\210c\220\021\330\010\017\210q\330\014\030\230\001\330\020\023\2204\220s\230-\240q\250\004\250D\260\005\260S\270\r\300Q\300d\310$\310a\360\010\000\005\020\210t\2202\220U\230#\230T\240\022\2401\330\004\017\210t\2202\220U\230#\230T\240\022\2401\330\004\007\200t\2108\2201\220I\230Q\330\010\017\210q\330\004\t\210\030\220\022\2204\220r\230\024\230R\230x\240r\250\024\250R\250u\260C\260x\270r\300\021\330\004\010\210\010\220\003\2202\220R\220u\230B\230a\330\004\n\210#\210Q\330\004\007\320\007.\250a\330\010\014\210D\220\001\330\006\n\320\n1\260\021\260$\260d\270!\330\010\017\210q\330\014\030\230\001\330\020\023\2204\220s\230-\240q\250\004\250D\260\005\260S\270\r\300Q\300d\310$\310a\360\006\000\005\014\2101\320\000!\240\021\360\034\000\005\010\200s\210!\2103\210b\220\001\330\010\013\2103\210a\210s\220\"\220A\340\014\024\220A\360\006\000\r\025\220A\220Q\220b\230\002\230!\360\006\000\t\016\210R\210r\220\022\2202\220T\230\022\2302\230R\230q\330\010\013\2103\210c\220\021\330\014\022\220$\220a\220q\330\014\024\220B\220a\220r\230\022\2305\240\002\240$\240b\250\004\250A\250R\250r\260\025\260b\270\004\270B\270a\360\006\000\r\025\220A\330\004\013\2101\200\001\330\004\007\200s\210!\2103\210c\220\021\330\010\013\2104\210q\330\010\023\220<\230q\240\003\2403\240a\330\010\017\210r\220\023\220L\240\n\250!\330""\004\007\200s\210!\2103\210c\220\021\330\010\017\320\017 \240\002\240#\240Q\330\t\014\210A\210S\220\003\2201\330\010\017\210}\230B\230c\240\021\330\004\n\210*\220A\220Q\200\001\330\004\007\200s\210!\2103\210c\220\021\330\010\017\320\017\"\240\"\240A\330\t\014\210A\210S\220\003\2201\330\010\017\210\177\230b\240\001\330\004\n\210*\220A\220Q\200\001\330\004\007\200s\210!\2105\220\003\2201\330\010\017\210|\2302\230U\240!\330\t\014\210A\210U\220#\220Q\330\010\017\320\017 \240\002\240%\240q\330\t\014\210A\210U\220#\220Q\330\010\017\210}\230B\230e\2401\330\004\n\210*\220A\220Q\200\001\360*\000\005\010\200s\210!\2107\220#\220Q\330\010\026\220a\330\t\014\210A\210W\220C\220q\330\010\026\220a\340\010\016\210j\230\001\230\021\330\004\024\220A\330\004\010\210\005\320\r(\250\001\250\027\260\001\330\010\r\210[\230\002\230'\240\021\360\006\000\t\022\220\035\230b\240\006\240a\330\010\r\210\\\230\022\2306\240\021\330\010\025\220W\230A\230\\\250\021\250#\250T\260\023\260C\260s\270!\330\004\013\2101\200\001\360(\000\005\010\200s\210$\320\016%\240Q\240e\2505\260\001\330\004\013\320\013\035\230Q\230c\240\023\240D\250\001\200\001\360(\000\005\010\200s\210#\210T\320\021$\240A\240U\250%\250u\260A\330\004\014\210N\230!\2303\230c\240\023\240D\250\001\360\n\000\005\n\210\021\210&\220\006\220e\2301\230B\230a\230q\330\004\t\210\022\2106\220\021\220%\220r\230\022\2303\230d\240!\330\004\013\2101";
- PyObject *data = NULL;
- CYTHON_UNUSED_VAR(__Pyx_DecompressString);
- #endif
- PyObject **stringtab = __pyx_mstate->__pyx_string_tab;
- Py_ssize_t pos = 0;
- for (int i = 0; i < 335; i++) {
- Py_ssize_t bytes_length = index[i].length;
- PyObject *string = PyUnicode_DecodeUTF8(bytes + pos, bytes_length, NULL);
- if (likely(string) && i >= 42) PyUnicode_InternInPlace(&string);
- if (unlikely(!string)) {
- Py_XDECREF(data);
- __PYX_ERR(0, 1, __pyx_L1_error)
- }
- stringtab[i] = string;
- pos += bytes_length;
- }
- for (int i = 335; i < 387; i++) {
- Py_ssize_t bytes_length = index[i].length;
- PyObject *string = PyBytes_FromStringAndSize(bytes + pos, bytes_length);
- stringtab[i] = string;
- pos += bytes_length;
- if (unlikely(!string)) {
- Py_XDECREF(data);
- __PYX_ERR(0, 1, __pyx_L1_error)
- }
- }
- Py_XDECREF(data);
- for (Py_ssize_t i = 0; i < 387; i++) {
- if (unlikely(PyObject_Hash(stringtab[i]) == -1)) {
- __PYX_ERR(0, 1, __pyx_L1_error)
- }
- }
- #if CYTHON_IMMORTAL_CONSTANTS
- {
- PyObject **table = stringtab + 335;
- for (Py_ssize_t i=0; i<52; ++i) {
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- #if PY_VERSION_HEX < 0x030E0000
- if (_Py_IsOwnedByCurrentThread(table[i]) && Py_REFCNT(table[i]) == 1)
- #else
- if (PyUnstable_Object_IsUniquelyReferenced(table[i]))
- #endif
- {
- Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL);
- }
- #else
- Py_SET_REFCNT(table[i], _Py_IMMORTAL_INITIAL_REFCNT);
- #endif
- }
- }
- #endif
- }
- {
- PyObject **numbertab = __pyx_mstate->__pyx_number_tab;
- double const c_constants[] = {0.0,0.5,1.0,-2.0,2.0,3.0,4.0,9.0,1e-3,1e-9,27.0,54.0,0.005,0.125,1e-10};
- for (int i = 0; i < 15; i++) {
- numbertab[i] = PyFloat_FromDouble(c_constants[i]);
- if (unlikely(!numbertab[i])) __PYX_ERR(0, 1, __pyx_L1_error)
- }
- }
- {
- PyObject **numbertab = __pyx_mstate->__pyx_number_tab + 15;
- int8_t const cint_constants_1[] = {0,-1,1,2,3,6};
- for (int i = 0; i < 6; i++) {
- numbertab[i] = PyLong_FromLong(cint_constants_1[i - 0]);
- if (unlikely(!numbertab[i])) __PYX_ERR(0, 1, __pyx_L1_error)
- }
- }
- #if CYTHON_IMMORTAL_CONSTANTS
- {
- PyObject **table = __pyx_mstate->__pyx_number_tab;
- for (Py_ssize_t i=0; i<21; ++i) {
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- #if PY_VERSION_HEX < 0x030E0000
- if (_Py_IsOwnedByCurrentThread(table[i]) && Py_REFCNT(table[i]) == 1)
- #else
- if (PyUnstable_Object_IsUniquelyReferenced(table[i]))
- #endif
- {
- Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL);
- }
- #else
- Py_SET_REFCNT(table[i], _Py_IMMORTAL_INITIAL_REFCNT);
- #endif
- }
- }
- #endif
- return 0;
- __pyx_L1_error:;
- return -1;
- }
- /* #### Code section: init_codeobjects ### */
- typedef struct {
- unsigned int argcount : 3;
- unsigned int num_posonly_args : 1;
- unsigned int num_kwonly_args : 1;
- unsigned int nlocals : 6;
- unsigned int flags : 10;
- unsigned int first_line : 11;
- } __Pyx_PyCode_New_function_description;
- /* NewCodeObj.proto */
- static PyObject* __Pyx_PyCode_New(
- const __Pyx_PyCode_New_function_description descr,
- PyObject * const *varnames,
- PyObject *filename,
- PyObject *funcname,
- PyObject *line_table,
- PyObject *tuple_dedup_map
- );
- static int __Pyx_CreateCodeObjects(__pyx_mstatetype *__pyx_mstate) {
- PyObject* tuple_dedup_map = PyDict_New();
- if (unlikely(!tuple_dedup_map)) return -1;
- {
- const __Pyx_PyCode_New_function_description descr = {0, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR), 546};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_t};
- __pyx_mstate_global->__pyx_codeobj_tab[0] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_kp_b_iso88591_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[0])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {0, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR), 583};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_t};
- __pyx_mstate_global->__pyx_codeobj_tab[1] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_kp_b_iso88591_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[1])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 9, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_GENERATOR), 644};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_pt4, __pyx_mstate->__pyx_n_u_ts, __pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_c, __pyx_mstate->__pyx_n_u_d};
- __pyx_mstate_global->__pyx_codeobj_tab[2] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_splitCubicAtTC, __pyx_mstate->__pyx_kp_b_iso88591__4, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[2])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 21, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_GENERATOR), 770};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_c, __pyx_mstate->__pyx_n_u_d, __pyx_mstate->__pyx_n_u_ts, __pyx_mstate->__pyx_n_u_t1, __pyx_mstate->__pyx_n_u_t2, __pyx_mstate->__pyx_n_u_delta, __pyx_mstate->__pyx_n_u_delta_2, __pyx_mstate->__pyx_n_u_delta_3, __pyx_mstate->__pyx_n_u_a1, __pyx_mstate->__pyx_n_u_b1, __pyx_mstate->__pyx_n_u_c1, __pyx_mstate->__pyx_n_u_d1, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_t1_2, __pyx_mstate->__pyx_n_u_t1_3, __pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_pt4};
- __pyx_mstate_global->__pyx_codeobj_tab[3] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_splitCubicAtTC_2, __pyx_mstate->__pyx_kp_b_iso88591__4, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[3])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {0, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR), 1252};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_i};
- __pyx_mstate_global->__pyx_codeobj_tab[4] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_kp_b_iso88591__5, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[4])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1329};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_r};
- __pyx_mstate_global->__pyx_codeobj_tab[5] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_midpoint, __pyx_mstate->__pyx_kp_b_iso88591_A_t3aq_2Qaq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[5])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1366};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_ts};
- __pyx_mstate_global->__pyx_codeobj_tab[6] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_lambda, __pyx_mstate->__pyx_kp_b_iso88591_S_1Cr_S_1Cr, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[6])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {0, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR), 1382};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_p};
- __pyx_mstate_global->__pyx_codeobj_tab[7] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_kp_b_iso88591_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[7])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {0, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR), 1485};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_x};
- __pyx_mstate_global->__pyx_codeobj_tab[8] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_kp_b_iso88591_a_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[8])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {5, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 56};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_pt4, __pyx_mstate->__pyx_n_u_tolerance};
- __pyx_mstate_global->__pyx_codeobj_tab[9] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_calcCubicArcLength, __pyx_mstate->__pyx_kp_b_iso88591_1_a_r_wb_gRvWBfA, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[9])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 6, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 75};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_p0, __pyx_mstate->__pyx_n_u_p1, __pyx_mstate->__pyx_n_u_p2, __pyx_mstate->__pyx_n_u_p3, __pyx_mstate->__pyx_n_u_mid, __pyx_mstate->__pyx_n_u_deriv3};
- __pyx_mstate_global->__pyx_codeobj_tab[10] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_split_cubic_into_two, __pyx_mstate->__pyx_kp_b_iso88591_3b_S_b_Ba_c_3b_2T_1_c_4r_d_HA_d, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[10])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {5, 0, 0, 9, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 84};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_mult, __pyx_mstate->__pyx_n_u_p0, __pyx_mstate->__pyx_n_u_p1, __pyx_mstate->__pyx_n_u_p2, __pyx_mstate->__pyx_n_u_p3, __pyx_mstate->__pyx_n_u_arch, __pyx_mstate->__pyx_n_u_box, __pyx_mstate->__pyx_n_u_one, __pyx_mstate->__pyx_n_u_two};
- __pyx_mstate_global->__pyx_codeobj_tab[11] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_calcCubicArcLengthCRecurse, __pyx_mstate->__pyx_kp_b_iso88591_3as_A_Qc_4r_AS_b_1Cr_uBe2XS_RuB, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[11])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {5, 0, 0, 6, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 104};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_pt4, __pyx_mstate->__pyx_n_u_tolerance, __pyx_mstate->__pyx_n_u_mult};
- __pyx_mstate_global->__pyx_codeobj_tab[12] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_calcCubicArcLengthC, __pyx_mstate->__pyx_kp_b_iso88591_4r_Rq_avU_uA, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[12])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 151};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3};
- __pyx_mstate_global->__pyx_codeobj_tab[13] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_calcQuadraticArcLength, __pyx_mstate->__pyx_kp_b_iso88591_7_F_6, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[13])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 14, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 186};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_scale, __pyx_mstate->__pyx_n_u_origDist, __pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_x0, __pyx_mstate->__pyx_n_u_x1, __pyx_mstate->__pyx_n_u_Len, __pyx_mstate->__pyx_n_u_d0, __pyx_mstate->__pyx_n_u_d1, __pyx_mstate->__pyx_n_u_d, __pyx_mstate->__pyx_n_u_n};
- __pyx_mstate_global->__pyx_codeobj_tab[14] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_calcQuadraticArcLengthC, __pyx_mstate->__pyx_kp_b_iso88591_Rq_Rq_2Q_A_Cq_vS_s_4r_t1Cq_s_Rq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[14])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 237};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3};
- __pyx_mstate_global->__pyx_codeobj_tab[15] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_approximateQuadraticArcLength, __pyx_mstate->__pyx_kp_b_iso88591_6_rQR, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[15])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 6, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 254};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_v0, __pyx_mstate->__pyx_n_u_v1, __pyx_mstate->__pyx_n_u_v2};
- __pyx_mstate_global->__pyx_codeobj_tab[16] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_approximateQuadraticArcLengthC, __pyx_mstate->__pyx_kp_b_iso88591_B_A_2T_5Rt2_PPRRS_AT_5_A_Bd_6b, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[16])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 14, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 298};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_ax, __pyx_mstate->__pyx_n_u_ay, __pyx_mstate->__pyx_n_u_bx, __pyx_mstate->__pyx_n_u_by, __pyx_mstate->__pyx_n_u_cx, __pyx_mstate->__pyx_n_u_cy, __pyx_mstate->__pyx_n_u_ax2, __pyx_mstate->__pyx_n_u_ay2, __pyx_mstate->__pyx_n_u_roots, __pyx_mstate->__pyx_n_u_points, __pyx_mstate->__pyx_n_u_t};
- __pyx_mstate_global->__pyx_codeobj_tab[17] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_calcQuadraticBounds, __pyx_mstate->__pyx_kp_b_iso88591_T_t6_V_5_Q_Rq_Rq_A_t3a_WAQc_1_t, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[17])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 332};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_pt4};
- __pyx_mstate_global->__pyx_codeobj_tab[18] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_approximateCubicArcLength, __pyx_mstate->__pyx_kp_b_iso88591_2_Q_r_wb_gRvWBa, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[18])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 9, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 362};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_pt4, __pyx_mstate->__pyx_n_u_v0, __pyx_mstate->__pyx_n_u_v1, __pyx_mstate->__pyx_n_u_v2, __pyx_mstate->__pyx_n_u_v3, __pyx_mstate->__pyx_n_u_v4};
- __pyx_mstate_global->__pyx_codeobj_tab[19] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_approximateCubicArcLengthC, __pyx_mstate->__pyx_kp_b_iso88591_AT_5_A_2Q_Ba_Ba_Ba_AT_4r_RuBa_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[19])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 23, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 412};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_pt4, __pyx_mstate->__pyx_n_u_ax, __pyx_mstate->__pyx_n_u_ay, __pyx_mstate->__pyx_n_u_bx, __pyx_mstate->__pyx_n_u_by, __pyx_mstate->__pyx_n_u_cx, __pyx_mstate->__pyx_n_u_cy, __pyx_mstate->__pyx_n_u_dx, __pyx_mstate->__pyx_n_u_dy, __pyx_mstate->__pyx_n_u_ax3, __pyx_mstate->__pyx_n_u_ay3, __pyx_mstate->__pyx_n_u_bx2, __pyx_mstate->__pyx_n_u_by2, __pyx_mstate->__pyx_n_u_xRoots, __pyx_mstate->__pyx_n_u_yRoots, __pyx_mstate->__pyx_n_u_roots, __pyx_mstate->__pyx_n_u_points, __pyx_mstate->__pyx_n_u_t, __pyx_mstate->__pyx_n_u_t, __pyx_mstate->__pyx_n_u_t};
- __pyx_mstate_global->__pyx_codeobj_tab[20] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_calcCubicBounds, __pyx_mstate->__pyx_kp_b_iso88591_T_t6_V4v_e5PQ_Rq_Rq_Rq_Rq_Qb_E, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[20])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 15, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 450};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_where, __pyx_mstate->__pyx_n_u_isHorizontal, __pyx_mstate->__pyx_n_u_pt1x, __pyx_mstate->__pyx_n_u_pt1y, __pyx_mstate->__pyx_n_u_pt2x, __pyx_mstate->__pyx_n_u_pt2y, __pyx_mstate->__pyx_n_u_ax, __pyx_mstate->__pyx_n_u_ay, __pyx_mstate->__pyx_n_u_bx, __pyx_mstate->__pyx_n_u_by, __pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_t, __pyx_mstate->__pyx_n_u_midPt};
- __pyx_mstate_global->__pyx_codeobj_tab[21] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_splitLine, __pyx_mstate->__pyx_kp_b_iso88591_H_b_b_S_r_A_r_a_s_c_1_r_D_2Rr_S, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[21])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {5, 0, 0, 11, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 507};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_where, __pyx_mstate->__pyx_n_u_isHorizontal, __pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_c, __pyx_mstate->__pyx_n_u_solutions, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_n_u_genexpr};
- __pyx_mstate_global->__pyx_codeobj_tab[22] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_splitQuadratic, __pyx_mstate->__pyx_kp_b_iso88591_F_s_Qe5_a_1N_A_aq_t1_r_e1_Qc_D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[22])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {6, 0, 0, 13, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 552};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_pt4, __pyx_mstate->__pyx_n_u_where, __pyx_mstate->__pyx_n_u_isHorizontal, __pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_c, __pyx_mstate->__pyx_n_u_d, __pyx_mstate->__pyx_n_u_solutions, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_n_u_genexpr};
- __pyx_mstate_global->__pyx_codeobj_tab[23] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_splitCubic, __pyx_mstate->__pyx_kp_b_iso88591_6_s_T_AU_uA_1O1A_2Q_aq_t1_r_e5, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[23])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 7, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS), 589};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_ts, __pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_c};
- __pyx_mstate_global->__pyx_codeobj_tab[24] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_splitQuadraticAtT_2, __pyx_mstate->__pyx_kp_b_iso88591_s_Qe5_Qc_D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[24])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 10, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS), 613};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_pt4, __pyx_mstate->__pyx_n_u_ts, __pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_c, __pyx_mstate->__pyx_n_u_d, __pyx_mstate->__pyx_n_u_split};
- __pyx_mstate_global->__pyx_codeobj_tab[25] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_splitCubicAtT_2, __pyx_mstate->__pyx_kp_b_iso88591_s_T_AU_uA_N_3c_D_e1Baq_6_r_3d_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[25])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {5, 0, 0, 12, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 668};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_pt4, __pyx_mstate->__pyx_n_u_t, __pyx_mstate->__pyx_n_u_t2, __pyx_mstate->__pyx_n_u_1_t, __pyx_mstate->__pyx_n_u_1_t_2, __pyx_mstate->__pyx_n_u_2_t_1_t, __pyx_mstate->__pyx_n_u_pointAtT, __pyx_mstate->__pyx_n_u_off1, __pyx_mstate->__pyx_n_u_off2};
- __pyx_mstate_global->__pyx_codeobj_tab[26] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_splitCubicIntoTwoAtTC, __pyx_mstate->__pyx_kp_b_iso88591_0_2Q_2Rq_U_A_r_2Rq_r_b_Bb_7_Bb, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[26])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 26, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS), 708};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_c, __pyx_mstate->__pyx_n_u_ts, __pyx_mstate->__pyx_n_u_segments, __pyx_mstate->__pyx_n_u_ax, __pyx_mstate->__pyx_n_u_ay, __pyx_mstate->__pyx_n_u_bx, __pyx_mstate->__pyx_n_u_by, __pyx_mstate->__pyx_n_u_cx, __pyx_mstate->__pyx_n_u_cy, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_t1, __pyx_mstate->__pyx_n_u_t2, __pyx_mstate->__pyx_n_u_delta, __pyx_mstate->__pyx_n_u_delta_2, __pyx_mstate->__pyx_n_u_a1x, __pyx_mstate->__pyx_n_u_a1y, __pyx_mstate->__pyx_n_u_b1x, __pyx_mstate->__pyx_n_u_b1y, __pyx_mstate->__pyx_n_u_t1_2, __pyx_mstate->__pyx_n_u_c1x, __pyx_mstate->__pyx_n_u_c1y, __pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3};
- __pyx_mstate_global->__pyx_codeobj_tab[27] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_splitQuadraticAtT, __pyx_mstate->__pyx_kp_b_iso88591_Qa_q_gQc_gQa_Q_Q_Q_U_3at2Q_Rq_R, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[27])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 34, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS), 735};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_c, __pyx_mstate->__pyx_n_u_d, __pyx_mstate->__pyx_n_u_ts, __pyx_mstate->__pyx_n_u_segments, __pyx_mstate->__pyx_n_u_ax, __pyx_mstate->__pyx_n_u_ay, __pyx_mstate->__pyx_n_u_bx, __pyx_mstate->__pyx_n_u_by, __pyx_mstate->__pyx_n_u_cx, __pyx_mstate->__pyx_n_u_cy, __pyx_mstate->__pyx_n_u_dx, __pyx_mstate->__pyx_n_u_dy, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_t1, __pyx_mstate->__pyx_n_u_t2, __pyx_mstate->__pyx_n_u_delta, __pyx_mstate->__pyx_n_u_delta_2, __pyx_mstate->__pyx_n_u_delta_3, __pyx_mstate->__pyx_n_u_t1_2, __pyx_mstate->__pyx_n_u_t1_3, __pyx_mstate->__pyx_n_u_a1x, __pyx_mstate->__pyx_n_u_a1y, __pyx_mstate->__pyx_n_u_b1x, __pyx_mstate->__pyx_n_u_b1y, __pyx_mstate->__pyx_n_u_c1x, __pyx_mstate->__pyx_n_u_c1y, __pyx_mstate->__pyx_n_u_d1x, __pyx_mstate->__pyx_n_u_d1y, __pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_pt4};
- __pyx_mstate_global->__pyx_codeobj_tab[28] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_splitCubicAtT, __pyx_mstate->__pyx_kp_b_iso88591_Qa_gQc_gQa_q_Q_Q_Q_Q_U_3at2Q_Rq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[28])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 7, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 815};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_c, __pyx_mstate->__pyx_n_u_sqrt, __pyx_mstate->__pyx_n_u_roots, __pyx_mstate->__pyx_n_u_DD, __pyx_mstate->__pyx_n_u_rDD};
- __pyx_mstate_global->__pyx_codeobj_tab[29] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_solveQuadratic, __pyx_mstate->__pyx_kp_b_iso88591_s_3b_3as_A_A_AQb_Rr_2T_2Rq_3c_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[29])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 19, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 848};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_c, __pyx_mstate->__pyx_n_u_d, __pyx_mstate->__pyx_n_u_a1, __pyx_mstate->__pyx_n_u_a2, __pyx_mstate->__pyx_n_u_a3, __pyx_mstate->__pyx_n_u_Q, __pyx_mstate->__pyx_n_u_R, __pyx_mstate->__pyx_n_u_R2, __pyx_mstate->__pyx_n_u_Q3, __pyx_mstate->__pyx_n_u_R2_Q3, __pyx_mstate->__pyx_n_u_x, __pyx_mstate->__pyx_n_u_theta, __pyx_mstate->__pyx_n_u_rQ2, __pyx_mstate->__pyx_n_u_a1_3, __pyx_mstate->__pyx_n_u_x0, __pyx_mstate->__pyx_n_u_x1, __pyx_mstate->__pyx_n_u_x2};
- __pyx_mstate_global->__pyx_codeobj_tab[30] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_solveCubic, __pyx_mstate->__pyx_kp_b_iso88591_L_s_3b_Qc_A_Qa_2Q_2Q_2Q_Bc_4r_R, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[30])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 13, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 945};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_x2, __pyx_mstate->__pyx_n_u_y2, __pyx_mstate->__pyx_n_u_x3, __pyx_mstate->__pyx_n_u_y3, __pyx_mstate->__pyx_n_u_cx, __pyx_mstate->__pyx_n_u_cy, __pyx_mstate->__pyx_n_u_bx, __pyx_mstate->__pyx_n_u_by, __pyx_mstate->__pyx_n_u_ax, __pyx_mstate->__pyx_n_u_ay};
- __pyx_mstate_global->__pyx_codeobj_tab[31] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_calcQuadraticParameters, __pyx_mstate->__pyx_kp_b_iso88591_Q_Q_Q_Rt2Q_Rt2Q_Bc_1_Bc_1_1D_d, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[31])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 18, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 956};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_pt4, __pyx_mstate->__pyx_n_u_x2, __pyx_mstate->__pyx_n_u_y2, __pyx_mstate->__pyx_n_u_x3, __pyx_mstate->__pyx_n_u_y3, __pyx_mstate->__pyx_n_u_x4, __pyx_mstate->__pyx_n_u_y4, __pyx_mstate->__pyx_n_u_dx, __pyx_mstate->__pyx_n_u_dy, __pyx_mstate->__pyx_n_u_cx, __pyx_mstate->__pyx_n_u_cy, __pyx_mstate->__pyx_n_u_bx, __pyx_mstate->__pyx_n_u_by, __pyx_mstate->__pyx_n_u_ax, __pyx_mstate->__pyx_n_u_ay};
- __pyx_mstate_global->__pyx_codeobj_tab[32] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_calcCubicParameters, __pyx_mstate->__pyx_kp_b_iso88591_Q_Q_Q_Q_Rt2Q_Rt2Q_Rt2T_1_Rt2T_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[32])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 15, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 988};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_c, __pyx_mstate->__pyx_n_u_ax, __pyx_mstate->__pyx_n_u_ay, __pyx_mstate->__pyx_n_u_bx, __pyx_mstate->__pyx_n_u_by, __pyx_mstate->__pyx_n_u_cx, __pyx_mstate->__pyx_n_u_cy, __pyx_mstate->__pyx_n_u_x1, __pyx_mstate->__pyx_n_u_y1, __pyx_mstate->__pyx_n_u_x2, __pyx_mstate->__pyx_n_u_y2, __pyx_mstate->__pyx_n_u_x3, __pyx_mstate->__pyx_n_u_y3};
- __pyx_mstate_global->__pyx_codeobj_tab[33] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_calcQuadraticPoints, __pyx_mstate->__pyx_kp_b_iso88591_Q_Q_Q_RuBa_RuBa_Bc_1_Bc_1_1D_d, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[33])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 20, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1001};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_c, __pyx_mstate->__pyx_n_u_d, __pyx_mstate->__pyx_n_u_ax, __pyx_mstate->__pyx_n_u_ay, __pyx_mstate->__pyx_n_u_bx, __pyx_mstate->__pyx_n_u_by, __pyx_mstate->__pyx_n_u_cx, __pyx_mstate->__pyx_n_u_cy, __pyx_mstate->__pyx_n_u_dx, __pyx_mstate->__pyx_n_u_dy, __pyx_mstate->__pyx_n_u_x1, __pyx_mstate->__pyx_n_u_y1, __pyx_mstate->__pyx_n_u_x2, __pyx_mstate->__pyx_n_u_y2, __pyx_mstate->__pyx_n_u_x3, __pyx_mstate->__pyx_n_u_y3, __pyx_mstate->__pyx_n_u_x4, __pyx_mstate->__pyx_n_u_y4};
- __pyx_mstate_global->__pyx_codeobj_tab[34] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_calcCubicPoints, __pyx_mstate->__pyx_kp_b_iso88591_Q_Q_Q_Q_RuBa_RuBa_Rt2T_1_Rt2T_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[34])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1040};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_t};
- __pyx_mstate_global->__pyx_codeobj_tab[35] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_linePointAtT, __pyx_mstate->__pyx_kp_b_iso88591_AS_Cr_3b_1Cr_c_S_Cr_AS, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[35])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 6, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1053};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_t, __pyx_mstate->__pyx_n_u_x, __pyx_mstate->__pyx_n_u_y};
- __pyx_mstate_global->__pyx_codeobj_tab[36] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_quadraticPointAtT, __pyx_mstate->__pyx_kp_b_iso88591_2S_2Rs_Cq_2Rs_Bc_2Rs_3b_Bb_1A_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[36])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {5, 0, 0, 10, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1068};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_pt4, __pyx_mstate->__pyx_n_u_t, __pyx_mstate->__pyx_n_u_t2, __pyx_mstate->__pyx_n_u_1_t, __pyx_mstate->__pyx_n_u_1_t_2, __pyx_mstate->__pyx_n_u_x, __pyx_mstate->__pyx_n_u_y};
- __pyx_mstate_global->__pyx_codeobj_tab[37] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_cubicPointAtT, __pyx_mstate->__pyx_kp_b_iso88591_2Q_2Rq_U_A_r_b_1A_Cwb_Cq_2U_Cr, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[37])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {5, 0, 0, 8, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1094};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pt1, __pyx_mstate->__pyx_n_u_pt2, __pyx_mstate->__pyx_n_u_pt3, __pyx_mstate->__pyx_n_u_pt4, __pyx_mstate->__pyx_n_u_t, __pyx_mstate->__pyx_n_u_t2, __pyx_mstate->__pyx_n_u_1_t, __pyx_mstate->__pyx_n_u_1_t_2};
- __pyx_mstate_global->__pyx_codeobj_tab[38] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_cubicPointAtTC, __pyx_mstate->__pyx_kp_b_iso88591_2Q_2Rq_U_A_7_E_4r_3gRr_4r_b_2U, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[38])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1119};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_seg, __pyx_mstate->__pyx_n_u_t};
- __pyx_mstate_global->__pyx_codeobj_tab[39] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_segmentPointAtT, __pyx_mstate->__pyx_kp_b_iso88591_s_5_1_2U_AU_Q_q_AU_Q_Be1_AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[39])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 9, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1134};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_s, __pyx_mstate->__pyx_n_u_e, __pyx_mstate->__pyx_n_u_pt, __pyx_mstate->__pyx_n_u_sx, __pyx_mstate->__pyx_n_u_sy, __pyx_mstate->__pyx_n_u_ex, __pyx_mstate->__pyx_n_u_ey, __pyx_mstate->__pyx_n_u_px, __pyx_mstate->__pyx_n_u_py};
- __pyx_mstate_global->__pyx_codeobj_tab[40] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_line_t_of_pt, __pyx_mstate->__pyx_kp_b_iso88591_Q_Q_Q_s_3b_Bhd_Qc_4r_s_3b_Bc_Rq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[40])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1148};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_origin, __pyx_mstate->__pyx_n_u_xDiff, __pyx_mstate->__pyx_n_u_yDiff};
- __pyx_mstate_global->__pyx_codeobj_tab[41] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_both_points_are_on_same_side_of, __pyx_mstate->__pyx_kp_b_iso88591_Qas_F_4s_1Cr_q_Qas_F_4s_1Cr_q_5, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[41])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 17, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1154};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_s1, __pyx_mstate->__pyx_n_u_e1, __pyx_mstate->__pyx_n_u_s2, __pyx_mstate->__pyx_n_u_e2, __pyx_mstate->__pyx_n_u_s1x, __pyx_mstate->__pyx_n_u_s1y, __pyx_mstate->__pyx_n_u_e1x, __pyx_mstate->__pyx_n_u_e1y, __pyx_mstate->__pyx_n_u_s2x, __pyx_mstate->__pyx_n_u_s2y, __pyx_mstate->__pyx_n_u_e2x, __pyx_mstate->__pyx_n_u_e2y, __pyx_mstate->__pyx_n_u_x, __pyx_mstate->__pyx_n_u_slope34, __pyx_mstate->__pyx_n_u_y, __pyx_mstate->__pyx_n_u_pt, __pyx_mstate->__pyx_n_u_slope12};
- __pyx_mstate_global->__pyx_codeobj_tab[42] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_lineLineIntersections, __pyx_mstate->__pyx_kp_b_iso88591_q_q_q_q_HAU_t4xq_U_d_hauTU_q_HA, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[42])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1232};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_segment, __pyx_mstate->__pyx_n_u_start, __pyx_mstate->__pyx_n_u_end, __pyx_mstate->__pyx_n_u_angle};
- __pyx_mstate_global->__pyx_codeobj_tab[43] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_alignment_transformation, __pyx_mstate->__pyx_kp_b_iso88591_G1A_1_D_as_3b_Qd_Qc_5_87_1F_AQe, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[43])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 10, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1242};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_curve, __pyx_mstate->__pyx_n_u_line, __pyx_mstate->__pyx_n_u_aligned_curve, __pyx_mstate->__pyx_n_u_a, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_c, __pyx_mstate->__pyx_n_u_intersections, __pyx_mstate->__pyx_n_u_d, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_n_u_genexpr};
- __pyx_mstate_global->__pyx_codeobj_tab[44] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_curve_line_intersections_t, __pyx_mstate->__pyx_kp_b_iso88591_Qe3C1A_s_7_Q_3d_1_aq_Qat1AQ_AWC, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[44])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 7, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1255};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_curve, __pyx_mstate->__pyx_n_u_line, __pyx_mstate->__pyx_n_u_pointFinder, __pyx_mstate->__pyx_n_u_intersections, __pyx_mstate->__pyx_n_u_t, __pyx_mstate->__pyx_n_u_pt, __pyx_mstate->__pyx_n_u_line_t};
- __pyx_mstate_global->__pyx_codeobj_tab[45] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_curveLineIntersections, __pyx_mstate->__pyx_kp_b_iso88591_s_7_Q_a_AWCq_a_j_A_b_a_6_WA_T_C, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[45])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1293};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_c};
- __pyx_mstate_global->__pyx_codeobj_tab[46] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_curve_bounds, __pyx_mstate->__pyx_kp_b_iso88591_s_3c_A_AS_1_b_AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[46])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1301};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_c, __pyx_mstate->__pyx_n_u_t, __pyx_mstate->__pyx_n_u_s, __pyx_mstate->__pyx_n_u_e, __pyx_mstate->__pyx_n_u_midpoint};
- __pyx_mstate_global->__pyx_codeobj_tab[47] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_split_segment_at_t, __pyx_mstate->__pyx_kp_b_iso88591_s_3c_4q_q_3a_r_L_s_3c_Q_AS_1_Bc, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[47])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {5, 0, 0, 25, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1313};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_curve1, __pyx_mstate->__pyx_n_u_curve2, __pyx_mstate->__pyx_n_u_precision, __pyx_mstate->__pyx_n_u_range1, __pyx_mstate->__pyx_n_u_range2, __pyx_mstate->__pyx_n_u_bounds1, __pyx_mstate->__pyx_n_u_bounds2, __pyx_mstate->__pyx_n_u_intersects, __pyx_mstate->__pyx_n_u__6, __pyx_mstate->__pyx_n_u_midpoint, __pyx_mstate->__pyx_n_u_midpoint, __pyx_mstate->__pyx_n_u_c11, __pyx_mstate->__pyx_n_u_c12, __pyx_mstate->__pyx_n_u_c11_range, __pyx_mstate->__pyx_n_u_c12_range, __pyx_mstate->__pyx_n_u_c21, __pyx_mstate->__pyx_n_u_c22, __pyx_mstate->__pyx_n_u_c21_range, __pyx_mstate->__pyx_n_u_c22_range, __pyx_mstate->__pyx_n_u_found, __pyx_mstate->__pyx_n_u_unique_key, __pyx_mstate->__pyx_n_u_seen, __pyx_mstate->__pyx_n_u_unique_values, __pyx_mstate->__pyx_n_u_ts, __pyx_mstate->__pyx_n_u_key};
- __pyx_mstate_global->__pyx_codeobj_tab[48] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_curve_curve_intersections_t, __pyx_mstate->__pyx_kp_b_iso88591_M_m1A_m1A_t1_q_t1_q_HAYa_t1_q_x, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[48])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1380};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_segment, __pyx_mstate->__pyx_n_u_maybeline, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_n_u_genexpr};
- __pyx_mstate_global->__pyx_codeobj_tab[49] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_is_linelike, __pyx_mstate->__pyx_kp_b_iso88591_2B_1_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[49])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 8, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1385};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_curve1, __pyx_mstate->__pyx_n_u_curve2, __pyx_mstate->__pyx_n_u_line1, __pyx_mstate->__pyx_n_u_line2, __pyx_mstate->__pyx_n_u_hits, __pyx_mstate->__pyx_n_u_intersection_ts, __pyx_mstate->__pyx_n_u_x, __pyx_mstate->__pyx_n_u_ts};
- __pyx_mstate_global->__pyx_codeobj_tab[50] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_curveCurveIntersections, __pyx_mstate->__pyx_kp_b_iso88591_1A_at6_1_q_F_4vRq_1L_AU_Qe3auD, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[50])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1427};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_seg1, __pyx_mstate->__pyx_n_u_seg2, __pyx_mstate->__pyx_n_u_swapped, __pyx_mstate->__pyx_n_u_intersections, __pyx_mstate->__pyx_n_u_i};
- __pyx_mstate_global->__pyx_codeobj_tab[51] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_segmentSegmentIntersections, __pyx_mstate->__pyx_kp_b_iso88591_a_s_6_3aq_gV1_s_6_1_3avRq_31F_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[51])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1475};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_obj, __pyx_mstate->__pyx_n_u_it, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_n_u_genexpr};
- __pyx_mstate_global->__pyx_codeobj_tab[52] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_segmentrepr, __pyx_mstate->__pyx_kp_b_iso88591_T_uBa_wb_E_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[52])) goto bad;
- }
- {
- const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1488};
- PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_segments, __pyx_mstate->__pyx_n_u_segment};
- __pyx_mstate_global->__pyx_codeobj_tab[53] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_Lib_fontTools_misc_bezierTools_p, __pyx_mstate->__pyx_n_u_printSegments, __pyx_mstate->__pyx_kp_b_iso88591_1_Ql_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[53])) goto bad;
- }
- Py_DECREF(tuple_dedup_map);
- return 0;
- bad:
- Py_DECREF(tuple_dedup_map);
- return -1;
- }
- /* #### Code section: init_globals ### */
- static int __Pyx_InitGlobals(void) {
- /* PythonCompatibility.init */
- if (likely(__Pyx_init_co_variables() == 0)); else
-
- if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)
- /* CommonTypesMetaclass.init */
- if (likely(__pyx_CommonTypesMetaclass_init(__pyx_m) == 0)); else
-
- if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)
- /* Generator.init */
- if (likely(__pyx_Generator_init(__pyx_m) == 0)); else
-
- if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)
- /* CachedMethodType.init */
- #if CYTHON_COMPILING_IN_LIMITED_API
- {
- PyObject *typesModule=NULL;
- typesModule = PyImport_ImportModule("types");
- if (typesModule) {
- __pyx_mstate_global->__Pyx_CachedMethodType = PyObject_GetAttrString(typesModule, "MethodType");
- Py_DECREF(typesModule);
- }
- } // error handling follows
- #endif
-
- if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)
- /* CythonFunctionShared.init */
- if (likely(__pyx_CyFunction_init(__pyx_m) == 0)); else
-
- if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)
- return 0;
- __pyx_L1_error:;
- return -1;
- }
- /* #### Code section: cleanup_globals ### */
- /* #### Code section: cleanup_module ### */
- /* #### Code section: main_method ### */
- /* #### Code section: utility_code_pragmas ### */
- #ifdef _MSC_VER
- #pragma warning( push )
- /* Warning 4127: conditional expression is constant
- * Cython uses constant conditional expressions to allow in inline functions to be optimized at
- * compile-time, so this warning is not useful
- */
- #pragma warning( disable : 4127 )
- #endif
- /* #### Code section: utility_code_def ### */
- /* --- Runtime support code --- */
- /* Refnanny */
- #if CYTHON_REFNANNY
- static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
- PyObject *m = NULL, *p = NULL;
- void *r = NULL;
- m = PyImport_ImportModule(modname);
- if (!m) goto end;
- p = PyObject_GetAttrString(m, "RefNannyAPI");
- if (!p) goto end;
- r = PyLong_AsVoidPtr(p);
- end:
- Py_XDECREF(p);
- Py_XDECREF(m);
- return (__Pyx_RefNannyAPIStruct *)r;
- }
- #endif
- /* PyErrExceptionMatches (used by PyObjectGetAttrStrNoError) */
- #if CYTHON_FAST_THREAD_STATE
- static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
- Py_ssize_t i, n;
- n = PyTuple_GET_SIZE(tuple);
- for (i=0; i<n; i++) {
- if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
- }
- for (i=0; i<n; i++) {
- if (__Pyx_PyErr_GivenExceptionMatches(exc_type, PyTuple_GET_ITEM(tuple, i))) return 1;
- }
- return 0;
- }
- static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err) {
- int result;
- PyObject *exc_type;
- #if PY_VERSION_HEX >= 0x030C00A6
- PyObject *current_exception = tstate->current_exception;
- if (unlikely(!current_exception)) return 0;
- exc_type = (PyObject*) Py_TYPE(current_exception);
- if (exc_type == err) return 1;
- #else
- exc_type = tstate->curexc_type;
- if (exc_type == err) return 1;
- if (unlikely(!exc_type)) return 0;
- #endif
- #if CYTHON_AVOID_BORROWED_REFS
- Py_INCREF(exc_type);
- #endif
- if (unlikely(PyTuple_Check(err))) {
- result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err);
- } else {
- result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err);
- }
- #if CYTHON_AVOID_BORROWED_REFS
- Py_DECREF(exc_type);
- #endif
- return result;
- }
- #endif
- /* PyErrFetchRestore (used by PyObjectGetAttrStrNoError) */
- #if CYTHON_FAST_THREAD_STATE
- static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
- #if PY_VERSION_HEX >= 0x030C00A6
- PyObject *tmp_value;
- assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value)));
- if (value) {
- #if CYTHON_COMPILING_IN_CPYTHON
- if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb))
- #endif
- PyException_SetTraceback(value, tb);
- }
- tmp_value = tstate->current_exception;
- tstate->current_exception = value;
- Py_XDECREF(tmp_value);
- Py_XDECREF(type);
- Py_XDECREF(tb);
- #else
- PyObject *tmp_type, *tmp_value, *tmp_tb;
- 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);
- #endif
- }
- static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
- #if PY_VERSION_HEX >= 0x030C00A6
- PyObject* exc_value;
- exc_value = tstate->current_exception;
- tstate->current_exception = 0;
- *value = exc_value;
- *type = NULL;
- *tb = NULL;
- if (exc_value) {
- *type = (PyObject*) Py_TYPE(exc_value);
- Py_INCREF(*type);
- #if CYTHON_COMPILING_IN_CPYTHON
- *tb = ((PyBaseExceptionObject*) exc_value)->traceback;
- Py_XINCREF(*tb);
- #else
- *tb = PyException_GetTraceback(exc_value);
- #endif
- }
- #else
- *type = tstate->curexc_type;
- *value = tstate->curexc_value;
- *tb = tstate->curexc_traceback;
- tstate->curexc_type = 0;
- tstate->curexc_value = 0;
- tstate->curexc_traceback = 0;
- #endif
- }
- #endif
- /* PyObjectGetAttrStr (used by PyObjectGetAttrStrNoError) */
- #if CYTHON_USE_TYPE_SLOTS
- 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);
- return PyObject_GetAttr(obj, attr_name);
- }
- #endif
- /* PyObjectGetAttrStrNoError (used by GetBuiltinName) */
- #if __PYX_LIMITED_VERSION_HEX < 0x030d0000
- static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) {
- __Pyx_PyThreadState_declare
- __Pyx_PyThreadState_assign
- if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
- __Pyx_PyErr_Clear();
- }
- #endif
- static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) {
- PyObject *result;
- #if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
- (void) PyObject_GetOptionalAttr(obj, attr_name, &result);
- return result;
- #else
- #if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS
- PyTypeObject* tp = Py_TYPE(obj);
- if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) {
- return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1);
- }
- #endif
- result = __Pyx_PyObject_GetAttrStr(obj, attr_name);
- if (unlikely(!result)) {
- __Pyx_PyObject_GetAttrStr_ClearAttributeError();
- }
- return result;
- #endif
- }
- /* GetBuiltinName */
- static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
- PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_mstate_global->__pyx_b, name);
- if (unlikely(!result) && !PyErr_Occurred()) {
- PyErr_Format(PyExc_NameError,
- "name '%U' is not defined", name);
- }
- return result;
- }
- /* TupleAndListFromArray (used by fastcall) */
- #if !CYTHON_COMPILING_IN_CPYTHON && CYTHON_METH_FASTCALL
- static CYTHON_INLINE PyObject *
- __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n)
- {
- PyObject *res;
- Py_ssize_t i;
- if (n <= 0) {
- return __Pyx_NewRef(__pyx_mstate_global->__pyx_empty_tuple);
- }
- res = PyTuple_New(n);
- if (unlikely(res == NULL)) return NULL;
- for (i = 0; i < n; i++) {
- if (unlikely(__Pyx_PyTuple_SET_ITEM(res, i, src[i]) < (0))) {
- Py_DECREF(res);
- return NULL;
- }
- Py_INCREF(src[i]);
- }
- return res;
- }
- #elif CYTHON_COMPILING_IN_CPYTHON
- static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) {
- PyObject *v;
- Py_ssize_t i;
- for (i = 0; i < length; i++) {
- v = dest[i] = src[i];
- Py_INCREF(v);
- }
- }
- static CYTHON_INLINE PyObject *
- __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n)
- {
- PyObject *res;
- if (n <= 0) {
- return __Pyx_NewRef(__pyx_mstate_global->__pyx_empty_tuple);
- }
- res = PyTuple_New(n);
- if (unlikely(res == NULL)) return NULL;
- __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n);
- return res;
- }
- static CYTHON_INLINE PyObject *
- __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n)
- {
- PyObject *res;
- if (n <= 0) {
- return PyList_New(0);
- }
- res = PyList_New(n);
- if (unlikely(res == NULL)) return NULL;
- __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n);
- return res;
- }
- #endif
- /* BytesEquals (used by UnicodeEquals) */
- static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
- #if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_GRAAL ||\
- !(CYTHON_ASSUME_SAFE_SIZE && CYTHON_ASSUME_SAFE_MACROS)
- return PyObject_RichCompareBool(s1, s2, equals);
- #else
- if (s1 == s2) {
- return (equals == Py_EQ);
- } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
- const char *ps1, *ps2;
- Py_ssize_t length = PyBytes_GET_SIZE(s1);
- if (length != PyBytes_GET_SIZE(s2))
- return (equals == Py_NE);
- ps1 = PyBytes_AS_STRING(s1);
- ps2 = PyBytes_AS_STRING(s2);
- if (ps1[0] != ps2[0]) {
- return (equals == Py_NE);
- } else if (length == 1) {
- return (equals == Py_EQ);
- } else {
- int result;
- #if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000)
- Py_hash_t hash1, hash2;
- hash1 = ((PyBytesObject*)s1)->ob_shash;
- hash2 = ((PyBytesObject*)s2)->ob_shash;
- if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
- return (equals == Py_NE);
- }
- #endif
- result = memcmp(ps1, ps2, (size_t)length);
- return (equals == Py_EQ) ? (result == 0) : (result != 0);
- }
- } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
- return (equals == Py_NE);
- } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
- return (equals == Py_NE);
- } else {
- int result;
- PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
- if (!py_result)
- return -1;
- result = __Pyx_PyObject_IsTrue(py_result);
- Py_DECREF(py_result);
- return result;
- }
- #endif
- }
- /* UnicodeEquals (used by fastcall) */
- static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
- #if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_GRAAL
- return PyObject_RichCompareBool(s1, s2, equals);
- #else
- int s1_is_unicode, s2_is_unicode;
- if (s1 == s2) {
- goto return_eq;
- }
- s1_is_unicode = PyUnicode_CheckExact(s1);
- s2_is_unicode = PyUnicode_CheckExact(s2);
- if (s1_is_unicode & s2_is_unicode) {
- Py_ssize_t length, length2;
- int kind;
- void *data1, *data2;
- #if !CYTHON_COMPILING_IN_LIMITED_API
- if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0))
- return -1;
- #endif
- length = __Pyx_PyUnicode_GET_LENGTH(s1);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely(length < 0)) return -1;
- #endif
- length2 = __Pyx_PyUnicode_GET_LENGTH(s2);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely(length2 < 0)) return -1;
- #endif
- if (length != length2) {
- goto return_ne;
- }
- #if CYTHON_USE_UNICODE_INTERNALS
- {
- Py_hash_t hash1, hash2;
- hash1 = ((PyASCIIObject*)s1)->hash;
- hash2 = ((PyASCIIObject*)s2)->hash;
- if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
- goto return_ne;
- }
- }
- #endif
- kind = __Pyx_PyUnicode_KIND(s1);
- if (kind != __Pyx_PyUnicode_KIND(s2)) {
- goto return_ne;
- }
- data1 = __Pyx_PyUnicode_DATA(s1);
- data2 = __Pyx_PyUnicode_DATA(s2);
- if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) {
- goto return_ne;
- } else if (length == 1) {
- goto return_eq;
- } else {
- int result = memcmp(data1, data2, (size_t)(length * kind));
- return (equals == Py_EQ) ? (result == 0) : (result != 0);
- }
- } else if ((s1 == Py_None) & s2_is_unicode) {
- goto return_ne;
- } else if ((s2 == Py_None) & s1_is_unicode) {
- goto return_ne;
- } else {
- int result;
- PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
- if (!py_result)
- return -1;
- result = __Pyx_PyObject_IsTrue(py_result);
- Py_DECREF(py_result);
- return result;
- }
- return_eq:
- return (equals == Py_EQ);
- return_ne:
- return (equals == Py_NE);
- #endif
- }
- /* fastcall */
- #if CYTHON_METH_FASTCALL
- static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s)
- {
- Py_ssize_t i, n = __Pyx_PyTuple_GET_SIZE(kwnames);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely(n == -1)) return NULL;
- #endif
- for (i = 0; i < n; i++)
- {
- PyObject *namei = __Pyx_PyTuple_GET_ITEM(kwnames, i);
- #if !CYTHON_ASSUME_SAFE_MACROS
- if (unlikely(!namei)) return NULL;
- #endif
- if (s == namei) return kwvalues[i];
- }
- for (i = 0; i < n; i++)
- {
- PyObject *namei = __Pyx_PyTuple_GET_ITEM(kwnames, i);
- #if !CYTHON_ASSUME_SAFE_MACROS
- if (unlikely(!namei)) return NULL;
- #endif
- int eq = __Pyx_PyUnicode_Equals(s, namei, Py_EQ);
- if (unlikely(eq != 0)) {
- if (unlikely(eq < 0)) return NULL;
- return kwvalues[i];
- }
- }
- return NULL;
- }
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 || CYTHON_COMPILING_IN_LIMITED_API
- CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) {
- Py_ssize_t i, nkwargs;
- PyObject *dict;
- #if !CYTHON_ASSUME_SAFE_SIZE
- nkwargs = PyTuple_Size(kwnames);
- if (unlikely(nkwargs < 0)) return NULL;
- #else
- nkwargs = PyTuple_GET_SIZE(kwnames);
- #endif
- dict = PyDict_New();
- if (unlikely(!dict))
- return NULL;
- for (i=0; i<nkwargs; i++) {
- #if !CYTHON_ASSUME_SAFE_MACROS
- PyObject *key = PyTuple_GetItem(kwnames, i);
- if (!key) goto bad;
- #else
- PyObject *key = PyTuple_GET_ITEM(kwnames, i);
- #endif
- if (unlikely(PyDict_SetItem(dict, key, kwvalues[i]) < 0))
- goto bad;
- }
- return dict;
- bad:
- Py_DECREF(dict);
- return NULL;
- }
- #endif
- #endif
- /* PyObjectCall (used by PyObjectFastCall) */
- #if CYTHON_COMPILING_IN_CPYTHON
- static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
- PyObject *result;
- ternaryfunc call = Py_TYPE(func)->tp_call;
- if (unlikely(!call))
- return PyObject_Call(func, arg, kw);
- if (unlikely(Py_EnterRecursiveCall(" while calling a Python object")))
- return NULL;
- result = (*call)(func, arg, kw);
- Py_LeaveRecursiveCall();
- if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
- PyErr_SetString(
- PyExc_SystemError,
- "NULL result without error in PyObject_Call");
- }
- return result;
- }
- #endif
- /* PyObjectCallMethO (used by PyObjectFastCall) */
- #if CYTHON_COMPILING_IN_CPYTHON
- static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
- PyObject *self, *result;
- PyCFunction cfunc;
- cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func);
- self = __Pyx_CyOrPyCFunction_GET_SELF(func);
- if (unlikely(Py_EnterRecursiveCall(" while calling a Python object")))
- return NULL;
- result = cfunc(self, arg);
- Py_LeaveRecursiveCall();
- if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
- PyErr_SetString(
- PyExc_SystemError,
- "NULL result without error in PyObject_Call");
- }
- return result;
- }
- #endif
- /* PyObjectFastCall (used by PyObjectCallOneArg) */
- #if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API
- static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject * const*args, size_t nargs, PyObject *kwargs) {
- PyObject *argstuple;
- PyObject *result = 0;
- size_t i;
- argstuple = PyTuple_New((Py_ssize_t)nargs);
- if (unlikely(!argstuple)) return NULL;
- for (i = 0; i < nargs; i++) {
- Py_INCREF(args[i]);
- if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) != (0)) goto bad;
- }
- result = __Pyx_PyObject_Call(func, argstuple, kwargs);
- bad:
- Py_DECREF(argstuple);
- return result;
- }
- #endif
- #if CYTHON_VECTORCALL && !CYTHON_COMPILING_IN_LIMITED_API
- #if PY_VERSION_HEX < 0x03090000
- #define __Pyx_PyVectorcall_Function(callable) _PyVectorcall_Function(callable)
- #elif CYTHON_COMPILING_IN_CPYTHON
- static CYTHON_INLINE vectorcallfunc __Pyx_PyVectorcall_Function(PyObject *callable) {
- PyTypeObject *tp = Py_TYPE(callable);
- #if defined(__Pyx_CyFunction_USED)
- if (__Pyx_CyFunction_CheckExact(callable)) {
- return __Pyx_CyFunction_func_vectorcall(callable);
- }
- #endif
- if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) {
- return NULL;
- }
- assert(PyCallable_Check(callable));
- Py_ssize_t offset = tp->tp_vectorcall_offset;
- assert(offset > 0);
- vectorcallfunc ptr;
- memcpy(&ptr, (char *) callable + offset, sizeof(ptr));
- return ptr;
- }
- #else
- #define __Pyx_PyVectorcall_Function(callable) PyVectorcall_Function(callable)
- #endif
- #endif
- static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject *const *args, size_t _nargs, PyObject *kwargs) {
- Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs);
- #if CYTHON_COMPILING_IN_CPYTHON
- if (nargs == 0 && kwargs == NULL) {
- if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS))
- return __Pyx_PyObject_CallMethO(func, NULL);
- }
- else if (nargs == 1 && kwargs == NULL) {
- if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O))
- return __Pyx_PyObject_CallMethO(func, args[0]);
- }
- #endif
- if (kwargs == NULL) {
- #if CYTHON_VECTORCALL
- #if CYTHON_COMPILING_IN_LIMITED_API
- return PyObject_Vectorcall(func, args, _nargs, NULL);
- #else
- vectorcallfunc f = __Pyx_PyVectorcall_Function(func);
- if (f) {
- return f(func, args, _nargs, NULL);
- }
- #endif
- #endif
- }
- if (nargs == 0) {
- return __Pyx_PyObject_Call(func, __pyx_mstate_global->__pyx_empty_tuple, kwargs);
- }
- #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API
- return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs);
- #else
- return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs);
- #endif
- }
- /* PyObjectCallOneArg (used by CallUnboundCMethod0) */
- static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
- PyObject *args[2] = {NULL, arg};
- return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
- }
- /* UnpackUnboundCMethod (used by CallUnboundCMethod0) */
- #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030C0000
- static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *args, PyObject *kwargs) {
- PyObject *result;
- PyObject *selfless_args = PyTuple_GetSlice(args, 1, PyTuple_Size(args));
- if (unlikely(!selfless_args)) return NULL;
- result = PyObject_Call(method, selfless_args, kwargs);
- Py_DECREF(selfless_args);
- return result;
- }
- #elif CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03090000
- static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) {
- return _PyObject_Vectorcall
- (method, args ? args+1 : NULL, nargs ? nargs-1 : 0, kwnames);
- }
- #else
- static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) {
- return
- #if PY_VERSION_HEX < 0x03090000
- _PyObject_Vectorcall
- #else
- PyObject_Vectorcall
- #endif
- (method, args ? args+1 : NULL, nargs ? (size_t) nargs-1 : 0, kwnames);
- }
- #endif
- static PyMethodDef __Pyx_UnboundCMethod_Def = {
- "CythonUnboundCMethod",
- __PYX_REINTERPRET_FUNCION(PyCFunction, __Pyx_SelflessCall),
- #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030C0000
- METH_VARARGS | METH_KEYWORDS,
- #else
- METH_FASTCALL | METH_KEYWORDS,
- #endif
- NULL
- };
- static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) {
- PyObject *method, *result=NULL;
- method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name);
- if (unlikely(!method))
- return -1;
- result = method;
- #if CYTHON_COMPILING_IN_CPYTHON
- if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type)))
- {
- PyMethodDescrObject *descr = (PyMethodDescrObject*) method;
- target->func = descr->d_method->ml_meth;
- target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS);
- } else
- #endif
- #if CYTHON_COMPILING_IN_PYPY
- #else
- if (PyCFunction_Check(method))
- #endif
- {
- PyObject *self;
- int self_found;
- #if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY
- self = PyObject_GetAttrString(method, "__self__");
- if (!self) {
- PyErr_Clear();
- }
- #else
- self = PyCFunction_GET_SELF(method);
- #endif
- self_found = (self && self != Py_None);
- #if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY
- Py_XDECREF(self);
- #endif
- if (self_found) {
- PyObject *unbound_method = PyCFunction_New(&__Pyx_UnboundCMethod_Def, method);
- if (unlikely(!unbound_method)) return -1;
- Py_DECREF(method);
- result = unbound_method;
- }
- }
- #if !CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- if (unlikely(target->method)) {
- Py_DECREF(result);
- } else
- #endif
- target->method = result;
- return 0;
- }
- /* CallUnboundCMethod0 */
- #if CYTHON_COMPILING_IN_CPYTHON
- static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self) {
- int was_initialized = __Pyx_CachedCFunction_GetAndSetInitializing(cfunc);
- if (likely(was_initialized == 2 && cfunc->func)) {
- if (likely(cfunc->flag == METH_NOARGS))
- return __Pyx_CallCFunction(cfunc, self, NULL);
- if (likely(cfunc->flag == METH_FASTCALL))
- return __Pyx_CallCFunctionFast(cfunc, self, NULL, 0);
- if (cfunc->flag == (METH_FASTCALL | METH_KEYWORDS))
- return __Pyx_CallCFunctionFastWithKeywords(cfunc, self, NULL, 0, NULL);
- if (likely(cfunc->flag == (METH_VARARGS | METH_KEYWORDS)))
- return __Pyx_CallCFunctionWithKeywords(cfunc, self, __pyx_mstate_global->__pyx_empty_tuple, NULL);
- if (cfunc->flag == METH_VARARGS)
- return __Pyx_CallCFunction(cfunc, self, __pyx_mstate_global->__pyx_empty_tuple);
- return __Pyx__CallUnboundCMethod0(cfunc, self);
- }
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- else if (unlikely(was_initialized == 1)) {
- __Pyx_CachedCFunction tmp_cfunc = {
- #ifndef __cplusplus
- 0
- #endif
- };
- tmp_cfunc.type = cfunc->type;
- tmp_cfunc.method_name = cfunc->method_name;
- return __Pyx__CallUnboundCMethod0(&tmp_cfunc, self);
- }
- #endif
- PyObject *result = __Pyx__CallUnboundCMethod0(cfunc, self);
- __Pyx_CachedCFunction_SetFinishedInitializing(cfunc);
- return result;
- }
- #endif
- static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self) {
- PyObject *result;
- if (unlikely(!cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
- result = __Pyx_PyObject_CallOneArg(cfunc->method, self);
- return result;
- }
- /* py_dict_items (used by OwnedDictNext) */
- static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d) {
- return __Pyx_CallUnboundCMethod0(&__pyx_mstate_global->__pyx_umethod_PyDict_Type_items, d);
- }
- /* py_dict_values (used by OwnedDictNext) */
- static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) {
- return __Pyx_CallUnboundCMethod0(&__pyx_mstate_global->__pyx_umethod_PyDict_Type_values, d);
- }
- /* OwnedDictNext (used by ParseKeywordsImpl) */
- #if CYTHON_AVOID_BORROWED_REFS
- static int __Pyx_PyDict_NextRef(PyObject *p, PyObject **ppos, PyObject **pkey, PyObject **pvalue) {
- PyObject *next = NULL;
- if (!*ppos) {
- if (pvalue) {
- PyObject *dictview = pkey ? __Pyx_PyDict_Items(p) : __Pyx_PyDict_Values(p);
- if (unlikely(!dictview)) goto bad;
- *ppos = PyObject_GetIter(dictview);
- Py_DECREF(dictview);
- } else {
- *ppos = PyObject_GetIter(p);
- }
- if (unlikely(!*ppos)) goto bad;
- }
- next = PyIter_Next(*ppos);
- if (!next) {
- if (PyErr_Occurred()) goto bad;
- return 0;
- }
- if (pkey && pvalue) {
- *pkey = __Pyx_PySequence_ITEM(next, 0);
- if (unlikely(*pkey)) goto bad;
- *pvalue = __Pyx_PySequence_ITEM(next, 1);
- if (unlikely(*pvalue)) goto bad;
- Py_DECREF(next);
- } else if (pkey) {
- *pkey = next;
- } else {
- assert(pvalue);
- *pvalue = next;
- }
- return 1;
- bad:
- Py_XDECREF(next);
- #if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d0000
- PyErr_FormatUnraisable("Exception ignored in __Pyx_PyDict_NextRef");
- #else
- PyErr_WriteUnraisable(__pyx_mstate_global->__pyx_n_u_Pyx_PyDict_NextRef);
- #endif
- if (pkey) *pkey = NULL;
- if (pvalue) *pvalue = NULL;
- return 0;
- }
- #else // !CYTHON_AVOID_BORROWED_REFS
- static int __Pyx_PyDict_NextRef(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue) {
- int result = PyDict_Next(p, ppos, pkey, pvalue);
- if (likely(result == 1)) {
- if (pkey) Py_INCREF(*pkey);
- if (pvalue) Py_INCREF(*pvalue);
- }
- return result;
- }
- #endif
- /* RaiseDoubleKeywords (used by ParseKeywordsImpl) */
- static void __Pyx_RaiseDoubleKeywordsError(
- const char* func_name,
- PyObject* kw_name)
- {
- PyErr_Format(PyExc_TypeError,
- "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
- }
- /* CallUnboundCMethod2 */
- #if CYTHON_COMPILING_IN_CPYTHON
- static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *cfunc, PyObject *self, PyObject *arg1, PyObject *arg2) {
- int was_initialized = __Pyx_CachedCFunction_GetAndSetInitializing(cfunc);
- if (likely(was_initialized == 2 && cfunc->func)) {
- PyObject *args[2] = {arg1, arg2};
- if (cfunc->flag == METH_FASTCALL) {
- return __Pyx_CallCFunctionFast(cfunc, self, args, 2);
- }
- if (cfunc->flag == (METH_FASTCALL | METH_KEYWORDS))
- return __Pyx_CallCFunctionFastWithKeywords(cfunc, self, args, 2, NULL);
- }
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- else if (unlikely(was_initialized == 1)) {
- __Pyx_CachedCFunction tmp_cfunc = {
- #ifndef __cplusplus
- 0
- #endif
- };
- tmp_cfunc.type = cfunc->type;
- tmp_cfunc.method_name = cfunc->method_name;
- return __Pyx__CallUnboundCMethod2(&tmp_cfunc, self, arg1, arg2);
- }
- #endif
- PyObject *result = __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2);
- __Pyx_CachedCFunction_SetFinishedInitializing(cfunc);
- return result;
- }
- #endif
- static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg1, PyObject* arg2){
- if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
- #if CYTHON_COMPILING_IN_CPYTHON
- if (cfunc->func && (cfunc->flag & METH_VARARGS)) {
- PyObject *result = NULL;
- PyObject *args = PyTuple_New(2);
- if (unlikely(!args)) return NULL;
- Py_INCREF(arg1);
- PyTuple_SET_ITEM(args, 0, arg1);
- Py_INCREF(arg2);
- PyTuple_SET_ITEM(args, 1, arg2);
- if (cfunc->flag & METH_KEYWORDS)
- result = __Pyx_CallCFunctionWithKeywords(cfunc, self, args, NULL);
- else
- result = __Pyx_CallCFunction(cfunc, self, args);
- Py_DECREF(args);
- return result;
- }
- #endif
- {
- PyObject *args[4] = {NULL, self, arg1, arg2};
- return __Pyx_PyObject_FastCall(cfunc->method, args+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
- }
- }
- /* ParseKeywordsImpl (used by ParseKeywords) */
- static int __Pyx_ValidateDuplicatePosArgs(
- PyObject *kwds,
- PyObject ** const argnames[],
- PyObject ** const *first_kw_arg,
- const char* function_name)
- {
- PyObject ** const *name = argnames;
- while (name != first_kw_arg) {
- PyObject *key = **name;
- int found = PyDict_Contains(kwds, key);
- if (unlikely(found)) {
- if (found == 1) __Pyx_RaiseDoubleKeywordsError(function_name, key);
- goto bad;
- }
- name++;
- }
- return 0;
- bad:
- return -1;
- }
- #if CYTHON_USE_UNICODE_INTERNALS
- static CYTHON_INLINE int __Pyx_UnicodeKeywordsEqual(PyObject *s1, PyObject *s2) {
- int kind;
- Py_ssize_t len = PyUnicode_GET_LENGTH(s1);
- if (len != PyUnicode_GET_LENGTH(s2)) return 0;
- kind = PyUnicode_KIND(s1);
- if (kind != PyUnicode_KIND(s2)) return 0;
- const void *data1 = PyUnicode_DATA(s1);
- const void *data2 = PyUnicode_DATA(s2);
- return (memcmp(data1, data2, (size_t) len * (size_t) kind) == 0);
- }
- #endif
- static int __Pyx_MatchKeywordArg_str(
- PyObject *key,
- PyObject ** const argnames[],
- PyObject ** const *first_kw_arg,
- size_t *index_found,
- const char *function_name)
- {
- PyObject ** const *name;
- #if CYTHON_USE_UNICODE_INTERNALS
- Py_hash_t key_hash = ((PyASCIIObject*)key)->hash;
- if (unlikely(key_hash == -1)) {
- key_hash = PyObject_Hash(key);
- if (unlikely(key_hash == -1))
- goto bad;
- }
- #endif
- name = first_kw_arg;
- while (*name) {
- PyObject *name_str = **name;
- #if CYTHON_USE_UNICODE_INTERNALS
- if (key_hash == ((PyASCIIObject*)name_str)->hash && __Pyx_UnicodeKeywordsEqual(name_str, key)) {
- *index_found = (size_t) (name - argnames);
- return 1;
- }
- #else
- #if CYTHON_ASSUME_SAFE_SIZE
- if (PyUnicode_GET_LENGTH(name_str) == PyUnicode_GET_LENGTH(key))
- #endif
- {
- int cmp = PyUnicode_Compare(name_str, key);
- if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
- if (cmp == 0) {
- *index_found = (size_t) (name - argnames);
- return 1;
- }
- }
- #endif
- name++;
- }
- name = argnames;
- while (name != first_kw_arg) {
- PyObject *name_str = **name;
- #if CYTHON_USE_UNICODE_INTERNALS
- if (unlikely(key_hash == ((PyASCIIObject*)name_str)->hash)) {
- if (__Pyx_UnicodeKeywordsEqual(name_str, key))
- goto arg_passed_twice;
- }
- #else
- #if CYTHON_ASSUME_SAFE_SIZE
- if (PyUnicode_GET_LENGTH(name_str) == PyUnicode_GET_LENGTH(key))
- #endif
- {
- if (unlikely(name_str == key)) goto arg_passed_twice;
- int cmp = PyUnicode_Compare(name_str, key);
- if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
- if (cmp == 0) goto arg_passed_twice;
- }
- #endif
- name++;
- }
- return 0;
- arg_passed_twice:
- __Pyx_RaiseDoubleKeywordsError(function_name, key);
- goto bad;
- bad:
- return -1;
- }
- static int __Pyx_MatchKeywordArg_nostr(
- PyObject *key,
- PyObject ** const argnames[],
- PyObject ** const *first_kw_arg,
- size_t *index_found,
- const char *function_name)
- {
- PyObject ** const *name;
- if (unlikely(!PyUnicode_Check(key))) goto invalid_keyword_type;
- name = first_kw_arg;
- while (*name) {
- int cmp = PyObject_RichCompareBool(**name, key, Py_EQ);
- if (cmp == 1) {
- *index_found = (size_t) (name - argnames);
- return 1;
- }
- if (unlikely(cmp == -1)) goto bad;
- name++;
- }
- name = argnames;
- while (name != first_kw_arg) {
- int cmp = PyObject_RichCompareBool(**name, key, Py_EQ);
- if (unlikely(cmp != 0)) {
- if (cmp == 1) goto arg_passed_twice;
- else goto bad;
- }
- name++;
- }
- return 0;
- arg_passed_twice:
- __Pyx_RaiseDoubleKeywordsError(function_name, key);
- goto bad;
- invalid_keyword_type:
- PyErr_Format(PyExc_TypeError,
- "%.200s() keywords must be strings", function_name);
- goto bad;
- bad:
- return -1;
- }
- static CYTHON_INLINE int __Pyx_MatchKeywordArg(
- PyObject *key,
- PyObject ** const argnames[],
- PyObject ** const *first_kw_arg,
- size_t *index_found,
- const char *function_name)
- {
- return likely(PyUnicode_CheckExact(key)) ?
- __Pyx_MatchKeywordArg_str(key, argnames, first_kw_arg, index_found, function_name) :
- __Pyx_MatchKeywordArg_nostr(key, argnames, first_kw_arg, index_found, function_name);
- }
- static void __Pyx_RejectUnknownKeyword(
- PyObject *kwds,
- PyObject ** const argnames[],
- PyObject ** const *first_kw_arg,
- const char *function_name)
- {
- #if CYTHON_AVOID_BORROWED_REFS
- PyObject *pos = NULL;
- #else
- Py_ssize_t pos = 0;
- #endif
- PyObject *key = NULL;
- __Pyx_BEGIN_CRITICAL_SECTION(kwds);
- while (
- #if CYTHON_AVOID_BORROWED_REFS
- __Pyx_PyDict_NextRef(kwds, &pos, &key, NULL)
- #else
- PyDict_Next(kwds, &pos, &key, NULL)
- #endif
- ) {
- PyObject** const *name = first_kw_arg;
- while (*name && (**name != key)) name++;
- if (!*name) {
- size_t index_found = 0;
- int cmp = __Pyx_MatchKeywordArg(key, argnames, first_kw_arg, &index_found, function_name);
- if (cmp != 1) {
- if (cmp == 0) {
- PyErr_Format(PyExc_TypeError,
- "%s() got an unexpected keyword argument '%U'",
- function_name, key);
- }
- #if CYTHON_AVOID_BORROWED_REFS
- Py_DECREF(key);
- #endif
- break;
- }
- }
- #if CYTHON_AVOID_BORROWED_REFS
- Py_DECREF(key);
- #endif
- }
- __Pyx_END_CRITICAL_SECTION();
- #if CYTHON_AVOID_BORROWED_REFS
- Py_XDECREF(pos);
- #endif
- assert(PyErr_Occurred());
- }
- static int __Pyx_ParseKeywordDict(
- PyObject *kwds,
- PyObject ** const argnames[],
- PyObject *values[],
- Py_ssize_t num_pos_args,
- Py_ssize_t num_kwargs,
- const char* function_name,
- int ignore_unknown_kwargs)
- {
- PyObject** const *name;
- PyObject** const *first_kw_arg = argnames + num_pos_args;
- Py_ssize_t extracted = 0;
- #if !CYTHON_COMPILING_IN_PYPY || defined(PyArg_ValidateKeywordArguments)
- if (unlikely(!PyArg_ValidateKeywordArguments(kwds))) return -1;
- #endif
- name = first_kw_arg;
- while (*name && num_kwargs > extracted) {
- PyObject * key = **name;
- PyObject *value;
- int found = 0;
- #if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
- found = PyDict_GetItemRef(kwds, key, &value);
- #else
- value = PyDict_GetItemWithError(kwds, key);
- if (value) {
- Py_INCREF(value);
- found = 1;
- } else {
- if (unlikely(PyErr_Occurred())) goto bad;
- }
- #endif
- if (found) {
- if (unlikely(found < 0)) goto bad;
- values[name-argnames] = value;
- extracted++;
- }
- name++;
- }
- if (num_kwargs > extracted) {
- if (ignore_unknown_kwargs) {
- if (unlikely(__Pyx_ValidateDuplicatePosArgs(kwds, argnames, first_kw_arg, function_name) == -1))
- goto bad;
- } else {
- __Pyx_RejectUnknownKeyword(kwds, argnames, first_kw_arg, function_name);
- goto bad;
- }
- }
- return 0;
- bad:
- return -1;
- }
- static int __Pyx_ParseKeywordDictToDict(
- PyObject *kwds,
- PyObject ** const argnames[],
- PyObject *kwds2,
- PyObject *values[],
- Py_ssize_t num_pos_args,
- const char* function_name)
- {
- PyObject** const *name;
- PyObject** const *first_kw_arg = argnames + num_pos_args;
- Py_ssize_t len;
- #if !CYTHON_COMPILING_IN_PYPY || defined(PyArg_ValidateKeywordArguments)
- if (unlikely(!PyArg_ValidateKeywordArguments(kwds))) return -1;
- #endif
- if (PyDict_Update(kwds2, kwds) < 0) goto bad;
- name = first_kw_arg;
- while (*name) {
- PyObject *key = **name;
- PyObject *value;
- #if !CYTHON_COMPILING_IN_LIMITED_API && (PY_VERSION_HEX >= 0x030d00A2 || defined(PyDict_Pop))
- int found = PyDict_Pop(kwds2, key, &value);
- if (found) {
- if (unlikely(found < 0)) goto bad;
- values[name-argnames] = value;
- }
- #elif __PYX_LIMITED_VERSION_HEX >= 0x030d0000
- int found = PyDict_GetItemRef(kwds2, key, &value);
- if (found) {
- if (unlikely(found < 0)) goto bad;
- values[name-argnames] = value;
- if (unlikely(PyDict_DelItem(kwds2, key) < 0)) goto bad;
- }
- #else
- #if CYTHON_COMPILING_IN_CPYTHON
- value = _PyDict_Pop(kwds2, key, kwds2);
- #else
- value = __Pyx_CallUnboundCMethod2(&__pyx_mstate_global->__pyx_umethod_PyDict_Type_pop, kwds2, key, kwds2);
- #endif
- if (value == kwds2) {
- Py_DECREF(value);
- } else {
- if (unlikely(!value)) goto bad;
- values[name-argnames] = value;
- }
- #endif
- name++;
- }
- len = PyDict_Size(kwds2);
- if (len > 0) {
- return __Pyx_ValidateDuplicatePosArgs(kwds, argnames, first_kw_arg, function_name);
- } else if (unlikely(len == -1)) {
- goto bad;
- }
- return 0;
- bad:
- return -1;
- }
- static int __Pyx_ParseKeywordsTuple(
- PyObject *kwds,
- PyObject * const *kwvalues,
- PyObject ** const argnames[],
- PyObject *kwds2,
- PyObject *values[],
- Py_ssize_t num_pos_args,
- Py_ssize_t num_kwargs,
- const char* function_name,
- int ignore_unknown_kwargs)
- {
- PyObject *key = NULL;
- PyObject** const * name;
- PyObject** const *first_kw_arg = argnames + num_pos_args;
- for (Py_ssize_t pos = 0; pos < num_kwargs; pos++) {
- #if CYTHON_AVOID_BORROWED_REFS
- key = __Pyx_PySequence_ITEM(kwds, pos);
- #else
- key = __Pyx_PyTuple_GET_ITEM(kwds, pos);
- #endif
- #if !CYTHON_ASSUME_SAFE_MACROS
- if (unlikely(!key)) goto bad;
- #endif
- name = first_kw_arg;
- while (*name && (**name != key)) name++;
- if (*name) {
- PyObject *value = kwvalues[pos];
- values[name-argnames] = __Pyx_NewRef(value);
- } else {
- size_t index_found = 0;
- int cmp = __Pyx_MatchKeywordArg(key, argnames, first_kw_arg, &index_found, function_name);
- if (cmp == 1) {
- PyObject *value = kwvalues[pos];
- values[index_found] = __Pyx_NewRef(value);
- } else {
- if (unlikely(cmp == -1)) goto bad;
- if (kwds2) {
- PyObject *value = kwvalues[pos];
- if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
- } else if (!ignore_unknown_kwargs) {
- goto invalid_keyword;
- }
- }
- }
- #if CYTHON_AVOID_BORROWED_REFS
- Py_DECREF(key);
- key = NULL;
- #endif
- }
- return 0;
- invalid_keyword:
- PyErr_Format(PyExc_TypeError,
- "%s() got an unexpected keyword argument '%U'",
- function_name, key);
- goto bad;
- bad:
- #if CYTHON_AVOID_BORROWED_REFS
- Py_XDECREF(key);
- #endif
- return -1;
- }
- /* ParseKeywords */
- static int __Pyx_ParseKeywords(
- PyObject *kwds,
- PyObject * const *kwvalues,
- PyObject ** const argnames[],
- PyObject *kwds2,
- PyObject *values[],
- Py_ssize_t num_pos_args,
- Py_ssize_t num_kwargs,
- const char* function_name,
- int ignore_unknown_kwargs)
- {
- if (CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)))
- return __Pyx_ParseKeywordsTuple(kwds, kwvalues, argnames, kwds2, values, num_pos_args, num_kwargs, function_name, ignore_unknown_kwargs);
- else if (kwds2)
- return __Pyx_ParseKeywordDictToDict(kwds, argnames, kwds2, values, num_pos_args, function_name);
- else
- return __Pyx_ParseKeywordDict(kwds, argnames, values, num_pos_args, num_kwargs, function_name, ignore_unknown_kwargs);
- }
- /* RaiseArgTupleInvalid */
- 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,
- "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
- func_name, more_or_less, num_expected,
- (num_expected == 1) ? "" : "s", num_found);
- }
- /* PyDictVersioning (used by GetModuleGlobalName) */
- #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
- static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) {
- PyObject *dict = Py_TYPE(obj)->tp_dict;
- return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0;
- }
- static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) {
- PyObject **dictptr = NULL;
- Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset;
- if (offset) {
- #if CYTHON_COMPILING_IN_CPYTHON
- dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj);
- #else
- dictptr = _PyObject_GetDictPtr(obj);
- #endif
- }
- return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0;
- }
- static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) {
- PyObject *dict = Py_TYPE(obj)->tp_dict;
- if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict)))
- return 0;
- return obj_dict_version == __Pyx_get_object_dict_version(obj);
- }
- #endif
- /* GetModuleGlobalName */
- #if CYTHON_USE_DICT_VERSIONS
- static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value)
- #else
- static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name)
- #endif
- {
- PyObject *result;
- #if CYTHON_COMPILING_IN_LIMITED_API
- if (unlikely(!__pyx_m)) {
- if (!PyErr_Occurred())
- PyErr_SetNone(PyExc_NameError);
- return NULL;
- }
- result = PyObject_GetAttr(__pyx_m, name);
- if (likely(result)) {
- return result;
- }
- PyErr_Clear();
- #elif CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
- if (unlikely(__Pyx_PyDict_GetItemRef(__pyx_mstate_global->__pyx_d, name, &result) == -1)) PyErr_Clear();
- __PYX_UPDATE_DICT_CACHE(__pyx_mstate_global->__pyx_d, result, *dict_cached_value, *dict_version)
- if (likely(result)) {
- return result;
- }
- #else
- result = _PyDict_GetItem_KnownHash(__pyx_mstate_global->__pyx_d, name, ((PyASCIIObject *) name)->hash);
- __PYX_UPDATE_DICT_CACHE(__pyx_mstate_global->__pyx_d, result, *dict_cached_value, *dict_version)
- if (likely(result)) {
- return __Pyx_NewRef(result);
- }
- PyErr_Clear();
- #endif
- return __Pyx_GetBuiltinName(name);
- }
- /* PyLongBinop */
- #if !CYTHON_COMPILING_IN_PYPY
- static PyObject* __Pyx_Fallback___Pyx_PyLong_MultiplyCObj(PyObject *op1, PyObject *op2, int inplace) {
- return (inplace ? PyNumber_InPlaceMultiply : PyNumber_Multiply)(op1, op2);
- }
- #if CYTHON_USE_PYLONG_INTERNALS
- static PyObject* __Pyx_Unpacked___Pyx_PyLong_MultiplyCObj(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
- CYTHON_MAYBE_UNUSED_VAR(inplace);
- CYTHON_UNUSED_VAR(zerodivision_check);
- const long a = intval;
- long b;
- const PY_LONG_LONG lla = intval;
- PY_LONG_LONG llb;
- if (unlikely(__Pyx_PyLong_IsZero(op2))) {
- return __Pyx_NewRef(op2);
- }
- const int is_positive = __Pyx_PyLong_IsPos(op2);
- const digit* digits = __Pyx_PyLong_Digits(op2);
- const Py_ssize_t size = __Pyx_PyLong_DigitCount(op2);
- if (likely(size == 1)) {
- b = (long) digits[0];
- if (!is_positive) b *= -1;
- } else {
- switch (size) {
- case 2:
- if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT+30) {
- b = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if (!is_positive) b *= -1;
- goto calculate_long;
- } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT+30) {
- llb = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
- if (!is_positive) llb *= -1;
- goto calculate_long_long;
- }
- break;
- case 3:
- if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT+30) {
- b = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if (!is_positive) b *= -1;
- goto calculate_long;
- } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT+30) {
- llb = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
- if (!is_positive) llb *= -1;
- goto calculate_long_long;
- }
- break;
- case 4:
- if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT+30) {
- b = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if (!is_positive) b *= -1;
- goto calculate_long;
- } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT+30) {
- llb = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
- if (!is_positive) llb *= -1;
- goto calculate_long_long;
- }
- break;
- }
- return PyLong_Type.tp_as_number->nb_multiply(op1, op2);
- }
- calculate_long:
- CYTHON_UNUSED_VAR(a);
- CYTHON_UNUSED_VAR(b);
- llb = b;
- goto calculate_long_long;
- calculate_long_long:
- {
- PY_LONG_LONG llx;
- llx = lla * llb;
- return PyLong_FromLongLong(llx);
- }
-
- }
- #endif
- static PyObject* __Pyx_Float___Pyx_PyLong_MultiplyCObj(PyObject *float_val, long intval, int zerodivision_check) {
- CYTHON_UNUSED_VAR(zerodivision_check);
- const long a = intval;
- double b = __Pyx_PyFloat_AS_DOUBLE(float_val);
- double result;
-
- result = ((double)a) * (double)b;
- return PyFloat_FromDouble(result);
- }
- static CYTHON_INLINE PyObject* __Pyx_PyLong_MultiplyCObj(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
- CYTHON_MAYBE_UNUSED_VAR(intval);
- CYTHON_UNUSED_VAR(zerodivision_check);
- #if CYTHON_USE_PYLONG_INTERNALS
- if (likely(PyLong_CheckExact(op2))) {
- return __Pyx_Unpacked___Pyx_PyLong_MultiplyCObj(op1, op2, intval, inplace, zerodivision_check);
- }
- #endif
- if (PyFloat_CheckExact(op2)) {
- return __Pyx_Float___Pyx_PyLong_MultiplyCObj(op2, intval, zerodivision_check);
- }
- return __Pyx_Fallback___Pyx_PyLong_MultiplyCObj(op1, op2, inplace);
- }
- #endif
- /* RaiseTooManyValuesToUnpack */
- 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);
- }
- /* RaiseNeedMoreValuesToUnpack */
- static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
- PyErr_Format(PyExc_ValueError,
- "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
- index, (index == 1) ? "" : "s");
- }
- /* IterFinish */
- static CYTHON_INLINE int __Pyx_IterFinish(void) {
- PyObject* exc_type;
- __Pyx_PyThreadState_declare
- __Pyx_PyThreadState_assign
- exc_type = __Pyx_PyErr_CurrentExceptionType();
- if (unlikely(exc_type)) {
- if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))
- return -1;
- __Pyx_PyErr_Clear();
- return 0;
- }
- return 0;
- }
- /* UnpackItemEndCheck */
- static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
- if (unlikely(retval)) {
- Py_DECREF(retval);
- __Pyx_RaiseTooManyValuesError(expected);
- return -1;
- }
- return __Pyx_IterFinish();
- }
- /* PyLongBinop */
- #if !CYTHON_COMPILING_IN_PYPY
- static PyObject* __Pyx_Fallback___Pyx_PyLong_TrueDivideObjC(PyObject *op1, PyObject *op2, int inplace) {
- return (inplace ? PyNumber_InPlaceTrueDivide : PyNumber_TrueDivide)(op1, op2);
- }
- #if CYTHON_USE_PYLONG_INTERNALS
- static PyObject* __Pyx_Unpacked___Pyx_PyLong_TrueDivideObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
- CYTHON_MAYBE_UNUSED_VAR(inplace);
- CYTHON_UNUSED_VAR(zerodivision_check);
- const long b = intval;
- long a;
- if (unlikely(__Pyx_PyLong_IsZero(op1))) {
- }
- const int is_positive = __Pyx_PyLong_IsPos(op1);
- const digit* digits = __Pyx_PyLong_Digits(op1);
- const Py_ssize_t size = __Pyx_PyLong_DigitCount(op1);
- if (likely(size == 1)) {
- a = (long) digits[0];
- if (!is_positive) a *= -1;
- } else {
- switch (size) {
- case 2:
- if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT && 1 * PyLong_SHIFT < 53) {
- a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if (!is_positive) a *= -1;
- goto calculate_long;
- }
- break;
- case 3:
- if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT && 2 * PyLong_SHIFT < 53) {
- a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if (!is_positive) a *= -1;
- goto calculate_long;
- }
- break;
- case 4:
- if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT && 3 * PyLong_SHIFT < 53) {
- a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if (!is_positive) a *= -1;
- goto calculate_long;
- }
- break;
- }
- return PyLong_Type.tp_as_number->nb_true_divide(op1, op2);
- }
- calculate_long:
- if ((8 * sizeof(long) <= 53 || likely(labs(a) <= ((PY_LONG_LONG)1 << 53)))
- || __Pyx_PyLong_DigitCount(op1) <= 52 / PyLong_SHIFT) {
- return PyFloat_FromDouble((double)a / (double)b);
- }
- return PyLong_Type.tp_as_number->nb_true_divide(op1, op2);
- }
- #endif
- static PyObject* __Pyx_Float___Pyx_PyLong_TrueDivideObjC(PyObject *float_val, long intval, int zerodivision_check) {
- CYTHON_UNUSED_VAR(zerodivision_check);
- const long b = intval;
- double a = __Pyx_PyFloat_AS_DOUBLE(float_val);
- double result;
-
- result = ((double)a) / (double)b;
- return PyFloat_FromDouble(result);
- }
- static CYTHON_INLINE PyObject* __Pyx_PyLong_TrueDivideObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
- CYTHON_MAYBE_UNUSED_VAR(intval);
- CYTHON_UNUSED_VAR(zerodivision_check);
- #if CYTHON_USE_PYLONG_INTERNALS
- if (likely(PyLong_CheckExact(op1))) {
- return __Pyx_Unpacked___Pyx_PyLong_TrueDivideObjC(op1, op2, intval, inplace, zerodivision_check);
- }
- #endif
- if (PyFloat_CheckExact(op1)) {
- return __Pyx_Float___Pyx_PyLong_TrueDivideObjC(op1, intval, zerodivision_check);
- }
- return __Pyx_Fallback___Pyx_PyLong_TrueDivideObjC(op1, op2, inplace);
- }
- #endif
- /* PyLongCompare */
- static CYTHON_INLINE int __Pyx_PyLong_BoolNeObjC(PyObject *op1, PyObject *op2, long intval, long inplace) {
- CYTHON_MAYBE_UNUSED_VAR(intval);
- CYTHON_UNUSED_VAR(inplace);
- if (op1 == op2) {
- return 0;
- }
- #if CYTHON_USE_PYLONG_INTERNALS
- if (likely(PyLong_CheckExact(op1))) {
- int unequal;
- unsigned long uintval;
- Py_ssize_t size = __Pyx_PyLong_DigitCount(op1);
- const digit* digits = __Pyx_PyLong_Digits(op1);
- if (intval == 0) {
- return (__Pyx_PyLong_IsZero(op1) != 1);
- } else if (intval < 0) {
- if (__Pyx_PyLong_IsNonNeg(op1))
- return 1;
- intval = -intval;
- } else {
- if (__Pyx_PyLong_IsNeg(op1))
- return 1;
- }
- uintval = (unsigned long) intval;
- #if PyLong_SHIFT * 4 < SIZEOF_LONG*8
- if (uintval >> (PyLong_SHIFT * 4)) {
- unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
- | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
- } else
- #endif
- #if PyLong_SHIFT * 3 < SIZEOF_LONG*8
- if (uintval >> (PyLong_SHIFT * 3)) {
- unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
- | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
- } else
- #endif
- #if PyLong_SHIFT * 2 < SIZEOF_LONG*8
- if (uintval >> (PyLong_SHIFT * 2)) {
- unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
- | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
- } else
- #endif
- #if PyLong_SHIFT * 1 < SIZEOF_LONG*8
- if (uintval >> (PyLong_SHIFT * 1)) {
- unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
- | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
- } else
- #endif
- unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK));
- return (unequal != 0);
- }
- #endif
- if (PyFloat_CheckExact(op1)) {
- const long b = intval;
- double a = __Pyx_PyFloat_AS_DOUBLE(op1);
- return ((double)a != (double)b);
- }
- return __Pyx_PyObject_IsTrueAndDecref(
- PyObject_RichCompare(op1, op2, Py_NE));
- }
- /* GetItemInt */
- static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
- PyObject *r;
- if (unlikely(!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, int unsafe_shared) {
- CYTHON_MAYBE_UNUSED_VAR(unsafe_shared);
- #if CYTHON_ASSUME_SAFE_SIZE
- Py_ssize_t wrapped_i = i;
- if (wraparound & unlikely(i < 0)) {
- wrapped_i += PyList_GET_SIZE(o);
- }
- if ((CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS || !CYTHON_ASSUME_SAFE_MACROS)) {
- return __Pyx_PyList_GetItemRefFast(o, wrapped_i, unsafe_shared);
- } else
- if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) {
- return __Pyx_NewRef(PyList_GET_ITEM(o, wrapped_i));
- }
- return __Pyx_GetItemInt_Generic(o, PyLong_FromSsize_t(i));
- #else
- (void)wraparound;
- (void)boundscheck;
- return PySequence_GetItem(o, i);
- #endif
- }
- static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
- int wraparound, int boundscheck, int unsafe_shared) {
- CYTHON_MAYBE_UNUSED_VAR(unsafe_shared);
- #if CYTHON_ASSUME_SAFE_SIZE && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- Py_ssize_t wrapped_i = i;
- if (wraparound & unlikely(i < 0)) {
- wrapped_i += PyTuple_GET_SIZE(o);
- }
- if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) {
- return __Pyx_NewRef(PyTuple_GET_ITEM(o, wrapped_i));
- }
- return __Pyx_GetItemInt_Generic(o, PyLong_FromSsize_t(i));
- #else
- (void)wraparound;
- (void)boundscheck;
- 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, int unsafe_shared) {
- CYTHON_MAYBE_UNUSED_VAR(unsafe_shared);
- #if CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE
- if (is_list || PyList_CheckExact(o)) {
- Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
- if ((CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS)) {
- return __Pyx_PyList_GetItemRefFast(o, n, unsafe_shared);
- } else if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) {
- return __Pyx_NewRef(PyList_GET_ITEM(o, n));
- }
- } else
- #if !CYTHON_AVOID_BORROWED_REFS
- if (PyTuple_CheckExact(o)) {
- Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
- if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) {
- return __Pyx_NewRef(PyTuple_GET_ITEM(o, n));
- }
- } else
- #endif
- #endif
- #if CYTHON_USE_TYPE_SLOTS && !CYTHON_COMPILING_IN_PYPY
- {
- PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping;
- PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence;
- if (!is_list && mm && mm->mp_subscript) {
- PyObject *r, *key = PyLong_FromSsize_t(i);
- if (unlikely(!key)) return NULL;
- r = mm->mp_subscript(o, key);
- Py_DECREF(key);
- return r;
- }
- if (is_list || likely(sm && sm->sq_item)) {
- if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) {
- Py_ssize_t l = sm->sq_length(o);
- if (likely(l >= 0)) {
- i += l;
- } else {
- if (!PyErr_ExceptionMatches(PyExc_OverflowError))
- return NULL;
- PyErr_Clear();
- }
- }
- return sm->sq_item(o, i);
- }
- }
- #else
- if (is_list || !PyMapping_Check(o)) {
- return PySequence_GetItem(o, i);
- }
- #endif
- (void)wraparound;
- (void)boundscheck;
- return __Pyx_GetItemInt_Generic(o, PyLong_FromSsize_t(i));
- }
- /* ObjectGetItem */
- #if CYTHON_USE_TYPE_SLOTS
- static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) {
- PyObject *runerr = NULL;
- Py_ssize_t key_value;
- key_value = __Pyx_PyIndex_AsSsize_t(index);
- if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) {
- return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1, 1);
- }
- if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) {
- __Pyx_TypeName index_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(index));
- PyErr_Clear();
- PyErr_Format(PyExc_IndexError,
- "cannot fit '" __Pyx_FMT_TYPENAME "' into an index-sized integer", index_type_name);
- __Pyx_DECREF_TypeName(index_type_name);
- }
- return NULL;
- }
- static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *key) {
- __Pyx_TypeName obj_type_name;
- if (likely(PyType_Check(obj))) {
- PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(obj, __pyx_mstate_global->__pyx_n_u_class_getitem);
- if (!meth) {
- PyErr_Clear();
- } else {
- PyObject *result = __Pyx_PyObject_CallOneArg(meth, key);
- Py_DECREF(meth);
- return result;
- }
- }
- obj_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(obj));
- PyErr_Format(PyExc_TypeError,
- "'" __Pyx_FMT_TYPENAME "' object is not subscriptable", obj_type_name);
- __Pyx_DECREF_TypeName(obj_type_name);
- return NULL;
- }
- static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) {
- PyTypeObject *tp = Py_TYPE(obj);
- PyMappingMethods *mm = tp->tp_as_mapping;
- PySequenceMethods *sm = tp->tp_as_sequence;
- if (likely(mm && mm->mp_subscript)) {
- return mm->mp_subscript(obj, key);
- }
- if (likely(sm && sm->sq_item)) {
- return __Pyx_PyObject_GetIndex(obj, key);
- }
- return __Pyx_PyObject_GetItem_Slow(obj, key);
- }
- #endif
- /* PyLongCompare */
- static CYTHON_INLINE int __Pyx_PyLong_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace) {
- CYTHON_MAYBE_UNUSED_VAR(intval);
- CYTHON_UNUSED_VAR(inplace);
- if (op1 == op2) {
- return 1;
- }
- #if CYTHON_USE_PYLONG_INTERNALS
- if (likely(PyLong_CheckExact(op1))) {
- int unequal;
- unsigned long uintval;
- Py_ssize_t size = __Pyx_PyLong_DigitCount(op1);
- const digit* digits = __Pyx_PyLong_Digits(op1);
- if (intval == 0) {
- return (__Pyx_PyLong_IsZero(op1) == 1);
- } else if (intval < 0) {
- if (__Pyx_PyLong_IsNonNeg(op1))
- return 0;
- intval = -intval;
- } else {
- if (__Pyx_PyLong_IsNeg(op1))
- return 0;
- }
- uintval = (unsigned long) intval;
- #if PyLong_SHIFT * 4 < SIZEOF_LONG*8
- if (uintval >> (PyLong_SHIFT * 4)) {
- unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
- | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
- } else
- #endif
- #if PyLong_SHIFT * 3 < SIZEOF_LONG*8
- if (uintval >> (PyLong_SHIFT * 3)) {
- unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
- | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
- } else
- #endif
- #if PyLong_SHIFT * 2 < SIZEOF_LONG*8
- if (uintval >> (PyLong_SHIFT * 2)) {
- unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
- | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
- } else
- #endif
- #if PyLong_SHIFT * 1 < SIZEOF_LONG*8
- if (uintval >> (PyLong_SHIFT * 1)) {
- unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
- | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
- } else
- #endif
- unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK));
- return (unequal == 0);
- }
- #endif
- if (PyFloat_CheckExact(op1)) {
- const long b = intval;
- double a = __Pyx_PyFloat_AS_DOUBLE(op1);
- return ((double)a == (double)b);
- }
- return __Pyx_PyObject_IsTrueAndDecref(
- PyObject_RichCompare(op1, op2, Py_EQ));
- }
- /* RaiseUnboundLocalError */
- static void __Pyx_RaiseUnboundLocalError(const char *varname) {
- PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname);
- }
- /* GetException (used by pep479) */
- #if CYTHON_FAST_THREAD_STATE
- static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb)
- #else
- static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
- #endif
- {
- PyObject *local_type = NULL, *local_value, *local_tb = NULL;
- #if CYTHON_FAST_THREAD_STATE
- PyObject *tmp_type, *tmp_value, *tmp_tb;
- #if PY_VERSION_HEX >= 0x030C0000
- local_value = tstate->current_exception;
- tstate->current_exception = 0;
- #else
- 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;
- #endif
- #elif __PYX_LIMITED_VERSION_HEX > 0x030C0000
- local_value = PyErr_GetRaisedException();
- #else
- PyErr_Fetch(&local_type, &local_value, &local_tb);
- #endif
- #if __PYX_LIMITED_VERSION_HEX > 0x030C0000
- if (likely(local_value)) {
- local_type = (PyObject*) Py_TYPE(local_value);
- Py_INCREF(local_type);
- local_tb = PyException_GetTraceback(local_value);
- }
- #else
- PyErr_NormalizeException(&local_type, &local_value, &local_tb);
- #if CYTHON_FAST_THREAD_STATE
- if (unlikely(tstate->curexc_type))
- #else
- if (unlikely(PyErr_Occurred()))
- #endif
- goto bad;
- if (local_tb) {
- if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
- goto bad;
- }
- #endif // __PYX_LIMITED_VERSION_HEX > 0x030C0000
- Py_XINCREF(local_tb);
- Py_XINCREF(local_type);
- Py_XINCREF(local_value);
- *type = local_type;
- *value = local_value;
- *tb = local_tb;
- #if CYTHON_FAST_THREAD_STATE
- #if CYTHON_USE_EXC_INFO_STACK
- {
- _PyErr_StackItem *exc_info = tstate->exc_info;
- #if PY_VERSION_HEX >= 0x030B00a4
- tmp_value = exc_info->exc_value;
- exc_info->exc_value = local_value;
- tmp_type = NULL;
- tmp_tb = NULL;
- Py_XDECREF(local_type);
- Py_XDECREF(local_tb);
- #else
- tmp_type = exc_info->exc_type;
- tmp_value = exc_info->exc_value;
- tmp_tb = exc_info->exc_traceback;
- exc_info->exc_type = local_type;
- exc_info->exc_value = local_value;
- exc_info->exc_traceback = local_tb;
- #endif
- }
- #else
- 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;
- #endif
- Py_XDECREF(tmp_type);
- Py_XDECREF(tmp_value);
- Py_XDECREF(tmp_tb);
- #elif __PYX_LIMITED_VERSION_HEX >= 0x030b0000
- PyErr_SetHandledException(local_value);
- Py_XDECREF(local_value);
- Py_XDECREF(local_type);
- Py_XDECREF(local_tb);
- #else
- PyErr_SetExcInfo(local_type, local_value, local_tb);
- #endif
- return 0;
- #if __PYX_LIMITED_VERSION_HEX <= 0x030C0000
- bad:
- *type = 0;
- *value = 0;
- *tb = 0;
- Py_XDECREF(local_type);
- Py_XDECREF(local_value);
- Py_XDECREF(local_tb);
- return -1;
- #endif
- }
- /* pep479 */
- static void __Pyx_Generator_Replace_StopIteration(int in_async_gen) {
- PyObject *exc, *val, *tb, *cur_exc, *new_exc;
- __Pyx_PyThreadState_declare
- int is_async_stopiteration = 0;
- CYTHON_MAYBE_UNUSED_VAR(in_async_gen);
- __Pyx_PyThreadState_assign
- cur_exc = __Pyx_PyErr_CurrentExceptionType();
- if (likely(!__Pyx_PyErr_GivenExceptionMatches(cur_exc, PyExc_StopIteration))) {
- if (in_async_gen && unlikely(__Pyx_PyErr_GivenExceptionMatches(cur_exc, PyExc_StopAsyncIteration))) {
- is_async_stopiteration = 1;
- } else {
- return;
- }
- }
- __Pyx_GetException(&exc, &val, &tb);
- Py_XDECREF(exc);
- Py_XDECREF(tb);
- new_exc = PyObject_CallFunction(PyExc_RuntimeError, "s",
- is_async_stopiteration ? "async generator raised StopAsyncIteration" :
- in_async_gen ? "async generator raised StopIteration" :
- "generator raised StopIteration");
- if (!new_exc) {
- Py_XDECREF(val);
- return;
- }
- PyException_SetCause(new_exc, val); // steals ref to val
- PyErr_SetObject(PyExc_RuntimeError, new_exc);
- }
- /* SliceObject */
- 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) {
- __Pyx_TypeName obj_type_name;
- #if CYTHON_USE_TYPE_SLOTS
- PyMappingMethods* 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 = PyLong_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 = PyLong_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_USE_TYPE_SLOTS
- result = mp->mp_subscript(obj, py_slice);
- #else
- result = PyObject_GetItem(obj, py_slice);
- #endif
- if (!_py_slice) {
- Py_DECREF(py_slice);
- }
- return result;
- }
- obj_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(obj));
- PyErr_Format(PyExc_TypeError,
- "'" __Pyx_FMT_TYPENAME "' object is unsliceable", obj_type_name);
- __Pyx_DECREF_TypeName(obj_type_name);
- bad:
- return NULL;
- }
- /* SetItemInt */
- static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
- int r;
- if (unlikely(!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, int unsafe_shared) {
- CYTHON_MAYBE_UNUSED_VAR(unsafe_shared);
- #if CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE && !CYTHON_AVOID_BORROWED_REFS
- if (is_list || PyList_CheckExact(o)) {
- Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o));
- if ((CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS && !__Pyx_IS_UNIQUELY_REFERENCED(o, unsafe_shared))) {
- Py_INCREF(v);
- return PyList_SetItem(o, n, v);
- } else if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o)))) {
- PyObject* old;
- Py_INCREF(v);
- old = PyList_GET_ITEM(o, n);
- PyList_SET_ITEM(o, n, v);
- Py_DECREF(old);
- return 0;
- }
- } else
- #endif
- #if CYTHON_USE_TYPE_SLOTS && !CYTHON_COMPILING_IN_PYPY
- {
- PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping;
- PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence;
- if (!is_list && mm && mm->mp_ass_subscript) {
- int r;
- PyObject *key = PyLong_FromSsize_t(i);
- if (unlikely(!key)) return -1;
- r = mm->mp_ass_subscript(o, key, v);
- Py_DECREF(key);
- return r;
- }
- if (is_list || likely(sm && sm->sq_ass_item)) {
- if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) {
- Py_ssize_t l = sm->sq_length(o);
- if (likely(l >= 0)) {
- i += l;
- } else {
- if (!PyErr_ExceptionMatches(PyExc_OverflowError))
- return -1;
- PyErr_Clear();
- }
- }
- return sm->sq_ass_item(o, i, v);
- }
- }
- #else
- if (is_list || !PyMapping_Check(o)) {
- return PySequence_SetItem(o, i, v);
- }
- #endif
- (void)wraparound;
- (void)boundscheck;
- return __Pyx_SetItemInt_Generic(o, PyLong_FromSsize_t(i), v);
- }
- /* CoroutineSetYieldFrom (used by GeneratorYieldFrom) */
- static void
- __Pyx_Coroutine_Set_Owned_Yield_From(__pyx_CoroutineObject *gen, PyObject *yf) {
- assert (!gen->yieldfrom);
- #if CYTHON_USE_AM_SEND
- assert (!gen->yieldfrom_am_send);
- #if PY_VERSION_HEX < 0x030A00F0
- if (__Pyx_PyType_HasFeature(Py_TYPE(yf), __Pyx_TPFLAGS_HAVE_AM_SEND))
- #endif
- {
- __Pyx_pyiter_sendfunc am_send;
- #if __PYX_LIMITED_VERSION_HEX >= 0x030A0000
- am_send = __Pyx_PyObject_TryGetSubSlot(yf, tp_as_async, am_send, __Pyx_pyiter_sendfunc);
- #else
- __Pyx_PyAsyncMethodsStruct* tp_as_async = (__Pyx_PyAsyncMethodsStruct*) Py_TYPE(yf)->tp_as_async;
- am_send = tp_as_async ? tp_as_async->am_send : NULL;
- #endif
- if (likely(am_send)) {
- gen->yieldfrom_am_send = am_send;
- }
- }
- #endif
- gen->yieldfrom = yf;
- }
- /* dict_setdefault (used by FetchCommonType) */
- static CYTHON_INLINE PyObject *__Pyx_PyDict_SetDefault(PyObject *d, PyObject *key, PyObject *default_value) {
- PyObject* value;
- #if __PYX_LIMITED_VERSION_HEX >= 0x030F0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4)
- PyDict_SetDefaultRef(d, key, default_value, &value);
- #elif CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX >= 0x030C0000
- PyObject *args[] = {d, key, default_value};
- value = PyObject_VectorcallMethod(__pyx_mstate_global->__pyx_n_u_setdefault, args, 3 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
- #elif CYTHON_COMPILING_IN_LIMITED_API
- value = PyObject_CallMethodObjArgs(d, __pyx_mstate_global->__pyx_n_u_setdefault, key, default_value, NULL);
- #else
- value = PyDict_SetDefault(d, key, default_value);
- if (unlikely(!value)) return NULL;
- Py_INCREF(value);
- #endif
- return value;
- }
- /* LimitedApiGetTypeDict (used by SetItemOnTypeDict) */
- #if CYTHON_COMPILING_IN_LIMITED_API
- static Py_ssize_t __Pyx_GetTypeDictOffset(void) {
- PyObject *tp_dictoffset_o;
- Py_ssize_t tp_dictoffset;
- tp_dictoffset_o = PyObject_GetAttrString((PyObject*)(&PyType_Type), "__dictoffset__");
- if (unlikely(!tp_dictoffset_o)) return -1;
- tp_dictoffset = PyLong_AsSsize_t(tp_dictoffset_o);
- Py_DECREF(tp_dictoffset_o);
- if (unlikely(tp_dictoffset == 0)) {
- PyErr_SetString(
- PyExc_TypeError,
- "'type' doesn't have a dictoffset");
- return -1;
- } else if (unlikely(tp_dictoffset < 0)) {
- PyErr_SetString(
- PyExc_TypeError,
- "'type' has an unexpected negative dictoffset. "
- "Please report this as Cython bug");
- return -1;
- }
- return tp_dictoffset;
- }
- static PyObject *__Pyx_GetTypeDict(PyTypeObject *tp) {
- static Py_ssize_t tp_dictoffset = 0;
- if (unlikely(tp_dictoffset == 0)) {
- tp_dictoffset = __Pyx_GetTypeDictOffset();
- if (unlikely(tp_dictoffset == -1 && PyErr_Occurred())) {
- tp_dictoffset = 0; // try again next time?
- return NULL;
- }
- }
- return *(PyObject**)((char*)tp + tp_dictoffset);
- }
- #endif
- /* SetItemOnTypeDict (used by FixUpExtensionType) */
- static int __Pyx__SetItemOnTypeDict(PyTypeObject *tp, PyObject *k, PyObject *v) {
- int result;
- PyObject *tp_dict;
- #if CYTHON_COMPILING_IN_LIMITED_API
- tp_dict = __Pyx_GetTypeDict(tp);
- if (unlikely(!tp_dict)) return -1;
- #else
- tp_dict = tp->tp_dict;
- #endif
- result = PyDict_SetItem(tp_dict, k, v);
- if (likely(!result)) {
- PyType_Modified(tp);
- if (unlikely(PyObject_HasAttr(v, __pyx_mstate_global->__pyx_n_u_set_name))) {
- PyObject *setNameResult = PyObject_CallMethodObjArgs(v, __pyx_mstate_global->__pyx_n_u_set_name, (PyObject *) tp, k, NULL);
- if (!setNameResult) return -1;
- Py_DECREF(setNameResult);
- }
- }
- return result;
- }
- /* FixUpExtensionType (used by FetchCommonType) */
- static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) {
- #if __PYX_LIMITED_VERSION_HEX > 0x030900B1
- CYTHON_UNUSED_VAR(spec);
- CYTHON_UNUSED_VAR(type);
- CYTHON_UNUSED_VAR(__Pyx__SetItemOnTypeDict);
- #else
- const PyType_Slot *slot = spec->slots;
- int changed = 0;
- #if !CYTHON_COMPILING_IN_LIMITED_API
- while (slot && slot->slot && slot->slot != Py_tp_members)
- slot++;
- if (slot && slot->slot == Py_tp_members) {
- #if !CYTHON_COMPILING_IN_CPYTHON
- const
- #endif // !CYTHON_COMPILING_IN_CPYTHON)
- PyMemberDef *memb = (PyMemberDef*) slot->pfunc;
- while (memb && memb->name) {
- if (memb->name[0] == '_' && memb->name[1] == '_') {
- if (strcmp(memb->name, "__weaklistoffset__") == 0) {
- assert(memb->type == T_PYSSIZET);
- assert(memb->flags == READONLY);
- type->tp_weaklistoffset = memb->offset;
- changed = 1;
- }
- else if (strcmp(memb->name, "__dictoffset__") == 0) {
- assert(memb->type == T_PYSSIZET);
- assert(memb->flags == READONLY);
- type->tp_dictoffset = memb->offset;
- changed = 1;
- }
- #if CYTHON_METH_FASTCALL
- else if (strcmp(memb->name, "__vectorcalloffset__") == 0) {
- assert(memb->type == T_PYSSIZET);
- assert(memb->flags == READONLY);
- type->tp_vectorcall_offset = memb->offset;
- changed = 1;
- }
- #endif // CYTHON_METH_FASTCALL
- #if !CYTHON_COMPILING_IN_PYPY
- else if (strcmp(memb->name, "__module__") == 0) {
- PyObject *descr;
- assert(memb->type == T_OBJECT);
- assert(memb->flags == 0 || memb->flags == READONLY);
- descr = PyDescr_NewMember(type, memb);
- if (unlikely(!descr))
- return -1;
- int set_item_result = PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr);
- Py_DECREF(descr);
- if (unlikely(set_item_result < 0)) {
- return -1;
- }
- changed = 1;
- }
- #endif // !CYTHON_COMPILING_IN_PYPY
- }
- memb++;
- }
- }
- #endif // !CYTHON_COMPILING_IN_LIMITED_API
- #if !CYTHON_COMPILING_IN_PYPY
- slot = spec->slots;
- while (slot && slot->slot && slot->slot != Py_tp_getset)
- slot++;
- if (slot && slot->slot == Py_tp_getset) {
- PyGetSetDef *getset = (PyGetSetDef*) slot->pfunc;
- while (getset && getset->name) {
- if (getset->name[0] == '_' && getset->name[1] == '_' && strcmp(getset->name, "__module__") == 0) {
- PyObject *descr = PyDescr_NewGetSet(type, getset);
- if (unlikely(!descr))
- return -1;
- #if CYTHON_COMPILING_IN_LIMITED_API
- PyObject *pyname = PyUnicode_FromString(getset->name);
- if (unlikely(!pyname)) {
- Py_DECREF(descr);
- return -1;
- }
- int set_item_result = __Pyx_SetItemOnTypeDict(type, pyname, descr);
- Py_DECREF(pyname);
- #else
- CYTHON_UNUSED_VAR(__Pyx__SetItemOnTypeDict);
- int set_item_result = PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr);
- #endif
- Py_DECREF(descr);
- if (unlikely(set_item_result < 0)) {
- return -1;
- }
- changed = 1;
- }
- ++getset;
- }
- }
- #else
- CYTHON_UNUSED_VAR(__Pyx__SetItemOnTypeDict);
- #endif // !CYTHON_COMPILING_IN_PYPY
- if (changed)
- PyType_Modified(type);
- #endif // PY_VERSION_HEX > 0x030900B1
- return 0;
- }
- /* AddModuleRef (used by FetchSharedCythonModule) */
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- static PyObject *__Pyx_PyImport_AddModuleObjectRef(PyObject *name) {
- PyObject *module_dict = PyImport_GetModuleDict();
- PyObject *m;
- if (PyMapping_GetOptionalItem(module_dict, name, &m) < 0) {
- return NULL;
- }
- if (m != NULL && PyModule_Check(m)) {
- return m;
- }
- Py_XDECREF(m);
- m = PyModule_NewObject(name);
- if (m == NULL)
- return NULL;
- if (PyDict_CheckExact(module_dict)) {
- PyObject *new_m;
- (void)PyDict_SetDefaultRef(module_dict, name, m, &new_m);
- Py_DECREF(m);
- return new_m;
- } else {
- if (PyObject_SetItem(module_dict, name, m) != 0) {
- Py_DECREF(m);
- return NULL;
- }
- return m;
- }
- }
- static PyObject *__Pyx_PyImport_AddModuleRef(const char *name) {
- PyObject *py_name = PyUnicode_FromString(name);
- if (!py_name) return NULL;
- PyObject *module = __Pyx_PyImport_AddModuleObjectRef(py_name);
- Py_DECREF(py_name);
- return module;
- }
- #elif __PYX_LIMITED_VERSION_HEX >= 0x030d0000
- #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name)
- #else
- static PyObject *__Pyx_PyImport_AddModuleRef(const char *name) {
- PyObject *module = PyImport_AddModule(name);
- Py_XINCREF(module);
- return module;
- }
- #endif
- /* FetchSharedCythonModule (used by FetchCommonType) */
- static PyObject *__Pyx_FetchSharedCythonABIModule(void) {
- return __Pyx_PyImport_AddModuleRef(__PYX_ABI_MODULE_NAME);
- }
- /* FetchCommonType (used by CommonTypesMetaclass) */
- #if __PYX_LIMITED_VERSION_HEX < 0x030C0000
- static PyObject* __Pyx_PyType_FromMetaclass(PyTypeObject *metaclass, PyObject *module, PyType_Spec *spec, PyObject *bases) {
- PyObject *result = __Pyx_PyType_FromModuleAndSpec(module, spec, bases);
- if (result && metaclass) {
- PyObject *old_tp = (PyObject*)Py_TYPE(result);
- Py_INCREF((PyObject*)metaclass);
- #if __PYX_LIMITED_VERSION_HEX >= 0x03090000
- Py_SET_TYPE(result, metaclass);
- #else
- result->ob_type = metaclass;
- #endif
- Py_DECREF(old_tp);
- }
- return result;
- }
- #else
- #define __Pyx_PyType_FromMetaclass(me, mo, s, b) PyType_FromMetaclass(me, mo, s, b)
- #endif
- static int __Pyx_VerifyCachedType(PyObject *cached_type,
- const char *name,
- Py_ssize_t expected_basicsize) {
- Py_ssize_t basicsize;
- if (!PyType_Check(cached_type)) {
- PyErr_Format(PyExc_TypeError,
- "Shared Cython type %.200s is not a type object", name);
- return -1;
- }
- if (expected_basicsize == 0) {
- return 0; // size is inherited, nothing useful to check
- }
- #if CYTHON_COMPILING_IN_LIMITED_API
- PyObject *py_basicsize;
- py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__");
- if (unlikely(!py_basicsize)) return -1;
- basicsize = PyLong_AsSsize_t(py_basicsize);
- Py_DECREF(py_basicsize);
- py_basicsize = NULL;
- if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) return -1;
- #else
- basicsize = ((PyTypeObject*) cached_type)->tp_basicsize;
- #endif
- if (basicsize != expected_basicsize) {
- PyErr_Format(PyExc_TypeError,
- "Shared Cython type %.200s has the wrong size, try recompiling",
- name);
- return -1;
- }
- return 0;
- }
- static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyTypeObject *metaclass, PyObject *module, PyType_Spec *spec, PyObject *bases) {
- PyObject *abi_module = NULL, *cached_type = NULL, *abi_module_dict, *new_cached_type, *py_object_name;
- int get_item_ref_result;
- const char* object_name = strrchr(spec->name, '.');
- object_name = object_name ? object_name+1 : spec->name;
- py_object_name = PyUnicode_FromString(object_name);
- if (!py_object_name) return NULL;
- abi_module = __Pyx_FetchSharedCythonABIModule();
- if (!abi_module) goto done;
- abi_module_dict = PyModule_GetDict(abi_module);
- if (!abi_module_dict) goto done;
- get_item_ref_result = __Pyx_PyDict_GetItemRef(abi_module_dict, py_object_name, &cached_type);
- if (get_item_ref_result == 1) {
- if (__Pyx_VerifyCachedType(
- cached_type,
- object_name,
- spec->basicsize) < 0) {
- goto bad;
- }
- goto done;
- } else if (unlikely(get_item_ref_result == -1)) {
- goto bad;
- }
- cached_type = __Pyx_PyType_FromMetaclass(
- metaclass,
- CYTHON_USE_MODULE_STATE ? module : abi_module,
- spec, bases);
- if (unlikely(!cached_type)) goto bad;
- if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad;
- new_cached_type = __Pyx_PyDict_SetDefault(abi_module_dict, py_object_name, cached_type);
- if (unlikely(new_cached_type != cached_type)) {
- if (unlikely(!new_cached_type)) goto bad;
- Py_DECREF(cached_type);
- cached_type = new_cached_type;
- if (__Pyx_VerifyCachedType(
- cached_type,
- object_name,
- spec->basicsize) < 0) {
- goto bad;
- }
- goto done;
- } else {
- Py_DECREF(new_cached_type);
- }
- done:
- Py_XDECREF(abi_module);
- Py_DECREF(py_object_name);
- assert(cached_type == NULL || PyType_Check(cached_type));
- return (PyTypeObject *) cached_type;
- bad:
- Py_XDECREF(cached_type);
- cached_type = NULL;
- goto done;
- }
- /* CommonTypesMetaclass (used by CoroutineBase) */
- static PyObject* __pyx_CommonTypesMetaclass_get_module(CYTHON_UNUSED PyObject *self, CYTHON_UNUSED void* context) {
- return PyUnicode_FromString(__PYX_ABI_MODULE_NAME);
- }
- #if __PYX_LIMITED_VERSION_HEX < 0x030A0000
- static PyObject* __pyx_CommonTypesMetaclass_call(CYTHON_UNUSED PyObject *self, CYTHON_UNUSED PyObject *args, CYTHON_UNUSED PyObject *kwds) {
- PyErr_SetString(PyExc_TypeError, "Cannot instantiate Cython internal types");
- return NULL;
- }
- static int __pyx_CommonTypesMetaclass_setattr(CYTHON_UNUSED PyObject *self, CYTHON_UNUSED PyObject *attr, CYTHON_UNUSED PyObject *value) {
- PyErr_SetString(PyExc_TypeError, "Cython internal types are immutable");
- return -1;
- }
- #endif
- static PyGetSetDef __pyx_CommonTypesMetaclass_getset[] = {
- {"__module__", __pyx_CommonTypesMetaclass_get_module, NULL, NULL, NULL},
- {0, 0, 0, 0, 0}
- };
- static PyType_Slot __pyx_CommonTypesMetaclass_slots[] = {
- {Py_tp_getset, (void *)__pyx_CommonTypesMetaclass_getset},
- #if __PYX_LIMITED_VERSION_HEX < 0x030A0000
- {Py_tp_call, (void*)__pyx_CommonTypesMetaclass_call},
- {Py_tp_new, (void*)__pyx_CommonTypesMetaclass_call},
- {Py_tp_setattro, (void*)__pyx_CommonTypesMetaclass_setattr},
- #endif
- {0, 0}
- };
- static PyType_Spec __pyx_CommonTypesMetaclass_spec = {
- __PYX_TYPE_MODULE_PREFIX "_common_types_metatype",
- 0,
- 0,
- Py_TPFLAGS_IMMUTABLETYPE |
- Py_TPFLAGS_DISALLOW_INSTANTIATION |
- Py_TPFLAGS_DEFAULT,
- __pyx_CommonTypesMetaclass_slots
- };
- static int __pyx_CommonTypesMetaclass_init(PyObject *module) {
- __pyx_mstatetype *mstate = __Pyx_PyModule_GetState(module);
- PyObject *bases = PyTuple_Pack(1, &PyType_Type);
- if (unlikely(!bases)) {
- return -1;
- }
- mstate->__pyx_CommonTypesMetaclassType = __Pyx_FetchCommonTypeFromSpec(NULL, module, &__pyx_CommonTypesMetaclass_spec, bases);
- Py_DECREF(bases);
- if (unlikely(mstate->__pyx_CommonTypesMetaclassType == NULL)) {
- return -1;
- }
- return 0;
- }
- /* RaiseException (used by CoroutineBase) */
- 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 *instance_class = NULL;
- if (value && PyExceptionInstance_Check(value)) {
- instance_class = (PyObject*) Py_TYPE(value);
- if (instance_class != type) {
- int is_subclass = PyObject_IsSubclass(instance_class, type);
- if (!is_subclass) {
- instance_class = NULL;
- } else if (unlikely(is_subclass == -1)) {
- goto bad;
- } else {
- type = instance_class;
- }
- }
- }
- if (!instance_class) {
- 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 = PyObject_Call(type, args, NULL);
- 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 (cause) {
- 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) {
- #if PY_VERSION_HEX >= 0x030C00A6
- PyException_SetTraceback(value, tb);
- #elif CYTHON_FAST_THREAD_STATE
- PyThreadState *tstate = __Pyx_PyThreadState_Current;
- PyObject* tmp_tb = tstate->curexc_traceback;
- if (tb != tmp_tb) {
- Py_INCREF(tb);
- tstate->curexc_traceback = tb;
- Py_XDECREF(tmp_tb);
- }
- #else
- PyObject *tmp_type, *tmp_value, *tmp_tb;
- PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
- Py_INCREF(tb);
- PyErr_Restore(tmp_type, tmp_value, tb);
- Py_XDECREF(tmp_tb);
- #endif
- }
- bad:
- Py_XDECREF(owned_instance);
- return;
- }
- /* GetTopmostException (used by SaveResetException) */
- #if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE
- static _PyErr_StackItem *
- __Pyx_PyErr_GetTopmostException(PyThreadState *tstate)
- {
- _PyErr_StackItem *exc_info = tstate->exc_info;
- while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) &&
- exc_info->previous_item != NULL)
- {
- exc_info = exc_info->previous_item;
- }
- return exc_info;
- }
- #endif
- /* SaveResetException (used by CoroutineBase) */
- #if CYTHON_FAST_THREAD_STATE
- static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
- #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4
- _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate);
- PyObject *exc_value = exc_info->exc_value;
- if (exc_value == NULL || exc_value == Py_None) {
- *value = NULL;
- *type = NULL;
- *tb = NULL;
- } else {
- *value = exc_value;
- Py_INCREF(*value);
- *type = (PyObject*) Py_TYPE(exc_value);
- Py_INCREF(*type);
- *tb = PyException_GetTraceback(exc_value);
- }
- #elif CYTHON_USE_EXC_INFO_STACK
- _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate);
- *type = exc_info->exc_type;
- *value = exc_info->exc_value;
- *tb = exc_info->exc_traceback;
- Py_XINCREF(*type);
- Py_XINCREF(*value);
- Py_XINCREF(*tb);
- #else
- *type = tstate->exc_type;
- *value = tstate->exc_value;
- *tb = tstate->exc_traceback;
- Py_XINCREF(*type);
- Py_XINCREF(*value);
- Py_XINCREF(*tb);
- #endif
- }
- static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
- #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4
- _PyErr_StackItem *exc_info = tstate->exc_info;
- PyObject *tmp_value = exc_info->exc_value;
- exc_info->exc_value = value;
- Py_XDECREF(tmp_value);
- Py_XDECREF(type);
- Py_XDECREF(tb);
- #else
- PyObject *tmp_type, *tmp_value, *tmp_tb;
- #if CYTHON_USE_EXC_INFO_STACK
- _PyErr_StackItem *exc_info = tstate->exc_info;
- tmp_type = exc_info->exc_type;
- tmp_value = exc_info->exc_value;
- tmp_tb = exc_info->exc_traceback;
- exc_info->exc_type = type;
- exc_info->exc_value = value;
- exc_info->exc_traceback = tb;
- #else
- 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;
- #endif
- Py_XDECREF(tmp_type);
- Py_XDECREF(tmp_value);
- Py_XDECREF(tmp_tb);
- #endif
- }
- #endif
- /* SwapException (used by CoroutineBase) */
- #if CYTHON_FAST_THREAD_STATE
- static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
- PyObject *tmp_type, *tmp_value, *tmp_tb;
- #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4
- _PyErr_StackItem *exc_info = tstate->exc_info;
- tmp_value = exc_info->exc_value;
- exc_info->exc_value = *value;
- if (tmp_value == NULL || tmp_value == Py_None) {
- Py_XDECREF(tmp_value);
- tmp_value = NULL;
- tmp_type = NULL;
- tmp_tb = NULL;
- } else {
- tmp_type = (PyObject*) Py_TYPE(tmp_value);
- Py_INCREF(tmp_type);
- #if CYTHON_COMPILING_IN_CPYTHON
- tmp_tb = ((PyBaseExceptionObject*) tmp_value)->traceback;
- Py_XINCREF(tmp_tb);
- #else
- tmp_tb = PyException_GetTraceback(tmp_value);
- #endif
- }
- #elif CYTHON_USE_EXC_INFO_STACK
- _PyErr_StackItem *exc_info = tstate->exc_info;
- tmp_type = exc_info->exc_type;
- tmp_value = exc_info->exc_value;
- tmp_tb = exc_info->exc_traceback;
- exc_info->exc_type = *type;
- exc_info->exc_value = *value;
- exc_info->exc_traceback = *tb;
- #else
- 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;
- #endif
- *type = tmp_type;
- *value = tmp_value;
- *tb = tmp_tb;
- }
- #else
- static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
- PyObject *tmp_type, *tmp_value, *tmp_tb;
- PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb);
- PyErr_SetExcInfo(*type, *value, *tb);
- *type = tmp_type;
- *value = tmp_value;
- *tb = tmp_tb;
- }
- #endif
- /* CallTypeTraverse (used by CoroutineBase) */
- #if !CYTHON_USE_TYPE_SPECS || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x03090000)
- #else
- static int __Pyx_call_type_traverse(PyObject *o, int always_call, visitproc visit, void *arg) {
- #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x03090000
- if (__Pyx_get_runtime_version() < 0x03090000) return 0;
- #endif
- if (!always_call) {
- PyTypeObject *base = __Pyx_PyObject_GetSlot(o, tp_base, PyTypeObject*);
- unsigned long flags = PyType_GetFlags(base);
- if (flags & Py_TPFLAGS_HEAPTYPE) {
- return 0;
- }
- }
- Py_VISIT((PyObject*)Py_TYPE(o));
- return 0;
- }
- #endif
- /* IterNextPlain (used by CoroutineBase) */
- #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
- static PyObject *__Pyx_GetBuiltinNext_LimitedAPI(void) {
- if (unlikely(!__pyx_mstate_global->__Pyx_GetBuiltinNext_LimitedAPI_cache))
- __pyx_mstate_global->__Pyx_GetBuiltinNext_LimitedAPI_cache = __Pyx_GetBuiltinName(__pyx_mstate_global->__pyx_n_u_next);
- return __pyx_mstate_global->__Pyx_GetBuiltinNext_LimitedAPI_cache;
- }
- #endif
- static CYTHON_INLINE PyObject *__Pyx_PyIter_Next_Plain(PyObject *iterator) {
- #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
- PyObject *result;
- PyObject *next = __Pyx_GetBuiltinNext_LimitedAPI();
- if (unlikely(!next)) return NULL;
- result = PyObject_CallFunctionObjArgs(next, iterator, NULL);
- return result;
- #else
- (void)__Pyx_GetBuiltinName; // only for early limited API
- iternextfunc iternext = __Pyx_PyObject_GetIterNextFunc(iterator);
- assert(iternext);
- return iternext(iterator);
- #endif
- }
- /* PyObjectCall2Args (used by PyObjectCallMethod1) */
- static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) {
- PyObject *args[3] = {NULL, arg1, arg2};
- return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
- }
- /* PyObjectGetMethod (used by PyObjectCallMethod1) */
- #if !(CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000)))
- static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) {
- PyObject *attr;
- #if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP
- __Pyx_TypeName type_name;
- PyTypeObject *tp = Py_TYPE(obj);
- PyObject *descr;
- descrgetfunc f = NULL;
- PyObject **dictptr, *dict;
- int meth_found = 0;
- assert (*method == NULL);
- if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) {
- attr = __Pyx_PyObject_GetAttrStr(obj, name);
- goto try_unpack;
- }
- if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) {
- return 0;
- }
- descr = _PyType_Lookup(tp, name);
- if (likely(descr != NULL)) {
- Py_INCREF(descr);
- #if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR
- if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR))
- #else
- #ifdef __Pyx_CyFunction_USED
- if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr)))
- #else
- if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type)))
- #endif
- #endif
- {
- meth_found = 1;
- } else {
- f = Py_TYPE(descr)->tp_descr_get;
- if (f != NULL && PyDescr_IsData(descr)) {
- attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
- Py_DECREF(descr);
- goto try_unpack;
- }
- }
- }
- dictptr = _PyObject_GetDictPtr(obj);
- if (dictptr != NULL && (dict = *dictptr) != NULL) {
- Py_INCREF(dict);
- attr = __Pyx_PyDict_GetItemStr(dict, name);
- if (attr != NULL) {
- Py_INCREF(attr);
- Py_DECREF(dict);
- Py_XDECREF(descr);
- goto try_unpack;
- }
- Py_DECREF(dict);
- }
- if (meth_found) {
- *method = descr;
- return 1;
- }
- if (f != NULL) {
- attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
- Py_DECREF(descr);
- goto try_unpack;
- }
- if (likely(descr != NULL)) {
- *method = descr;
- return 0;
- }
- type_name = __Pyx_PyType_GetFullyQualifiedName(tp);
- PyErr_Format(PyExc_AttributeError,
- "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'",
- type_name, name);
- __Pyx_DECREF_TypeName(type_name);
- return 0;
- #else
- attr = __Pyx_PyObject_GetAttrStr(obj, name);
- goto try_unpack;
- #endif
- try_unpack:
- #if CYTHON_UNPACK_METHODS
- if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) {
- PyObject *function = PyMethod_GET_FUNCTION(attr);
- Py_INCREF(function);
- Py_DECREF(attr);
- *method = function;
- return 1;
- }
- #endif
- *method = attr;
- return 0;
- }
- #endif
- /* PyObjectCallMethod1 (used by CoroutineBase) */
- #if !(CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000)))
- static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) {
- PyObject *result = __Pyx_PyObject_CallOneArg(method, arg);
- Py_DECREF(method);
- return result;
- }
- #endif
- static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) {
- #if CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000))
- PyObject *args[2] = {obj, arg};
- (void) __Pyx_PyObject_CallOneArg;
- (void) __Pyx_PyObject_Call2Args;
- return PyObject_VectorcallMethod(method_name, args, 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
- #else
- PyObject *method = NULL, *result;
- int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
- if (likely(is_method)) {
- result = __Pyx_PyObject_Call2Args(method, obj, arg);
- Py_DECREF(method);
- return result;
- }
- if (unlikely(!method)) return NULL;
- return __Pyx__PyObject_CallMethod1(method, arg);
- #endif
- }
- /* PyObjectCallNoArg (used by CoroutineBase) */
- static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
- PyObject *arg[2] = {NULL, NULL};
- return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
- }
- /* ReturnWithStopIteration (used by CoroutineBase) */
- static void __Pyx__ReturnWithStopIteration(PyObject* value, int async);
- static CYTHON_INLINE void __Pyx_ReturnWithStopIteration(PyObject* value, int async, int iternext) {
- if (value == Py_None) {
- if (async || !iternext)
- PyErr_SetNone(async ? PyExc_StopAsyncIteration : PyExc_StopIteration);
- return;
- }
- __Pyx__ReturnWithStopIteration(value, async);
- }
- static void __Pyx__ReturnWithStopIteration(PyObject* value, int async) {
- #if CYTHON_COMPILING_IN_CPYTHON
- __Pyx_PyThreadState_declare
- #endif
- PyObject *exc;
- PyObject *exc_type = async ? PyExc_StopAsyncIteration : PyExc_StopIteration;
- #if CYTHON_COMPILING_IN_CPYTHON
- if ((PY_VERSION_HEX >= (0x030C00A6)) || unlikely(PyTuple_Check(value) || PyExceptionInstance_Check(value))) {
- if (PY_VERSION_HEX >= (0x030e00A1)) {
- exc = __Pyx_PyObject_CallOneArg(exc_type, value);
- } else {
- PyObject *args_tuple = PyTuple_New(1);
- if (unlikely(!args_tuple)) return;
- Py_INCREF(value);
- PyTuple_SET_ITEM(args_tuple, 0, value);
- exc = PyObject_Call(exc_type, args_tuple, NULL);
- Py_DECREF(args_tuple);
- }
- if (unlikely(!exc)) return;
- } else {
- Py_INCREF(value);
- exc = value;
- }
- #if CYTHON_FAST_THREAD_STATE
- __Pyx_PyThreadState_assign
- #if CYTHON_USE_EXC_INFO_STACK
- if (!__pyx_tstate->exc_info->exc_value)
- #else
- if (!__pyx_tstate->exc_type)
- #endif
- {
- Py_INCREF(exc_type);
- __Pyx_ErrRestore(exc_type, exc, NULL);
- return;
- }
- #endif
- #else
- exc = __Pyx_PyObject_CallOneArg(exc_type, value);
- if (unlikely(!exc)) return;
- #endif
- PyErr_SetObject(exc_type, exc);
- Py_DECREF(exc);
- }
- /* CoroutineBase (used by Generator) */
- #if !CYTHON_COMPILING_IN_LIMITED_API
- #include <frameobject.h>
- #if PY_VERSION_HEX >= 0x030b00a6 && !defined(PYPY_VERSION)
- #ifndef Py_BUILD_CORE
- #define Py_BUILD_CORE 1
- #endif
- #include "internal/pycore_frame.h"
- #endif
- #endif // CYTHON_COMPILING_IN_LIMITED_API
- static CYTHON_INLINE void
- __Pyx_Coroutine_Undelegate(__pyx_CoroutineObject *gen) {
- #if CYTHON_USE_AM_SEND
- gen->yieldfrom_am_send = NULL;
- #endif
- Py_CLEAR(gen->yieldfrom);
- }
- static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *__pyx_tstate, PyObject **pvalue) {
- PyObject *et, *ev, *tb;
- PyObject *value = NULL;
- CYTHON_UNUSED_VAR(__pyx_tstate);
- __Pyx_ErrFetch(&et, &ev, &tb);
- if (!et) {
- Py_XDECREF(tb);
- Py_XDECREF(ev);
- Py_INCREF(Py_None);
- *pvalue = Py_None;
- return 0;
- }
- if (likely(et == PyExc_StopIteration)) {
- if (!ev) {
- Py_INCREF(Py_None);
- value = Py_None;
- }
- else if (likely(__Pyx_IS_TYPE(ev, (PyTypeObject*)PyExc_StopIteration))) {
- #if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_GRAAL
- value = PyObject_GetAttr(ev, __pyx_mstate_global->__pyx_n_u_value);
- if (unlikely(!value)) goto limited_api_failure;
- #else
- value = ((PyStopIterationObject *)ev)->value;
- Py_INCREF(value);
- #endif
- Py_DECREF(ev);
- }
- else if (unlikely(PyTuple_Check(ev))) {
- Py_ssize_t tuple_size = __Pyx_PyTuple_GET_SIZE(ev);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely(tuple_size < 0)) {
- Py_XDECREF(tb);
- Py_DECREF(ev);
- Py_DECREF(et);
- return -1;
- }
- #endif
- if (tuple_size >= 1) {
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- value = PyTuple_GET_ITEM(ev, 0);
- Py_INCREF(value);
- #elif CYTHON_ASSUME_SAFE_MACROS
- value = PySequence_ITEM(ev, 0);
- #else
- value = PySequence_GetItem(ev, 0);
- if (!value) goto limited_api_failure;
- #endif
- } else {
- Py_INCREF(Py_None);
- value = Py_None;
- }
- Py_DECREF(ev);
- }
- else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) {
- value = ev;
- }
- if (likely(value)) {
- Py_XDECREF(tb);
- Py_DECREF(et);
- *pvalue = value;
- return 0;
- }
- } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) {
- __Pyx_ErrRestore(et, ev, tb);
- return -1;
- }
- PyErr_NormalizeException(&et, &ev, &tb);
- if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) {
- __Pyx_ErrRestore(et, ev, tb);
- return -1;
- }
- Py_XDECREF(tb);
- Py_DECREF(et);
- #if CYTHON_COMPILING_IN_LIMITED_API
- value = PyObject_GetAttr(ev, __pyx_mstate_global->__pyx_n_u_value);
- #else
- value = ((PyStopIterationObject *)ev)->value;
- Py_INCREF(value);
- #endif
- Py_DECREF(ev);
- #if CYTHON_COMPILING_IN_LIMITED_API
- if (unlikely(!value)) return -1;
- #endif
- *pvalue = value;
- return 0;
- #if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_GRAAL || !CYTHON_ASSUME_SAFE_MACROS
- limited_api_failure:
- Py_XDECREF(et);
- Py_XDECREF(tb);
- Py_XDECREF(ev);
- return -1;
- #endif
- }
- static CYTHON_INLINE
- __Pyx_PySendResult __Pyx_Coroutine_status_from_result(PyObject **retval) {
- if (*retval) {
- return PYGEN_NEXT;
- } else if (likely(__Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, retval) == 0)) {
- return PYGEN_RETURN;
- } else {
- return PYGEN_ERROR;
- }
- }
- static CYTHON_INLINE
- void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) {
- #if PY_VERSION_HEX >= 0x030B00a4
- Py_CLEAR(exc_state->exc_value);
- #else
- PyObject *t, *v, *tb;
- t = exc_state->exc_type;
- v = exc_state->exc_value;
- tb = exc_state->exc_traceback;
- exc_state->exc_type = NULL;
- exc_state->exc_value = NULL;
- exc_state->exc_traceback = NULL;
- Py_XDECREF(t);
- Py_XDECREF(v);
- Py_XDECREF(tb);
- #endif
- }
- #define __Pyx_Coroutine_AlreadyRunningError(gen) (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL)
- static void __Pyx__Coroutine_AlreadyRunningError(__pyx_CoroutineObject *gen) {
- const char *msg;
- CYTHON_MAYBE_UNUSED_VAR(gen);
- if ((0)) {
- #ifdef __Pyx_Coroutine_USED
- } else if (__Pyx_Coroutine_Check((PyObject*)gen)) {
- msg = "coroutine already executing";
- #endif
- #ifdef __Pyx_AsyncGen_USED
- } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) {
- msg = "async generator already executing";
- #endif
- } else {
- msg = "generator already executing";
- }
- PyErr_SetString(PyExc_ValueError, msg);
- }
- static void __Pyx_Coroutine_AlreadyTerminatedError(PyObject *gen, PyObject *value, int closing) {
- CYTHON_MAYBE_UNUSED_VAR(gen);
- CYTHON_MAYBE_UNUSED_VAR(closing);
- #ifdef __Pyx_Coroutine_USED
- if (!closing && __Pyx_Coroutine_Check(gen)) {
- PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine");
- } else
- #endif
- if (value) {
- #ifdef __Pyx_AsyncGen_USED
- if (__Pyx_AsyncGen_CheckExact(gen))
- PyErr_SetNone(PyExc_StopAsyncIteration);
- else
- #endif
- PyErr_SetNone(PyExc_StopIteration);
- }
- }
- static
- __Pyx_PySendResult __Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, PyObject **result, int closing) {
- __Pyx_PyThreadState_declare
- PyThreadState *tstate;
- __Pyx_ExcInfoStruct *exc_state;
- PyObject *retval;
- assert(__Pyx_Coroutine_get_is_running(self)); // Callers should ensure is_running
- if (unlikely(self->resume_label == -1)) {
- __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing);
- return PYGEN_ERROR;
- }
- #if CYTHON_FAST_THREAD_STATE
- __Pyx_PyThreadState_assign
- tstate = __pyx_tstate;
- #else
- tstate = __Pyx_PyThreadState_Current;
- #endif
- exc_state = &self->gi_exc_state;
- if (exc_state->exc_value) {
- #if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY
- #else
- PyObject *exc_tb;
- #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON
- exc_tb = PyException_GetTraceback(exc_state->exc_value);
- #elif PY_VERSION_HEX >= 0x030B00a4
- exc_tb = ((PyBaseExceptionObject*) exc_state->exc_value)->traceback;
- #else
- exc_tb = exc_state->exc_traceback;
- #endif
- if (exc_tb) {
- PyTracebackObject *tb = (PyTracebackObject *) exc_tb;
- PyFrameObject *f = tb->tb_frame;
- assert(f->f_back == NULL);
- #if PY_VERSION_HEX >= 0x030B00A1
- f->f_back = PyThreadState_GetFrame(tstate);
- #else
- Py_XINCREF(tstate->frame);
- f->f_back = tstate->frame;
- #endif
- #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON
- Py_DECREF(exc_tb);
- #endif
- }
- #endif
- }
- #if CYTHON_USE_EXC_INFO_STACK
- exc_state->previous_item = tstate->exc_info;
- tstate->exc_info = exc_state;
- #else
- if (exc_state->exc_type) {
- __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback);
- } else {
- __Pyx_Coroutine_ExceptionClear(exc_state);
- __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback);
- }
- #endif
- retval = self->body(self, tstate, value);
- #if CYTHON_USE_EXC_INFO_STACK
- exc_state = &self->gi_exc_state;
- tstate->exc_info = exc_state->previous_item;
- exc_state->previous_item = NULL;
- __Pyx_Coroutine_ResetFrameBackpointer(exc_state);
- #endif
- *result = retval;
- if (self->resume_label == -1) {
- return likely(retval) ? PYGEN_RETURN : PYGEN_ERROR;
- }
- return PYGEN_NEXT;
- }
- static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) {
- #if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API
- CYTHON_UNUSED_VAR(exc_state);
- #else
- PyObject *exc_tb;
- #if PY_VERSION_HEX >= 0x030B00a4
- if (!exc_state->exc_value) return;
- exc_tb = PyException_GetTraceback(exc_state->exc_value);
- #else
- exc_tb = exc_state->exc_traceback;
- #endif
- if (likely(exc_tb)) {
- PyTracebackObject *tb = (PyTracebackObject *) exc_tb;
- PyFrameObject *f = tb->tb_frame;
- Py_CLEAR(f->f_back);
- #if PY_VERSION_HEX >= 0x030B00a4
- Py_DECREF(exc_tb);
- #endif
- }
- #endif
- }
- #define __Pyx_Coroutine_MethodReturnFromResult(gen, result, retval, iternext)\
- ((result) == PYGEN_NEXT ? (retval) : __Pyx__Coroutine_MethodReturnFromResult(gen, result, retval, iternext))
- static PyObject *
- __Pyx__Coroutine_MethodReturnFromResult(PyObject* gen, __Pyx_PySendResult result, PyObject *retval, int iternext) {
- CYTHON_MAYBE_UNUSED_VAR(gen);
- if (likely(result == PYGEN_RETURN)) {
- int is_async = 0;
- #ifdef __Pyx_AsyncGen_USED
- is_async = __Pyx_AsyncGen_CheckExact(gen);
- #endif
- __Pyx_ReturnWithStopIteration(retval, is_async, iternext);
- Py_XDECREF(retval);
- }
- return NULL;
- }
- #if CYTHON_COMPILING_IN_CPYTHON
- static CYTHON_INLINE
- PyObject *__Pyx_PyGen_Send(PyGenObject *gen, PyObject *arg) {
- #if PY_VERSION_HEX <= 0x030A00A1
- return _PyGen_Send(gen, arg);
- #else
- PyObject *result;
- if (PyIter_Send((PyObject*)gen, arg ? arg : Py_None, &result) == PYGEN_RETURN) {
- if (PyAsyncGen_CheckExact(gen)) {
- assert(result == Py_None);
- PyErr_SetNone(PyExc_StopAsyncIteration);
- }
- else if (result == Py_None) {
- PyErr_SetNone(PyExc_StopIteration);
- }
- else {
- #if PY_VERSION_HEX < 0x030d00A1
- _PyGen_SetStopIterationValue(result);
- #else
- if (!PyTuple_Check(result) && !PyExceptionInstance_Check(result)) {
- PyErr_SetObject(PyExc_StopIteration, result);
- } else {
- PyObject *exc = __Pyx_PyObject_CallOneArg(PyExc_StopIteration, result);
- if (likely(exc != NULL)) {
- PyErr_SetObject(PyExc_StopIteration, exc);
- Py_DECREF(exc);
- }
- }
- #endif
- }
- Py_DECREF(result);
- result = NULL;
- }
- return result;
- #endif
- }
- #endif
- static CYTHON_INLINE __Pyx_PySendResult
- __Pyx_Coroutine_FinishDelegation(__pyx_CoroutineObject *gen, PyObject** retval) {
- __Pyx_PySendResult result;
- PyObject *val = NULL;
- assert(__Pyx_Coroutine_get_is_running(gen));
- __Pyx_Coroutine_Undelegate(gen);
- __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, &val);
- result = __Pyx_Coroutine_SendEx(gen, val, retval, 0);
- Py_XDECREF(val);
- return result;
- }
- #if CYTHON_USE_AM_SEND
- static __Pyx_PySendResult
- __Pyx_Coroutine_SendToDelegate(__pyx_CoroutineObject *gen, __Pyx_pyiter_sendfunc gen_am_send, PyObject *value, PyObject **retval) {
- PyObject *ret = NULL;
- __Pyx_PySendResult delegate_result, result;
- assert(__Pyx_Coroutine_get_is_running(gen));
- delegate_result = gen_am_send(gen->yieldfrom, value, &ret);
- if (delegate_result == PYGEN_NEXT) {
- assert (ret != NULL);
- *retval = ret;
- return PYGEN_NEXT;
- }
- assert (delegate_result != PYGEN_ERROR || ret == NULL);
- __Pyx_Coroutine_Undelegate(gen);
- result = __Pyx_Coroutine_SendEx(gen, ret, retval, 0);
- Py_XDECREF(ret);
- return result;
- }
- #endif
- static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value) {
- PyObject *retval = NULL;
- __Pyx_PySendResult result = __Pyx_Coroutine_AmSend(self, value, &retval);
- return __Pyx_Coroutine_MethodReturnFromResult(self, result, retval, 0);
- }
- static __Pyx_PySendResult
- __Pyx_Coroutine_AmSend(PyObject *self, PyObject *value, PyObject **retval) {
- __Pyx_PySendResult result;
- __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self;
- if (unlikely(__Pyx_Coroutine_test_and_set_is_running(gen))) {
- *retval = __Pyx_Coroutine_AlreadyRunningError(gen);
- return PYGEN_ERROR;
- }
- #if CYTHON_USE_AM_SEND
- if (gen->yieldfrom_am_send) {
- result = __Pyx_Coroutine_SendToDelegate(gen, gen->yieldfrom_am_send, value, retval);
- } else
- #endif
- if (gen->yieldfrom) {
- PyObject *yf = gen->yieldfrom;
- PyObject *ret;
- #if !CYTHON_USE_AM_SEND
- #ifdef __Pyx_Generator_USED
- if (__Pyx_Generator_CheckExact(yf)) {
- ret = __Pyx_Coroutine_Send(yf, value);
- } else
- #endif
- #ifdef __Pyx_Coroutine_USED
- if (__Pyx_Coroutine_Check(yf)) {
- ret = __Pyx_Coroutine_Send(yf, value);
- } else
- #endif
- #ifdef __Pyx_AsyncGen_USED
- if (__pyx_PyAsyncGenASend_CheckExact(yf)) {
- ret = __Pyx_async_gen_asend_send(yf, value);
- } else
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON
- if (PyGen_CheckExact(yf)) {
- ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value);
- } else
- if (PyCoro_CheckExact(yf)) {
- ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value);
- } else
- #endif
- #endif
- {
- #if !CYTHON_COMPILING_IN_LIMITED_API || __PYX_LIMITED_VERSION_HEX >= 0x03080000
- if (value == Py_None && PyIter_Check(yf))
- ret = __Pyx_PyIter_Next_Plain(yf);
- else
- #endif
- ret = __Pyx_PyObject_CallMethod1(yf, __pyx_mstate_global->__pyx_n_u_send, value);
- }
- if (likely(ret)) {
- __Pyx_Coroutine_unset_is_running(gen);
- *retval = ret;
- return PYGEN_NEXT;
- }
- result = __Pyx_Coroutine_FinishDelegation(gen, retval);
- } else {
- result = __Pyx_Coroutine_SendEx(gen, value, retval, 0);
- }
- __Pyx_Coroutine_unset_is_running(gen);
- return result;
- }
- static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) {
- __Pyx_PySendResult result;
- PyObject *retval = NULL;
- CYTHON_UNUSED_VAR(gen);
- assert(__Pyx_Coroutine_get_is_running(gen));
- #ifdef __Pyx_Generator_USED
- if (__Pyx_Generator_CheckExact(yf)) {
- result = __Pyx_Coroutine_Close(yf, &retval);
- } else
- #endif
- #ifdef __Pyx_Coroutine_USED
- if (__Pyx_Coroutine_Check(yf)) {
- result = __Pyx_Coroutine_Close(yf, &retval);
- } else
- if (__Pyx_CoroutineAwait_CheckExact(yf)) {
- result = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf);
- } else
- #endif
- #ifdef __Pyx_AsyncGen_USED
- if (__pyx_PyAsyncGenASend_CheckExact(yf)) {
- retval = __Pyx_async_gen_asend_close(yf, NULL);
- result = PYGEN_RETURN;
- } else
- if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) {
- retval = __Pyx_async_gen_athrow_close(yf, NULL);
- result = PYGEN_RETURN;
- } else
- #endif
- {
- PyObject *meth;
- result = PYGEN_RETURN;
- meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_mstate_global->__pyx_n_u_close);
- if (unlikely(!meth)) {
- if (unlikely(PyErr_Occurred())) {
- PyErr_WriteUnraisable(yf);
- }
- } else {
- retval = __Pyx_PyObject_CallNoArg(meth);
- Py_DECREF(meth);
- if (unlikely(!retval)) {
- result = PYGEN_ERROR;
- }
- }
- }
- Py_XDECREF(retval);
- return result == PYGEN_ERROR ? -1 : 0;
- }
- static PyObject *__Pyx_Generator_Next(PyObject *self) {
- __Pyx_PySendResult result;
- PyObject *retval = NULL;
- __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self;
- if (unlikely(__Pyx_Coroutine_test_and_set_is_running(gen))) {
- return __Pyx_Coroutine_AlreadyRunningError(gen);
- }
- #if CYTHON_USE_AM_SEND
- if (gen->yieldfrom_am_send) {
- result = __Pyx_Coroutine_SendToDelegate(gen, gen->yieldfrom_am_send, Py_None, &retval);
- } else
- #endif
- if (gen->yieldfrom) {
- PyObject *yf = gen->yieldfrom;
- PyObject *ret;
- #ifdef __Pyx_Generator_USED
- if (__Pyx_Generator_CheckExact(yf)) {
- ret = __Pyx_Generator_Next(yf);
- } else
- #endif
- #ifdef __Pyx_Coroutine_USED
- if (__Pyx_Coroutine_CheckExact(yf)) {
- ret = __Pyx_Coroutine_Send(yf, Py_None);
- } else
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON && (PY_VERSION_HEX < 0x030A00A3 || !CYTHON_USE_AM_SEND)
- if (PyGen_CheckExact(yf)) {
- ret = __Pyx_PyGen_Send((PyGenObject*)yf, NULL);
- } else
- #endif
- ret = __Pyx_PyIter_Next_Plain(yf);
- if (likely(ret)) {
- __Pyx_Coroutine_unset_is_running(gen);
- return ret;
- }
- result = __Pyx_Coroutine_FinishDelegation(gen, &retval);
- } else {
- result = __Pyx_Coroutine_SendEx(gen, Py_None, &retval, 0);
- }
- __Pyx_Coroutine_unset_is_running(gen);
- return __Pyx_Coroutine_MethodReturnFromResult(self, result, retval, 1);
- }
- static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, PyObject *arg) {
- PyObject *retval = NULL;
- __Pyx_PySendResult result;
- CYTHON_UNUSED_VAR(arg);
- result = __Pyx_Coroutine_Close(self, &retval);
- if (unlikely(result == PYGEN_ERROR))
- return NULL;
- Py_XDECREF(retval);
- Py_RETURN_NONE;
- }
- static __Pyx_PySendResult
- __Pyx_Coroutine_Close(PyObject *self, PyObject **retval) {
- __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
- __Pyx_PySendResult result;
- PyObject *yf;
- int err = 0;
- if (unlikely(__Pyx_Coroutine_test_and_set_is_running(gen))) {
- *retval = __Pyx_Coroutine_AlreadyRunningError(gen);
- return PYGEN_ERROR;
- }
- yf = gen->yieldfrom;
- if (yf) {
- Py_INCREF(yf);
- err = __Pyx_Coroutine_CloseIter(gen, yf);
- __Pyx_Coroutine_Undelegate(gen);
- Py_DECREF(yf);
- }
- if (err == 0)
- PyErr_SetNone(PyExc_GeneratorExit);
- result = __Pyx_Coroutine_SendEx(gen, NULL, retval, 1);
- if (result == PYGEN_ERROR) {
- __Pyx_PyThreadState_declare
- __Pyx_PyThreadState_assign
- __Pyx_Coroutine_unset_is_running(gen);
- if (!__Pyx_PyErr_Occurred()) {
- return PYGEN_RETURN;
- } else if (likely(__Pyx_PyErr_ExceptionMatches2(PyExc_GeneratorExit, PyExc_StopIteration))) {
- __Pyx_PyErr_Clear();
- return PYGEN_RETURN;
- }
- return PYGEN_ERROR;
- } else if (likely(result == PYGEN_RETURN && *retval == Py_None)) {
- __Pyx_Coroutine_unset_is_running(gen);
- return PYGEN_RETURN;
- } else {
- const char *msg;
- Py_DECREF(*retval);
- *retval = NULL;
- if ((0)) {
- #ifdef __Pyx_Coroutine_USED
- } else if (__Pyx_Coroutine_Check(self)) {
- msg = "coroutine ignored GeneratorExit";
- #endif
- #ifdef __Pyx_AsyncGen_USED
- } else if (__Pyx_AsyncGen_CheckExact(self)) {
- msg = "async generator ignored GeneratorExit";
- #endif
- } else {
- msg = "generator ignored GeneratorExit";
- }
- PyErr_SetString(PyExc_RuntimeError, msg);
- __Pyx_Coroutine_unset_is_running(gen);
- return PYGEN_ERROR;
- }
- }
- static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb,
- PyObject *args, int close_on_genexit) {
- __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
- PyObject *yf;
- if (unlikely(__Pyx_Coroutine_test_and_set_is_running(gen)))
- return __Pyx_Coroutine_AlreadyRunningError(gen);
- yf = gen->yieldfrom;
- if (yf) {
- __Pyx_PySendResult result;
- PyObject *ret;
- Py_INCREF(yf);
- if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) {
- int err = __Pyx_Coroutine_CloseIter(gen, yf);
- Py_DECREF(yf);
- __Pyx_Coroutine_Undelegate(gen);
- if (err < 0)
- goto propagate_exception;
- goto throw_here;
- }
- if (0
- #ifdef __Pyx_Generator_USED
- || __Pyx_Generator_CheckExact(yf)
- #endif
- #ifdef __Pyx_Coroutine_USED
- || __Pyx_Coroutine_Check(yf)
- #endif
- ) {
- ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit);
- #ifdef __Pyx_Coroutine_USED
- } else if (__Pyx_CoroutineAwait_CheckExact(yf)) {
- ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit);
- #endif
- } else {
- PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_mstate_global->__pyx_n_u_throw);
- if (unlikely(!meth)) {
- Py_DECREF(yf);
- if (unlikely(PyErr_Occurred())) {
- __Pyx_Coroutine_unset_is_running(gen);
- return NULL;
- }
- __Pyx_Coroutine_Undelegate(gen);
- goto throw_here;
- }
- if (likely(args)) {
- ret = __Pyx_PyObject_Call(meth, args, NULL);
- } else {
- PyObject *cargs[4] = {NULL, typ, val, tb};
- ret = __Pyx_PyObject_FastCall(meth, cargs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
- }
- Py_DECREF(meth);
- }
- Py_DECREF(yf);
- if (ret) {
- __Pyx_Coroutine_unset_is_running(gen);
- return ret;
- }
- result = __Pyx_Coroutine_FinishDelegation(gen, &ret);
- __Pyx_Coroutine_unset_is_running(gen);
- return __Pyx_Coroutine_MethodReturnFromResult(self, result, ret, 0);
- }
- throw_here:
- __Pyx_Raise(typ, val, tb, NULL);
- propagate_exception:
- {
- PyObject *retval = NULL;
- __Pyx_PySendResult result = __Pyx_Coroutine_SendEx(gen, NULL, &retval, 0);
- __Pyx_Coroutine_unset_is_running(gen);
- return __Pyx_Coroutine_MethodReturnFromResult(self, result, retval, 0);
- }
- }
- static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) {
- PyObject *typ;
- PyObject *val = NULL;
- PyObject *tb = NULL;
- if (unlikely(!PyArg_UnpackTuple(args, "throw", 1, 3, &typ, &val, &tb)))
- return NULL;
- return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1);
- }
- static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) {
- #if PY_VERSION_HEX >= 0x030B00a4
- Py_VISIT(exc_state->exc_value);
- #else
- Py_VISIT(exc_state->exc_type);
- Py_VISIT(exc_state->exc_value);
- Py_VISIT(exc_state->exc_traceback);
- #endif
- return 0;
- }
- static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) {
- {
- int e = __Pyx_call_type_traverse((PyObject*)gen, 1, visit, arg);
- if (e) return e;
- }
- Py_VISIT(gen->closure);
- Py_VISIT(gen->classobj);
- Py_VISIT(gen->yieldfrom);
- return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg);
- }
- static int __Pyx_Coroutine_clear(PyObject *self) {
- __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
- Py_CLEAR(gen->closure);
- Py_CLEAR(gen->classobj);
- __Pyx_Coroutine_Undelegate(gen);
- __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state);
- #ifdef __Pyx_AsyncGen_USED
- if (__Pyx_AsyncGen_CheckExact(self)) {
- Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer);
- }
- #endif
- Py_CLEAR(gen->gi_code);
- Py_CLEAR(gen->gi_frame);
- Py_CLEAR(gen->gi_name);
- Py_CLEAR(gen->gi_qualname);
- Py_CLEAR(gen->gi_modulename);
- return 0;
- }
- static void __Pyx_Coroutine_dealloc(PyObject *self) {
- __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
- PyObject_GC_UnTrack(gen);
- #if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
- if (gen->gi_weakreflist != NULL)
- #endif
- PyObject_ClearWeakRefs(self);
- if (gen->resume_label >= 0) {
- PyObject_GC_Track(self);
- #if CYTHON_USE_TP_FINALIZE
- if (unlikely(PyObject_CallFinalizerFromDealloc(self)))
- #else
- {
- destructor del = __Pyx_PyObject_GetSlot(gen, tp_del, destructor);
- if (del) del(self);
- }
- if (unlikely(Py_REFCNT(self) > 0))
- #endif
- {
- return;
- }
- PyObject_GC_UnTrack(self);
- }
- #ifdef __Pyx_AsyncGen_USED
- if (__Pyx_AsyncGen_CheckExact(self)) {
- /* We have to handle this case for asynchronous generators
- right here, because this code has to be between UNTRACK
- and GC_Del. */
- Py_CLEAR(((__pyx_PyAsyncGenObject*)self)->ag_finalizer);
- }
- #endif
- __Pyx_Coroutine_clear(self);
- __Pyx_PyHeapTypeObject_GC_Del(gen);
- }
- #if CYTHON_USE_TP_FINALIZE
- static void __Pyx_Coroutine_del(PyObject *self) {
- PyObject *error_type, *error_value, *error_traceback;
- __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
- __Pyx_PyThreadState_declare
- if (gen->resume_label < 0) {
- return;
- }
- __Pyx_PyThreadState_assign
- __Pyx_ErrFetch(&error_type, &error_value, &error_traceback);
- #ifdef __Pyx_AsyncGen_USED
- if (__Pyx_AsyncGen_CheckExact(self)) {
- __pyx_PyAsyncGenObject *agen = (__pyx_PyAsyncGenObject*)self;
- PyObject *finalizer = agen->ag_finalizer;
- if (finalizer && !agen->ag_closed) {
- PyObject *res = __Pyx_PyObject_CallOneArg(finalizer, self);
- if (unlikely(!res)) {
- PyErr_WriteUnraisable(self);
- } else {
- Py_DECREF(res);
- }
- __Pyx_ErrRestore(error_type, error_value, error_traceback);
- return;
- }
- }
- #endif
- if (unlikely(gen->resume_label == 0 && !error_value)) {
- #ifdef __Pyx_Coroutine_USED
- #ifdef __Pyx_Generator_USED
- if (!__Pyx_Generator_CheckExact(self))
- #endif
- {
- PyObject_GC_UnTrack(self);
- if (unlikely(PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", gen->gi_qualname) < 0))
- PyErr_WriteUnraisable(self);
- PyObject_GC_Track(self);
- }
- #endif
- } else {
- PyObject *retval = NULL;
- __Pyx_PySendResult result = __Pyx_Coroutine_Close(self, &retval);
- if (result == PYGEN_ERROR) {
- PyErr_WriteUnraisable(self);
- } else {
- Py_XDECREF(retval);
- }
- }
- __Pyx_ErrRestore(error_type, error_value, error_traceback);
- }
- #endif
- static PyObject *
- __Pyx_Coroutine_get_name(__pyx_CoroutineObject *self, void *context)
- {
- PyObject *name = self->gi_name;
- CYTHON_UNUSED_VAR(context);
- if (unlikely(!name)) name = Py_None;
- Py_INCREF(name);
- return name;
- }
- static int
- __Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, void *context)
- {
- CYTHON_UNUSED_VAR(context);
- if (unlikely(value == NULL || !PyUnicode_Check(value))) {
- PyErr_SetString(PyExc_TypeError,
- "__name__ must be set to a string object");
- return -1;
- }
- Py_INCREF(value);
- __Pyx_Py_XDECREF_SET(self->gi_name, value);
- return 0;
- }
- static PyObject *
- __Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, void *context)
- {
- PyObject *name = self->gi_qualname;
- CYTHON_UNUSED_VAR(context);
- if (unlikely(!name)) name = Py_None;
- Py_INCREF(name);
- return name;
- }
- static int
- __Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, void *context)
- {
- CYTHON_UNUSED_VAR(context);
- if (unlikely(value == NULL || !PyUnicode_Check(value))) {
- PyErr_SetString(PyExc_TypeError,
- "__qualname__ must be set to a string object");
- return -1;
- }
- Py_INCREF(value);
- __Pyx_Py_XDECREF_SET(self->gi_qualname, value);
- return 0;
- }
- static PyObject *
- __Pyx__Coroutine_get_frame(__pyx_CoroutineObject *self)
- {
- #if !CYTHON_COMPILING_IN_LIMITED_API
- PyObject *frame;
- #if PY_VERSION_HEX >= 0x030d0000
- Py_BEGIN_CRITICAL_SECTION(self);
- #endif
- frame = self->gi_frame;
- if (!frame) {
- if (unlikely(!self->gi_code)) {
- Py_RETURN_NONE;
- }
- PyObject *globals = PyDict_New();
- if (unlikely(!globals)) return NULL;
- frame = (PyObject *) PyFrame_New(
- PyThreadState_Get(), /*PyThreadState *tstate,*/
- (PyCodeObject*) self->gi_code, /*PyCodeObject *code,*/
- globals, /*PyObject *globals,*/
- 0 /*PyObject *locals*/
- );
- Py_DECREF(globals);
- if (unlikely(!frame))
- return NULL;
- if (unlikely(self->gi_frame)) {
- Py_DECREF(frame);
- frame = self->gi_frame;
- } else {
- self->gi_frame = frame;
- }
- }
- Py_INCREF(frame);
- #if PY_VERSION_HEX >= 0x030d0000
- Py_END_CRITICAL_SECTION();
- #endif
- return frame;
- #else
- CYTHON_UNUSED_VAR(self);
- Py_RETURN_NONE;
- #endif
- }
- static PyObject *
- __Pyx_Coroutine_get_frame(__pyx_CoroutineObject *self, void *context) {
- CYTHON_UNUSED_VAR(context);
- PyObject *frame = self->gi_frame;
- if (frame)
- return __Pyx_NewRef(frame);
- return __Pyx__Coroutine_get_frame(self);
- }
- static __pyx_CoroutineObject *__Pyx__Coroutine_New(
- PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
- PyObject *name, PyObject *qualname, PyObject *module_name) {
- __pyx_CoroutineObject *gen = PyObject_GC_New(__pyx_CoroutineObject, type);
- if (unlikely(!gen))
- return NULL;
- return __Pyx__Coroutine_NewInit(gen, body, code, closure, name, qualname, module_name);
- }
- static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit(
- __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
- PyObject *name, PyObject *qualname, PyObject *module_name) {
- gen->body = body;
- gen->closure = closure;
- Py_XINCREF(closure);
- gen->is_running = 0;
- gen->resume_label = 0;
- gen->classobj = NULL;
- gen->yieldfrom = NULL;
- gen->yieldfrom_am_send = NULL;
- #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_LIMITED_API
- gen->gi_exc_state.exc_value = NULL;
- #else
- gen->gi_exc_state.exc_type = NULL;
- gen->gi_exc_state.exc_value = NULL;
- gen->gi_exc_state.exc_traceback = NULL;
- #endif
- #if CYTHON_USE_EXC_INFO_STACK
- gen->gi_exc_state.previous_item = NULL;
- #endif
- #if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
- gen->gi_weakreflist = NULL;
- #endif
- Py_XINCREF(qualname);
- gen->gi_qualname = qualname;
- Py_XINCREF(name);
- gen->gi_name = name;
- Py_XINCREF(module_name);
- gen->gi_modulename = module_name;
- Py_XINCREF(code);
- gen->gi_code = code;
- gen->gi_frame = NULL;
- PyObject_GC_Track(gen);
- return gen;
- }
- static char __Pyx_Coroutine_test_and_set_is_running(__pyx_CoroutineObject *gen) {
- char result;
- #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
- Py_BEGIN_CRITICAL_SECTION(gen);
- #endif
- result = gen->is_running;
- gen->is_running = 1;
- #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
- Py_END_CRITICAL_SECTION();
- #endif
- return result;
- }
- static void __Pyx_Coroutine_unset_is_running(__pyx_CoroutineObject *gen) {
- #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
- Py_BEGIN_CRITICAL_SECTION(gen);
- #endif
- assert(gen->is_running);
- gen->is_running = 0;
- #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
- Py_END_CRITICAL_SECTION();
- #endif
- }
- static char __Pyx_Coroutine_get_is_running(__pyx_CoroutineObject *gen) {
- char result;
- #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
- Py_BEGIN_CRITICAL_SECTION(gen);
- #endif
- result = gen->is_running;
- #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
- Py_END_CRITICAL_SECTION();
- #endif
- return result;
- }
- static PyObject *__Pyx_Coroutine_get_is_running_getter(PyObject *gen, void *closure) {
- CYTHON_UNUSED_VAR(closure);
- char result = __Pyx_Coroutine_get_is_running((__pyx_CoroutineObject*)gen);
- if (result) Py_RETURN_TRUE;
- else Py_RETURN_FALSE;
- }
- #if __PYX_HAS_PY_AM_SEND == 2
- static void __Pyx_SetBackportTypeAmSend(PyTypeObject *type, __Pyx_PyAsyncMethodsStruct *static_amsend_methods, __Pyx_pyiter_sendfunc am_send) {
- Py_ssize_t ptr_offset = (char*)(type->tp_as_async) - (char*)type;
- if (ptr_offset < 0 || ptr_offset > type->tp_basicsize) {
- return;
- }
- memcpy((void*)static_amsend_methods, (void*)(type->tp_as_async), sizeof(*type->tp_as_async));
- static_amsend_methods->am_send = am_send;
- type->tp_as_async = __Pyx_SlotTpAsAsync(static_amsend_methods);
- }
- #endif
- static PyObject *__Pyx_Coroutine_fail_reduce_ex(PyObject *self, PyObject *arg) {
- CYTHON_UNUSED_VAR(arg);
- __Pyx_TypeName self_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE((PyObject*)self));
- PyErr_Format(PyExc_TypeError, "cannot pickle '" __Pyx_FMT_TYPENAME "' object",
- self_type_name);
- __Pyx_DECREF_TypeName(self_type_name);
- return NULL;
- }
- /* Generator (used by GeneratorYieldFrom) */
- static PyMethodDef __pyx_Generator_methods[] = {
- {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O,
- PyDoc_STR("send(arg) -> send 'arg' into generator,\nreturn next yielded value or raise StopIteration.")},
- {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS,
- PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in generator,\nreturn next yielded value or raise StopIteration.")},
- {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS,
- PyDoc_STR("close() -> raise GeneratorExit inside generator.")},
- {"__reduce_ex__", (PyCFunction) __Pyx_Coroutine_fail_reduce_ex, METH_O, 0},
- {"__reduce__", (PyCFunction) __Pyx_Coroutine_fail_reduce_ex, METH_NOARGS, 0},
- {0, 0, 0, 0}
- };
- static PyMemberDef __pyx_Generator_memberlist[] = {
- {"gi_yieldfrom", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY,
- PyDoc_STR("object being iterated by 'yield from', or None")},
- {"gi_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL},
- {"__module__", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_modulename), 0, 0},
- #if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
- {"__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CoroutineObject, gi_weakreflist), READONLY, 0},
- #endif
- {0, 0, 0, 0, 0}
- };
- static PyGetSetDef __pyx_Generator_getsets[] = {
- {"__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name,
- PyDoc_STR("name of the generator"), 0},
- {"__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname,
- PyDoc_STR("qualified name of the generator"), 0},
- {"gi_frame", (getter)__Pyx_Coroutine_get_frame, NULL,
- PyDoc_STR("Frame of the generator"), 0},
- {"gi_running", __Pyx_Coroutine_get_is_running_getter, NULL, NULL, NULL},
- {0, 0, 0, 0, 0}
- };
- static PyType_Slot __pyx_GeneratorType_slots[] = {
- {Py_tp_dealloc, (void *)__Pyx_Coroutine_dealloc},
- {Py_tp_traverse, (void *)__Pyx_Coroutine_traverse},
- {Py_tp_iter, (void *)PyObject_SelfIter},
- {Py_tp_iternext, (void *)__Pyx_Generator_Next},
- {Py_tp_methods, (void *)__pyx_Generator_methods},
- {Py_tp_members, (void *)__pyx_Generator_memberlist},
- {Py_tp_getset, (void *)__pyx_Generator_getsets},
- {Py_tp_getattro, (void *) PyObject_GenericGetAttr},
- #if CYTHON_USE_TP_FINALIZE
- {Py_tp_finalize, (void *)__Pyx_Coroutine_del},
- #endif
- #if __PYX_HAS_PY_AM_SEND == 1
- {Py_am_send, (void *)__Pyx_Coroutine_AmSend},
- #endif
- {0, 0},
- };
- static PyType_Spec __pyx_GeneratorType_spec = {
- __PYX_TYPE_MODULE_PREFIX "generator",
- sizeof(__pyx_CoroutineObject),
- 0,
- #if PY_VERSION_HEX >= 0x030C0000 && !CYTHON_COMPILING_IN_LIMITED_API
- Py_TPFLAGS_MANAGED_WEAKREF |
- #endif
- Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION |
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | __Pyx_TPFLAGS_HAVE_AM_SEND,
- __pyx_GeneratorType_slots
- };
- #if __PYX_HAS_PY_AM_SEND == 2
- static __Pyx_PyAsyncMethodsStruct __pyx_Generator_as_async;
- #endif
- static int __pyx_Generator_init(PyObject *module) {
- __pyx_mstatetype *mstate = __Pyx_PyModule_GetState(module);
- mstate->__pyx_GeneratorType = __Pyx_FetchCommonTypeFromSpec(
- mstate->__pyx_CommonTypesMetaclassType, module, &__pyx_GeneratorType_spec, NULL);
- if (unlikely(!mstate->__pyx_GeneratorType)) {
- return -1;
- }
- #if __PYX_HAS_PY_AM_SEND == 2
- __Pyx_SetBackportTypeAmSend(mstate->__pyx_GeneratorType, &__pyx_Generator_as_async, &__Pyx_Coroutine_AmSend);
- #endif
- return 0;
- }
- static PyObject *__Pyx_Generator_GetInlinedResult(PyObject *self) {
- __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self;
- PyObject *retval = NULL;
- if (unlikely(__Pyx_Coroutine_test_and_set_is_running(gen))) {
- return __Pyx_Coroutine_AlreadyRunningError(gen);
- }
- __Pyx_PySendResult result = __Pyx_Coroutine_SendEx(gen, Py_None, &retval, 0);
- __Pyx_Coroutine_unset_is_running(gen);
- (void) result;
- assert (result == PYGEN_RETURN || result == PYGEN_ERROR);
- assert ((result == PYGEN_RETURN && retval != NULL) || (result == PYGEN_ERROR && retval == NULL));
- return retval;
- }
- /* GeneratorYieldFrom */
- #if CYTHON_USE_TYPE_SLOTS
- static void __Pyx_PyIter_CheckErrorAndDecref(PyObject *source) {
- __Pyx_TypeName source_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(source));
- PyErr_Format(PyExc_TypeError,
- "iter() returned non-iterator of type '" __Pyx_FMT_TYPENAME "'", source_type_name);
- __Pyx_DECREF_TypeName(source_type_name);
- Py_DECREF(source);
- }
- #endif
- static CYTHON_INLINE __Pyx_PySendResult __Pyx_Generator_Yield_From(__pyx_CoroutineObject *gen, PyObject *source, PyObject **retval) {
- PyObject *source_gen;
- __Pyx_PySendResult result;
- #ifdef __Pyx_Coroutine_USED
- if (__Pyx_Coroutine_Check(source)) {
- Py_INCREF(source);
- source_gen = source;
- result = __Pyx_Coroutine_AmSend(source, Py_None, retval);
- } else
- #endif
- {
- #if CYTHON_USE_TYPE_SLOTS
- if (likely(Py_TYPE(source)->tp_iter)) {
- source_gen = Py_TYPE(source)->tp_iter(source);
- if (unlikely(!source_gen)) {
- *retval = NULL;
- return PYGEN_ERROR;
- }
- if (unlikely(!PyIter_Check(source_gen))) {
- __Pyx_PyIter_CheckErrorAndDecref(source_gen);
- *retval = NULL;
- return PYGEN_ERROR;
- }
- } else
- #endif
- {
- source_gen = PyObject_GetIter(source);
- if (unlikely(!source_gen)) {
- *retval = NULL;
- return PYGEN_ERROR;
- }
- }
- *retval = __Pyx_PyIter_Next_Plain(source_gen);
- result = __Pyx_Coroutine_status_from_result(retval);
- }
- if (likely(result == PYGEN_NEXT)) {
- __Pyx_Coroutine_Set_Owned_Yield_From(gen, source_gen);
- return PYGEN_NEXT;
- }
- Py_DECREF(source_gen);
- return result;
- }
- /* append */
- static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
- if (likely(PyList_CheckExact(L))) {
- if (unlikely(__Pyx_PyList_Append(L, x) < 0)) return -1;
- } else {
- PyObject* retval = __Pyx_PyObject_CallMethod1(L, __pyx_mstate_global->__pyx_n_u_append, x);
- if (unlikely(!retval))
- return -1;
- Py_DECREF(retval);
- }
- return 0;
- }
- /* PyLongBinop */
- #if !CYTHON_COMPILING_IN_PYPY
- static PyObject* __Pyx_Fallback___Pyx_PyLong_AddObjC(PyObject *op1, PyObject *op2, int inplace) {
- return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2);
- }
- #if CYTHON_USE_PYLONG_INTERNALS
- static PyObject* __Pyx_Unpacked___Pyx_PyLong_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
- CYTHON_MAYBE_UNUSED_VAR(inplace);
- CYTHON_UNUSED_VAR(zerodivision_check);
- const long b = intval;
- long a;
- const PY_LONG_LONG llb = intval;
- PY_LONG_LONG lla;
- if (unlikely(__Pyx_PyLong_IsZero(op1))) {
- return __Pyx_NewRef(op2);
- }
- const int is_positive = __Pyx_PyLong_IsPos(op1);
- const digit* digits = __Pyx_PyLong_Digits(op1);
- const Py_ssize_t size = __Pyx_PyLong_DigitCount(op1);
- if (likely(size == 1)) {
- a = (long) digits[0];
- if (!is_positive) a *= -1;
- } else {
- switch (size) {
- case 2:
- if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
- a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if (!is_positive) a *= -1;
- goto calculate_long;
- } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
- lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
- if (!is_positive) lla *= -1;
- goto calculate_long_long;
- }
- break;
- case 3:
- if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
- a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if (!is_positive) a *= -1;
- goto calculate_long;
- } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
- lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
- if (!is_positive) lla *= -1;
- goto calculate_long_long;
- }
- break;
- case 4:
- if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
- a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if (!is_positive) a *= -1;
- goto calculate_long;
- } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
- lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
- if (!is_positive) lla *= -1;
- goto calculate_long_long;
- }
- break;
- }
- return PyLong_Type.tp_as_number->nb_add(op1, op2);
- }
- calculate_long:
- {
- long x;
- x = a + b;
- return PyLong_FromLong(x);
- }
- calculate_long_long:
- {
- PY_LONG_LONG llx;
- llx = lla + llb;
- return PyLong_FromLongLong(llx);
- }
-
- }
- #endif
- static PyObject* __Pyx_Float___Pyx_PyLong_AddObjC(PyObject *float_val, long intval, int zerodivision_check) {
- CYTHON_UNUSED_VAR(zerodivision_check);
- const long b = intval;
- double a = __Pyx_PyFloat_AS_DOUBLE(float_val);
- double result;
-
- result = ((double)a) + (double)b;
- return PyFloat_FromDouble(result);
- }
- static CYTHON_INLINE PyObject* __Pyx_PyLong_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
- CYTHON_MAYBE_UNUSED_VAR(intval);
- CYTHON_UNUSED_VAR(zerodivision_check);
- #if CYTHON_USE_PYLONG_INTERNALS
- if (likely(PyLong_CheckExact(op1))) {
- return __Pyx_Unpacked___Pyx_PyLong_AddObjC(op1, op2, intval, inplace, zerodivision_check);
- }
- #endif
- if (PyFloat_CheckExact(op1)) {
- return __Pyx_Float___Pyx_PyLong_AddObjC(op1, intval, zerodivision_check);
- }
- return __Pyx_Fallback___Pyx_PyLong_AddObjC(op1, op2, inplace);
- }
- #endif
- /* py_abs */
- #if CYTHON_USE_PYLONG_INTERNALS
- static PyObject *__Pyx_PyLong_AbsNeg(PyObject *n) {
- #if PY_VERSION_HEX >= 0x030C00A7
- if (likely(__Pyx_PyLong_IsCompact(n))) {
- return PyLong_FromSize_t(__Pyx_PyLong_CompactValueUnsigned(n));
- }
- #else
- if (likely(Py_SIZE(n) == -1)) {
- return PyLong_FromUnsignedLong(__Pyx_PyLong_Digits(n)[0]);
- }
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON
- {
- PyObject *copy = _PyLong_Copy((PyLongObject*)n);
- if (likely(copy)) {
- #if PY_VERSION_HEX >= 0x030C00A7
- ((PyLongObject*)copy)->long_value.lv_tag ^= ((PyLongObject*)copy)->long_value.lv_tag & _PyLong_SIGN_MASK;
- #else
- __Pyx_SET_SIZE(copy, -Py_SIZE(copy));
- #endif
- }
- return copy;
- }
- #else
- return PyNumber_Negative(n);
- #endif
- }
- #endif
- /* PyFloatBinop */
- #if !CYTHON_COMPILING_IN_PYPY
- static PyObject* __Pyx_PyFloat_TrueDivideObjC(PyObject *op1, PyObject *op2, double floatval, int inplace, int zerodivision_check) {
- const double b = floatval;
- double a, result;
- CYTHON_UNUSED_VAR(inplace);
- CYTHON_UNUSED_VAR(zerodivision_check);
- if (likely(PyFloat_CheckExact(op1))) {
- a = __Pyx_PyFloat_AS_DOUBLE(op1);
-
- } else
- if (likely(PyLong_CheckExact(op1))) {
- #if CYTHON_USE_PYLONG_INTERNALS
- if (__Pyx_PyLong_IsZero(op1)) {
- a = 0.0;
-
- } else if (__Pyx_PyLong_IsCompact(op1)) {
- a = (double) __Pyx_PyLong_CompactValue(op1);
- } else {
- const digit* digits = __Pyx_PyLong_Digits(op1);
- const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1);
- switch (size) {
- case -2:
- case 2:
- if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT && ((8 * sizeof(unsigned long) < 53) || (1 * PyLong_SHIFT < 53))) {
- a = (double) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if ((8 * sizeof(unsigned long) < 53) || (2 * PyLong_SHIFT < 53) || (a < (double) ((PY_LONG_LONG)1 << 53))) {
- if (size == -2)
- a = -a;
- break;
- }
- }
- CYTHON_FALLTHROUGH;
- case -3:
- case 3:
- if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT && ((8 * sizeof(unsigned long) < 53) || (2 * PyLong_SHIFT < 53))) {
- a = (double) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if ((8 * sizeof(unsigned long) < 53) || (3 * PyLong_SHIFT < 53) || (a < (double) ((PY_LONG_LONG)1 << 53))) {
- if (size == -3)
- a = -a;
- break;
- }
- }
- CYTHON_FALLTHROUGH;
- case -4:
- case 4:
- if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT && ((8 * sizeof(unsigned long) < 53) || (3 * PyLong_SHIFT < 53))) {
- a = (double) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if ((8 * sizeof(unsigned long) < 53) || (4 * PyLong_SHIFT < 53) || (a < (double) ((PY_LONG_LONG)1 << 53))) {
- if (size == -4)
- a = -a;
- break;
- }
- }
- CYTHON_FALLTHROUGH;
- default:
- #endif
- a = PyLong_AsDouble(op1);
- if (unlikely(a == -1.0 && PyErr_Occurred())) return NULL;
- #if CYTHON_USE_PYLONG_INTERNALS
- }
- }
- #endif
- } else {
- return (inplace ? PyNumber_InPlaceTrueDivide : PyNumber_TrueDivide)(op1, op2);
- }
- result = a / b;
- return PyFloat_FromDouble(result);
- }
- #endif
- /* pybytes_as_double (used by pynumber_float) */
- static double __Pyx_SlowPyString_AsDouble(PyObject *obj) {
- PyObject *float_value = PyFloat_FromString(obj);
- if (likely(float_value)) {
- double value = __Pyx_PyFloat_AS_DOUBLE(float_value);
- Py_DECREF(float_value);
- return value;
- }
- return (double)-1;
- }
- static const char* __Pyx__PyBytes_AsDouble_Copy(const char* start, char* buffer, Py_ssize_t length) {
- int last_was_punctuation = 1;
- int parse_error_found = 0;
- Py_ssize_t i;
- for (i=0; i < length; i++) {
- char chr = start[i];
- int is_punctuation = (chr == '_') | (chr == '.') | (chr == 'e') | (chr == 'E');
- *buffer = chr;
- buffer += (chr != '_');
- parse_error_found |= last_was_punctuation & is_punctuation;
- last_was_punctuation = is_punctuation;
- }
- parse_error_found |= last_was_punctuation;
- *buffer = '\0';
- return unlikely(parse_error_found) ? NULL : buffer;
- }
- static double __Pyx__PyBytes_AsDouble_inf_nan(const char* start, Py_ssize_t length) {
- int matches = 1;
- char sign = start[0];
- int is_signed = (sign == '+') | (sign == '-');
- start += is_signed;
- length -= is_signed;
- switch (start[0]) {
- #ifdef Py_NAN
- case 'n':
- case 'N':
- if (unlikely(length != 3)) goto parse_failure;
- matches &= (start[1] == 'a' || start[1] == 'A');
- matches &= (start[2] == 'n' || start[2] == 'N');
- if (unlikely(!matches)) goto parse_failure;
- return (sign == '-') ? -Py_NAN : Py_NAN;
- #endif
- case 'i':
- case 'I':
- if (unlikely(length < 3)) goto parse_failure;
- matches &= (start[1] == 'n' || start[1] == 'N');
- matches &= (start[2] == 'f' || start[2] == 'F');
- if (likely(length == 3 && matches))
- return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL;
- if (unlikely(length != 8)) goto parse_failure;
- matches &= (start[3] == 'i' || start[3] == 'I');
- matches &= (start[4] == 'n' || start[4] == 'N');
- matches &= (start[5] == 'i' || start[5] == 'I');
- matches &= (start[6] == 't' || start[6] == 'T');
- matches &= (start[7] == 'y' || start[7] == 'Y');
- if (unlikely(!matches)) goto parse_failure;
- return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL;
- case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
- break;
- default:
- goto parse_failure;
- }
- return 0.0;
- parse_failure:
- return -1.0;
- }
- static CYTHON_INLINE int __Pyx__PyBytes_AsDouble_IsSpace(char ch) {
- return (ch == 0x20) | !((ch < 0x9) | (ch > 0xd));
- }
- CYTHON_UNUSED static double __Pyx__PyBytes_AsDouble(PyObject *obj, const char* start, Py_ssize_t length) {
- double value;
- Py_ssize_t i, digits;
- const char *last = start + length;
- char *end;
- while (__Pyx__PyBytes_AsDouble_IsSpace(*start))
- start++;
- while (start < last - 1 && __Pyx__PyBytes_AsDouble_IsSpace(last[-1]))
- last--;
- length = last - start;
- if (unlikely(length <= 0)) goto fallback;
- value = __Pyx__PyBytes_AsDouble_inf_nan(start, length);
- if (unlikely(value == -1.0)) goto fallback;
- if (value != 0.0) return value;
- digits = 0;
- for (i=0; i < length; digits += start[i++] != '_');
- if (likely(digits == length)) {
- value = PyOS_string_to_double(start, &end, NULL);
- } else if (digits < 40) {
- char number[40];
- last = __Pyx__PyBytes_AsDouble_Copy(start, number, length);
- if (unlikely(!last)) goto fallback;
- value = PyOS_string_to_double(number, &end, NULL);
- } else {
- char *number = (char*) PyMem_Malloc((digits + 1) * sizeof(char));
- if (unlikely(!number)) goto fallback;
- last = __Pyx__PyBytes_AsDouble_Copy(start, number, length);
- if (unlikely(!last)) {
- PyMem_Free(number);
- goto fallback;
- }
- value = PyOS_string_to_double(number, &end, NULL);
- PyMem_Free(number);
- }
- if (likely(end == last) || (value == (double)-1 && PyErr_Occurred())) {
- return value;
- }
- fallback:
- return __Pyx_SlowPyString_AsDouble(obj);
- }
- /* pynumber_float */
- static CYTHON_INLINE PyObject* __Pyx__PyNumber_Float(PyObject* obj) {
- double val;
- if (PyLong_CheckExact(obj)) {
- #if CYTHON_USE_PYLONG_INTERNALS
- if (likely(__Pyx_PyLong_IsCompact(obj))) {
- val = (double) __Pyx_PyLong_CompactValue(obj);
- goto no_error;
- }
- #endif
- val = PyLong_AsDouble(obj);
- } else if (PyUnicode_CheckExact(obj)) {
- val = __Pyx_PyUnicode_AsDouble(obj);
- } else if (PyBytes_CheckExact(obj)) {
- val = __Pyx_PyBytes_AsDouble(obj);
- } else if (PyByteArray_CheckExact(obj)) {
- val = __Pyx_PyByteArray_AsDouble(obj);
- } else {
- return PyNumber_Float(obj);
- }
- if (unlikely(val == -1 && PyErr_Occurred())) {
- return NULL;
- }
- #if CYTHON_USE_PYLONG_INTERNALS
- no_error:
- #endif
- return PyFloat_FromDouble(val);
- }
- /* PyFloatBinop */
- #if !CYTHON_COMPILING_IN_PYPY
- static int __Pyx_PyFloat_BoolEqObjC(PyObject *op1, PyObject *op2, double floatval, int inplace, int zerodivision_check) {
- const double b = floatval;
- double a;
- CYTHON_UNUSED_VAR(inplace);
- CYTHON_UNUSED_VAR(zerodivision_check);
- if (op1 == op2) {
- return 1;
- }
- if (likely(PyFloat_CheckExact(op1))) {
- a = __Pyx_PyFloat_AS_DOUBLE(op1);
-
- } else
- if (likely(PyLong_CheckExact(op1))) {
- #if CYTHON_USE_PYLONG_INTERNALS
- if (__Pyx_PyLong_IsZero(op1)) {
- a = 0.0;
-
- } else if (__Pyx_PyLong_IsCompact(op1)) {
- a = (double) __Pyx_PyLong_CompactValue(op1);
- } else {
- const digit* digits = __Pyx_PyLong_Digits(op1);
- const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1);
- switch (size) {
- case -2:
- case 2:
- if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT && ((8 * sizeof(unsigned long) < 53) || (1 * PyLong_SHIFT < 53))) {
- a = (double) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if ((8 * sizeof(unsigned long) < 53) || (2 * PyLong_SHIFT < 53) || (a < (double) ((PY_LONG_LONG)1 << 53))) {
- if (size == -2)
- a = -a;
- break;
- }
- }
- CYTHON_FALLTHROUGH;
- case -3:
- case 3:
- if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT && ((8 * sizeof(unsigned long) < 53) || (2 * PyLong_SHIFT < 53))) {
- a = (double) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if ((8 * sizeof(unsigned long) < 53) || (3 * PyLong_SHIFT < 53) || (a < (double) ((PY_LONG_LONG)1 << 53))) {
- if (size == -3)
- a = -a;
- break;
- }
- }
- CYTHON_FALLTHROUGH;
- case -4:
- case 4:
- if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT && ((8 * sizeof(unsigned long) < 53) || (3 * PyLong_SHIFT < 53))) {
- a = (double) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if ((8 * sizeof(unsigned long) < 53) || (4 * PyLong_SHIFT < 53) || (a < (double) ((PY_LONG_LONG)1 << 53))) {
- if (size == -4)
- a = -a;
- break;
- }
- }
- CYTHON_FALLTHROUGH;
- default:
- #endif
- {
- PyObject *res =
- #if CYTHON_USE_TYPE_SLOTS || __PYX_LIMITED_VERSION_HEX >= 0x030A0000
- __Pyx_PyType_GetSlot((&PyFloat_Type), tp_richcompare, richcmpfunc)
- #else
- PyObject_RichCompare
- #endif
- (op2, op1,
- Py_EQ);
- return __Pyx_PyObject_IsTrueAndDecref(
- res);
- }
- #if CYTHON_USE_PYLONG_INTERNALS
- }
- }
- #endif
- } else {
- return __Pyx_PyObject_IsTrueAndDecref(
- PyObject_RichCompare(op1, op2, Py_EQ));
- }
- if (a == b) {
- return 1;
- } else {
- return 0;
- }
- }
- #endif
- /* PyLongBinop */
- #if !CYTHON_COMPILING_IN_PYPY
- static PyObject* __Pyx_Fallback___Pyx_PyLong_SubtractCObj(PyObject *op1, PyObject *op2, int inplace) {
- return (inplace ? PyNumber_InPlaceSubtract : PyNumber_Subtract)(op1, op2);
- }
- #if CYTHON_USE_PYLONG_INTERNALS
- static PyObject* __Pyx_Unpacked___Pyx_PyLong_SubtractCObj(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
- CYTHON_MAYBE_UNUSED_VAR(inplace);
- CYTHON_UNUSED_VAR(zerodivision_check);
- const long a = intval;
- long b;
- const PY_LONG_LONG lla = intval;
- PY_LONG_LONG llb;
- if (unlikely(__Pyx_PyLong_IsZero(op2))) {
- return __Pyx_NewRef(op1);
- }
- const int is_positive = __Pyx_PyLong_IsPos(op2);
- const digit* digits = __Pyx_PyLong_Digits(op2);
- const Py_ssize_t size = __Pyx_PyLong_DigitCount(op2);
- if (likely(size == 1)) {
- b = (long) digits[0];
- if (!is_positive) b *= -1;
- } else {
- switch (size) {
- case 2:
- if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
- b = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if (!is_positive) b *= -1;
- goto calculate_long;
- } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
- llb = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
- if (!is_positive) llb *= -1;
- goto calculate_long_long;
- }
- break;
- case 3:
- if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
- b = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if (!is_positive) b *= -1;
- goto calculate_long;
- } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
- llb = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
- if (!is_positive) llb *= -1;
- goto calculate_long_long;
- }
- break;
- case 4:
- if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
- b = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
- if (!is_positive) b *= -1;
- goto calculate_long;
- } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
- llb = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
- if (!is_positive) llb *= -1;
- goto calculate_long_long;
- }
- break;
- }
- return PyLong_Type.tp_as_number->nb_subtract(op1, op2);
- }
- calculate_long:
- {
- long x;
- x = a - b;
- return PyLong_FromLong(x);
- }
- calculate_long_long:
- {
- PY_LONG_LONG llx;
- llx = lla - llb;
- return PyLong_FromLongLong(llx);
- }
-
- }
- #endif
- static PyObject* __Pyx_Float___Pyx_PyLong_SubtractCObj(PyObject *float_val, long intval, int zerodivision_check) {
- CYTHON_UNUSED_VAR(zerodivision_check);
- const long a = intval;
- double b = __Pyx_PyFloat_AS_DOUBLE(float_val);
- double result;
-
- result = ((double)a) - (double)b;
- return PyFloat_FromDouble(result);
- }
- static CYTHON_INLINE PyObject* __Pyx_PyLong_SubtractCObj(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
- CYTHON_MAYBE_UNUSED_VAR(intval);
- CYTHON_UNUSED_VAR(zerodivision_check);
- #if CYTHON_USE_PYLONG_INTERNALS
- if (likely(PyLong_CheckExact(op2))) {
- return __Pyx_Unpacked___Pyx_PyLong_SubtractCObj(op1, op2, intval, inplace, zerodivision_check);
- }
- #endif
- if (PyFloat_CheckExact(op2)) {
- return __Pyx_Float___Pyx_PyLong_SubtractCObj(op2, intval, zerodivision_check);
- }
- return __Pyx_Fallback___Pyx_PyLong_SubtractCObj(op1, op2, inplace);
- }
- #endif
- /* PyObjectVectorCallKwBuilder */
- #if CYTHON_VECTORCALL
- static int __Pyx_VectorcallBuilder_AddArg(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n) {
- (void)__Pyx_PyObject_FastCallDict;
- if (__Pyx_PyTuple_SET_ITEM(builder, n, key) != (0)) return -1;
- Py_INCREF(key);
- args[n] = value;
- return 0;
- }
- CYTHON_UNUSED static int __Pyx_VectorcallBuilder_AddArg_Check(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n) {
- (void)__Pyx_VectorcallBuilder_AddArgStr;
- if (unlikely(!PyUnicode_Check(key))) {
- PyErr_SetString(PyExc_TypeError, "keywords must be strings");
- return -1;
- }
- return __Pyx_VectorcallBuilder_AddArg(key, value, builder, args, n);
- }
- static int __Pyx_VectorcallBuilder_AddArgStr(const char *key, PyObject *value, PyObject *builder, PyObject **args, int n) {
- PyObject *pyKey = PyUnicode_FromString(key);
- if (!pyKey) return -1;
- return __Pyx_VectorcallBuilder_AddArg(pyKey, value, builder, args, n);
- }
- #else // CYTHON_VECTORCALL
- CYTHON_UNUSED static int __Pyx_VectorcallBuilder_AddArg_Check(PyObject *key, PyObject *value, PyObject *builder, CYTHON_UNUSED PyObject **args, CYTHON_UNUSED int n) {
- if (unlikely(!PyUnicode_Check(key))) {
- PyErr_SetString(PyExc_TypeError, "keywords must be strings");
- return -1;
- }
- return PyDict_SetItem(builder, key, value);
- }
- #endif
- /* PyObjectFastCallMethod */
- #if !CYTHON_VECTORCALL || PY_VERSION_HEX < 0x03090000
- static PyObject *__Pyx_PyObject_FastCallMethod(PyObject *name, PyObject *const *args, size_t nargsf) {
- PyObject *result;
- PyObject *attr = PyObject_GetAttr(args[0], name);
- if (unlikely(!attr))
- return NULL;
- result = __Pyx_PyObject_FastCall(attr, args+1, nargsf - 1);
- Py_DECREF(attr);
- return result;
- }
- #endif
- /* RaiseClosureNameError */
- static void __Pyx_RaiseClosureNameError(const char *varname) {
- PyErr_Format(PyExc_NameError, "free variable '%s' referenced before assignment in enclosing scope", varname);
- }
- /* PyMethodNew (used by CythonFunctionShared) */
- #if CYTHON_COMPILING_IN_LIMITED_API
- static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
- PyObject *result;
- CYTHON_UNUSED_VAR(typ);
- if (!self)
- return __Pyx_NewRef(func);
- #if __PYX_LIMITED_VERSION_HEX >= 0x030C0000
- {
- PyObject *args[] = {func, self};
- result = PyObject_Vectorcall(__pyx_mstate_global->__Pyx_CachedMethodType, args, 2, NULL);
- }
- #else
- result = PyObject_CallFunctionObjArgs(__pyx_mstate_global->__Pyx_CachedMethodType, func, self, NULL);
- #endif
- return result;
- }
- #else
- static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
- CYTHON_UNUSED_VAR(typ);
- if (!self)
- return __Pyx_NewRef(func);
- return PyMethod_New(func, self);
- }
- #endif
- /* PyVectorcallFastCallDict (used by CythonFunctionShared) */
- #if CYTHON_METH_FASTCALL && CYTHON_VECTORCALL
- static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw)
- {
- PyObject *res = NULL;
- PyObject *kwnames;
- PyObject **newargs;
- PyObject **kwvalues;
- Py_ssize_t i;
- #if CYTHON_AVOID_BORROWED_REFS
- PyObject *pos;
- #else
- Py_ssize_t pos;
- #endif
- size_t j;
- PyObject *key, *value;
- unsigned long keys_are_strings;
- #if !CYTHON_ASSUME_SAFE_SIZE
- Py_ssize_t nkw = PyDict_Size(kw);
- if (unlikely(nkw == -1)) return NULL;
- #else
- Py_ssize_t nkw = PyDict_GET_SIZE(kw);
- #endif
- newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0]));
- if (unlikely(newargs == NULL)) {
- PyErr_NoMemory();
- return NULL;
- }
- for (j = 0; j < nargs; j++) newargs[j] = args[j];
- kwnames = PyTuple_New(nkw);
- if (unlikely(kwnames == NULL)) {
- PyMem_Free(newargs);
- return NULL;
- }
- kwvalues = newargs + nargs;
- pos = 0;
- i = 0;
- keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS;
- while (__Pyx_PyDict_NextRef(kw, &pos, &key, &value)) {
- keys_are_strings &=
- #if CYTHON_COMPILING_IN_LIMITED_API
- PyType_GetFlags(Py_TYPE(key));
- #else
- Py_TYPE(key)->tp_flags;
- #endif
- #if !CYTHON_ASSUME_SAFE_MACROS
- if (unlikely(PyTuple_SetItem(kwnames, i, key) < 0)) goto cleanup;
- #else
- PyTuple_SET_ITEM(kwnames, i, key);
- #endif
- kwvalues[i] = value;
- i++;
- }
- if (unlikely(!keys_are_strings)) {
- PyErr_SetString(PyExc_TypeError, "keywords must be strings");
- goto cleanup;
- }
- res = vc(func, newargs, nargs, kwnames);
- cleanup:
- #if CYTHON_AVOID_BORROWED_REFS
- Py_DECREF(pos);
- #endif
- Py_DECREF(kwnames);
- for (i = 0; i < nkw; i++)
- Py_DECREF(kwvalues[i]);
- PyMem_Free(newargs);
- return res;
- }
- static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw)
- {
- Py_ssize_t kw_size =
- likely(kw == NULL) ?
- 0 :
- #if !CYTHON_ASSUME_SAFE_SIZE
- PyDict_Size(kw);
- #else
- PyDict_GET_SIZE(kw);
- #endif
- if (kw_size == 0) {
- return vc(func, args, nargs, NULL);
- }
- #if !CYTHON_ASSUME_SAFE_SIZE
- else if (unlikely(kw_size == -1)) {
- return NULL;
- }
- #endif
- return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw);
- }
- #endif
- /* CythonFunctionShared (used by CythonFunction) */
- #if CYTHON_COMPILING_IN_LIMITED_API
- static CYTHON_INLINE int __Pyx__IsSameCyOrCFunctionNoMethod(PyObject *func, void (*cfunc)(void)) {
- if (__Pyx_CyFunction_Check(func)) {
- return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc;
- } else if (PyCFunction_Check(func)) {
- return PyCFunction_GetFunction(func) == (PyCFunction) cfunc;
- }
- return 0;
- }
- static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void (*cfunc)(void)) {
- if ((PyObject*)Py_TYPE(func) == __pyx_mstate_global->__Pyx_CachedMethodType) {
- int result;
- PyObject *newFunc = PyObject_GetAttr(func, __pyx_mstate_global->__pyx_n_u_func);
- if (unlikely(!newFunc)) {
- PyErr_Clear(); // It's only an optimization, so don't throw an error
- return 0;
- }
- result = __Pyx__IsSameCyOrCFunctionNoMethod(newFunc, cfunc);
- Py_DECREF(newFunc);
- return result;
- }
- return __Pyx__IsSameCyOrCFunctionNoMethod(func, cfunc);
- }
- #else
- static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void (*cfunc)(void)) {
- if (PyMethod_Check(func)) {
- func = PyMethod_GET_FUNCTION(func);
- }
- return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc;
- }
- #endif
- static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) {
- #if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
- __Pyx_Py_XDECREF_SET(
- __Pyx_CyFunction_GetClassObj(f),
- ((classobj) ? __Pyx_NewRef(classobj) : NULL));
- #else
- __Pyx_Py_XDECREF_SET(
- ((PyCMethodObject *) (f))->mm_class,
- (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL));
- #endif
- }
- static PyObject *
- __Pyx_CyFunction_get_doc_locked(__pyx_CyFunctionObject *op)
- {
- if (unlikely(op->func_doc == NULL)) {
- #if CYTHON_COMPILING_IN_LIMITED_API
- op->func_doc = PyObject_GetAttrString(op->func, "__doc__");
- if (unlikely(!op->func_doc)) return NULL;
- #else
- if (((PyCFunctionObject*)op)->m_ml->ml_doc) {
- op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc);
- if (unlikely(op->func_doc == NULL))
- return NULL;
- } else {
- Py_INCREF(Py_None);
- return Py_None;
- }
- #endif
- }
- Py_INCREF(op->func_doc);
- return op->func_doc;
- }
- static PyObject *
- __Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) {
- PyObject *result;
- CYTHON_UNUSED_VAR(closure);
- __Pyx_BEGIN_CRITICAL_SECTION(op);
- result = __Pyx_CyFunction_get_doc_locked(op);
- __Pyx_END_CRITICAL_SECTION();
- return result;
- }
- static int
- __Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context)
- {
- CYTHON_UNUSED_VAR(context);
- if (value == NULL) {
- value = Py_None;
- }
- Py_INCREF(value);
- __Pyx_BEGIN_CRITICAL_SECTION(op);
- __Pyx_Py_XDECREF_SET(op->func_doc, value);
- __Pyx_END_CRITICAL_SECTION();
- return 0;
- }
- static PyObject *
- __Pyx_CyFunction_get_name_locked(__pyx_CyFunctionObject *op)
- {
- if (unlikely(op->func_name == NULL)) {
- #if CYTHON_COMPILING_IN_LIMITED_API
- op->func_name = PyObject_GetAttrString(op->func, "__name__");
- #else
- op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name);
- #endif
- if (unlikely(op->func_name == NULL))
- return NULL;
- }
- Py_INCREF(op->func_name);
- return op->func_name;
- }
- static PyObject *
- __Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context)
- {
- PyObject *result = NULL;
- CYTHON_UNUSED_VAR(context);
- __Pyx_BEGIN_CRITICAL_SECTION(op);
- result = __Pyx_CyFunction_get_name_locked(op);
- __Pyx_END_CRITICAL_SECTION();
- return result;
- }
- static int
- __Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context)
- {
- CYTHON_UNUSED_VAR(context);
- if (unlikely(value == NULL || !PyUnicode_Check(value))) {
- PyErr_SetString(PyExc_TypeError,
- "__name__ must be set to a string object");
- return -1;
- }
- Py_INCREF(value);
- __Pyx_BEGIN_CRITICAL_SECTION(op);
- __Pyx_Py_XDECREF_SET(op->func_name, value);
- __Pyx_END_CRITICAL_SECTION();
- return 0;
- }
- static PyObject *
- __Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context)
- {
- CYTHON_UNUSED_VAR(context);
- PyObject *result;
- __Pyx_BEGIN_CRITICAL_SECTION(op);
- Py_INCREF(op->func_qualname);
- result = op->func_qualname;
- __Pyx_END_CRITICAL_SECTION();
- return result;
- }
- static int
- __Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context)
- {
- CYTHON_UNUSED_VAR(context);
- if (unlikely(value == NULL || !PyUnicode_Check(value))) {
- PyErr_SetString(PyExc_TypeError,
- "__qualname__ must be set to a string object");
- return -1;
- }
- Py_INCREF(value);
- __Pyx_BEGIN_CRITICAL_SECTION(op);
- __Pyx_Py_XDECREF_SET(op->func_qualname, value);
- __Pyx_END_CRITICAL_SECTION();
- return 0;
- }
- #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
- static PyObject *
- __Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context)
- {
- CYTHON_UNUSED_VAR(context);
- 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;
- }
- #endif
- static PyObject *
- __Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context)
- {
- CYTHON_UNUSED_VAR(context);
- Py_INCREF(op->func_globals);
- return op->func_globals;
- }
- static PyObject *
- __Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context)
- {
- CYTHON_UNUSED_VAR(op);
- CYTHON_UNUSED_VAR(context);
- Py_INCREF(Py_None);
- return Py_None;
- }
- static PyObject *
- __Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context)
- {
- PyObject* result = (op->func_code) ? op->func_code : Py_None;
- CYTHON_UNUSED_VAR(context);
- Py_INCREF(result);
- return result;
- }
- static int
- __Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) {
- int result = 0;
- PyObject *res = op->defaults_getter((PyObject *) op);
- if (unlikely(!res))
- return -1;
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- 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);
- #else
- op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0);
- if (unlikely(!op->defaults_tuple)) result = -1;
- else {
- op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1);
- if (unlikely(!op->defaults_kwdict)) result = -1;
- }
- #endif
- Py_DECREF(res);
- return result;
- }
- static int
- __Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
- CYTHON_UNUSED_VAR(context);
- if (!value) {
- value = Py_None;
- } else if (unlikely(value != Py_None && !PyTuple_Check(value))) {
- PyErr_SetString(PyExc_TypeError,
- "__defaults__ must be set to a tuple object");
- return -1;
- }
- PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not "
- "currently affect the values used in function calls", 1);
- Py_INCREF(value);
- __Pyx_BEGIN_CRITICAL_SECTION(op);
- __Pyx_Py_XDECREF_SET(op->defaults_tuple, value);
- __Pyx_END_CRITICAL_SECTION();
- return 0;
- }
- static PyObject *
- __Pyx_CyFunction_get_defaults_locked(__pyx_CyFunctionObject *op) {
- PyObject* result = op->defaults_tuple;
- if (unlikely(!result)) {
- if (op->defaults_getter) {
- if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL;
- result = op->defaults_tuple;
- } else {
- result = Py_None;
- }
- }
- Py_INCREF(result);
- return result;
- }
- static PyObject *
- __Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) {
- PyObject* result = NULL;
- CYTHON_UNUSED_VAR(context);
- __Pyx_BEGIN_CRITICAL_SECTION(op);
- result = __Pyx_CyFunction_get_defaults_locked(op);
- __Pyx_END_CRITICAL_SECTION();
- return result;
- }
- static int
- __Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
- CYTHON_UNUSED_VAR(context);
- if (!value) {
- value = Py_None;
- } else if (unlikely(value != Py_None && !PyDict_Check(value))) {
- PyErr_SetString(PyExc_TypeError,
- "__kwdefaults__ must be set to a dict object");
- return -1;
- }
- PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not "
- "currently affect the values used in function calls", 1);
- Py_INCREF(value);
- __Pyx_BEGIN_CRITICAL_SECTION(op);
- __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value);
- __Pyx_END_CRITICAL_SECTION();
- return 0;
- }
- static PyObject *
- __Pyx_CyFunction_get_kwdefaults_locked(__pyx_CyFunctionObject *op) {
- PyObject* result = op->defaults_kwdict;
- if (unlikely(!result)) {
- if (op->defaults_getter) {
- if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL;
- result = op->defaults_kwdict;
- } else {
- result = Py_None;
- }
- }
- Py_INCREF(result);
- return result;
- }
- static PyObject *
- __Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) {
- PyObject* result;
- CYTHON_UNUSED_VAR(context);
- __Pyx_BEGIN_CRITICAL_SECTION(op);
- result = __Pyx_CyFunction_get_kwdefaults_locked(op);
- __Pyx_END_CRITICAL_SECTION();
- return result;
- }
- static int
- __Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
- CYTHON_UNUSED_VAR(context);
- if (!value || value == Py_None) {
- value = NULL;
- } else if (unlikely(!PyDict_Check(value))) {
- PyErr_SetString(PyExc_TypeError,
- "__annotations__ must be set to a dict object");
- return -1;
- }
- Py_XINCREF(value);
- __Pyx_BEGIN_CRITICAL_SECTION(op);
- __Pyx_Py_XDECREF_SET(op->func_annotations, value);
- __Pyx_END_CRITICAL_SECTION();
- return 0;
- }
- static PyObject *
- __Pyx_CyFunction_get_annotations_locked(__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 PyObject *
- __Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) {
- PyObject *result;
- CYTHON_UNUSED_VAR(context);
- __Pyx_BEGIN_CRITICAL_SECTION(op);
- result = __Pyx_CyFunction_get_annotations_locked(op);
- __Pyx_END_CRITICAL_SECTION();
- return result;
- }
- static PyObject *
- __Pyx_CyFunction_get_is_coroutine_value(__pyx_CyFunctionObject *op) {
- int is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE;
- if (is_coroutine) {
- PyObject *is_coroutine_value, *module, *fromlist, *marker = __pyx_mstate_global->__pyx_n_u_is_coroutine;
- fromlist = PyList_New(1);
- if (unlikely(!fromlist)) return NULL;
- Py_INCREF(marker);
- #if CYTHON_ASSUME_SAFE_MACROS
- PyList_SET_ITEM(fromlist, 0, marker);
- #else
- if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) {
- Py_DECREF(marker);
- Py_DECREF(fromlist);
- return NULL;
- }
- #endif
- module = PyImport_ImportModuleLevelObject(__pyx_mstate_global->__pyx_n_u_asyncio_coroutines, NULL, NULL, fromlist, 0);
- Py_DECREF(fromlist);
- if (unlikely(!module)) goto ignore;
- is_coroutine_value = __Pyx_PyObject_GetAttrStr(module, marker);
- Py_DECREF(module);
- if (likely(is_coroutine_value)) {
- return is_coroutine_value;
- }
- ignore:
- PyErr_Clear();
- }
- return __Pyx_PyBool_FromLong(is_coroutine);
- }
- static PyObject *
- __Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) {
- PyObject *result;
- CYTHON_UNUSED_VAR(context);
- if (op->func_is_coroutine) {
- return __Pyx_NewRef(op->func_is_coroutine);
- }
- result = __Pyx_CyFunction_get_is_coroutine_value(op);
- if (unlikely(!result))
- return NULL;
- __Pyx_BEGIN_CRITICAL_SECTION(op);
- if (op->func_is_coroutine) {
- Py_DECREF(result);
- result = __Pyx_NewRef(op->func_is_coroutine);
- } else {
- op->func_is_coroutine = __Pyx_NewRef(result);
- }
- __Pyx_END_CRITICAL_SECTION();
- return result;
- }
- static void __Pyx_CyFunction_raise_argument_count_error(__pyx_CyFunctionObject *func, const char* message, Py_ssize_t size) {
- #if CYTHON_COMPILING_IN_LIMITED_API
- PyObject *py_name = __Pyx_CyFunction_get_name(func, NULL);
- if (!py_name) return;
- PyErr_Format(PyExc_TypeError,
- "%.200S() %s (%" CYTHON_FORMAT_SSIZE_T "d given)",
- py_name, message, size);
- Py_DECREF(py_name);
- #else
- const char* name = ((PyCFunctionObject*)func)->m_ml->ml_name;
- PyErr_Format(PyExc_TypeError,
- "%.200s() %s (%" CYTHON_FORMAT_SSIZE_T "d given)",
- name, message, size);
- #endif
- }
- static void __Pyx_CyFunction_raise_type_error(__pyx_CyFunctionObject *func, const char* message) {
- #if CYTHON_COMPILING_IN_LIMITED_API
- PyObject *py_name = __Pyx_CyFunction_get_name(func, NULL);
- if (!py_name) return;
- PyErr_Format(PyExc_TypeError,
- "%.200S() %s",
- py_name, message);
- Py_DECREF(py_name);
- #else
- const char* name = ((PyCFunctionObject*)func)->m_ml->ml_name;
- PyErr_Format(PyExc_TypeError,
- "%.200s() %s",
- name, message);
- #endif
- }
- #if CYTHON_COMPILING_IN_LIMITED_API
- static PyObject *
- __Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) {
- CYTHON_UNUSED_VAR(context);
- return PyObject_GetAttrString(op->func, "__module__");
- }
- static int
- __Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
- CYTHON_UNUSED_VAR(context);
- return PyObject_SetAttrString(op->func, "__module__", value);
- }
- #endif
- static PyGetSetDef __pyx_CyFunction_getsets[] = {
- {"func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
- {"__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
- {"func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
- {"__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
- {"__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0},
- #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
- {"func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)PyObject_GenericSetDict, 0, 0},
- {"__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)PyObject_GenericSetDict, 0, 0},
- #else
- {"func_dict", (getter)PyObject_GenericGetDict, (setter)PyObject_GenericSetDict, 0, 0},
- {"__dict__", (getter)PyObject_GenericGetDict, (setter)PyObject_GenericSetDict, 0, 0},
- #endif
- {"func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
- {"__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
- {"func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
- {"__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
- {"func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
- {"__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
- {"func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
- {"__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
- {"__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
- {"__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
- {"_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0},
- #if CYTHON_COMPILING_IN_LIMITED_API
- {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0},
- #endif
- {0, 0, 0, 0, 0}
- };
- static PyMemberDef __pyx_CyFunction_members[] = {
- #if !CYTHON_COMPILING_IN_LIMITED_API
- {"__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0},
- #endif
- #if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
- {"__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0},
- #endif
- #if CYTHON_METH_FASTCALL
- #if CYTHON_COMPILING_IN_LIMITED_API
- {"__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0},
- #else
- {"__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0},
- #endif
- #if CYTHON_COMPILING_IN_LIMITED_API
- {"__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0},
- #else
- {"__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0},
- #endif
- #endif
- {0, 0, 0, 0, 0}
- };
- static PyObject *
- __Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args)
- {
- PyObject *result = NULL;
- CYTHON_UNUSED_VAR(args);
- __Pyx_BEGIN_CRITICAL_SECTION(m);
- Py_INCREF(m->func_qualname);
- result = m->func_qualname;
- __Pyx_END_CRITICAL_SECTION();
- return result;
- }
- static PyMethodDef __pyx_CyFunction_methods[] = {
- {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0},
- {0, 0, 0, 0}
- };
- #if CYTHON_COMPILING_IN_LIMITED_API
- #define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist)
- #else
- #define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist)
- #endif
- static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname,
- PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
- #if !CYTHON_COMPILING_IN_LIMITED_API
- PyCFunctionObject *cf = (PyCFunctionObject*) op;
- #endif
- if (unlikely(op == NULL))
- return NULL;
- #if CYTHON_COMPILING_IN_LIMITED_API
- op->func = PyCFunction_NewEx(ml, (PyObject*)op, module);
- if (unlikely(!op->func)) return NULL;
- #endif
- op->flags = flags;
- __Pyx_CyFunction_weakreflist(op) = NULL;
- #if !CYTHON_COMPILING_IN_LIMITED_API
- cf->m_ml = ml;
- cf->m_self = (PyObject *) op;
- #endif
- Py_XINCREF(closure);
- op->func_closure = closure;
- #if !CYTHON_COMPILING_IN_LIMITED_API
- Py_XINCREF(module);
- cf->m_module = module;
- #endif
- #if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
- op->func_dict = NULL;
- #endif
- op->func_name = NULL;
- Py_INCREF(qualname);
- op->func_qualname = qualname;
- op->func_doc = NULL;
- #if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
- op->func_classobj = NULL;
- #else
- ((PyCMethodObject*)op)->mm_class = NULL;
- #endif
- op->func_globals = globals;
- Py_INCREF(op->func_globals);
- Py_XINCREF(code);
- op->func_code = code;
- op->defaults = NULL;
- op->defaults_tuple = NULL;
- op->defaults_kwdict = NULL;
- op->defaults_getter = NULL;
- op->func_annotations = NULL;
- op->func_is_coroutine = NULL;
- #if CYTHON_METH_FASTCALL
- switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) {
- case METH_NOARGS:
- __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS;
- break;
- case METH_O:
- __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O;
- break;
- case METH_METHOD | METH_FASTCALL | METH_KEYWORDS:
- __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD;
- break;
- case METH_FASTCALL | METH_KEYWORDS:
- __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS;
- break;
- case METH_VARARGS | METH_KEYWORDS:
- __Pyx_CyFunction_func_vectorcall(op) = NULL;
- break;
- default:
- PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction");
- Py_DECREF(op);
- return NULL;
- }
- #endif
- return (PyObject *) op;
- }
- static int
- __Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
- {
- Py_CLEAR(m->func_closure);
- #if CYTHON_COMPILING_IN_LIMITED_API
- Py_CLEAR(m->func);
- #else
- Py_CLEAR(((PyCFunctionObject*)m)->m_module);
- #endif
- #if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
- Py_CLEAR(m->func_dict);
- #elif PY_VERSION_HEX < 0x030d0000
- _PyObject_ClearManagedDict((PyObject*)m);
- #else
- PyObject_ClearManagedDict((PyObject*)m);
- #endif
- Py_CLEAR(m->func_name);
- Py_CLEAR(m->func_qualname);
- Py_CLEAR(m->func_doc);
- Py_CLEAR(m->func_globals);
- Py_CLEAR(m->func_code);
- #if !CYTHON_COMPILING_IN_LIMITED_API
- #if PY_VERSION_HEX < 0x030900B1
- Py_CLEAR(__Pyx_CyFunction_GetClassObj(m));
- #else
- {
- PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class;
- ((PyCMethodObject *) (m))->mm_class = NULL;
- Py_XDECREF(cls);
- }
- #endif
- #endif
- Py_CLEAR(m->defaults_tuple);
- Py_CLEAR(m->defaults_kwdict);
- Py_CLEAR(m->func_annotations);
- Py_CLEAR(m->func_is_coroutine);
- Py_CLEAR(m->defaults);
- return 0;
- }
- static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m)
- {
- if (__Pyx_CyFunction_weakreflist(m) != NULL)
- PyObject_ClearWeakRefs((PyObject *) m);
- __Pyx_CyFunction_clear(m);
- __Pyx_PyHeapTypeObject_GC_Del(m);
- }
- static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
- {
- PyObject_GC_UnTrack(m);
- __Pyx__CyFunction_dealloc(m);
- }
- static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
- {
- {
- int e = __Pyx_call_type_traverse((PyObject*)m, 1, visit, arg);
- if (e) return e;
- }
- Py_VISIT(m->func_closure);
- #if CYTHON_COMPILING_IN_LIMITED_API
- Py_VISIT(m->func);
- #else
- Py_VISIT(((PyCFunctionObject*)m)->m_module);
- #endif
- #if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
- Py_VISIT(m->func_dict);
- #else
- {
- int e =
- #if PY_VERSION_HEX < 0x030d0000
- _PyObject_VisitManagedDict
- #else
- PyObject_VisitManagedDict
- #endif
- ((PyObject*)m, visit, arg);
- if (e != 0) return e;
- }
- #endif
- __Pyx_VISIT_CONST(m->func_name);
- __Pyx_VISIT_CONST(m->func_qualname);
- Py_VISIT(m->func_doc);
- Py_VISIT(m->func_globals);
- __Pyx_VISIT_CONST(m->func_code);
- #if !CYTHON_COMPILING_IN_LIMITED_API
- Py_VISIT(__Pyx_CyFunction_GetClassObj(m));
- #endif
- Py_VISIT(m->defaults_tuple);
- Py_VISIT(m->defaults_kwdict);
- Py_VISIT(m->func_is_coroutine);
- Py_VISIT(m->defaults);
- return 0;
- }
- static PyObject*
- __Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
- {
- PyObject *repr;
- __Pyx_BEGIN_CRITICAL_SECTION(op);
- repr = PyUnicode_FromFormat("<cyfunction %U at %p>",
- op->func_qualname, (void *)op);
- __Pyx_END_CRITICAL_SECTION();
- return repr;
- }
- static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) {
- #if CYTHON_COMPILING_IN_LIMITED_API
- PyObject *f = ((__pyx_CyFunctionObject*)func)->func;
- PyCFunction meth;
- int flags;
- meth = PyCFunction_GetFunction(f);
- if (unlikely(!meth)) return NULL;
- flags = PyCFunction_GetFlags(f);
- if (unlikely(flags < 0)) return NULL;
- #else
- PyCFunctionObject* f = (PyCFunctionObject*)func;
- PyCFunction meth = f->m_ml->ml_meth;
- int flags = f->m_ml->ml_flags;
- #endif
- Py_ssize_t size;
- switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) {
- case METH_VARARGS:
- if (likely(kw == NULL || PyDict_Size(kw) == 0))
- return (*meth)(self, arg);
- break;
- case METH_VARARGS | METH_KEYWORDS:
- return (*(PyCFunctionWithKeywords)(void(*)(void))meth)(self, arg, kw);
- case METH_NOARGS:
- if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
- #if CYTHON_ASSUME_SAFE_SIZE
- size = PyTuple_GET_SIZE(arg);
- #else
- size = PyTuple_Size(arg);
- if (unlikely(size < 0)) return NULL;
- #endif
- if (likely(size == 0))
- return (*meth)(self, NULL);
- __Pyx_CyFunction_raise_argument_count_error(
- (__pyx_CyFunctionObject*)func,
- "takes no arguments", size);
- return NULL;
- }
- break;
- case METH_O:
- if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
- #if CYTHON_ASSUME_SAFE_SIZE
- size = PyTuple_GET_SIZE(arg);
- #else
- size = PyTuple_Size(arg);
- if (unlikely(size < 0)) return NULL;
- #endif
- if (likely(size == 1)) {
- PyObject *result, *arg0;
- #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- arg0 = PyTuple_GET_ITEM(arg, 0);
- #else
- arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL;
- #endif
- result = (*meth)(self, arg0);
- #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
- Py_DECREF(arg0);
- #endif
- return result;
- }
- __Pyx_CyFunction_raise_argument_count_error(
- (__pyx_CyFunctionObject*)func,
- "takes exactly one argument", size);
- return NULL;
- }
- break;
- default:
- PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction");
- return NULL;
- }
- __Pyx_CyFunction_raise_type_error(
- (__pyx_CyFunctionObject*)func, "takes no keyword arguments");
- return NULL;
- }
- static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
- PyObject *self, *result;
- #if CYTHON_COMPILING_IN_LIMITED_API
- self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func);
- if (unlikely(!self) && PyErr_Occurred()) return NULL;
- #else
- self = ((PyCFunctionObject*)func)->m_self;
- #endif
- result = __Pyx_CyFunction_CallMethod(func, self, arg, kw);
- return result;
- }
- static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) {
- PyObject *result;
- __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func;
- #if CYTHON_METH_FASTCALL && CYTHON_VECTORCALL
- __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc);
- if (vc) {
- #if CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE
- return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw);
- #else
- (void) &__Pyx_PyVectorcall_FastCallDict;
- return PyVectorcall_Call(func, args, kw);
- #endif
- }
- #endif
- if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) {
- Py_ssize_t argc;
- PyObject *new_args;
- PyObject *self;
- #if CYTHON_ASSUME_SAFE_SIZE
- argc = PyTuple_GET_SIZE(args);
- #else
- argc = PyTuple_Size(args);
- if (unlikely(argc < 0)) return NULL;
- #endif
- new_args = PyTuple_GetSlice(args, 1, argc);
- if (unlikely(!new_args))
- return NULL;
- self = PyTuple_GetItem(args, 0);
- if (unlikely(!self)) {
- Py_DECREF(new_args);
- PyErr_Format(PyExc_TypeError,
- "unbound method %.200S() needs an argument",
- cyfunc->func_qualname);
- return NULL;
- }
- result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
- Py_DECREF(new_args);
- } else {
- result = __Pyx_CyFunction_Call(func, args, kw);
- }
- return result;
- }
- #if CYTHON_METH_FASTCALL && CYTHON_VECTORCALL
- static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames)
- {
- int ret = 0;
- if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) {
- if (unlikely(nargs < 1)) {
- __Pyx_CyFunction_raise_type_error(
- cyfunc, "needs an argument");
- return -1;
- }
- ret = 1;
- }
- if (unlikely(kwnames) && unlikely(__Pyx_PyTuple_GET_SIZE(kwnames))) {
- __Pyx_CyFunction_raise_type_error(
- cyfunc, "takes no keyword arguments");
- return -1;
- }
- return ret;
- }
- static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
- {
- __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
- Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
- PyObject *self;
- #if CYTHON_COMPILING_IN_LIMITED_API
- PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
- if (unlikely(!meth)) return NULL;
- #else
- PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
- #endif
- switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) {
- case 1:
- self = args[0];
- args += 1;
- nargs -= 1;
- break;
- case 0:
- #if CYTHON_COMPILING_IN_LIMITED_API
- self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
- if (unlikely(!self) && PyErr_Occurred()) return NULL;
- #else
- self = ((PyCFunctionObject*)cyfunc)->m_self;
- #endif
- break;
- default:
- return NULL;
- }
- if (unlikely(nargs != 0)) {
- __Pyx_CyFunction_raise_argument_count_error(
- cyfunc, "takes no arguments", nargs);
- return NULL;
- }
- return meth(self, NULL);
- }
- static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
- {
- __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
- Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
- PyObject *self;
- #if CYTHON_COMPILING_IN_LIMITED_API
- PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
- if (unlikely(!meth)) return NULL;
- #else
- PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
- #endif
- switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) {
- case 1:
- self = args[0];
- args += 1;
- nargs -= 1;
- break;
- case 0:
- #if CYTHON_COMPILING_IN_LIMITED_API
- self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
- if (unlikely(!self) && PyErr_Occurred()) return NULL;
- #else
- self = ((PyCFunctionObject*)cyfunc)->m_self;
- #endif
- break;
- default:
- return NULL;
- }
- if (unlikely(nargs != 1)) {
- __Pyx_CyFunction_raise_argument_count_error(
- cyfunc, "takes exactly one argument", nargs);
- return NULL;
- }
- return meth(self, args[0]);
- }
- static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
- {
- __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
- Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
- PyObject *self;
- #if CYTHON_COMPILING_IN_LIMITED_API
- PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
- if (unlikely(!meth)) return NULL;
- #else
- PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
- #endif
- switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) {
- case 1:
- self = args[0];
- args += 1;
- nargs -= 1;
- break;
- case 0:
- #if CYTHON_COMPILING_IN_LIMITED_API
- self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
- if (unlikely(!self) && PyErr_Occurred()) return NULL;
- #else
- self = ((PyCFunctionObject*)cyfunc)->m_self;
- #endif
- break;
- default:
- return NULL;
- }
- return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))meth)(self, args, nargs, kwnames);
- }
- static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
- {
- __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
- PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc);
- Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
- PyObject *self;
- #if CYTHON_COMPILING_IN_LIMITED_API
- PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
- if (unlikely(!meth)) return NULL;
- #else
- PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
- #endif
- switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) {
- case 1:
- self = args[0];
- args += 1;
- nargs -= 1;
- break;
- case 0:
- #if CYTHON_COMPILING_IN_LIMITED_API
- self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
- if (unlikely(!self) && PyErr_Occurred()) return NULL;
- #else
- self = ((PyCFunctionObject*)cyfunc)->m_self;
- #endif
- break;
- default:
- return NULL;
- }
- #if PY_VERSION_HEX < 0x030e00A6
- size_t nargs_value = (size_t) nargs;
- #else
- Py_ssize_t nargs_value = nargs;
- #endif
- return ((__Pyx_PyCMethod)(void(*)(void))meth)(self, cls, args, nargs_value, kwnames);
- }
- #endif
- static PyType_Slot __pyx_CyFunctionType_slots[] = {
- {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc},
- {Py_tp_repr, (void *)__Pyx_CyFunction_repr},
- {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod},
- {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse},
- {Py_tp_clear, (void *)__Pyx_CyFunction_clear},
- {Py_tp_methods, (void *)__pyx_CyFunction_methods},
- {Py_tp_members, (void *)__pyx_CyFunction_members},
- {Py_tp_getset, (void *)__pyx_CyFunction_getsets},
- {Py_tp_descr_get, (void *)__Pyx_PyMethod_New},
- {0, 0},
- };
- static PyType_Spec __pyx_CyFunctionType_spec = {
- __PYX_TYPE_MODULE_PREFIX "cython_function_or_method",
- sizeof(__pyx_CyFunctionObject),
- 0,
- #ifdef Py_TPFLAGS_METHOD_DESCRIPTOR
- Py_TPFLAGS_METHOD_DESCRIPTOR |
- #endif
- #if CYTHON_METH_FASTCALL
- #if defined(Py_TPFLAGS_HAVE_VECTORCALL)
- Py_TPFLAGS_HAVE_VECTORCALL |
- #elif defined(_Py_TPFLAGS_HAVE_VECTORCALL)
- _Py_TPFLAGS_HAVE_VECTORCALL |
- #endif
- #endif // CYTHON_METH_FASTCALL
- #if PY_VERSION_HEX >= 0x030C0000 && !CYTHON_COMPILING_IN_LIMITED_API
- Py_TPFLAGS_MANAGED_DICT |
- #endif
- Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION |
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE,
- __pyx_CyFunctionType_slots
- };
- static int __pyx_CyFunction_init(PyObject *module) {
- __pyx_mstatetype *mstate = __Pyx_PyModule_GetState(module);
- mstate->__pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(
- mstate->__pyx_CommonTypesMetaclassType, module, &__pyx_CyFunctionType_spec, NULL);
- if (unlikely(mstate->__pyx_CyFunctionType == NULL)) {
- return -1;
- }
- return 0;
- }
- static CYTHON_INLINE PyObject *__Pyx_CyFunction_InitDefaults(PyObject *func, PyTypeObject *defaults_type) {
- __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
- m->defaults = PyObject_CallObject((PyObject*)defaults_type, NULL); // _PyObject_New(defaults_type);
- if (unlikely(!m->defaults))
- return NULL;
- 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);
- }
- /* CythonFunction */
- static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname,
- PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
- PyObject *op = __Pyx_CyFunction_Init(
- PyObject_GC_New(__pyx_CyFunctionObject, __pyx_mstate_global->__pyx_CyFunctionType),
- ml, flags, qualname, closure, module, globals, code
- );
- if (likely(op)) {
- PyObject_GC_Track(op);
- }
- return op;
- }
- /* pyfrozenset_new (used by PySetContains) */
- static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it) {
- if (it) {
- PyObject* result;
- #if CYTHON_COMPILING_IN_PYPY
- PyObject* args;
- args = PyTuple_Pack(1, it);
- if (unlikely(!args))
- return NULL;
- result = PyObject_Call((PyObject*)&PyFrozenSet_Type, args, NULL);
- Py_DECREF(args);
- return result;
- #else
- if (PyFrozenSet_CheckExact(it)) {
- Py_INCREF(it);
- return it;
- }
- result = PyFrozenSet_New(it);
- if (unlikely(!result))
- return NULL;
- if ((__PYX_LIMITED_VERSION_HEX >= 0x030A0000)
- #if CYTHON_COMPILING_IN_LIMITED_API
- || __Pyx_get_runtime_version() >= 0x030A0000
- #endif
- )
- return result;
- {
- Py_ssize_t size = __Pyx_PySet_GET_SIZE(result);
- if (likely(size > 0))
- return result;
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely(size < 0)) {
- Py_DECREF(result);
- return NULL;
- }
- #endif
- }
- Py_DECREF(result);
- #endif
- }
- return __Pyx_PyObject_CallNoArg((PyObject*) &PyFrozenSet_Type);
- }
- /* PySetContains */
- static int __Pyx_PySet_ContainsUnhashable(PyObject *set, PyObject *key) {
- int result = -1;
- if (PySet_Check(key) && PyErr_ExceptionMatches(PyExc_TypeError)) {
- PyObject *tmpkey;
- PyErr_Clear();
- tmpkey = __Pyx_PyFrozenSet_New(key);
- if (tmpkey != NULL) {
- result = PySet_Contains(set, tmpkey);
- Py_DECREF(tmpkey);
- }
- }
- return result;
- }
- static CYTHON_INLINE int __Pyx_PySet_ContainsTF(PyObject* key, PyObject* set, int eq) {
- int result = PySet_Contains(set, key);
- if (unlikely(result < 0)) {
- result = __Pyx_PySet_ContainsUnhashable(set, key);
- }
- return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
- }
- /* AllocateExtensionType */
- static PyObject *__Pyx_AllocateExtensionType(PyTypeObject *t, int is_final) {
- if (is_final || likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
- allocfunc alloc_func = __Pyx_PyType_GetSlot(t, tp_alloc, allocfunc);
- return alloc_func(t, 0);
- } else {
- newfunc tp_new = __Pyx_PyType_TryGetSlot(&PyBaseObject_Type, tp_new, newfunc);
- #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
- if (!tp_new) {
- PyObject *new_str = PyUnicode_FromString("__new__");
- if (likely(new_str)) {
- PyObject *o = PyObject_CallMethodObjArgs((PyObject *)&PyBaseObject_Type, new_str, t, NULL);
- Py_DECREF(new_str);
- return o;
- } else
- return NULL;
- } else
- #endif
- return tp_new(t, __pyx_mstate_global->__pyx_empty_tuple, 0);
- }
- }
- /* PyObjectCallMethod0 (used by PyType_Ready) */
- static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) {
- #if CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000))
- PyObject *args[1] = {obj};
- (void) __Pyx_PyObject_CallOneArg;
- (void) __Pyx_PyObject_CallNoArg;
- return PyObject_VectorcallMethod(method_name, args, 1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
- #else
- PyObject *method = NULL, *result = NULL;
- int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
- if (likely(is_method)) {
- result = __Pyx_PyObject_CallOneArg(method, obj);
- Py_DECREF(method);
- return result;
- }
- if (unlikely(!method)) goto bad;
- result = __Pyx_PyObject_CallNoArg(method);
- Py_DECREF(method);
- bad:
- return result;
- #endif
- }
- /* ValidateBasesTuple (used by PyType_Ready) */
- #if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS
- static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) {
- Py_ssize_t i, n;
- #if CYTHON_ASSUME_SAFE_SIZE
- n = PyTuple_GET_SIZE(bases);
- #else
- n = PyTuple_Size(bases);
- if (unlikely(n < 0)) return -1;
- #endif
- for (i = 1; i < n; i++)
- {
- PyTypeObject *b;
- #if CYTHON_AVOID_BORROWED_REFS
- PyObject *b0 = PySequence_GetItem(bases, i);
- if (!b0) return -1;
- #elif CYTHON_ASSUME_SAFE_MACROS
- PyObject *b0 = PyTuple_GET_ITEM(bases, i);
- #else
- PyObject *b0 = PyTuple_GetItem(bases, i);
- if (!b0) return -1;
- #endif
- b = (PyTypeObject*) b0;
- if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE))
- {
- __Pyx_TypeName b_name = __Pyx_PyType_GetFullyQualifiedName(b);
- PyErr_Format(PyExc_TypeError,
- "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name);
- __Pyx_DECREF_TypeName(b_name);
- #if CYTHON_AVOID_BORROWED_REFS
- Py_DECREF(b0);
- #endif
- return -1;
- }
- if (dictoffset == 0)
- {
- Py_ssize_t b_dictoffset = 0;
- #if CYTHON_USE_TYPE_SLOTS
- b_dictoffset = b->tp_dictoffset;
- #else
- PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__");
- if (!py_b_dictoffset) goto dictoffset_return;
- b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset);
- Py_DECREF(py_b_dictoffset);
- if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return;
- #endif
- if (b_dictoffset) {
- {
- __Pyx_TypeName b_name = __Pyx_PyType_GetFullyQualifiedName(b);
- PyErr_Format(PyExc_TypeError,
- "extension type '%.200s' has no __dict__ slot, "
- "but base type '" __Pyx_FMT_TYPENAME "' has: "
- "either add 'cdef dict __dict__' to the extension type "
- "or add '__slots__ = [...]' to the base type",
- type_name, b_name);
- __Pyx_DECREF_TypeName(b_name);
- }
- #if !CYTHON_USE_TYPE_SLOTS
- dictoffset_return:
- #endif
- #if CYTHON_AVOID_BORROWED_REFS
- Py_DECREF(b0);
- #endif
- return -1;
- }
- }
- #if CYTHON_AVOID_BORROWED_REFS
- Py_DECREF(b0);
- #endif
- }
- return 0;
- }
- #endif
- /* PyType_Ready */
- CYTHON_UNUSED static int __Pyx_PyType_HasMultipleInheritance(PyTypeObject *t) {
- while (t) {
- PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*);
- if (bases) {
- return 1;
- }
- t = __Pyx_PyType_GetSlot(t, tp_base, PyTypeObject*);
- }
- return 0;
- }
- static int __Pyx_PyType_Ready(PyTypeObject *t) {
- #if CYTHON_USE_TYPE_SPECS || !CYTHON_COMPILING_IN_CPYTHON || defined(PYSTON_MAJOR_VERSION)
- (void)__Pyx_PyObject_CallMethod0;
- #if CYTHON_USE_TYPE_SPECS
- (void)__Pyx_validate_bases_tuple;
- #endif
- return PyType_Ready(t);
- #else
- int r;
- if (!__Pyx_PyType_HasMultipleInheritance(t)) {
- return PyType_Ready(t);
- }
- PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*);
- if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1))
- return -1;
- #if !defined(PYSTON_MAJOR_VERSION)
- {
- int gc_was_enabled;
- #if PY_VERSION_HEX >= 0x030A00b1
- gc_was_enabled = PyGC_Disable();
- (void)__Pyx_PyObject_CallMethod0;
- #else
- PyObject *ret, *py_status;
- PyObject *gc = NULL;
- #if (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) &&\
- !CYTHON_COMPILING_IN_GRAAL
- gc = PyImport_GetModule(__pyx_mstate_global->__pyx_kp_u_gc);
- #endif
- if (unlikely(!gc)) gc = PyImport_Import(__pyx_mstate_global->__pyx_kp_u_gc);
- if (unlikely(!gc)) return -1;
- py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_mstate_global->__pyx_kp_u_isenabled);
- if (unlikely(!py_status)) {
- Py_DECREF(gc);
- return -1;
- }
- gc_was_enabled = __Pyx_PyObject_IsTrue(py_status);
- Py_DECREF(py_status);
- if (gc_was_enabled > 0) {
- ret = __Pyx_PyObject_CallMethod0(gc, __pyx_mstate_global->__pyx_kp_u_disable);
- if (unlikely(!ret)) {
- Py_DECREF(gc);
- return -1;
- }
- Py_DECREF(ret);
- } else if (unlikely(gc_was_enabled == -1)) {
- Py_DECREF(gc);
- return -1;
- }
- #endif
- t->tp_flags |= Py_TPFLAGS_HEAPTYPE;
- #if PY_VERSION_HEX >= 0x030A0000
- t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE;
- #endif
- #else
- (void)__Pyx_PyObject_CallMethod0;
- #endif
- r = PyType_Ready(t);
- #if !defined(PYSTON_MAJOR_VERSION)
- t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE;
- #if PY_VERSION_HEX >= 0x030A00b1
- if (gc_was_enabled)
- PyGC_Enable();
- #else
- if (gc_was_enabled) {
- PyObject *tp, *v, *tb;
- PyErr_Fetch(&tp, &v, &tb);
- ret = __Pyx_PyObject_CallMethod0(gc, __pyx_mstate_global->__pyx_kp_u_enable);
- if (likely(ret || r == -1)) {
- Py_XDECREF(ret);
- PyErr_Restore(tp, v, tb);
- } else {
- Py_XDECREF(tp);
- Py_XDECREF(v);
- Py_XDECREF(tb);
- r = -1;
- }
- }
- Py_DECREF(gc);
- #endif
- }
- #endif
- return r;
- #endif
- }
- /* HasAttr (used by ImportImpl) */
- #if __PYX_LIMITED_VERSION_HEX < 0x030d0000
- static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
- PyObject *r;
- if (unlikely(!PyUnicode_Check(n))) {
- PyErr_SetString(PyExc_TypeError,
- "hasattr(): attribute name must be string");
- return -1;
- }
- r = __Pyx_PyObject_GetAttrStrNoError(o, n);
- if (!r) {
- return (unlikely(PyErr_Occurred())) ? -1 : 0;
- } else {
- Py_DECREF(r);
- return 1;
- }
- }
- #endif
- /* ImportImpl (used by Import) */
- static int __Pyx__Import_GetModule(PyObject *qualname, PyObject **module) {
- PyObject *imported_module = PyImport_GetModule(qualname);
- if (unlikely(!imported_module)) {
- *module = NULL;
- if (PyErr_Occurred()) {
- return -1;
- }
- return 0;
- }
- *module = imported_module;
- return 1;
- }
- static int __Pyx__Import_Lookup(PyObject *qualname, PyObject *const *imported_names, Py_ssize_t len_imported_names, PyObject **module) {
- PyObject *imported_module;
- PyObject *top_level_package_name;
- Py_ssize_t i;
- int status, module_found;
- Py_ssize_t dot_index;
- module_found = __Pyx__Import_GetModule(qualname, &imported_module);
- if (unlikely(!module_found || module_found == -1)) {
- *module = NULL;
- return module_found;
- }
- if (imported_names) {
- for (i = 0; i < len_imported_names; i++) {
- PyObject *imported_name = imported_names[i];
- #if __PYX_LIMITED_VERSION_HEX < 0x030d0000
- int has_imported_attribute = PyObject_HasAttr(imported_module, imported_name);
- #else
- int has_imported_attribute = PyObject_HasAttrWithError(imported_module, imported_name);
- if (unlikely(has_imported_attribute == -1)) goto error;
- #endif
- if (!has_imported_attribute) {
- goto not_found;
- }
- }
- *module = imported_module;
- return 1;
- }
- dot_index = PyUnicode_FindChar(qualname, '.', 0, PY_SSIZE_T_MAX, 1);
- if (dot_index == -1) {
- *module = imported_module;
- return 1;
- }
- if (unlikely(dot_index == -2)) goto error;
- top_level_package_name = PyUnicode_Substring(qualname, 0, dot_index);
- if (unlikely(!top_level_package_name)) goto error;
- Py_DECREF(imported_module);
- status = __Pyx__Import_GetModule(top_level_package_name, module);
- Py_DECREF(top_level_package_name);
- return status;
- error:
- Py_DECREF(imported_module);
- *module = NULL;
- return -1;
- not_found:
- Py_DECREF(imported_module);
- *module = NULL;
- return 0;
- }
- static PyObject *__Pyx__Import(PyObject *name, PyObject *const *imported_names, Py_ssize_t len_imported_names, PyObject *qualname, PyObject *moddict, int level) {
- PyObject *module = 0;
- PyObject *empty_dict = 0;
- PyObject *from_list = 0;
- int module_found;
- if (!qualname) {
- qualname = name;
- }
- module_found = __Pyx__Import_Lookup(qualname, imported_names, len_imported_names, &module);
- if (likely(module_found == 1)) {
- return module;
- } else if (unlikely(module_found == -1)) {
- return NULL;
- }
- empty_dict = PyDict_New();
- if (unlikely(!empty_dict))
- goto bad;
- if (imported_names) {
- #if CYTHON_COMPILING_IN_CPYTHON
- from_list = __Pyx_PyList_FromArray(imported_names, len_imported_names);
- if (unlikely(!from_list))
- goto bad;
- #else
- from_list = PyList_New(len_imported_names);
- if (unlikely(!from_list)) goto bad;
- for (Py_ssize_t i=0; i<len_imported_names; ++i) {
- if (PyList_SetItem(from_list, i, __Pyx_NewRef(imported_names[i])) < 0) goto bad;
- }
- #endif
- }
- if (level == -1) {
- const char* package_sep = strchr(__Pyx_MODULE_NAME, '.');
- if (package_sep != (0)) {
- module = PyImport_ImportModuleLevelObject(
- name, moddict, empty_dict, from_list, 1);
- if (unlikely(!module)) {
- if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError)))
- goto bad;
- PyErr_Clear();
- }
- }
- level = 0;
- }
- if (!module) {
- module = PyImport_ImportModuleLevelObject(
- name, moddict, empty_dict, from_list, level);
- }
- bad:
- Py_XDECREF(from_list);
- Py_XDECREF(empty_dict);
- return module;
- }
- /* Import */
- static PyObject *__Pyx_Import(PyObject *name, PyObject *const *imported_names, Py_ssize_t len_imported_names, PyObject *qualname, int level) {
- return __Pyx__Import(name, imported_names, len_imported_names, qualname, __pyx_mstate_global->__pyx_d, level);
- }
- /* ImportFrom */
- static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
- PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
- if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
- const char* module_name_str = 0;
- PyObject* module_name = 0;
- PyObject* module_dot = 0;
- PyObject* full_name = 0;
- PyErr_Clear();
- module_name_str = PyModule_GetName(module);
- if (unlikely(!module_name_str)) { goto modbad; }
- module_name = PyUnicode_FromString(module_name_str);
- if (unlikely(!module_name)) { goto modbad; }
- module_dot = PyUnicode_Concat(module_name, __pyx_mstate_global->__pyx_kp_u__2);
- if (unlikely(!module_dot)) { goto modbad; }
- full_name = PyUnicode_Concat(module_dot, name);
- if (unlikely(!full_name)) { goto modbad; }
- #if (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) ||\
- CYTHON_COMPILING_IN_GRAAL
- {
- PyObject *modules = PyImport_GetModuleDict();
- if (unlikely(!modules))
- goto modbad;
- value = PyObject_GetItem(modules, full_name);
- }
- #else
- value = PyImport_GetModule(full_name);
- #endif
- modbad:
- Py_XDECREF(full_name);
- Py_XDECREF(module_dot);
- Py_XDECREF(module_name);
- }
- if (unlikely(!value)) {
- PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
- }
- return value;
- }
- /* ListPack */
- static PyObject *__Pyx_PyList_Pack(Py_ssize_t n, ...) {
- va_list va;
- PyObject *l = PyList_New(n);
- va_start(va, n);
- if (unlikely(!l)) goto end;
- for (Py_ssize_t i=0; i<n; ++i) {
- PyObject *arg = va_arg(va, PyObject*);
- Py_INCREF(arg);
- if (__Pyx_PyList_SET_ITEM(l, i, arg) != (0)) {
- Py_CLEAR(l);
- goto end;
- }
- }
- end:
- va_end(va);
- return l;
- }
- /* CLineInTraceback (used by AddTraceback) */
- #if CYTHON_CLINE_IN_TRACEBACK && CYTHON_CLINE_IN_TRACEBACK_RUNTIME
- #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
- #define __Pyx_PyProbablyModule_GetDict(o) __Pyx_XNewRef(PyModule_GetDict(o))
- #elif !CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- #define __Pyx_PyProbablyModule_GetDict(o) PyObject_GenericGetDict(o, NULL);
- #else
- PyObject* __Pyx_PyProbablyModule_GetDict(PyObject *o) {
- PyObject **dict_ptr = _PyObject_GetDictPtr(o);
- return dict_ptr ? __Pyx_XNewRef(*dict_ptr) : NULL;
- }
- #endif
- static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) {
- PyObject *use_cline = NULL;
- PyObject *ptype, *pvalue, *ptraceback;
- PyObject *cython_runtime_dict;
- CYTHON_MAYBE_UNUSED_VAR(tstate);
- if (unlikely(!__pyx_mstate_global->__pyx_cython_runtime)) {
- return c_line;
- }
- __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
- cython_runtime_dict = __Pyx_PyProbablyModule_GetDict(__pyx_mstate_global->__pyx_cython_runtime);
- if (likely(cython_runtime_dict)) {
- __PYX_PY_DICT_LOOKUP_IF_MODIFIED(
- use_cline, cython_runtime_dict,
- __Pyx_PyDict_SetDefault(cython_runtime_dict, __pyx_mstate_global->__pyx_n_u_cline_in_traceback, Py_False))
- }
- if (use_cline == NULL || use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
- c_line = 0;
- }
- Py_XDECREF(use_cline);
- Py_XDECREF(cython_runtime_dict);
- __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
- return c_line;
- }
- #endif
- /* CodeObjectCache (used by AddTraceback) */
- 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 - start) / 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 __Pyx_CachedCodeObjectType *__pyx__find_code_object(struct __Pyx_CodeObjectCache *code_cache, int code_line) {
- __Pyx_CachedCodeObjectType* code_object;
- int pos;
- if (unlikely(!code_line) || unlikely(!code_cache->entries)) {
- return NULL;
- }
- pos = __pyx_bisect_code_objects(code_cache->entries, code_cache->count, code_line);
- if (unlikely(pos >= code_cache->count) || unlikely(code_cache->entries[pos].code_line != code_line)) {
- return NULL;
- }
- code_object = code_cache->entries[pos].code_object;
- Py_INCREF(code_object);
- return code_object;
- }
- static __Pyx_CachedCodeObjectType *__pyx_find_code_object(int code_line) {
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING && !CYTHON_ATOMICS
- (void)__pyx__find_code_object;
- return NULL; // Most implementation should have atomics. But otherwise, don't make it thread-safe, just miss.
- #else
- struct __Pyx_CodeObjectCache *code_cache = &__pyx_mstate_global->__pyx_code_cache;
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- __pyx_nonatomic_int_type old_count = __pyx_atomic_incr_acq_rel(&code_cache->accessor_count);
- if (old_count < 0) {
- __pyx_atomic_decr_acq_rel(&code_cache->accessor_count);
- return NULL;
- }
- #endif
- __Pyx_CachedCodeObjectType *result = __pyx__find_code_object(code_cache, code_line);
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- __pyx_atomic_decr_acq_rel(&code_cache->accessor_count);
- #endif
- return result;
- #endif
- }
- static void __pyx__insert_code_object(struct __Pyx_CodeObjectCache *code_cache, int code_line, __Pyx_CachedCodeObjectType* code_object)
- {
- int pos, i;
- __Pyx_CodeObjectCacheEntry* entries = code_cache->entries;
- if (unlikely(!code_line)) {
- return;
- }
- if (unlikely(!entries)) {
- entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
- if (likely(entries)) {
- code_cache->entries = entries;
- code_cache->max_count = 64;
- 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(code_cache->entries, code_cache->count, code_line);
- if ((pos < code_cache->count) && unlikely(code_cache->entries[pos].code_line == code_line)) {
- __Pyx_CachedCodeObjectType* tmp = entries[pos].code_object;
- entries[pos].code_object = code_object;
- Py_INCREF(code_object);
- Py_DECREF(tmp);
- return;
- }
- if (code_cache->count == code_cache->max_count) {
- int new_max = code_cache->max_count + 64;
- entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
- code_cache->entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry));
- if (unlikely(!entries)) {
- return;
- }
- code_cache->entries = entries;
- code_cache->max_count = new_max;
- }
- for (i=code_cache->count; i>pos; i--) {
- entries[i] = entries[i-1];
- }
- entries[pos].code_line = code_line;
- entries[pos].code_object = code_object;
- code_cache->count++;
- Py_INCREF(code_object);
- }
- static void __pyx_insert_code_object(int code_line, __Pyx_CachedCodeObjectType* code_object) {
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING && !CYTHON_ATOMICS
- (void)__pyx__insert_code_object;
- return; // Most implementation should have atomics. But otherwise, don't make it thread-safe, just fail.
- #else
- struct __Pyx_CodeObjectCache *code_cache = &__pyx_mstate_global->__pyx_code_cache;
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- __pyx_nonatomic_int_type expected = 0;
- if (!__pyx_atomic_int_cmp_exchange(&code_cache->accessor_count, &expected, INT_MIN)) {
- return;
- }
- #endif
- __pyx__insert_code_object(code_cache, code_line, code_object);
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
- __pyx_atomic_sub(&code_cache->accessor_count, INT_MIN);
- #endif
- #endif
- }
- /* AddTraceback */
- #include "compile.h"
- #include "frameobject.h"
- #include "traceback.h"
- #if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
- #ifndef Py_BUILD_CORE
- #define Py_BUILD_CORE 1
- #endif
- #include "internal/pycore_frame.h"
- #endif
- #if CYTHON_COMPILING_IN_LIMITED_API
- static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict,
- PyObject *firstlineno, PyObject *name) {
- PyObject *replace = NULL;
- if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL;
- if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL;
- replace = PyObject_GetAttrString(code, "replace");
- if (likely(replace)) {
- PyObject *result = PyObject_Call(replace, __pyx_mstate_global->__pyx_empty_tuple, scratch_dict);
- Py_DECREF(replace);
- return result;
- }
- PyErr_Clear();
- return NULL;
- }
- static void __Pyx_AddTraceback(const char *funcname, int c_line,
- int py_line, const char *filename) {
- PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL;
- PyObject *replace = NULL, *getframe = NULL, *frame = NULL;
- PyObject *exc_type, *exc_value, *exc_traceback;
- int success = 0;
- if (c_line) {
- c_line = __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line);
- }
- PyErr_Fetch(&exc_type, &exc_value, &exc_traceback);
- code_object = __pyx_find_code_object(c_line ? -c_line : py_line);
- if (!code_object) {
- code_object = Py_CompileString("_getframe()", filename, Py_eval_input);
- if (unlikely(!code_object)) goto bad;
- py_py_line = PyLong_FromLong(py_line);
- if (unlikely(!py_py_line)) goto bad;
- if (c_line) {
- py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
- } else {
- py_funcname = PyUnicode_FromString(funcname);
- }
- if (unlikely(!py_funcname)) goto bad;
- dict = PyDict_New();
- if (unlikely(!dict)) goto bad;
- {
- PyObject *old_code_object = code_object;
- code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname);
- Py_DECREF(old_code_object);
- }
- if (unlikely(!code_object)) goto bad;
- __pyx_insert_code_object(c_line ? -c_line : py_line, code_object);
- } else {
- dict = PyDict_New();
- }
- getframe = PySys_GetObject("_getframe");
- if (unlikely(!getframe)) goto bad;
- if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad;
- frame = PyEval_EvalCode(code_object, dict, dict);
- if (unlikely(!frame) || frame == Py_None) goto bad;
- success = 1;
- bad:
- PyErr_Restore(exc_type, exc_value, exc_traceback);
- Py_XDECREF(code_object);
- Py_XDECREF(py_py_line);
- Py_XDECREF(py_funcname);
- Py_XDECREF(dict);
- Py_XDECREF(replace);
- if (success) {
- PyTraceBack_Here(
- (struct _frame*)frame);
- }
- Py_XDECREF(frame);
- }
- #else
- static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
- const char *funcname, int c_line,
- int py_line, const char *filename) {
- PyCodeObject *py_code = NULL;
- PyObject *py_funcname = NULL;
- if (c_line) {
- py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
- if (!py_funcname) goto bad;
- funcname = PyUnicode_AsUTF8(py_funcname);
- if (!funcname) goto bad;
- }
- py_code = PyCode_NewEmpty(filename, funcname, py_line);
- Py_XDECREF(py_funcname);
- return py_code;
- bad:
- 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;
- PyFrameObject *py_frame = 0;
- PyThreadState *tstate = __Pyx_PyThreadState_Current;
- PyObject *ptype, *pvalue, *ptraceback;
- if (c_line) {
- c_line = __Pyx_CLineForTraceback(tstate, c_line);
- }
- py_code = __pyx_find_code_object(c_line ? -c_line : py_line);
- if (!py_code) {
- __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
- py_code = __Pyx_CreateCodeObjectForTraceback(
- funcname, c_line, py_line, filename);
- if (!py_code) {
- /* If the code object creation fails, then we should clear the
- fetched exception references and propagate the new exception */
- Py_XDECREF(ptype);
- Py_XDECREF(pvalue);
- Py_XDECREF(ptraceback);
- goto bad;
- }
- __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
- __pyx_insert_code_object(c_line ? -c_line : py_line, py_code);
- }
- py_frame = PyFrame_New(
- tstate, /*PyThreadState *tstate,*/
- py_code, /*PyCodeObject *code,*/
- __pyx_mstate_global->__pyx_d, /*PyObject *globals,*/
- 0 /*PyObject *locals*/
- );
- if (!py_frame) goto bad;
- __Pyx_PyFrame_SetLineNumber(py_frame, py_line);
- PyTraceBack_Here(py_frame);
- bad:
- Py_XDECREF(py_code);
- Py_XDECREF(py_frame);
- }
- #endif
- /* Declarations */
- #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
- #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
- /* Arithmetic */
- #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
- #else
- static CYTHON_INLINE int __Pyx_c_eq_double(__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_double(__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_double(__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_double(__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;
- }
- #if 1
- static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
- if (b.imag == 0) {
- return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real);
- } else if (fabs(b.real) >= fabs(b.imag)) {
- if (b.real == 0 && b.imag == 0) {
- return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.imag);
- } else {
- double r = b.imag / b.real;
- double s = (double)(1.0) / (b.real + b.imag * r);
- return __pyx_t_double_complex_from_parts(
- (a.real + a.imag * r) * s, (a.imag - a.real * r) * s);
- }
- } else {
- double r = b.real / b.imag;
- double s = (double)(1.0) / (b.imag + b.real * r);
- return __pyx_t_double_complex_from_parts(
- (a.real * r + a.imag) * s, (a.imag * r - a.real) * s);
- }
- }
- #else
- static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
- if (b.imag == 0) {
- return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real);
- } else {
- double denom = b.real * b.real + b.imag * b.imag;
- return __pyx_t_double_complex_from_parts(
- (a.real * b.real + a.imag * b.imag) / denom,
- (a.imag * b.real - a.real * b.imag) / denom);
- }
- }
- #endif
- static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__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_double(__pyx_t_double_complex a) {
- return (a.real == 0) && (a.imag == 0);
- }
- static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__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_double(__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_double(__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:
- return __Pyx_c_prod_double(a, a);
- case 3:
- z = __Pyx_c_prod_double(a, a);
- return __Pyx_c_prod_double(z, a);
- case 4:
- z = __Pyx_c_prod_double(a, a);
- return __Pyx_c_prod_double(z, z);
- }
- }
- if (a.imag == 0) {
- if (a.real == 0) {
- return a;
- } else if ((b.imag == 0) && (a.real >= 0)) {
- z.real = pow(a.real, b.real);
- z.imag = 0;
- return z;
- } else if (a.real > 0) {
- r = a.real;
- theta = 0;
- } else {
- r = -a.real;
- theta = atan2(0.0, -1.0);
- }
- } else {
- r = __Pyx_c_abs_double(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
- /* FromPy */
- static __pyx_t_double_complex __Pyx_PyComplex_As___pyx_t_double_complex(PyObject* o) {
- #if CYTHON_COMPILING_IN_LIMITED_API
- double real=-1.0, imag=-1.0;
- real = PyComplex_RealAsDouble(o);
- if (unlikely(real == -1.0 && PyErr_Occurred())) goto end;
- imag = PyComplex_ImagAsDouble(o);
- end:
- return __pyx_t_double_complex_from_parts(
- (double)real, (double)imag
- );
- #else
- Py_complex cval;
- #if !CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_GRAAL
- 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);
- #endif
- }
- /* CIntToPy */
- static CYTHON_INLINE PyObject* __Pyx_PyLong_From_long(long value) {
- #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wconversion"
- #endif
- const long neg_one = (long) -1, const_zero = (long) 0;
- #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
- #pragma GCC diagnostic pop
- #endif
- const int is_unsigned = neg_one > const_zero;
- if (is_unsigned) {
- if (sizeof(long) < sizeof(long)) {
- return PyLong_FromLong((long) value);
- } else if (sizeof(long) <= sizeof(unsigned long)) {
- return PyLong_FromUnsignedLong((unsigned long) value);
- #if !CYTHON_COMPILING_IN_PYPY
- } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
- return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
- #endif
- }
- } else {
- if (sizeof(long) <= sizeof(long)) {
- return PyLong_FromLong((long) value);
- } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
- return PyLong_FromLongLong((PY_LONG_LONG) value);
- }
- }
- {
- unsigned char *bytes = (unsigned char *)&value;
- #if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
- if (is_unsigned) {
- return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
- } else {
- return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
- }
- #elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
- int one = 1; int little = (int)*(unsigned char *)&one;
- return _PyLong_FromByteArray(bytes, sizeof(long),
- little, !is_unsigned);
- #else
- int one = 1; int little = (int)*(unsigned char *)&one;
- PyObject *from_bytes, *result = NULL, *kwds = NULL;
- PyObject *py_bytes = NULL, *order_str = NULL;
- from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
- if (!from_bytes) return NULL;
- py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long));
- if (!py_bytes) goto limited_bad;
- order_str = PyUnicode_FromString(little ? "little" : "big");
- if (!order_str) goto limited_bad;
- {
- PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
- if (!is_unsigned) {
- kwds = __Pyx_MakeVectorcallBuilderKwds(1);
- if (!kwds) goto limited_bad;
- if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
- }
- result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
- }
- limited_bad:
- Py_XDECREF(kwds);
- Py_XDECREF(order_str);
- Py_XDECREF(py_bytes);
- Py_XDECREF(from_bytes);
- return result;
- #endif
- }
- }
- /* FormatTypeName */
- #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030d0000
- static __Pyx_TypeName
- __Pyx_PyType_GetFullyQualifiedName(PyTypeObject* tp)
- {
- PyObject *module = NULL, *name = NULL, *result = NULL;
- #if __PYX_LIMITED_VERSION_HEX < 0x030b0000
- name = __Pyx_PyObject_GetAttrStr((PyObject *)tp,
- __pyx_mstate_global->__pyx_n_u_qualname);
- #else
- name = PyType_GetQualName(tp);
- #endif
- if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) goto bad;
- module = __Pyx_PyObject_GetAttrStr((PyObject *)tp,
- __pyx_mstate_global->__pyx_n_u_module);
- if (unlikely(module == NULL) || unlikely(!PyUnicode_Check(module))) goto bad;
- if (PyUnicode_CompareWithASCIIString(module, "builtins") == 0) {
- result = name;
- name = NULL;
- goto done;
- }
- result = PyUnicode_FromFormat("%U.%U", module, name);
- if (unlikely(result == NULL)) goto bad;
- done:
- Py_XDECREF(name);
- Py_XDECREF(module);
- return result;
- bad:
- PyErr_Clear();
- if (name) {
- result = name;
- name = NULL;
- } else {
- result = __Pyx_NewRef(__pyx_mstate_global->__pyx_kp_u__3);
- }
- goto done;
- }
- #endif
- /* CIntFromPyVerify (used by CIntFromPy) */
- #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
- __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
- #define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
- __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
- #define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
- {\
- func_type value = func_value;\
- if (sizeof(target_type) < sizeof(func_type)) {\
- if (unlikely(value != (func_type) (target_type) value)) {\
- func_type zero = 0;\
- if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
- return (target_type) -1;\
- if (is_unsigned && unlikely(value < zero))\
- goto raise_neg_overflow;\
- else\
- goto raise_overflow;\
- }\
- }\
- return (target_type) value;\
- }
- /* CIntFromPy */
- static CYTHON_INLINE long __Pyx_PyLong_As_long(PyObject *x) {
- #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wconversion"
- #endif
- const long neg_one = (long) -1, const_zero = (long) 0;
- #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
- #pragma GCC diagnostic pop
- #endif
- const int is_unsigned = neg_one > const_zero;
- if (unlikely(!PyLong_Check(x))) {
- long val;
- PyObject *tmp = __Pyx_PyNumber_Long(x);
- if (!tmp) return (long) -1;
- val = __Pyx_PyLong_As_long(tmp);
- Py_DECREF(tmp);
- return val;
- }
- if (is_unsigned) {
- #if CYTHON_USE_PYLONG_INTERNALS
- if (unlikely(__Pyx_PyLong_IsNeg(x))) {
- goto raise_neg_overflow;
- } else if (__Pyx_PyLong_IsCompact(x)) {
- __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
- } else {
- const digit* digits = __Pyx_PyLong_Digits(x);
- assert(__Pyx_PyLong_DigitCount(x) > 1);
- switch (__Pyx_PyLong_DigitCount(x)) {
- case 2:
- if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) {
- return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
- }
- }
- break;
- case 3:
- if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) {
- return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
- }
- }
- break;
- case 4:
- if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) {
- return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
- }
- }
- break;
- }
- }
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
- if (unlikely(Py_SIZE(x) < 0)) {
- goto raise_neg_overflow;
- }
- #else
- {
- int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
- if (unlikely(result < 0))
- return (long) -1;
- if (unlikely(result == 1))
- goto raise_neg_overflow;
- }
- #endif
- if ((sizeof(long) <= sizeof(unsigned long))) {
- __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
- } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) {
- __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
- }
- } else {
- #if CYTHON_USE_PYLONG_INTERNALS
- if (__Pyx_PyLong_IsCompact(x)) {
- __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
- } else {
- const digit* digits = __Pyx_PyLong_Digits(x);
- assert(__Pyx_PyLong_DigitCount(x) > 1);
- switch (__Pyx_PyLong_SignedDigitCount(x)) {
- case -2:
- if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
- return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
- }
- }
- break;
- case 2:
- if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
- return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
- }
- }
- break;
- case -3:
- if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
- return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
- }
- }
- break;
- case 3:
- if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
- return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
- }
- }
- break;
- case -4:
- if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
- return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
- }
- }
- break;
- case 4:
- if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
- return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
- }
- }
- break;
- }
- }
- #endif
- if ((sizeof(long) <= sizeof(long))) {
- __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
- } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) {
- __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
- }
- }
- {
- long val;
- int ret = -1;
- #if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
- Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
- x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
- if (unlikely(bytes_copied == -1)) {
- } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
- goto raise_overflow;
- } else {
- ret = 0;
- }
- #elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
- int one = 1; int is_little = (int)*(unsigned char *)&one;
- unsigned char *bytes = (unsigned char *)&val;
- ret = _PyLong_AsByteArray((PyLongObject *)x,
- bytes, sizeof(val),
- is_little, !is_unsigned);
- #else
- PyObject *v;
- PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
- int bits, remaining_bits, is_negative = 0;
- int chunk_size = (sizeof(long) < 8) ? 30 : 62;
- if (likely(PyLong_CheckExact(x))) {
- v = __Pyx_NewRef(x);
- } else {
- v = PyNumber_Long(x);
- if (unlikely(!v)) return (long) -1;
- assert(PyLong_CheckExact(v));
- }
- {
- int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
- if (unlikely(result < 0)) {
- Py_DECREF(v);
- return (long) -1;
- }
- is_negative = result == 1;
- }
- if (is_unsigned && unlikely(is_negative)) {
- Py_DECREF(v);
- goto raise_neg_overflow;
- } else if (is_negative) {
- stepval = PyNumber_Invert(v);
- Py_DECREF(v);
- if (unlikely(!stepval))
- return (long) -1;
- } else {
- stepval = v;
- }
- v = NULL;
- val = (long) 0;
- mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
- shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
- for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
- PyObject *tmp, *digit;
- long idigit;
- digit = PyNumber_And(stepval, mask);
- if (unlikely(!digit)) goto done;
- idigit = PyLong_AsLong(digit);
- Py_DECREF(digit);
- if (unlikely(idigit < 0)) goto done;
- val |= ((long) idigit) << bits;
- tmp = PyNumber_Rshift(stepval, shift);
- if (unlikely(!tmp)) goto done;
- Py_DECREF(stepval); stepval = tmp;
- }
- Py_DECREF(shift); shift = NULL;
- Py_DECREF(mask); mask = NULL;
- {
- long idigit = PyLong_AsLong(stepval);
- if (unlikely(idigit < 0)) goto done;
- remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
- if (unlikely(idigit >= (1L << remaining_bits)))
- goto raise_overflow;
- val |= ((long) idigit) << bits;
- }
- if (!is_unsigned) {
- if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
- goto raise_overflow;
- if (is_negative)
- val = ~val;
- }
- ret = 0;
- done:
- Py_XDECREF(shift);
- Py_XDECREF(mask);
- Py_XDECREF(stepval);
- #endif
- if (unlikely(ret))
- return (long) -1;
- return val;
- }
- raise_overflow:
- PyErr_SetString(PyExc_OverflowError,
- "value too large to convert to long");
- return (long) -1;
- raise_neg_overflow:
- PyErr_SetString(PyExc_OverflowError,
- "can't convert negative value to long");
- return (long) -1;
- }
- /* CIntFromPy */
- static CYTHON_INLINE int __Pyx_PyLong_As_int(PyObject *x) {
- #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wconversion"
- #endif
- const int neg_one = (int) -1, const_zero = (int) 0;
- #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
- #pragma GCC diagnostic pop
- #endif
- const int is_unsigned = neg_one > const_zero;
- if (unlikely(!PyLong_Check(x))) {
- int val;
- PyObject *tmp = __Pyx_PyNumber_Long(x);
- if (!tmp) return (int) -1;
- val = __Pyx_PyLong_As_int(tmp);
- Py_DECREF(tmp);
- return val;
- }
- if (is_unsigned) {
- #if CYTHON_USE_PYLONG_INTERNALS
- if (unlikely(__Pyx_PyLong_IsNeg(x))) {
- goto raise_neg_overflow;
- } else if (__Pyx_PyLong_IsCompact(x)) {
- __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
- } else {
- const digit* digits = __Pyx_PyLong_Digits(x);
- assert(__Pyx_PyLong_DigitCount(x) > 1);
- switch (__Pyx_PyLong_DigitCount(x)) {
- case 2:
- if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) {
- return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
- }
- }
- break;
- case 3:
- if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) {
- return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
- }
- }
- break;
- case 4:
- if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) {
- return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
- }
- }
- break;
- }
- }
- #endif
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
- if (unlikely(Py_SIZE(x) < 0)) {
- goto raise_neg_overflow;
- }
- #else
- {
- int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
- if (unlikely(result < 0))
- return (int) -1;
- if (unlikely(result == 1))
- goto raise_neg_overflow;
- }
- #endif
- if ((sizeof(int) <= sizeof(unsigned long))) {
- __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
- } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) {
- __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
- }
- } else {
- #if CYTHON_USE_PYLONG_INTERNALS
- if (__Pyx_PyLong_IsCompact(x)) {
- __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
- } else {
- const digit* digits = __Pyx_PyLong_Digits(x);
- assert(__Pyx_PyLong_DigitCount(x) > 1);
- switch (__Pyx_PyLong_SignedDigitCount(x)) {
- case -2:
- if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
- return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
- }
- }
- break;
- case 2:
- if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
- return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
- }
- }
- break;
- case -3:
- if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
- return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
- }
- }
- break;
- case 3:
- if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
- return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
- }
- }
- break;
- case -4:
- if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
- return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
- }
- }
- break;
- case 4:
- if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
- __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
- } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
- return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
- }
- }
- break;
- }
- }
- #endif
- if ((sizeof(int) <= sizeof(long))) {
- __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
- } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) {
- __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
- }
- }
- {
- int val;
- int ret = -1;
- #if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
- Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
- x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
- if (unlikely(bytes_copied == -1)) {
- } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
- goto raise_overflow;
- } else {
- ret = 0;
- }
- #elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
- int one = 1; int is_little = (int)*(unsigned char *)&one;
- unsigned char *bytes = (unsigned char *)&val;
- ret = _PyLong_AsByteArray((PyLongObject *)x,
- bytes, sizeof(val),
- is_little, !is_unsigned);
- #else
- PyObject *v;
- PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
- int bits, remaining_bits, is_negative = 0;
- int chunk_size = (sizeof(long) < 8) ? 30 : 62;
- if (likely(PyLong_CheckExact(x))) {
- v = __Pyx_NewRef(x);
- } else {
- v = PyNumber_Long(x);
- if (unlikely(!v)) return (int) -1;
- assert(PyLong_CheckExact(v));
- }
- {
- int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
- if (unlikely(result < 0)) {
- Py_DECREF(v);
- return (int) -1;
- }
- is_negative = result == 1;
- }
- if (is_unsigned && unlikely(is_negative)) {
- Py_DECREF(v);
- goto raise_neg_overflow;
- } else if (is_negative) {
- stepval = PyNumber_Invert(v);
- Py_DECREF(v);
- if (unlikely(!stepval))
- return (int) -1;
- } else {
- stepval = v;
- }
- v = NULL;
- val = (int) 0;
- mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
- shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
- for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
- PyObject *tmp, *digit;
- long idigit;
- digit = PyNumber_And(stepval, mask);
- if (unlikely(!digit)) goto done;
- idigit = PyLong_AsLong(digit);
- Py_DECREF(digit);
- if (unlikely(idigit < 0)) goto done;
- val |= ((int) idigit) << bits;
- tmp = PyNumber_Rshift(stepval, shift);
- if (unlikely(!tmp)) goto done;
- Py_DECREF(stepval); stepval = tmp;
- }
- Py_DECREF(shift); shift = NULL;
- Py_DECREF(mask); mask = NULL;
- {
- long idigit = PyLong_AsLong(stepval);
- if (unlikely(idigit < 0)) goto done;
- remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
- if (unlikely(idigit >= (1L << remaining_bits)))
- goto raise_overflow;
- val |= ((int) idigit) << bits;
- }
- if (!is_unsigned) {
- if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
- goto raise_overflow;
- if (is_negative)
- val = ~val;
- }
- ret = 0;
- done:
- Py_XDECREF(shift);
- Py_XDECREF(mask);
- Py_XDECREF(stepval);
- #endif
- if (unlikely(ret))
- return (int) -1;
- return val;
- }
- raise_overflow:
- PyErr_SetString(PyExc_OverflowError,
- "value too large to convert to int");
- return (int) -1;
- raise_neg_overflow:
- PyErr_SetString(PyExc_OverflowError,
- "can't convert negative value to int");
- return (int) -1;
- }
- /* FastTypeChecks */
- #if CYTHON_COMPILING_IN_CPYTHON
- static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
- while (a) {
- a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*);
- if (a == b)
- return 1;
- }
- return b == &PyBaseObject_Type;
- }
- static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) {
- PyObject *mro;
- if (a == b) return 1;
- mro = a->tp_mro;
- if (likely(mro)) {
- Py_ssize_t i, n;
- n = PyTuple_GET_SIZE(mro);
- for (i = 0; i < n; i++) {
- if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b)
- return 1;
- }
- return 0;
- }
- return __Pyx_InBases(a, b);
- }
- static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) {
- PyObject *mro;
- if (cls == a || cls == b) return 1;
- mro = cls->tp_mro;
- if (likely(mro)) {
- Py_ssize_t i, n;
- n = PyTuple_GET_SIZE(mro);
- for (i = 0; i < n; i++) {
- PyObject *base = PyTuple_GET_ITEM(mro, i);
- if (base == (PyObject *)a || base == (PyObject *)b)
- return 1;
- }
- return 0;
- }
- return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b);
- }
- static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) {
- if (exc_type1) {
- return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2);
- } else {
- return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2);
- }
- }
- static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
- Py_ssize_t i, n;
- assert(PyExceptionClass_Check(exc_type));
- n = PyTuple_GET_SIZE(tuple);
- for (i=0; i<n; i++) {
- if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
- }
- for (i=0; i<n; i++) {
- PyObject *t = PyTuple_GET_ITEM(tuple, i);
- if (likely(PyExceptionClass_Check(t))) {
- if (__Pyx_inner_PyErr_GivenExceptionMatches2(exc_type, NULL, t)) return 1;
- } else {
- }
- }
- return 0;
- }
- static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) {
- if (likely(err == exc_type)) return 1;
- if (likely(PyExceptionClass_Check(err))) {
- if (likely(PyExceptionClass_Check(exc_type))) {
- return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type);
- } else if (likely(PyTuple_Check(exc_type))) {
- return __Pyx_PyErr_GivenExceptionMatchesTuple(err, exc_type);
- } else {
- }
- }
- return PyErr_GivenExceptionMatches(err, exc_type);
- }
- static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) {
- assert(PyExceptionClass_Check(exc_type1));
- assert(PyExceptionClass_Check(exc_type2));
- if (likely(err == exc_type1 || err == exc_type2)) return 1;
- if (likely(PyExceptionClass_Check(err))) {
- return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2);
- }
- return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2));
- }
- #endif
- /* GetRuntimeVersion */
- #if __PYX_LIMITED_VERSION_HEX < 0x030b0000
- void __Pyx_init_runtime_version(void) {
- if (__Pyx_cached_runtime_version == 0) {
- const char* rt_version = Py_GetVersion();
- unsigned long version = 0;
- unsigned long factor = 0x01000000UL;
- unsigned int digit = 0;
- int i = 0;
- while (factor) {
- while ('0' <= rt_version[i] && rt_version[i] <= '9') {
- digit = digit * 10 + (unsigned int) (rt_version[i] - '0');
- ++i;
- }
- version += factor * digit;
- if (rt_version[i] != '.')
- break;
- digit = 0;
- factor >>= 8;
- ++i;
- }
- __Pyx_cached_runtime_version = version;
- }
- }
- #endif
- static unsigned long __Pyx_get_runtime_version(void) {
- #if __PYX_LIMITED_VERSION_HEX >= 0x030b0000
- return Py_Version & ~0xFFUL;
- #else
- return __Pyx_cached_runtime_version;
- #endif
- }
- /* CheckBinaryVersion */
- static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) {
- const unsigned long MAJOR_MINOR = 0xFFFF0000UL;
- if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR))
- return 0;
- if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR)))
- return 1;
- {
- char message[200];
- PyOS_snprintf(message, sizeof(message),
- "compile time Python version %d.%d "
- "of module '%.100s' "
- "%s "
- "runtime version %d.%d",
- (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF),
- __Pyx_MODULE_NAME,
- (allow_newer) ? "was newer than" : "does not match",
- (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF)
- );
- return PyErr_WarnEx(NULL, message, 1);
- }
- }
- /* NewCodeObj */
- #if CYTHON_COMPILING_IN_LIMITED_API
- static PyObject* __Pyx__PyCode_New(int a, int p, int k, int l, int s, int f,
- PyObject *code, PyObject *c, PyObject* n, PyObject *v,
- PyObject *fv, PyObject *cell, PyObject* fn,
- PyObject *name, int fline, PyObject *lnos) {
- PyObject *exception_table = NULL;
- PyObject *types_module=NULL, *code_type=NULL, *result=NULL;
- #if __PYX_LIMITED_VERSION_HEX < 0x030b0000
- PyObject *version_info;
- PyObject *py_minor_version = NULL;
- #endif
- long minor_version = 0;
- PyObject *type, *value, *traceback;
- PyErr_Fetch(&type, &value, &traceback);
- #if __PYX_LIMITED_VERSION_HEX >= 0x030b0000
- minor_version = 11;
- #else
- if (!(version_info = PySys_GetObject("version_info"))) goto end;
- if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end;
- minor_version = PyLong_AsLong(py_minor_version);
- Py_DECREF(py_minor_version);
- if (minor_version == -1 && PyErr_Occurred()) goto end;
- #endif
- if (!(types_module = PyImport_ImportModule("types"))) goto end;
- if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end;
- if (minor_version <= 7) {
- (void)p;
- result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOOO", a, k, l, s, f, code,
- c, n, v, fn, name, fline, lnos, fv, cell);
- } else if (minor_version <= 10) {
- result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOOO", a,p, k, l, s, f, code,
- c, n, v, fn, name, fline, lnos, fv, cell);
- } else {
- if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end;
- result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOOOO", a,p, k, l, s, f, code,
- c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell);
- }
- end:
- Py_XDECREF(code_type);
- Py_XDECREF(exception_table);
- Py_XDECREF(types_module);
- if (type) {
- PyErr_Restore(type, value, traceback);
- }
- return result;
- }
- #elif PY_VERSION_HEX >= 0x030B0000
- static PyCodeObject* __Pyx__PyCode_New(int a, int p, int k, int l, int s, int f,
- PyObject *code, PyObject *c, PyObject* n, PyObject *v,
- PyObject *fv, PyObject *cell, PyObject* fn,
- PyObject *name, int fline, PyObject *lnos) {
- PyCodeObject *result;
- result =
- #if PY_VERSION_HEX >= 0x030C0000
- PyUnstable_Code_NewWithPosOnlyArgs
- #else
- PyCode_NewWithPosOnlyArgs
- #endif
- (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, __pyx_mstate_global->__pyx_empty_bytes);
- #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030c00A1
- if (likely(result))
- result->_co_firsttraceable = 0;
- #endif
- return result;
- }
- #elif !CYTHON_COMPILING_IN_PYPY
- #define __Pyx__PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
- PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
- #else
- #define __Pyx__PyCode_New(a, p, 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
- static PyObject* __Pyx_PyCode_New(
- const __Pyx_PyCode_New_function_description descr,
- PyObject * const *varnames,
- PyObject *filename,
- PyObject *funcname,
- PyObject *line_table,
- PyObject *tuple_dedup_map
- ) {
- PyObject *code_obj = NULL, *varnames_tuple_dedup = NULL, *code_bytes = NULL;
- Py_ssize_t var_count = (Py_ssize_t) descr.nlocals;
- PyObject *varnames_tuple = PyTuple_New(var_count);
- if (unlikely(!varnames_tuple)) return NULL;
- for (Py_ssize_t i=0; i < var_count; i++) {
- Py_INCREF(varnames[i]);
- if (__Pyx_PyTuple_SET_ITEM(varnames_tuple, i, varnames[i]) != (0)) goto done;
- }
- #if CYTHON_COMPILING_IN_LIMITED_API
- varnames_tuple_dedup = PyDict_GetItem(tuple_dedup_map, varnames_tuple);
- if (!varnames_tuple_dedup) {
- if (unlikely(PyDict_SetItem(tuple_dedup_map, varnames_tuple, varnames_tuple) < 0)) goto done;
- varnames_tuple_dedup = varnames_tuple;
- }
- #else
- varnames_tuple_dedup = PyDict_SetDefault(tuple_dedup_map, varnames_tuple, varnames_tuple);
- if (unlikely(!varnames_tuple_dedup)) goto done;
- #endif
- #if CYTHON_AVOID_BORROWED_REFS
- Py_INCREF(varnames_tuple_dedup);
- #endif
- if (__PYX_LIMITED_VERSION_HEX >= (0x030b0000) && line_table != NULL && !CYTHON_COMPILING_IN_GRAAL) {
- Py_ssize_t line_table_length = __Pyx_PyBytes_GET_SIZE(line_table);
- #if !CYTHON_ASSUME_SAFE_SIZE
- if (unlikely(line_table_length == -1)) goto done;
- #endif
- Py_ssize_t code_len = (line_table_length * 2 + 4) & ~3LL;
- code_bytes = PyBytes_FromStringAndSize(NULL, code_len);
- if (unlikely(!code_bytes)) goto done;
- char* c_code_bytes = PyBytes_AsString(code_bytes);
- if (unlikely(!c_code_bytes)) goto done;
- memset(c_code_bytes, 0, (size_t) code_len);
- }
- code_obj = (PyObject*) __Pyx__PyCode_New(
- (int) descr.argcount,
- (int) descr.num_posonly_args,
- (int) descr.num_kwonly_args,
- (int) descr.nlocals,
- 0,
- (int) descr.flags,
- code_bytes ? code_bytes : __pyx_mstate_global->__pyx_empty_bytes,
- __pyx_mstate_global->__pyx_empty_tuple,
- __pyx_mstate_global->__pyx_empty_tuple,
- varnames_tuple_dedup,
- __pyx_mstate_global->__pyx_empty_tuple,
- __pyx_mstate_global->__pyx_empty_tuple,
- filename,
- funcname,
- (int) descr.first_line,
- (__PYX_LIMITED_VERSION_HEX >= (0x030b0000) && line_table) ? line_table : __pyx_mstate_global->__pyx_empty_bytes
- );
- done:
- Py_XDECREF(code_bytes);
- #if CYTHON_AVOID_BORROWED_REFS
- Py_XDECREF(varnames_tuple_dedup);
- #endif
- Py_DECREF(varnames_tuple);
- return code_obj;
- }
- /* DecompressString */
- static PyObject *__Pyx_DecompressString(const char *s, Py_ssize_t length, int algo) {
- PyObject *module = NULL, *decompress, *compressed_bytes, *decompressed;
- const char* module_name = algo == 3 ? "compression.zstd" : algo == 2 ? "bz2" : "zlib";
- PyObject *methodname = PyUnicode_FromString("decompress");
- if (unlikely(!methodname)) return NULL;
- #if __PYX_LIMITED_VERSION_HEX >= 0x030e0000
- if (algo == 3) {
- PyObject *fromlist = Py_BuildValue("[O]", methodname);
- if (unlikely(!fromlist)) goto bad;
- module = PyImport_ImportModuleLevel("compression.zstd", NULL, NULL, fromlist, 0);
- Py_DECREF(fromlist);
- } else
- #endif
- module = PyImport_ImportModule(module_name);
- if (unlikely(!module)) goto import_failed;
- decompress = PyObject_GetAttr(module, methodname);
- if (unlikely(!decompress)) goto import_failed;
- {
- #ifdef __cplusplus
- char *memview_bytes = const_cast<char*>(s);
- #else
- #if defined(__clang__)
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wcast-qual"
- #elif !defined(__INTEL_COMPILER) && defined(__GNUC__)
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wcast-qual"
- #endif
- char *memview_bytes = (char*) s;
- #if defined(__clang__)
- #pragma clang diagnostic pop
- #elif !defined(__INTEL_COMPILER) && defined(__GNUC__)
- #pragma GCC diagnostic pop
- #endif
- #endif
- #if CYTHON_COMPILING_IN_LIMITED_API && !defined(PyBUF_READ)
- int memview_flags = 0x100;
- #else
- int memview_flags = PyBUF_READ;
- #endif
- compressed_bytes = PyMemoryView_FromMemory(memview_bytes, length, memview_flags);
- }
- if (unlikely(!compressed_bytes)) {
- Py_DECREF(decompress);
- goto bad;
- }
- decompressed = PyObject_CallFunctionObjArgs(decompress, compressed_bytes, NULL);
- Py_DECREF(compressed_bytes);
- Py_DECREF(decompress);
- Py_DECREF(module);
- Py_DECREF(methodname);
- return decompressed;
- import_failed:
- PyErr_Format(PyExc_ImportError,
- "Failed to import '%.20s.decompress' - cannot initialise module strings. "
- "String compression was configured with the C macro 'CYTHON_COMPRESS_STRINGS=%d'.",
- module_name, algo);
- bad:
- Py_XDECREF(module);
- Py_DECREF(methodname);
- return NULL;
- }
- #include <string.h>
- static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) {
- size_t len = strlen(s);
- if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) {
- PyErr_SetString(PyExc_OverflowError, "byte string is too long");
- return -1;
- }
- return (Py_ssize_t) len;
- }
- static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
- Py_ssize_t len = __Pyx_ssize_strlen(c_str);
- if (unlikely(len < 0)) return NULL;
- return __Pyx_PyUnicode_FromStringAndSize(c_str, len);
- }
- static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) {
- Py_ssize_t len = __Pyx_ssize_strlen(c_str);
- if (unlikely(len < 0)) return NULL;
- return PyByteArray_FromStringAndSize(c_str, len);
- }
- static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) {
- Py_ssize_t ignore;
- return __Pyx_PyObject_AsStringAndSize(o, &ignore);
- }
- #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_UTF8
- static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
- if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL;
- #if CYTHON_COMPILING_IN_LIMITED_API
- {
- const char* result;
- Py_ssize_t unicode_length;
- CYTHON_MAYBE_UNUSED_VAR(unicode_length); // only for __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
- #if __PYX_LIMITED_VERSION_HEX < 0x030A0000
- if (unlikely(PyArg_Parse(o, "s#", &result, length) < 0)) return NULL;
- #else
- result = PyUnicode_AsUTF8AndSize(o, length);
- #endif
- #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
- unicode_length = PyUnicode_GetLength(o);
- if (unlikely(unicode_length < 0)) return NULL;
- if (unlikely(unicode_length != *length)) {
- PyUnicode_AsASCIIString(o);
- return NULL;
- }
- #endif
- return result;
- }
- #else
- #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
- if (likely(PyUnicode_IS_ASCII(o))) {
- *length = PyUnicode_GET_LENGTH(o);
- return PyUnicode_AsUTF8(o);
- } else {
- PyUnicode_AsASCIIString(o);
- return NULL;
- }
- #else
- return PyUnicode_AsUTF8AndSize(o, length);
- #endif
- #endif
- }
- #endif
- static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
- #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_UTF8
- if (PyUnicode_Check(o)) {
- return __Pyx_PyUnicode_AsStringAndSize(o, length);
- } else
- #endif
- if (PyByteArray_Check(o)) {
- #if (CYTHON_ASSUME_SAFE_SIZE && CYTHON_ASSUME_SAFE_MACROS) || (CYTHON_COMPILING_IN_PYPY && (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)))
- *length = PyByteArray_GET_SIZE(o);
- return PyByteArray_AS_STRING(o);
- #else
- *length = PyByteArray_Size(o);
- if (*length == -1) return NULL;
- return PyByteArray_AsString(o);
- #endif
- } else
- {
- char* result;
- int r = PyBytes_AsStringAndSize(o, &result, length);
- if (unlikely(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 int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) {
- int retval;
- if (unlikely(!x)) return -1;
- retval = __Pyx_PyObject_IsTrue(x);
- Py_DECREF(x);
- return retval;
- }
- static PyObject* __Pyx_PyNumber_LongWrongResultType(PyObject* result) {
- __Pyx_TypeName result_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(result));
- if (PyLong_Check(result)) {
- if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
- "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). "
- "The ability to return an instance of a strict subclass of int is deprecated, "
- "and may be removed in a future version of Python.",
- result_type_name)) {
- __Pyx_DECREF_TypeName(result_type_name);
- Py_DECREF(result);
- return NULL;
- }
- __Pyx_DECREF_TypeName(result_type_name);
- return result;
- }
- PyErr_Format(PyExc_TypeError,
- "__int__ returned non-int (type " __Pyx_FMT_TYPENAME ")",
- result_type_name);
- __Pyx_DECREF_TypeName(result_type_name);
- Py_DECREF(result);
- return NULL;
- }
- static CYTHON_INLINE PyObject* __Pyx_PyNumber_Long(PyObject* x) {
- #if CYTHON_USE_TYPE_SLOTS
- PyNumberMethods *m;
- #endif
- PyObject *res = NULL;
- if (likely(PyLong_Check(x)))
- return __Pyx_NewRef(x);
- #if CYTHON_USE_TYPE_SLOTS
- m = Py_TYPE(x)->tp_as_number;
- if (likely(m && m->nb_int)) {
- res = m->nb_int(x);
- }
- #else
- if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) {
- res = PyNumber_Long(x);
- }
- #endif
- if (likely(res)) {
- if (unlikely(!PyLong_CheckExact(res))) {
- return __Pyx_PyNumber_LongWrongResultType(res);
- }
- }
- 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;
- if (likely(PyLong_CheckExact(b))) {
- #if CYTHON_USE_PYLONG_INTERNALS
- if (likely(__Pyx_PyLong_IsCompact(b))) {
- return __Pyx_PyLong_CompactValue(b);
- } else {
- const digit* digits = __Pyx_PyLong_Digits(b);
- const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b);
- switch (size) {
- case 2:
- if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
- return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
- }
- break;
- case -2:
- if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
- return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
- }
- break;
- case 3:
- if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
- return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
- }
- break;
- case -3:
- if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
- return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
- }
- break;
- case 4:
- if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
- return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
- }
- break;
- case -4:
- if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
- return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
- }
- break;
- }
- }
- #endif
- return PyLong_AsSsize_t(b);
- }
- x = PyNumber_Index(b);
- if (!x) return -1;
- ival = PyLong_AsSsize_t(x);
- Py_DECREF(x);
- return ival;
- }
- static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
- if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) {
- return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o);
- } else {
- Py_ssize_t ival;
- PyObject *x;
- x = PyNumber_Index(o);
- if (!x) return -1;
- ival = PyLong_AsLong(x);
- Py_DECREF(x);
- return ival;
- }
- }
- static CYTHON_INLINE PyObject *__Pyx_Owned_Py_None(int b) {
- CYTHON_UNUSED_VAR(b);
- return __Pyx_NewRef(Py_None);
- }
- static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
- return __Pyx_NewRef(b ? Py_True: Py_False);
- }
- static CYTHON_INLINE PyObject * __Pyx_PyLong_FromSize_t(size_t ival) {
- return PyLong_FromSize_t(ival);
- }
- /* MultiPhaseInitModuleState */
- #if CYTHON_PEP489_MULTI_PHASE_INIT && CYTHON_USE_MODULE_STATE
- #ifndef CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
- #if (CYTHON_COMPILING_IN_LIMITED_API || PY_VERSION_HEX >= 0x030C0000)
- #define CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE 1
- #else
- #define CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE 0
- #endif
- #endif
- #if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE && !CYTHON_ATOMICS
- #error "Module state with PEP489 requires atomics. Currently that's one of\
- C11, C++11, gcc atomic intrinsics or MSVC atomic intrinsics"
- #endif
- #if !CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
- #define __Pyx_ModuleStateLookup_Lock()
- #define __Pyx_ModuleStateLookup_Unlock()
- #elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d0000
- static PyMutex __Pyx_ModuleStateLookup_mutex = {0};
- #define __Pyx_ModuleStateLookup_Lock() PyMutex_Lock(&__Pyx_ModuleStateLookup_mutex)
- #define __Pyx_ModuleStateLookup_Unlock() PyMutex_Unlock(&__Pyx_ModuleStateLookup_mutex)
- #elif defined(__cplusplus) && __cplusplus >= 201103L
- #include <mutex>
- static std::mutex __Pyx_ModuleStateLookup_mutex;
- #define __Pyx_ModuleStateLookup_Lock() __Pyx_ModuleStateLookup_mutex.lock()
- #define __Pyx_ModuleStateLookup_Unlock() __Pyx_ModuleStateLookup_mutex.unlock()
- #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ > 201112L) && !defined(__STDC_NO_THREADS__)
- #include <threads.h>
- static mtx_t __Pyx_ModuleStateLookup_mutex;
- static once_flag __Pyx_ModuleStateLookup_mutex_once_flag = ONCE_FLAG_INIT;
- static void __Pyx_ModuleStateLookup_initialize_mutex(void) {
- mtx_init(&__Pyx_ModuleStateLookup_mutex, mtx_plain);
- }
- #define __Pyx_ModuleStateLookup_Lock()\
- call_once(&__Pyx_ModuleStateLookup_mutex_once_flag, __Pyx_ModuleStateLookup_initialize_mutex);\
- mtx_lock(&__Pyx_ModuleStateLookup_mutex)
- #define __Pyx_ModuleStateLookup_Unlock() mtx_unlock(&__Pyx_ModuleStateLookup_mutex)
- #elif defined(HAVE_PTHREAD_H)
- #include <pthread.h>
- static pthread_mutex_t __Pyx_ModuleStateLookup_mutex = PTHREAD_MUTEX_INITIALIZER;
- #define __Pyx_ModuleStateLookup_Lock() pthread_mutex_lock(&__Pyx_ModuleStateLookup_mutex)
- #define __Pyx_ModuleStateLookup_Unlock() pthread_mutex_unlock(&__Pyx_ModuleStateLookup_mutex)
- #elif defined(_WIN32)
- #include <Windows.h> // synchapi.h on its own doesn't work
- static SRWLOCK __Pyx_ModuleStateLookup_mutex = SRWLOCK_INIT;
- #define __Pyx_ModuleStateLookup_Lock() AcquireSRWLockExclusive(&__Pyx_ModuleStateLookup_mutex)
- #define __Pyx_ModuleStateLookup_Unlock() ReleaseSRWLockExclusive(&__Pyx_ModuleStateLookup_mutex)
- #else
- #error "No suitable lock available for CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE.\
- Requires C standard >= C11, or C++ standard >= C++11,\
- or pthreads, or the Windows 32 API, or Python >= 3.13."
- #endif
- typedef struct {
- int64_t id;
- PyObject *module;
- } __Pyx_InterpreterIdAndModule;
- typedef struct {
- char interpreter_id_as_index;
- Py_ssize_t count;
- Py_ssize_t allocated;
- __Pyx_InterpreterIdAndModule table[1];
- } __Pyx_ModuleStateLookupData;
- #define __PYX_MODULE_STATE_LOOKUP_SMALL_SIZE 32
- #if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
- static __pyx_atomic_int_type __Pyx_ModuleStateLookup_read_counter = 0;
- #endif
- #if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
- static __pyx_atomic_ptr_type __Pyx_ModuleStateLookup_data = 0;
- #else
- static __Pyx_ModuleStateLookupData* __Pyx_ModuleStateLookup_data = NULL;
- #endif
- static __Pyx_InterpreterIdAndModule* __Pyx_State_FindModuleStateLookupTableLowerBound(
- __Pyx_InterpreterIdAndModule* table,
- Py_ssize_t count,
- int64_t interpreterId) {
- __Pyx_InterpreterIdAndModule* begin = table;
- __Pyx_InterpreterIdAndModule* end = begin + count;
- if (begin->id == interpreterId) {
- return begin;
- }
- while ((end - begin) > __PYX_MODULE_STATE_LOOKUP_SMALL_SIZE) {
- __Pyx_InterpreterIdAndModule* halfway = begin + (end - begin)/2;
- if (halfway->id == interpreterId) {
- return halfway;
- }
- if (halfway->id < interpreterId) {
- begin = halfway;
- } else {
- end = halfway;
- }
- }
- for (; begin < end; ++begin) {
- if (begin->id >= interpreterId) return begin;
- }
- return begin;
- }
- static PyObject *__Pyx_State_FindModule(CYTHON_UNUSED void* dummy) {
- int64_t interpreter_id = PyInterpreterState_GetID(__Pyx_PyInterpreterState_Get());
- if (interpreter_id == -1) return NULL;
- #if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
- __Pyx_ModuleStateLookupData* data = (__Pyx_ModuleStateLookupData*)__pyx_atomic_pointer_load_relaxed(&__Pyx_ModuleStateLookup_data);
- {
- __pyx_atomic_incr_acq_rel(&__Pyx_ModuleStateLookup_read_counter);
- if (likely(data)) {
- __Pyx_ModuleStateLookupData* new_data = (__Pyx_ModuleStateLookupData*)__pyx_atomic_pointer_load_acquire(&__Pyx_ModuleStateLookup_data);
- if (likely(data == new_data)) {
- goto read_finished;
- }
- }
- __pyx_atomic_decr_acq_rel(&__Pyx_ModuleStateLookup_read_counter);
- __Pyx_ModuleStateLookup_Lock();
- __pyx_atomic_incr_relaxed(&__Pyx_ModuleStateLookup_read_counter);
- data = (__Pyx_ModuleStateLookupData*)__pyx_atomic_pointer_load_relaxed(&__Pyx_ModuleStateLookup_data);
- __Pyx_ModuleStateLookup_Unlock();
- }
- read_finished:;
- #else
- __Pyx_ModuleStateLookupData* data = __Pyx_ModuleStateLookup_data;
- #endif
- __Pyx_InterpreterIdAndModule* found = NULL;
- if (unlikely(!data)) goto end;
- if (data->interpreter_id_as_index) {
- if (interpreter_id < data->count) {
- found = data->table+interpreter_id;
- }
- } else {
- found = __Pyx_State_FindModuleStateLookupTableLowerBound(
- data->table, data->count, interpreter_id);
- }
- end:
- {
- PyObject *result=NULL;
- if (found && found->id == interpreter_id) {
- result = found->module;
- }
- #if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
- __pyx_atomic_decr_acq_rel(&__Pyx_ModuleStateLookup_read_counter);
- #endif
- return result;
- }
- }
- #if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
- static void __Pyx_ModuleStateLookup_wait_until_no_readers(void) {
- while (__pyx_atomic_load(&__Pyx_ModuleStateLookup_read_counter) != 0);
- }
- #else
- #define __Pyx_ModuleStateLookup_wait_until_no_readers()
- #endif
- static int __Pyx_State_AddModuleInterpIdAsIndex(__Pyx_ModuleStateLookupData **old_data, PyObject* module, int64_t interpreter_id) {
- Py_ssize_t to_allocate = (*old_data)->allocated;
- while (to_allocate <= interpreter_id) {
- if (to_allocate == 0) to_allocate = 1;
- else to_allocate *= 2;
- }
- __Pyx_ModuleStateLookupData *new_data = *old_data;
- if (to_allocate != (*old_data)->allocated) {
- new_data = (__Pyx_ModuleStateLookupData *)realloc(
- *old_data,
- sizeof(__Pyx_ModuleStateLookupData)+(to_allocate-1)*sizeof(__Pyx_InterpreterIdAndModule));
- if (!new_data) {
- PyErr_NoMemory();
- return -1;
- }
- for (Py_ssize_t i = new_data->allocated; i < to_allocate; ++i) {
- new_data->table[i].id = i;
- new_data->table[i].module = NULL;
- }
- new_data->allocated = to_allocate;
- }
- new_data->table[interpreter_id].module = module;
- if (new_data->count < interpreter_id+1) {
- new_data->count = interpreter_id+1;
- }
- *old_data = new_data;
- return 0;
- }
- static void __Pyx_State_ConvertFromInterpIdAsIndex(__Pyx_ModuleStateLookupData *data) {
- __Pyx_InterpreterIdAndModule *read = data->table;
- __Pyx_InterpreterIdAndModule *write = data->table;
- __Pyx_InterpreterIdAndModule *end = read + data->count;
- for (; read<end; ++read) {
- if (read->module) {
- write->id = read->id;
- write->module = read->module;
- ++write;
- }
- }
- data->count = write - data->table;
- for (; write<end; ++write) {
- write->id = 0;
- write->module = NULL;
- }
- data->interpreter_id_as_index = 0;
- }
- static int __Pyx_State_AddModule(PyObject* module, CYTHON_UNUSED void* dummy) {
- int64_t interpreter_id = PyInterpreterState_GetID(__Pyx_PyInterpreterState_Get());
- if (interpreter_id == -1) return -1;
- int result = 0;
- __Pyx_ModuleStateLookup_Lock();
- #if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
- __Pyx_ModuleStateLookupData *old_data = (__Pyx_ModuleStateLookupData *)
- __pyx_atomic_pointer_exchange(&__Pyx_ModuleStateLookup_data, 0);
- #else
- __Pyx_ModuleStateLookupData *old_data = __Pyx_ModuleStateLookup_data;
- #endif
- __Pyx_ModuleStateLookupData *new_data = old_data;
- if (!new_data) {
- new_data = (__Pyx_ModuleStateLookupData *)calloc(1, sizeof(__Pyx_ModuleStateLookupData));
- if (!new_data) {
- result = -1;
- PyErr_NoMemory();
- goto end;
- }
- new_data->allocated = 1;
- new_data->interpreter_id_as_index = 1;
- }
- __Pyx_ModuleStateLookup_wait_until_no_readers();
- if (new_data->interpreter_id_as_index) {
- if (interpreter_id < __PYX_MODULE_STATE_LOOKUP_SMALL_SIZE) {
- result = __Pyx_State_AddModuleInterpIdAsIndex(&new_data, module, interpreter_id);
- goto end;
- }
- __Pyx_State_ConvertFromInterpIdAsIndex(new_data);
- }
- {
- Py_ssize_t insert_at = 0;
- {
- __Pyx_InterpreterIdAndModule* lower_bound = __Pyx_State_FindModuleStateLookupTableLowerBound(
- new_data->table, new_data->count, interpreter_id);
- assert(lower_bound);
- insert_at = lower_bound - new_data->table;
- if (unlikely(insert_at < new_data->count && lower_bound->id == interpreter_id)) {
- lower_bound->module = module;
- goto end; // already in table, nothing more to do
- }
- }
- if (new_data->count+1 >= new_data->allocated) {
- Py_ssize_t to_allocate = (new_data->count+1)*2;
- new_data =
- (__Pyx_ModuleStateLookupData*)realloc(
- new_data,
- sizeof(__Pyx_ModuleStateLookupData) +
- (to_allocate-1)*sizeof(__Pyx_InterpreterIdAndModule));
- if (!new_data) {
- result = -1;
- new_data = old_data;
- PyErr_NoMemory();
- goto end;
- }
- new_data->allocated = to_allocate;
- }
- ++new_data->count;
- int64_t last_id = interpreter_id;
- PyObject *last_module = module;
- for (Py_ssize_t i=insert_at; i<new_data->count; ++i) {
- int64_t current_id = new_data->table[i].id;
- new_data->table[i].id = last_id;
- last_id = current_id;
- PyObject *current_module = new_data->table[i].module;
- new_data->table[i].module = last_module;
- last_module = current_module;
- }
- }
- end:
- #if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
- __pyx_atomic_pointer_exchange(&__Pyx_ModuleStateLookup_data, new_data);
- #else
- __Pyx_ModuleStateLookup_data = new_data;
- #endif
- __Pyx_ModuleStateLookup_Unlock();
- return result;
- }
- static int __Pyx_State_RemoveModule(CYTHON_UNUSED void* dummy) {
- int64_t interpreter_id = PyInterpreterState_GetID(__Pyx_PyInterpreterState_Get());
- if (interpreter_id == -1) return -1;
- __Pyx_ModuleStateLookup_Lock();
- #if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
- __Pyx_ModuleStateLookupData *data = (__Pyx_ModuleStateLookupData *)
- __pyx_atomic_pointer_exchange(&__Pyx_ModuleStateLookup_data, 0);
- #else
- __Pyx_ModuleStateLookupData *data = __Pyx_ModuleStateLookup_data;
- #endif
- if (data->interpreter_id_as_index) {
- if (interpreter_id < data->count) {
- data->table[interpreter_id].module = NULL;
- }
- goto done;
- }
- {
- __Pyx_ModuleStateLookup_wait_until_no_readers();
- __Pyx_InterpreterIdAndModule* lower_bound = __Pyx_State_FindModuleStateLookupTableLowerBound(
- data->table, data->count, interpreter_id);
- if (!lower_bound) goto done;
- if (lower_bound->id != interpreter_id) goto done;
- __Pyx_InterpreterIdAndModule *end = data->table+data->count;
- for (;lower_bound<end-1; ++lower_bound) {
- lower_bound->id = (lower_bound+1)->id;
- lower_bound->module = (lower_bound+1)->module;
- }
- }
- --data->count;
- if (data->count == 0) {
- free(data);
- data = NULL;
- }
- done:
- #if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
- __pyx_atomic_pointer_exchange(&__Pyx_ModuleStateLookup_data, data);
- #else
- __Pyx_ModuleStateLookup_data = data;
- #endif
- __Pyx_ModuleStateLookup_Unlock();
- return 0;
- }
- #endif
- /* #### Code section: utility_code_pragmas_end ### */
- #ifdef _MSC_VER
- #pragma warning( pop )
- #endif
- /* #### Code section: end ### */
- #endif /* Py_PYTHON_H */
|