ó Ü@Qc@sGddlZddlZddlmZmZmZddlmZmZmZmZdefd„ƒYZ de fd„ƒYZ de fd „ƒYZ d e fd „ƒYZ d e fd „ƒYZ ddd„ƒYZd„Zd„Zd„Zd„ZedkrCddlZejdZeeeƒjƒdedƒndS(iÿÿÿÿN(tContextt ImageSurfacetPattern(tVBoxNodet TextRectangletintersect_linestdraw_arrow_headtTreeNodecBs>eZd„Zd„Zd„Zd„Zd„Zd„ZRS(cCs£tj|ƒd|_t|_||_||_||_g|_t|_ |dk r–t |ƒ|_ |j j ddddƒ|jj|j ƒnd|_dS(Nig›šššššê?g¾½½½½½í?gÀ¿¿¿¿¿ï?i(iiii(Rt__init__tpaddingtFalsetexpand_to_filltnametparenttdatatchildrent is_step_listtNoneRtcontenttset_fill_colortitemstappendtextra_bottom_space(tselfR R ttitleR((s&..\modules\optimizer_trace_renderer.pyR s         cCsd|jjS(Ns (Rttext(R((s&..\modules\optimizer_trace_renderer.pyt__repr__scCs,x|jD]}|jƒq W|jƒdS(N(Rtprocesstcalc(Rtch((s&..\modules\optimizer_trace_renderer.pyRscCs!tj||ƒ|j|ƒdS(N(Rtrendert render_shadow(Rtc((s&..\modules\optimizer_trace_renderer.pyR#scCsdS(Ni((RR R((s&..\modules\optimizer_trace_renderer.pyt'minimal_space_required_space_for_ref_to'scCs |j|ƒ||f|_dS(N(Rtpos(RR txty((s&..\modules\optimizer_trace_renderer.pytlayout*s (t__name__t __module__RRRRR!R%(((s&..\modules\optimizer_trace_renderer.pyR s      t TreeStepNodecBseZd„ZRS(cCsItj|||||ƒ|jddddƒ|jddddƒdS(Ngà?gffffffæ?i(RRRt set_color(RR R RR((s&..\modules\optimizer_trace_renderer.pyR/s(R&R'R(((s&..\modules\optimizer_trace_renderer.pyR(.st StepListNodecBs,eZd„Zd„Zd„Zd„ZRS(cCstj||dd|ƒdS(Ntsteps(RRR(RR R+((s&..\modules\optimizer_trace_renderer.pyR5scCsM|j|ƒx9|jD].}|j|||ƒ||jdd7}qWdS(Nii((RRR%tsize(RR R#R$R((s&..\modules\optimizer_trace_renderer.pyR%8s cCs%x|jD]}|j|ƒq WdS(N(RR(RR R((s&..\modules\optimizer_trace_renderer.pyR>scCs`xY|jD]N}|jƒd\}}dG|G|GHt||||ƒ}|jj|ƒq WdS(Nit#is####################(RRR(RR(RtstepR tvaluetnode((s&..\modules\optimizer_trace_renderer.pyRBs  (R&R'RR%RR(((s&..\modules\optimizer_trace_renderer.pyR*4s   t TreeRootNodecBseZd„ZRS(cCstj|d|dƒdS(NR+(R*RR(RR+((s&..\modules\optimizer_trace_renderer.pyRKs(R&R'R(((s&..\modules\optimizer_trace_renderer.pyR1JstTableDependencycBseZd„ZRS(cCs5d|d|df}tj||d||ƒdS(Ns%s.%stdatabasettableR2(RR(RR RR((s&..\modules\optimizer_trace_renderer.pyRQs(R&R'R(((s&..\modules\optimizer_trace_renderer.pyR2Pst TreeLayoutercBsVeZd„Zddd„Zd„Zd„Zd„Zd„Zd„Zd„Z RS( cCs||_d|_d|_dS(Nii2(troottyspacingtxspacing(RR6((s&..\modules\optimizer_trace_renderer.pyRXs  icCss|j\}}}}|j\} } d} d} |jrAxó|jD]è} ||f| _|jdkrdG| jG||jGHn| jr«|j|| ||ƒ\}}n0|j|| || jd|j|ƒ\}}||f| _ |t | jd|ƒ|j 7}| ||j 7} t || ƒ} qCWt | | ƒ} n|j||||ƒ\} } | | 7} | | fS(Nitjoin_optimizationsput i( R R,RRR"R R8R%t layout_treetgsizetmaxR7(RtctxR0R#R$tttltbtrtwthttwidthttheightR.tswtsh((s&..\modules\optimizer_trace_renderer.pyR%]s(  !0! c Cs±|j\}}d}|}|} xd|jD]Y} |j|| | |||jƒ\} } | | |j7} || 7}t| |ƒ}q+W||f|_t||ƒ||jfS(Ni(R,RR:R7R8R<R"( RR=R0R#R$RBRCRDREtxxRRFRG((s&..\modules\optimizer_trace_renderer.pyR:xs) cCsVxO|jD]D}|j\}}t||ƒt|ƒf|_|j||ƒq WdS(N(RR"tinttadjust_child_layout(RR0toffsetRtcxtcy((s&..\modules\optimizer_trace_renderer.pyRJ†scs8‡fd†‰ˆ||jƒ|j||jddƒS(Ncs2|j|ƒx|jD]}ˆ||ƒqWdS(N(RR(R R0R(tcalc_all(s&..\modules\optimizer_trace_renderer.pyRNs i(R6R%(RR=((RNs&..\modules\optimizer_trace_renderer.pytget_total_sizeŒscsb‡fd†‰ˆ||jƒ|j||j||ƒ|j||jƒ|j||jƒdS(Ncs2|j|ƒx|jD]}ˆ||ƒqWdS(N(RR(R R0R(RN(s&..\modules\optimizer_trace_renderer.pyRN—s (R6R%t do_rendertdo_render_lines(RR R#R$((RNs&..\modules\optimizer_trace_renderer.pyR–s cCs¯|jrc|jr‡|jd}|j||ƒx.|jdD]}|j||ƒ|}q=Wq‡n$x!|jD]}|j||ƒqmWx!|jD]}|j||ƒq‘WdS(Nii(RRtstroke_line_from_nodeRQ(RR R0tprevR((s&..\modules\optimizer_trace_renderer.pyRQ s   cCs5|j|ƒx!|jD]}|j||ƒqWdS(N(RRRP(RR R0R((s&..\modules\optimizer_trace_renderer.pyRP¯s ( R&R'RR%R:RJRORRQRP(((s&..\modules\optimizer_trace_renderer.pyR5Ws    cCst|itd6td6ƒS(Ntfalsettrue(tevalR tTrue(R((s&..\modules\optimizer_trace_renderer.pyt decode_json¶scCsAt|ƒtk s|dkr"dS|}t||||ƒ}|S(Ntdepends_on_map_bits(RY(ttypetdictRR(R R RtoperR0((s&..\modules\optimizer_trace_renderer.pyt process_node»s c Csüt|||ƒ}|sdSxÙ|jƒD]Ë\}}t|ƒtkrut|||ƒ}|rô|jj|ƒqôq)t|ƒtkr)|dkr(d}t |_ xƒ|D]x}t|d|ƒ}|jrê|jd}|jj|ƒn|j ddddƒ||_ |r||_ n|}q©Wn|dkrŒt||||ƒ} |jj| ƒx•|D]%}t| |ƒ}| jj|ƒq`Wqôt|||iƒ} |jj| ƒx@|D]5}t| |d|ƒ}|r¸| jj|ƒq¸q¸Wq)q)W|S( NR+R.igš™™™™™é?gà?ittable_dependenciess item(R]RRRZR[ttree_from_jsonRRtlistRWRRtprevioustnextRR2( R R tjsonR0tkeyR/RRatitemtinterm((s&..\modules\optimizer_trace_renderer.pyR_ÄsF           c Cs†d}t|ƒ}t|ƒ}|jƒt|ƒ}ttjddƒ}t|ƒ}d \} } ttj| |d| |dƒ}t|ƒ}|jdƒ|r·tj |ƒ} nd} | r"| j ƒtj kr"|j ƒt| ƒ} | jtjƒ|j| ƒ|jƒ|jƒn|jdddƒ|jƒ|j|ddƒ|j|ƒ|j|ƒ| |d| |dfS( Ni2i idiôii ii(iôiô(RXR1RR5RtcairotCAIRO_FORMAT_ARGB32Rt set_font_sizetfrom_pngRtstatustCAIRO_STATUS_SUCCESStsaveRt set_extendtCAIRO_EXTEND_REPEATt set_sourcetpainttrestoretset_source_rgbR%Rt write_to_png( t json_texttbackground_imagetpng_fileR RcttreeR%timgR=RBRCtbgimagetpat((s&..\modules\optimizer_trace_renderer.pytrender_json_dataës6      %          t__main__is.png((Rgt cairo_utilsRRRRRRRRR(R*R1R2R5RXR]R_R|R&tsystargvtftopentreadR(((s&..\modules\optimizer_trace_renderer.pyts"  "#_  ' "