;ò òiýDc@s™dkTdklZdklZdklZdfd„ƒYZdfd„ƒYZdfd „ƒYZ d fd „ƒYZ d „Z d „Z d„Z dS((s*(sdeepcopy(sStack(sshowinfospe_PointcBstZd„ZRS(NcCs||_||_dS(N(sxpossselfsxsypossy(sselfsxpossypos((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pys__init__Ks (s__name__s __module__s__init__(((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pyspe_PointIsspe_NodecBstZd„Zd„ZRS(NcCsú||_||_t|_tttf\|_|_|_ tttf\|_ |_ |_ tttf\|_ |_|_ttf\|_|_ttf\|_|_g|_g|_g|_g|_t|_g|_g|_g|_dS(N(sxsselfsxpossysypossNonescanOrderst1st2st3sp1sp2sp3sr1sr2sr3sxschsyschsxfppsyfpps adjacentEdgess adjacentNodessMs oppositeNodessoutfacespath1spath2spath3(sselfsxsy((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pys__init__Us    !!!       cCs$|ii|ƒ|ii|ƒdS(N(sselfs adjacentEdgessappendses adjacentNodessv(sselfsesv((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pysaddEdgehs(s__name__s __module__s__init__saddEdge(((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pyspe_NodeSs spe_EdgecBstZd„ZRS(NcCs1||_||_t|_||_t|_ dS(N( sindex_p1sselfsp1sindex_p2sp2sNoneslabelstfsoriginalsoutface(sselfsindex_p1sindex_p2sep1sep2stf((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pys__init__rs     (s__name__s __module__s__init__(((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pyspe_Edgepsspe_GraphcBsÎtZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(NcCs xýtdt|iƒƒD]ã}|i|}dG|GdGHdG|iGdG|iGHdG|iGHdG|i GdG|i Gd G|i GHd G|i Gd G|i Gd G|iGHd G|iGdG|iGdG|iGHdG|iGdG|iGHdG|iGdG|iGHdG|iGHqWHxttdt|iƒƒD]Z}|i|}dG|GdGHd G|i Gd G|i GHdG|iGHdG|iGdG|iGHqWHx tdt|iƒƒD]†}|i|}dGH|GdGHdGx+tdt|iƒƒD]}|i|GqÐWHdGx+tdt|iƒƒD]}|i|GqWHdGx+tdt|iƒƒD]}|i|Gq6WHdGx+tdt|iƒƒD]}|i|GqiWHdGx+tdt|i ƒƒD]}|i |GqœWHd Gx+tdt|i!ƒƒD]}|i!|GqÏWHd!Gx+tdt|i"ƒƒD]}|i"|GqWHq’WdS("Nis --------Node:s--------------sxpos=sypos=s canOrder=st1=st2=st3=sp1=sp2=sp3=sr1=sr2=sr3=sxsch=sysch=sxfpp=syfpp=soutface=s -------Edge:s---------------slabel=s original=s---------------------------s:sadjacentEdges:sadjacentNodes:sM:soppositeNodes:spath1:spath2:spath3:(#srangeslensselfsnodessisnsxpossyposscanOrderst1st2st3sp1sp2sp3sr1sr2sr3sxschsyschsxfppsyfppsoutfacesedgesseslabelsoriginals adjacentEdgessjs adjacentNodessMs oppositeNodesspath1spath2spath3(sselfsesisjsn((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pys printGraph€sz   """     cCsag|_g|_ttf\|_|_t|_t|_dddf\|_|_ |_ dS(Niÿÿÿÿ( sselfsnodessedgessNonesorderKs orderIndexVksFPPkslabelKsindexV1sindexV2sindexV3(sself((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pys__init__Ãs     cCsO|djo:t|i|iƒ}|ii|ƒt |iƒdSn|SdS(Nii( sindexspe_Nodesp1sxsys tempNode1sselfsnodessappendslen(sselfsindexsp1s tempNode1((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pys checkIndexÏs  cCslt|i|i|i|iƒ}t|i|i|i|iƒ}|i i t |||||ƒƒdS(N( spe_PointsselfsnodessindexP1sxpossypossep1sindexP2sep2sedgessappendspe_Edgestf(sselfsindexP1sindexP2sp1sp2stfsep2sep1((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pys storeEdgeÙs##cCs ||ijodSndSdS(Nii(swsus adjacentNodes(sselfsusw((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pysisEdgeîscCs|i|SdS(N(svs adjacentNodesse(sselfsvse((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pysadjacentVertexöscCsÜxÑtdt|iƒƒD]·} |i| }t|iƒdjoqnx„tdt|iƒƒD]j}|i||ƒ}|i|}|d} | t|iƒjo d} n|i|| ƒ}|i|}|i||ƒ oèt|i|iƒ}t|i|iƒ}|i||||dƒ| } t|iƒd} |ii| ƒd} |ii| | ƒ|ii| |ƒ|ii| ƒ}|ii|| ƒ|ii||ƒd|id_dSqbqbWqWdSdS(Niiiiÿÿÿÿ(srangeslensselfsnodessindexVsvs adjacentEdgessjsadjacentVertexsindexUsusksindexWswsisEdgespe_Pointsxpossyposspointuspointws storeEdgestempi1sedgesstempe1s adjacentNodessindexs indexVinWsinserts indexVinUsoriginal(sselfspointwsjs indexVinUsindexWsuspointuswsvstempi1s indexVinWsindexVskstempe1sindexU((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pysconsiderüs:     cCs%d}x|o|iƒ}q WdS(Ni(sfinishsselfsconsider(sselfsfinish((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pys triangulate)scCsSt|iƒ|_t|iƒ}x+|djo|iƒ|_|d}q$WdS(Nii(slensselfsnodessorderKsksorders orderIndexVk(sselfsk((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pysorderingEs  cCsPx0tdt|iƒƒD]}d|i|_qW|idjo]d|_|i|i}|id|_ |i|i }|id|_ |i|i }n1|i|i}|i|i }|i|i }d|_d|_t|iƒ|_x0tdt|iƒƒD]}d|i|_q Wt|iƒ|_|i |_|i SdS(Niii(srangeslensselfsnodessiscanOrdersindexV1sv1s adjacentNodessindexV2sv2sindexVnsvksjsoutfacesorderKs orderIndexVk(sselfsjsisvksv2sv1((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pys initOrderRs,    c Csß|idjoÇ|i|i}|i|i}|i|i}xTt dt |i ƒƒD]:}|i|i |}|i|ijo d|_qYqYWd} d}x1| o|t |iƒjo|i|}|io*||jo||jo|i|ijo¼d}xet dt |i ƒƒD]K}|i |} |i| } | io| i|ijo|d}q'q'W|djo=d} |}|id|_|id|_||_|SqÄn|d}q¦WndSdS(Niiiiiÿÿÿÿ(sselfsorderKsnodessindexV1sv1sindexV2sv2s orderIndexVksvksrangeslens adjacentNodessis neighbourscanOrdersoutfacesfoundsjs candidatescounts checkIndexs checkNode( sselfscountsjs candidatesisvksv2s neighboursv1s checkNodes checkIndexsfound((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pysorderws> 7     cCsD|iƒx3tdt|iƒƒD]}||_|iƒq#WdS(Ni(sselfs initLabelsrangeslensnodesskslabelKs labelStep(sselfsk((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pys labelling·s   cCs|id}|i|jo |i|jo||id_dSn|i|jo |i|jo| |id_dSnxtdt |iƒƒD]v}|i|}|i|jo |i|jo||_dSn|i|jo |i|jo| |_dSq—q—WdS(Nii( sselfsedgessesp1sindexP1sp2sindexP2slabelsrangeslensi(sselfsindexP1sindexP2slabelsesi((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pys labelEdgeÄs         cCsRd}d}x;|djo-|i|i|jo|Sn|d}qWdSdS(Niÿÿÿÿii(sindexVksisselfsnodesscanOrdersk(sselfsksindexVksi((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pys findIndexOfVkÚs cCs´x0tdt|iƒƒD]}d|i|_qW|idƒ|_|i|i }|i|i }|i|i}|i|i|i dƒ|i|i|i dƒd|_dS(Niiii(srangeslensselfsedgessjslabels findIndexOfVksindexV3snodessindexV1sv1sindexV2sv2sv3s labelEdgeslabelK(sselfsjsv1sv2sv3((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pys initLabelçscCsÿ|i}t|iƒ}||joÏ|i|dƒ}|i|}|i d}|i ||dƒ|i d}|i ||dƒt|i ƒdjoExBt dt|i ƒdƒD] }|i ||i |dƒq¸Wn|id|_n|iSdS(Niiiÿÿÿÿiiýÿÿÿ(sselfslabelKskslensnodessns findIndexOfVks indexVkplus1svkplus1s oppositeNodessfirsts labelEdgeslastsrangesl(sselfslastslsnsvkplus1sks indexVkplus1sfirst((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pys labelSteps    "cCsD|iƒx3tdt|iƒƒD]}||_|iƒq#WdS(Ni(sselfsinitFPPsrangeslensnodessksFPPksFPPstep(sselfsk((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pysFPP8s   cCs£|idƒ|_xptdt|iƒƒD]V}d|i|_d|i|_d|i|_ g|i|_ g|i|_ q+W|i|i }|i|i}|i|i}d|_d|_ d|_d|_ d|_d|_ |i i|i ƒ|i i|iƒ|i i|iƒ|i i|iƒ|i i|iƒ|i i|iƒd|i|i _d|i|i_d|i|i_d|_dS(Niiii(sselfs findIndexOfVksindexV3srangeslensnodessjsoutfacesxfppsyfppsMs oppositeNodessindexV1sv1sindexV2sv2sv3sappendsFPPk(sselfsjsv1sv2sv3((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pysinitFPPCs0cCs¹|i}t|iƒ}||jo‰|i|dƒ}|i|} xt dt| i ƒƒD]æ}|i| i |}|i |jo¼d}d}x]|djo|t| iƒjo9|i|i| i|ijo |}n|d}q—W|djo | ii|ii|ƒƒqD| ii||ii|ƒƒq^q^Wd|i|_t| iƒdjoHxEt dt| iƒdƒD]#}| i|}d|i|_q‹Wn| id}|i|} xKt dt| iƒƒD]1}| i|}|i|id|i|_qéW|i| id}xLt dt|iƒƒD]2}|i|i|id|i|i|_qKW|i| id} | i}| i} |i}|i}|||| d| _|||| d| _xbt d|ƒD]Q}|i|} | io| i| ijo ||jo| ii|ƒqûqûW| ii|ƒx7t dt| iƒƒD]}| ii| i|ƒqyW|id|_n|iSdS(Niiiÿÿÿÿi("sselfsFPPkskslensnodessns findIndexOfVks indexVkplus1svkplus1sranges adjacentNodessis neighbourscanOrders insertPlacesjs oppositeNodessxfppsappendsindexsinsertsoutfacestemps indexWpplus1swsMsWqsWpsx1syfppsy1sx2sy2swi(sselfsy2sWqstempsisjsns neighboursx2swiswsWpsy1svkplus1s indexWpplus1sx1sks indexVkplus1s insertPlace((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pysFPPstepksl   #!        "0     *c Cs‘xŠtdt|iƒƒD]p}|i|} d}| idjo&| idjo| it|iƒjo|djo#d| _ | i i |ƒd}n|djo#d| _ | i i |ƒd}n|djo,d| _| ii |ƒt|iƒ}n| }x||i|jogd}d} xT| o|t|iƒjo5|i|i|}|i}||jo|i |ii|ƒjp'|| jo|i |ii|ƒjo·d} |i|}|i|}|djo$| i d| _ | i i |ƒn|djo$| i d| _ | i i |ƒn|djo$| id| _| ii |ƒqqn|d}q,Wq WqqWdS(Niiii(srangeslensselfsnodessisvs finalNodescanOrderspath123sp1spath1sappendsp2spath2sp3spath3svNextsjsfounds adjacentEdgessedgesscurEdgeslabelscurLabelsindexs adjacentNodess vNextIndex( sselfspath123svNextsisjs vNextIndexscurLabels finalNodescurEdgesvsfound((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pys calculatePÐsP 9         S     c CsØxÍtdt|iƒƒD]³}|i|i|}|i}|| jo|i |i i |ƒjp&||jo|i |i i |ƒjo=|i|}|i |}|d}|i|||ƒ}qqW|SdS(Nii(srangeslensvs adjacentEdgessjsselfsedgesscurEdgeslabelscurLabelsp1snodessindexsp2s adjacentNodess vNextIndexsvNextscountstraverse( sselfslabelsvscountsvNextsjs vNextIndexscurLabelscurEdge((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pystraverses S   c Cs“x«tdt|iƒƒD]‘}|i|}d|_d|_d|_d|_ d|_ d|_ d|_ d|_ d|_d|_d|_g|_g|_g|_qW|i|i}|i|i}|i|i}d|_ d|_ d|_ d|_ d|_ d|_ d|_ d|_ d|_ d|_d|_d|_d|_t|iƒd|_d|_d|_t|iƒd|_d|_d|_|idƒ|idƒ|idƒx²tdt|iƒƒD]˜}|i|}|idjo&|idjo|it|iƒjoL|id|dƒ|_ |id|dƒ|_ |id|dƒ|_ qãqãWxztdt|iƒƒD]`}|i|}|idjo&|idjo|it|iƒjod|_ d|_ d|_xGtdt|iƒƒD]-}|i|i|}|i |i |_ qWxGtdt|iƒƒD]-}|i|i|}|i |i |_ qbW|i |i |_ xGtdt|iƒƒD]-}|i|i|}|i |i |_ q¿WxGtdt|iƒƒD]-}|i|i|}|i |i |_ q W|i |i |_ xGtdt|iƒƒD]-}|i|i|}|i|i |_qfWxGtdt|iƒƒD]-}|i|i|}|i|i |_q°W|i|i |_q˜q˜Wxtdt|iƒƒD]v}|i|}|idjo&|idjo|it|iƒjo*|i |i|_|i |i|_qqWdS(Niiii( srangeslensselfsnodessistempnn1sp1sp2sp3st1st2st3sr1sr2sr3sxschsyschspath1spath2spath3sindexV1sv1sindexV2sv2sindexVnsvns calculatePsvscanOrderstraversesjsonPath( sselfsisjsv2sonPathsv1stempnn1svnsv((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pysSchnyders˜                   9  9 9(s__name__s __module__s printGraphs__init__s checkIndexs storeEdgesisEdgesadjacentVertexsconsiders triangulatesorderings initOrdersorders labellings labelEdges findIndexOfVks initLabels labelStepsFPPsinitFPPsFPPsteps calculatePstraversesSchnyder(((s</mnt/gmirror/ports/math/py-gato/work/Gato/PlanarEmbedding.pyspe_Graph}s, C    -  % @   7 ( e 3 c Cs|iƒdjodSnt|ƒ}| otddƒdSntƒ}d} h}x%|i D]} | || <| d} qcWx6t d|iƒƒD]} |i i t| | ƒƒq—Wh}xat dt|ƒƒD]J} ||| d} ||| d} | | f||