ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ ;Pc@ssdZdefdYZdd dYZdZdZdZdZd seed kroend S( s Handling of tree structures given in a special 'dotted' syntax. This represents trees of nodes with strings as tags, in a readable and writable and easy to parse syntax. There are two main functions, unparse_sexpr and parse_string. When parsing, the result is by default given in 'sexpr' format: each node is a tuple of the form (tag, ) or (tag, node) or (tag, node, node) ... The following invariant is intended to hold for every node x, parse_string(unparse_sexpr(x)) == x Currently the following invariant has been tested for some strings: unparse_sexpr(parse_string(s)).strip() == s.strip() [It only holds on stripped results but may be fixed sometime.] tNodecBs)eZdZdZdZdZRS(ttagtchildrentindexcCs||_||_||_dS(N(RRR(tselfRRR((sG/opt/alt/python27/lib64/python2.7/site-packages/guppy/gsl/DottedTree.pyt__init__s  cCs0|jftg|jD]}|j^qS(N(RttupleRtas_sexpr(Rtc((sG/opt/alt/python27/lib64/python2.7/site-packages/guppy/gsl/DottedTree.pyR!scCs#d|jj|j|j|jfS(Ns%s(%r, %r, %r)(t __class__t__name__RRR(R((sG/opt/alt/python27/lib64/python2.7/site-packages/guppy/gsl/DottedTree.pyt__repr__$s  (RRR(R t __module__t __slots__RRR (((sG/opt/alt/python27/lib64/python2.7/site-packages/guppy/gsl/DottedTree.pyRs  t _GLUECLAMP_cBseZdZdZdZdZdZdZeZddZ ddZ dd Z dd Z d Zd Zd ZRS(s_parent.FileIO:IOtnodetdotchart.s\cCs|ft|S(N(R(RRRt lineindex((sG/opt/alt/python27/lib64/python2.7/site-packages/guppy/gsl/DottedTree.pyt node_sexprIscCst|t||S(N(RR(RRRR((sG/opt/alt/python27/lib64/python2.7/site-packages/guppy/gsl/DottedTree.pyt node_nodeTscCs|j|jj||S(N(t parse_stringtIOt read_file(Rtfiletsrc((sG/opt/alt/python27/lib64/python2.7/site-packages/guppy/gsl/DottedTree.pyt parse_fileYscCs|j}|j}g}|} xUy|j\}} Wntk rQd} PnX| j|sq|j| q!Pq!Wx[t|D]M\} } | j||s| j|||r| t||| (R(R=(R=(sba x(R@(R(R(s\(s \(s\.(s tag(RA(s (s a(stype A(sclatex ~\ ..~|begincolorbox|~raw::~LaTeX~\ ~\ ~~~{ extbackslash}{ extbackslash}begin{\{}center{\}}~\(scontains DottedTree ( tguppyR<tgslt DottedTreeRRRR2RRRRKRE(R<tparseR9R7tytzR+((RHRIRJRKsG/opt/alt/python27/lib64/python2.7/site-packages/guppy/gsl/DottedTree.pyttest_1sT                  cCsddlm}|jjj}|j}|j}|d}tdtdtdd dfdtd d d fd }|GHdS(Ni(R<s'line 0 .line 1 ..line 2 line 3 .line 4 sline 0sline 1s line 2 line 3iisline 4 ii(((RLR<RMRNRR3R(R<RIROR9Rtexp((sG/opt/alt/python27/lib64/python2.7/site-packages/guppy/gsl/DottedTree.pyttest_2s   cCs+ddl}ddl}|j|jjS(Ni(tdoctesttguppy.gsl.DottedTreettestmodRMRN(RURL((sG/opt/alt/python27/lib64/python2.7/site-packages/guppy/gsl/DottedTree.pyt test_doctest/scCsttdS(N(RRRT(((sG/opt/alt/python27/lib64/python2.7/site-packages/guppy/gsl/DottedTree.pyt test_main3sit__main__N(( t__doc__tobjectRRRRRTRXRYR (((sG/opt/alt/python27/lib64/python2.7/site-packages/guppy/gsl/DottedTree.pyts Z