§
    ïyIfž)  ã                   óf  — d Z ddlmZ ddlZddlZddlZddlmZ 	 ddlZddlm	Z	 n# e
$ r ddlmZm	Z	 Y nw xY wdZ G d„ d	e¦  «        Z G d
„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Zdd„Zdd„Zd„ Zdd„Zedk    r eej        dd…         ¦  «         dS dS )z— Meager code path measurement tool.
    Ned Batchelder
    http://nedbatchelder.com/blog/200803/python_code_complexity_microtool.html
    MIT License.
é    )Úwith_statementN)Údefaultdict)Úiter_child_nodes)Úastr   z0.7.0c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )Ú
ASTVisitorz'Performs a depth-first walk of the AST.c                 ó"   — d | _         i | _        d S ©N)ÚnodeÚ_cache©Úselfs    ú:/var/www/piapp/venv/lib/python3.11/site-packages/mccabe.pyÚ__init__zASTVisitor.__init__   s   € ØˆŒ	ØˆŒˆˆó    c                 óF   — t          |¦  «        D ]} | j        |g|¢R Ž  Œd S r
   )r   Údispatch)r   r   ÚargsÚchilds       r   ÚdefaultzASTVisitor.default   s@   € Ý% dÑ+Ô+ð 	(ð 	(ˆEØˆDŒM˜%Ð' $Ð'Ð'Ð'Ð'Ð'ð	(ð 	(r   c                 óÆ   — || _         |j        }| j                             |¦  «        }|€/|j        }t          | j        d|z   | j        ¦  «        }|| j        |<    ||g|¢R Ž S )NÚvisit)r   Ú	__class__r   ÚgetÚ__name__ÚgetattrÚvisitorr   )r   r   r   ÚklassÚmethÚ	classNames         r   r   zASTVisitor.dispatch!   sm   € ØˆŒ	Ø”ˆØŒ{�Š˜uÑ%Ô%ˆØˆ<ØœˆIÝ˜4œ<¨°9Ñ)<¸d¼lÑKÔKˆDØ!%ˆDŒK˜ÑØˆt�DÐ ˜4Ð Ð Ð Ð r   c                 óH   — || _         | j        |_         | j        |g|¢R Ž  dS )z&Do preorder walk of tree using visitorN)r   r   r   )r   Útreer   r   s       r   ÚpreorderzASTVisitor.preorder+   s2   € àˆŒØœˆŒØˆŒ�dÐ"˜TÐ"Ð"Ð"Ð"Ð"Ð"r   N)r   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r#   © r   r   r   r      sV   € € € € € Ø1Ð1ðð ð ð(ð (ð (ð!ð !ð !ð#ð #ð #ð #ð #r   r   c                   ó"   — e Zd Zdd„Zd„ Zd„ ZdS )ÚPathNodeÚcirclec                 ó"   — || _         || _        d S r
   )ÚnameÚlook)r   r,   r-   s      r   r   zPathNode.__init__3   s   € ØˆŒ	ØˆŒ	ˆ	ˆ	r   c                 óh   — t          d| j        | j        |                      ¦   «         fz  ¦  «         d S )Nznode [shape=%s,label="%s"] %d;)Úprintr-   r,   Údot_idr   s    r   Úto_dotzPathNode.to_dot7   s>   € ÝÐ.ØŒI�t”y $§+¢+¡-¤-ð21ñ 1ñ 	2ô 	2ð 	2ð 	2ð 	2r   c                 ó    — t          | ¦  «        S r
   )Úidr   s    r   r0   zPathNode.dot_id;   s   € Ý�$‰xŒxˆr   N)r*   )r   r$   r%   r   r1   r0   r'   r   r   r)   r)   2   sF   € € € € € ðð ð ð ð2ð 2ð 2ðð ð ð ð r   r)   c                   ó(   — e Zd Zdd„Zd„ Zd„ Zd„ ZdS )Ú	PathGraphr   c                 óp   — || _         || _        || _        || _        t	          t
          ¦  «        | _        d S r
   )r,   ÚentityÚlinenoÚcolumnr   ÚlistÚnodes)r   r,   r7   r8   r9   s        r   r   zPathGraph.__init__@   s1   € ØˆŒ	ØˆŒØˆŒØˆŒÝ ¥Ñ&Ô&ˆŒ
ˆ
ˆ
r   c                 óZ   — | j         |                              |¦  «         g | j         |<   d S r
   )r;   Úappend)r   Ún1Ún2s      r   ÚconnectzPathGraph.connectG   s+   € ØŒ
�2Œ×Ò˜bÑ!Ô!Ð!àˆŒ
�2‰ˆˆr   c                 ó8  — t          d¦  «         | j        D ]}|                     ¦   «          Œ| j                             ¦   «         D ]C\  }}|D ];}t          |                     ¦   «         ›d|                     ¦   «         ›d�¦  «         Œ<ŒDt          d¦  «         d S )Nz
subgraph {z -- ú;Ú})r/   r;   r1   Úitemsr0   )r   r   ÚnextsÚnexts       r   r1   zPathGraph.to_dotL   s§   € ÝˆlÑÔÐØ”Jð 	ð 	ˆDØ�KŠK‰MŒMˆMˆMØœ:×+Ò+Ñ-Ô-ð 	Dð 	D‰KˆD�%Øð Dð D�Ý T§[¢[¡]¤] ] ]°D·K²K±M´M°M°MÐBÑCÔCÐCÐCðDåˆc‰
Œ
ˆ
ˆ
ˆ
r   c                 óš   — t          d„ | j                             ¦   «         D ¦   «         ¦  «        }t          | j        ¦  «        }||z
  dz   S )zG Return the McCabe complexity for the graph.
            V-E+2
        c                 ó,   — g | ]}t          |¦  «        ‘ŒS r'   )Úlen)Ú.0Úns     r   ú
<listcomp>z(PathGraph.complexity.<locals>.<listcomp>Y   s   € Ð=Ð=Ð= A�˜Q™œÐ=Ð=Ð=r   é   )Úsumr;   ÚvaluesrI   )r   Ú	num_edgesÚ	num_nodess      r   Ú
complexityzPathGraph.complexityU   sK   € õ Ð=Ð=¨¬×):Ò):Ñ)<Ô)<Ð=Ñ=Ô=Ñ>Ô>ˆ	Ý˜œ
‘O”Oˆ	Ø˜9Ñ$ qÑ(Ð(r   N)r   )r   r$   r%   r   r@   r1   rR   r'   r   r   r5   r5   ?   sU   € € € € € ð'ð 'ð 'ð 'ðð ð ð
ð ð ð)ð )ð )ð )ð )r   r5   c                   óŽ   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ ZeZd„ Z	d„ Z
d„ Zˆ fd	„Zd
„ ZexZxZZd„ Zdd„Zd„ Zd„ ZeZd„ ZeZˆ xZS )ÚPathGraphingAstVisitorz\ A visitor for a parsed Abstract Syntax Tree which finds executable
        statements.
    c                 óš   •— t          t          | ¦  «                             ¦   «          d| _        i | _        |                      ¦   «          d S )NÚ )ÚsuperrT   r   Ú	classnameÚgraphsÚreset)r   r   s    €r   r   zPathGraphingAstVisitor.__init__c   s?   ø€ ÝÕ$ dÑ+Ô+×4Ò4Ñ6Ô6Ð6ØˆŒØˆŒØ�
Š
‰Œˆˆˆr   c                 ó"   — d | _         d | _        d S r
   )ÚgraphÚtailr   s    r   rZ   zPathGraphingAstVisitor.reseti   s   € ØˆŒ
ØˆŒ	ˆ	ˆ	r   c                 ó:   — |D ]}|                       |¦  «         Œd S r
   )r   )r   Ú	node_listr   s      r   Údispatch_listz$PathGraphingAstVisitor.dispatch_listm   s0   € Øð 	 ð 	 ˆDØ�MŠM˜$ÑÔÐÐð	 ð 	 r   c                 ó�  — | j         r| j         ›|j        ›�}n|j        }d|j        |j        |fz  }| j        �‹|                      |¦  «        }|| _        |                      |j        ¦  «         t          dd¬¦  «        }| j         
                    | j        |¦  «         | j         
                    ||¦  «         || _        d S t          |||j        |j        ¦  «        | _        t          |¦  «        }|| _        |                      |j        ¦  «         | j        | j        | j         ›|j        ›�<   |                      ¦   «          d S )Nz	%d:%d: %rrV   Úpoint©r-   )rX   r,   r8   Ú
col_offsetr\   ÚappendPathNoder]   r`   Úbodyr)   r@   r5   rY   rZ   )r   r   r7   r,   ÚpathnodeÚbottoms         r   ÚvisitFunctionDefz'PathGraphingAstVisitor.visitFunctionDefq   s0  € àŒ>ð 	Ø#œ~˜~¨t¬y¨yÐ9ˆFˆFà”YˆFà˜dœk¨4¬?¸FÐCÑCˆàŒ:Ð!à×*Ò*¨4Ñ0Ô0ˆHØ ˆDŒIØ×Ò˜tœyÑ)Ô)Ð)Ý˜b wÐ/Ñ/Ô/ˆFØŒJ×Ò˜tœy¨&Ñ1Ô1Ð1ØŒJ×Ò˜x¨Ñ0Ô0Ð0ØˆDŒIˆIˆIå" 4¨°´¸d¼oÑNÔNˆDŒJÝ ‘~”~ˆHØ ˆDŒIØ×Ò˜tœyÑ)Ô)Ð)Ø@DÄ
ˆDŒK $¤. .°$´)°)Ð<Ñ=Ø�JŠJ‰LŒLˆLˆLˆLr   c                 ó†   — | j         }| xj         |j        dz   z  c_         |                      |j        ¦  «         || _         d S )Nú.)rX   r,   r`   rf   )r   r   Úold_classnames      r   ÚvisitClassDefz$PathGraphingAstVisitor.visitClassDef�   s@   € ØœˆØˆŒ˜$œ) c™/Ñ)ˆŒØ×Ò˜4œ9Ñ%Ô%Ð%Ø&ˆŒˆˆr   c                 ó„   — | j         sd S t          |¦  «        }| j                             | j         |¦  «         || _         |S r
   )r]   r)   r\   r@   )r   r,   rg   s      r   re   z%PathGraphingAstVisitor.appendPathNode“   sB   € ØŒyð 	ØˆFÝ˜D‘>”>ˆØŒ
×Ò˜4œ9 hÑ/Ô/Ð/ØˆŒ	Øˆr   c                 ó\   — |j         €d}n|j         }d|z  }|                      |¦  «         d S )Nr   zStmt %d)r8   re   )r   r   r8   r,   s       r   ÚvisitSimpleStatementz+PathGraphingAstVisitor.visitSimpleStatement›   s<   € ØŒ;ÐØˆFˆFà”[ˆFØ˜6Ñ!ˆØ×Ò˜DÑ!Ô!Ð!Ð!Ð!r   c                 ó¬   •— t          |t          j        ¦  «        r|                      |¦  «         d S  t	          t
          | ¦  «        j        |g|¢R Ž  d S r
   )Ú
isinstancer   Ústmtrp   rW   rT   r   )r   r   r   r   s      €r   r   zPathGraphingAstVisitor.default£   s^   ø€ Ý�d�CœHÑ%Ô%ð 	EØ×%Ò% dÑ+Ô+Ð+Ð+Ð+à7�EÕ(¨$Ñ/Ô/Ô7¸ÐD¸tÐDÐDÐDÐDÐDÐDr   c                 óF   — d|j         z  }|                      ||¦  «         d S )NzLoop %d©r8   Ú	_subgraph©r   r   r,   s      r   Ú	visitLoopz PathGraphingAstVisitor.visitLoop©   s(   € Ø˜4œ;Ñ&ˆØ�Š�t˜TÑ"Ô"Ð"Ð"Ð"r   c                 óF   — d|j         z  }|                      ||¦  «         d S )NzIf %dru   rw   s      r   ÚvisitIfzPathGraphingAstVisitor.visitIf¯   s(   € Ø˜œÑ$ˆØ�Š�t˜TÑ"Ô"Ð"Ð"Ð"r   r'   c                 óV  — | j         €ut          |||j        |j        ¦  «        | _         t	          |¦  «        }|                      |||¦  «         | j         | j        | j        ›|›�<   |                      ¦   «          dS |  	                    |¦  «        }|                      |||¦  «         dS )z?create the subgraphs representing any `if` and `for` statementsN)
r\   r5   r8   rd   r)   Ú_subgraph_parserY   rX   rZ   re   )r   r   r,   Úextra_blocksrg   s        r   rv   z PathGraphingAstVisitor._subgraph³   s¡   € àŒ:Ðå" 4¨¨t¬{¸D¼OÑLÔLˆDŒJÝ ‘~”~ˆHØ× Ò   x°Ñ>Ô>Ð>Ø;?¼:ˆDŒK $¤. .°$°$Ð7Ñ8Ø�JŠJ‰LŒLˆLˆLˆLà×*Ò*¨4Ñ0Ô0ˆHØ× Ò   x°Ñ>Ô>Ð>Ð>Ð>r   c                 ó(  — g }|| _         |                      |j        ¦  «         |                     | j         ¦  «         |D ]=}|| _         |                      |j        ¦  «         |                     | j         ¦  «         Œ>|j        r<|| _         |                      |j        ¦  «         |                     | j         ¦  «         n|                     |¦  «         |r:t          dd¬¦  «        }|D ]}| j                             ||¦  «         Œ|| _         dS dS )z@parse the body and any `else` block of `if` and `for` statementsrV   rb   rc   N)r]   r`   rf   r=   Úorelser)   r\   r@   )r   r   rg   r}   Ú
loose_endsÚextrarh   Úles           r   r|   z&PathGraphingAstVisitor._subgraph_parseÀ   s,  € àˆ
ØˆŒ	Ø×Ò˜4œ9Ñ%Ô%Ð%Ø×Ò˜$œ)Ñ$Ô$Ð$Ø!ð 	)ð 	)ˆEØ ˆDŒIØ×Ò˜uœzÑ*Ô*Ð*Ø×Ò˜dœiÑ(Ô(Ð(Ð(ØŒ;ð 	(Ø ˆDŒIØ×Ò˜tœ{Ñ+Ô+Ð+Ø×Ò˜dœiÑ(Ô(Ð(Ð(à×Ò˜hÑ'Ô'Ð'Øð 	Ý˜b wÐ/Ñ/Ô/ˆFØ ð /ð /�Ø”
×"Ò" 2 vÑ.Ô.Ð.Ð.ØˆDŒIˆIˆIð		ð 	r   c                 óT   — d|j         z  }|                      |||j        ¬¦  «         d S )NzTryExcept %d)r}   )r8   rv   Úhandlersrw   s      r   ÚvisitTryExceptz%PathGraphingAstVisitor.visitTryExceptÖ   s.   € Ø ¤Ñ+ˆØ�Š�t˜T°´ˆÑ>Ô>Ð>Ð>Ð>r   c                 óx   — d|j         z  }|                      |¦  «         |                      |j        ¦  «         d S )NzWith %d)r8   re   r`   rf   rw   s      r   Ú	visitWithz PathGraphingAstVisitor.visitWithÜ   s>   € Ø˜4œ;Ñ&ˆØ×Ò˜DÑ!Ô!Ð!Ø×Ò˜4œ9Ñ%Ô%Ð%Ð%Ð%r   )r'   )r   r$   r%   r&   r   rZ   r`   ri   ÚvisitAsyncFunctionDefrm   re   rp   r   rx   ÚvisitAsyncForÚvisitForÚ
visitWhilerz   rv   r|   r…   ÚvisitTryr‡   ÚvisitAsyncWithÚ__classcell__)r   s   @r   rT   rT   ^   s4  ø€ € € € € ðð ðð ð ð ð ðð ð ð ð  ð  ðð ð ð4 -Ðð'ð 'ð 'ðð ð ð"ð "ð "ðEð Eð Eð Eð Eð#ð #ð #ð -6Ð5€MÐ5�H˜zð#ð #ð #ð?ð ?ð ?ð ?ðð ð ð,?ð ?ð ?ð €Hð&ð &ð &ð
 €N€N€N€N€Nr   rT   c                   ó^   — e Zd ZdZdZeZdZdZdZ	d„ Z
ed„ ¦   «         Zed„ ¦   «         Zd	„ Zd
S )ÚMcCabeCheckerz%McCabe cyclomatic complexity checker.ÚmccabeÚC901zC901 %r is too complex (%d)éÿÿÿÿc                 ó   — || _         d S r
   )r"   )r   r"   Úfilenames      r   r   zMcCabeChecker.__init__ì   s   € ØˆŒ	ˆ	ˆ	r   c                 ó
  — d}ddt           dddœ}t          |dd ¦  «        }t          |t          ¦  «        r?|                     d¦  «          |j        |fi |¤Ž |j                             d	¦  «         d S  |j        |fi |¤Ž d S )
Nz--max-complexityr“   ÚstorezMcCabe complexity thresholdÚTrue)r   ÚactionÚtypeÚhelpÚparse_from_configÚconfig_optionsrœ   zmax-complexity)Úintr   rr   r:   ÚpopÚ
add_optionr�   r=   )ÚclsÚparserÚflagÚkwargsÚconfig_optss        r   Úadd_optionszMcCabeChecker.add_optionsï   sµ   € à!ˆàØÝØ1Ø!'ð
ð 
ˆõ ˜fÐ&6¸Ñ=Ô=ˆÝ�k¥4Ñ(Ô(ð 	.à�JŠJÐ*Ñ+Ô+Ð+ØˆFÔ˜dÐ-Ð- fÐ-Ð-Ð-ØÔ!×(Ò(Ð)9Ñ:Ô:Ð:Ð:Ð:àˆFÔ˜dÐ-Ð- fÐ-Ð-Ð-Ð-Ð-r   c                 ó8   — t          |j        ¦  «        | _        d S r
   )rž   Úmax_complexity)r¡   Úoptionss     r   Úparse_optionszMcCabeChecker.parse_options  s   € å  Ô!7Ñ8Ô8ˆÔÐÐr   c              #   ól  K  — | j         dk     rd S t          ¦   «         }|                     | j        |¦  «         |j                             ¦   «         D ]a}|                     ¦   «         | j         k    rB| j        |j        |                     ¦   «         fz  }|j	        |j
        |t          | ¦  «        fV — Œbd S )Nr   )r¨   rT   r#   r"   rY   rO   rR   Ú_error_tmplr7   r8   r9   rš   )r   r   r\   Útexts       r   ÚrunzMcCabeChecker.run  sÁ   è è € ØÔ Ò"Ð"ØˆFÝ(Ñ*Ô*ˆØ×Ò˜œ GÑ,Ô,Ð,Ø”^×*Ò*Ñ,Ô,ð 	Cð 	CˆEØ×ÒÑ!Ô! DÔ$7Ò7Ð7ØÔ'¨5¬<¸×9IÒ9IÑ9KÔ9KÐ*LÑL�Ø”l E¤L°$½¸T¹
¼
ÐBÐBÐBÐBøð	Cð 	Cr   N)r   r$   r%   r&   r,   Ú__version__ÚversionÚ_coder¬   r¨   r   Úclassmethodr¦   rª   r®   r'   r   r   r�   r�   ä   sŒ   € € € € € Ø/Ð/Ø€DØ€GØ€EØ/€KØ€Nðð ð ð ð.ð .ñ „[ð.ð$ ð9ð 9ñ „[ð9ðCð Cð Cð Cð Cr   r�   é   Ústdinc                 ó  — 	 t          | |dt          j        ¦  «        }nP# t          $ rC t	          j        ¦   «         d         }t          j                             d|›d|›d�¦  «         Y dS w xY wg }|t          _	        t          ||¦  «         
                    ¦   «         D ]"\  }}}}	|                     d|||fz  ¦  «         Œ#t          |¦  «        dk    rdS t          d                     |¦  «        ¦  «         t          |¦  «        S )NÚexecé   zUnable to parse z: ú
r   z%s:%d:1: %s)Úcompiler   ÚPyCF_ONLY_ASTÚSyntaxErrorÚsysÚexc_infoÚstderrÚwriter�   r¨   r®   r=   rI   r/   Újoin)
ÚcodeÚ	thresholdr•   r"   ÚeÚcomplxr8   Úoffsetr­   Úchecks
             r   Úget_code_complexityrÇ     s  € ðÝ�t˜X v­sÔ/@ÑAÔAˆˆøÝð ð ð ÝŒL‰NŒN˜1ÔˆÝŒ
×ÒÐ°x°x°xÀÀÀÐCÑDÔDÐDØˆqˆqðøøøð
 €FØ#,…MÔ Ý'4°T¸8Ñ'DÔ'D×'HÒ'HÑ'JÔ'Jð @ð @Ñ#ˆ�˜˜eØ�Š�m x°¸Ð&>Ñ>Ñ?Ô?Ð?Ð?å
ˆ6�{„{�aÒÐØˆqÝ	ˆ$�)Š)�FÑ
Ô
ÑÔÐÝˆv‰;Œ;Ðs   ‚ ŸA	A,Á+A,c                 óD   — t          | ¦  «        }t          ||| ¬¦  «        S )z"Returns the complexity of a module)r•   )Ú_readrÇ   )Úmodule_pathrÂ   rÁ   s      r   Úget_module_complexityrË   $  s$   € å�ÑÔ€DÝ˜t Y¸ÐEÑEÔEÐEr   c                 ó²  — dt           j        cxk     rdk     rAn n>t          | d¦  «        5 }|                     ¦   «         cd d d ¦  «         S # 1 swxY w Y   d S dt           j        cxk    rdk     rçn d S 	 	 t          | d¦  «        5 }t	          j        |j        ¦  «        \  }}d d d ¦  «         n# 1 swxY w Y   n\# t          t          t          f$ rB t          | d¬¦  «        5 }|                     ¦   «         cd d d ¦  «         cY S # 1 swxY w Y   Y nw xY wt          | d|¬¦  «        5 }|                     ¦   «         cd d d ¦  «         S # 1 swxY w Y   d S d S )	N)rM   é   )é   r   ÚrU)é   r   Úrbzlatin-1)ÚencodingÚr)
r¼   Úversion_infoÚopenÚreadÚtokenizeÚdetect_encodingÚreadlineÚLookupErrorr»   ÚUnicodeError)r•   ÚfrÒ   Ú_s       r   rÉ   rÉ   *  s’  € Ø•Ô Ð)Ð)Ò)Ð) 6Ò)Ð)Ð)Ð)Ð)Ý�(˜DÑ!Ô!ð 	 QØ—6’6‘8”8ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	à	•3Ô#Ð	,Ð	,Ò	,Ð	, fÒ	,Ð	,Ð	,Ð	,Ð	,Ð	,Ø#ð	 Ý�h Ñ%Ô%ð E¨Ý (Ô 8¸¼Ñ DÔ D‘�˜1ðEð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð Eøøå�[­,Ð7ð 	 ð 	 ð 	 å�h¨Ð3Ñ3Ô3ð  °qØ—v’v‘x”xð ð  ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð  ð  ð	 øøøõ �(˜C¨(Ð3Ñ3Ô3ð 	°qØ—6’6‘8”8ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 
-Ð	,s}   «AÁAÁAÁ6B; ÂB/Â#B; Â/B3Â3B; Â6B3Â7B; Â;(DÃ#DÃ7DÄD
	Ä
DÄD
	ÄDÄDÄ)E
Å
EÅEc                 ó^  — | €t           j        dd …         } t          j        ¦   «         }|                     ddddd¬¦  «         |                     dd	d
ddd¬¦  «         |                     | ¦  «        \  }}t          |d         ¦  «        }t          ||d         dt          j	        ¦  «        }t          ¦   «         }|                     ||¦  «         |j        rtt          d¦  «         |j                             ¦   «         D ]:}|j        r|                     ¦   «         |j        k    r|                     ¦   «          Œ;t          d¦  «         d S |j                             ¦   «         D ]F}|                     ¦   «         |j        k    r't          |j        |                     ¦   «         ¦  «         ŒGd S )Nr·   z-dz--dotÚdotzoutput a graphviz dot fileÚ
store_true)Údestr›   r™   z-mz--minrÂ   zminimum complexity for outputrž   )rá   r›   rš   r   r   r¶   zgraph {rC   )r¼   ÚargvÚoptparseÚOptionParserr    Ú
parse_argsrÉ   r¹   r   rº   rT   r#   rß   r/   rY   rO   rÂ   rR   r1   r,   )râ   Úoparr©   r   rÁ   r"   r   r\   s           r   Úmainrç   ;  s®  € Ø€|ÝŒx˜˜˜Œ|ˆÝÔ Ñ"Ô"€DØ‡O‚O�D˜'¨Ø5¸lð ñ Lô Lð Là‡O‚O�D˜'¨Ø8¸uØð ñ ô ð ð —O’O DÑ)Ô)�M€GˆTå��a”‰>Œ>€DÝ�4˜˜aœ &­#Ô*;Ñ<Ô<€DÝ$Ñ&Ô&€GØ×Ò�T˜7Ñ#Ô#Ð#à„{ð 
6ÝˆiÑÔÐØ”^×*Ò*Ñ,Ô,ð 	ð 	ˆEØÔ%ð Ø×$Ò$Ñ&Ô&¨'Ô*;Ò;Ð;Ø—’‘”�øÝˆc‰
Œ
ˆ
ˆ
ˆ
à”^×*Ò*Ñ,Ô,ð 	6ð 	6ˆEØ×ÒÑ!Ô! WÔ%6Ò6Ð6Ý�e”j %×"2Ò"2Ñ"4Ô"4Ñ5Ô5Ð5øð	6ð 	6r   Ú__main__r·   )r³   r´   )r³   r
   )r&   Ú
__future__r   rã   r¼   r×   Úcollectionsr   r   r   ÚImportErrorÚflake8.utilr¯   Úobjectr   r)   r5   rT   r�   rÇ   rË   rÉ   rç   r   râ   r'   r   r   ú<module>rî      s  ððð ð
 &Ð %Ð %Ð %Ð %Ð %à €€€Ø 
€
€
€
Ø €€€à #Ð #Ð #Ð #Ð #Ð #ð2Ø€J€J€JØ$Ð$Ð$Ð$Ð$Ð$Ð$øØð 2ð 2ð 2Ø1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ð2øøøð €ð#ð #ð #ð #ð #�ñ #ô #ð #ð8
ð 
ð 
ð 
ð 
ˆvñ 
ô 
ð 
ð)ð )ð )ð )ð )�ñ )ô )ð )ð>Cð Cð Cð Cð C˜Zñ Cô Cð CðL*Cð *Cð *Cð *Cð *C�Fñ *Cô *Cð *CðZð ð ð ð&Fð Fð Fð Fðð ð ð"6ð 6ð 6ð 6ð< ˆzÒÐØ€DˆŒ�!�"�"ŒÑÔÐÐÐð Ðs   œ
' §7¶7