§
    öyIf2[  ã                  óœ  — U d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
Z
ddl
mZ ddlmZ dd	lmZmZ dd
lmZ e	rddlmZ ddddddddddddœZded<    ej        d¦  «        Z eddh¦  «        ZdZdZdZd Z eg d!‘d"‘d#‘d$‘d%‘d&‘d'‘d(‘d)‘d*‘d+‘d,‘d-‘d.‘d/‘d0‘d1‘d2‘d3‘d4‘d5‘d6‘d7‘d8‘d9‘d:‘d;‘d<‘d=‘d>‘d?‘d@‘dA‘dB‘dC‘dD‘dE‘dF‘dG‘dH‘dI‘dJ‘dK‘dL‘dM‘dN‘dO‘dP‘dQ‘dR‘dS‘dT‘dU‘dV‘dW‘dX‘dY‘dZ‘d[‘d\‘d]‘d^‘d_‘d`‘da‘db‘dc‘dd‘de‘df‘dg‘dh‘di‘dj‘dk‘e‘e‘e‘R ¦  «        Zdƒdp„Z d„dt„Z!d…dv„Z"d†dz„Z#d‡d|„Z$ G d}„ d~e¦  «        Z%dˆd‚„Z&dS )‰zCheck for signs of poor design.é    )ÚannotationsN)Údefaultdict)ÚIterator)ÚTYPE_CHECKING)Únodes)ÚBaseChecker)Úis_enumÚonly_required_for_messages)ÚMessageDefinitionTuple)ÚPyLinter)zToo many ancestors (%s/%s)útoo-many-ancestorsznUsed when class has too many parent classes, try to reduce this to get a simpler (and so easier to use) class.)z$Too many instance attributes (%s/%s)útoo-many-instance-attributeszsUsed when class has too many instance attributes, try to reduce this to get a simpler (and so easier to use) class.)zToo few public methods (%s/%s)útoo-few-public-methodszLUsed when class has too few public methods, so be sure it's really worth it.)zToo many public methods (%s/%s)útoo-many-public-methodsznUsed when class has too many public methods, try to reduce this to get a simpler (and so easier to use) class.)z"Too many return statements (%s/%s)útoo-many-return-statementszWUsed when a function or method has too many return statement, making it hard to follow.)zToo many branches (%s/%s)útoo-many-brancheszOUsed when a function or method has too many branches, making it hard to follow.)zToo many arguments (%s/%s)útoo-many-argumentsz8Used when a function or method takes too many arguments.)z Too many local variables (%s/%s)útoo-many-localsz<Used when a function or method has too many local variables.)zToo many statements (%s/%s)útoo-many-statementszpUsed when a function or method has too many statements. You should then split it in smaller functions / methods.)z4Too many boolean expressions in if statement (%s/%s)útoo-many-boolean-expressionsz@Used when an if statement contains too many boolean expressions.)z1Too many positional arguments in a function call.ztoo-many-positionalz²Will be implemented in https://github.com/pylint-dev/pylint/issues/9099,msgid/symbol pair reserved for compatibility with ruff, see https://github.com/astral-sh/ruff/issues/8946.)ÚR0901ÚR0902ÚR0903ÚR0904ÚR0911ÚR0912ÚR0913ÚR0914ÚR0915ÚR0916ÚR0917z!dict[str, MessageDefinitionTuple]ÚMSGSz^_{2}[a-z]+_{2}$Ú	dataclassÚattrsÚdataclassesztyping.NamedTupleztyping.TypedDictztyping_extensions.TypedDictzbuiltins.objectzbuiltins.tuplezbuiltins.dictzbuiltins.listzbuiltins.setzbulitins.frozensetzcollections.ChainMapzcollections.Counterzcollections.OrderedDictzcollections.UserDictzcollections.UserListzcollections.UserStringzcollections.defaultdictzcollections.dequezcollections.namedtuplez_collections_abc.Awaitablez_collections_abc.Coroutinez_collections_abc.AsyncIterablez_collections_abc.AsyncIteratorz_collections_abc.AsyncGeneratorz_collections_abc.Hashablez_collections_abc.Iterablez_collections_abc.Iteratorz_collections_abc.Generatorz_collections_abc.Reversiblez_collections_abc.Sizedz_collections_abc.Containerz_collections_abc.Collectionz_collections_abc.Setz_collections_abc.MutableSetz_collections_abc.Mappingz_collections_abc.MutableMappingz_collections_abc.MappingViewz_collections_abc.KeysViewz_collections_abc.ItemsViewz_collections_abc.ValuesViewz_collections_abc.Sequencez _collections_abc.MutableSequencez_collections_abc.ByteStringztyping.Tupleztyping.Listztyping.Dictz
typing.Setztyping.FrozenSetztyping.Dequeztyping.DefaultDictztyping.OrderedDictztyping.Counterztyping.ChainMapztyping.Awaitableztyping.Coroutineztyping.AsyncIterableztyping.AsyncIteratorztyping.AsyncGeneratorztyping.Iterableztyping.Iteratorztyping.Generatorztyping.Reversibleztyping.Containerztyping.Collectionztyping.AbstractSetztyping.MutableSetztyping.Mappingztyping.MutableMappingztyping.Sequenceztyping.MutableSequenceztyping.ByteStringztyping.MappingViewztyping.KeysViewztyping.ItemsViewztyping.ValuesViewztyping.ContextManagerztyping.AsyncContextManagerztyping.Hashableztyping.SizedÚnodeúastroid.ClassDefÚreturnÚboolc                ój  — |                       ¦   «         D ]?}t          |¦  «        r dS |                     ¦   «         t          t          t
          fv r dS Œ@| j        sdS t          |                      ¦   «         j	        ¦  «        }| j        j
        D ]¢}t          |t          j        ¦  «        r|j        }t          |t          j        t          j        f¦  «        sŒJt          |t          j        ¦  «        r|j        }n|j        }|t&          v r&|                     t&          ¦  «        s	t*          |v r dS Œ£dS )z7Check if a class is exempt from too-few-public-methods.TF)Ú	ancestorsr	   ÚqnameÚTYPING_NAMEDTUPLEÚTYPING_TYPEDDICTÚTYPING_EXTENSIONS_TYPEDDICTÚ
decoratorsÚsetÚrootÚlocalsr   Ú
isinstanceÚastroidÚCallÚfuncÚNameÚ	AttributeÚnameÚattrnameÚDATACLASSES_DECORATORSÚintersectionÚDATACLASS_IMPORT)r&   ÚancestorÚroot_localsÚ	decoratorr:   s        úS/var/www/piapp/venv/lib/python3.11/site-packages/pylint/checkers/design_analysis.pyÚ_is_exempt_from_public_methodsrC   ¸   s>  € ð —N’NÑ$Ô$ð ð ˆÝ�8ÑÔð 	Ø�4�4Ø�>Š>ÑÔÝÝÝ'ð 
ð 
ð 
ð
 �4�4ð
ð Œ?ð Øˆuå�d—i’i‘k”kÔ(Ñ)Ô)€KØ”_Ô*ð ð ˆ	Ý�i¥¤Ñ.Ô.ð 	'Ø!œˆIÝ˜)¥g¤lµGÔ4EÐ%FÑGÔGð 	ØÝ�i¥¤Ñ.Ô.ð 	&Ø”>ˆDˆDàÔ%ˆDØÕ)Ð)Ð)Ø×$Ò$Õ%;Ñ<Ô<ð *å ;Ð.Ð.à�4�4øØˆ5ó    Úbool_opúnodes.BoolOpÚintc                óœ   — d}|                       ¦   «         D ]4}t          |t          j        ¦  «        r|t	          |¦  «        z  }Œ/|dz  }Œ5|S )z’Counts the number of boolean expressions in BoolOp `bool_op` (recursive).

    example: a and (b or c or (d and e)) ==> 5 boolean expressions
    r   é   )Úget_childrenr4   r5   ÚBoolOpÚ_count_boolean_expressions)rE   Únb_bool_exprÚ	bool_exprs      rB   rL   rL   Ü   s_   € ð
 €LØ×)Ò)Ñ+Ô+ð ð ˆ	Ý�i¥¤Ñ0Ô0ð 	ØÕ6°yÑAÔAÑAˆLˆLà˜AÑˆLˆLØÐrD   únodes.ClassDefc                óè   — t          d„ |                      ¦   «         D ¦   «         ¦  «        }|                      ¦   «         D ]1}t                               |j        ¦  «        r|j        dk    r|dz  }Œ2|S )Nc              3  óN   K  — | ] }|j                              d ¦  «        °dV — Œ!dS ©Ú_rI   N©r:   Ú
startswith©Ú.0Úmethods     rB   ú	<genexpr>z*_count_methods_in_class.<locals>.<genexpr>ë   s8   è è € ÐXÐX˜F¸F¼K×<RÒ<RÐSVÑ<WÔ<WÐX�aÐXÐXÐXÐXÐXÐXrD   Ú__init__rI   )ÚsumÚmethodsÚ	mymethodsÚSPECIAL_OBJÚsearchr:   )r&   Úall_methodsrX   s      rB   Ú_count_methods_in_classra   ê   sv   € ÝÐXÐX d§l¢l¡n¤nÐXÑXÔXÑXÔX€Kð —.’.Ñ"Ô"ð ð ˆÝ×Ò˜fœkÑ*Ô*ð 	¨v¬{¸jÒ/HÐ/HØ˜1ÑˆKøØÐrD   Úignored_parentsúfrozenset[str]úIterator[nodes.ClassDef]c              #  óZ  K  — t          ¦   «         }t          |                      d¬¦  «        ¦  «        }|ru|                     ¦   «         }|                     ¦   «         |v rŒ-||vrB|V — |                     |¦  «         |                     |                     d¬¦  «        ¦  «         |°sdS dS )a…  Get parents of ``node``, excluding ancestors of ``ignored_parents``.

    If we have the following inheritance diagram:

             F
            /
        D  E
         \/
          B  C
           \/
            A      # class A(B, C): ...

    And ``ignored_parents`` is ``{"E"}``, then this function will return
    ``{A, B, C, D}`` -- both ``E`` and its ancestors are excluded.
    F)ÚrecursN)r1   Úlistr+   Úpopr,   ÚaddÚextend)r&   rb   ÚparentsÚ
to_exploreÚparents        rB   Ú_get_parents_iterrn   ô   sÄ   è è € õ$ $'¡5¤5€GÝ�d—n’n¨E�nÑ2Ô2Ñ3Ô3€JØ
ð >Ø—’Ñ!Ô!ˆØ�<Š<‰>Œ>˜_Ð,Ð,ØØ˜Ð Ð ð ˆLˆLˆLØ�KŠK˜ÑÔÐØ×Ò˜f×.Ò.°eÐ.Ñ<Ô<Ñ=Ô=Ð=ð ð >ð >ð >ð >ð >rD   úset[nodes.ClassDef]c                ó<   — t          t          | |¦  «        ¦  «        S ©N)r1   rn   )r&   rb   s     rB   Ú_get_parentsrr     s   € õ Õ   Ñ7Ô7Ñ8Ô8Ð8rD   c                  ó,  ‡ — e Zd ZdZdZeZddddddœfd	d
ddddœfddddddœfddddddœfddddddœfddddddœfddddddœfddddddœfd d!ddd"dœfd#d$ddd%dœfd&dddd'dœfd(g d)d*d+dœffZdUˆ fd0„ZdVd1„Z	dWd3„Z
 ed4d5d6d7¦  «        dXd:„¦   «         Z ed6d7¦  «        dXd;„¦   «         Z ed<d=d>d?d@dA¦  «        dYdC„¦   «         ZeZ ed<d=d>d?d@¦  «        dYdD„¦   «         ZeZdZdG„Zd[dI„Zd\dK„Z edLd=¦  «        d]dN„¦   «         Zd]dO„Zd^dQ„ZeZd_d`dT„Zˆ xZS )aÚMisdesignCheckerz²Checker of potential misdesigns.

    Checks for sign of poor/misdesign:
    * number of methods, attributes, local variables...
    * size, complexity of functions, methods
    Údesignzmax-argsé   rG   z<int>z2Maximum number of arguments for function / method.)ÚdefaultÚtypeÚmetavarÚhelpz
max-localsé   z4Maximum number of locals for function / method body.zmax-returnsé   z<Maximum number of return / yield for function / method body.zmax-branchesé   z4Maximum number of branch for function / method body.zmax-statementsé2   z7Maximum number of statements in function / method body.zmax-parentsé   z<num>z2Maximum number of parents for a class (see R0901).zignored-parents© Úcsvz%<comma separated list of class names>zOList of qualified class names to ignore when counting class parents (see R0901)zmax-attributesz5Maximum number of attributes for a class (see R0902).zmin-public-methodsé   z9Minimum number of public methods for a class (see R0903).zmax-public-methodsé   z9Maximum number of public methods for a class (see R0904).zmax-bool-exprzEMaximum number of boolean expressions in an if statement (see R0916).zexclude-too-few-public-methodsÚ
regexp_csvz<pattern>[,<pattern>...]zfList of regular expressions of class ancestor names to ignore when counting public methods (see R0903)Úlinterr   r(   ÚNonec                óV   •— t          ¦   «                              |¦  «         |  |  |  d S rq   )ÚsuperrZ   )Úselfr…   Ú	__class__s     €rB   rZ   zMisdesignChecker.__init__   s3   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØÐ ØÐ@ØÐÐÐrD   c                ó¼   — | j         j                             ¦   «          g | _        t	          t
          ¦  «        | _        g | _        | j         j        j	        | _
        dS )zInitialize visit variables.N)r…   ÚstatsÚreset_node_countÚ_returnsr   rG   Ú	_branchesÚ_stmtsÚconfigÚexclude_too_few_public_methodsÚ_exclude_too_few_public_methods)r‰   s    rB   ÚopenzMisdesignChecker.open¦  sO   € àŒÔ×*Ò*Ñ,Ô,Ð,ØˆŒÝ$¥SÑ)Ô)ˆŒØˆŒàŒKÔÔ=ð 	Ô,Ð,Ð,rD   Úamountc                ód   — t          | j        ¦  «        D ]\  }}| j        |xx         |z  cc<   Œd S rq   )Ú	enumerater�   )r‰   r•   ÚirS   s       rB   Ú_inc_all_stmtszMisdesignChecker._inc_all_stmts°  sC   € Ý˜dœkÑ*Ô*ð 	%ð 	%‰DˆAˆqØŒK˜ˆNˆNŒN˜fÑ$ˆNˆN‰NˆNð	%ð 	%rD   r   r   r   r   r&   rO   c                ó6  ‡— t          |t                               | j        j        j        ¦  «        ¦  «        }t          |¦  «        }|| j        j        j        k    r)|                      d||| j        j        j        f¬¦  «         | 	                    ¦   «         Šˆfd„|j
                             ¦   «         D ¦   «         }t          |¦  «        | j        j        j        k    r8|                      d|t          |¦  «        | j        j        j        f¬¦  «         dS dS )zFCheck size of inheritance hierarchy and number of instance attributes.r   ©r&   Úargsc                óR   •— g | ]#\  }}|d                                ¦   «         ‰u ¯!|‘Œ$S )r   )r2   )rW   ÚkÚvr2   s      €rB   ú
<listcomp>z3MisdesignChecker.visit_classdef.<locals>.<listcomp>Î  s:   ø€ ð 
ð 
ð 
Ù�1�a¸1¸Q¼4¿9º9¹;¼;È$Ð;NÐ;NˆAÐ;NÐ;NÐ;NrD   r   N)rr   ÚSTDLIB_CLASSES_IGNORE_ANCESTORÚunionr…   r‘   rb   ÚlenÚmax_parentsÚadd_messager2   Úinstance_attrsÚitemsÚmax_attributes)r‰   r&   rk   Ú
nb_parentsÚfiltered_attrsr2   s        @rB   Úvisit_classdefzMisdesignChecker.visit_classdef´  s4  ø€ õ ØÝ*×0Ò0°´Ô1CÔ1SÑTÔTñ
ô 
ˆõ ˜‘\”\ˆ
Ø˜œÔ*Ô6Ò6Ð6Ø×ÒØ$ØØ  $¤+Ô"4Ô"@ÐAð ñ ô ð ð �yŠy‰{Œ{ˆð
ð 
ð 
ð 
Ø Ô/×5Ò5Ñ7Ô7ð
ñ 
ô 
ˆõ ˆ~ÑÔ ¤Ô!3Ô!BÒBÐBØ×ÒØ.ØÝ˜.Ñ)Ô)¨4¬;Ô+=Ô+LÐMð ñ ô ð ð ð ð CÐBrD   c                óH  ‡— t          d„ |                     ¦   «         D ¦   «         ¦  «        }|| j        j        j        k    r)|                      d||| j        j        j        f¬¦  «         |j        dk    rA| j        r:|                     ¦   «         D ]%Št          ˆfd„| j        D ¦   «         ¦  «        r dS Œ&|j        dk    st          |¦  «        rdS t          |¦  «        }|| j        j        j        k     r+|                      d||| j        j        j        f¬¦  «         dS dS )zCheck number of public methods.c              3  óN   K  — | ] }|j                              d ¦  «        °dV — Œ!dS rR   rT   rV   s     rB   rY   z2MisdesignChecker.leave_classdef.<locals>.<genexpr>Û  sK   è è € ð 
ð 
Ø°F´K×4JÒ4JÈ3Ñ4OÔ4Oð
Øð
ð 
ð 
ð 
ð 
ð 
rD   r   r›   Úclassc              3  óf   •K  — | ]+}|                      ‰                     ¦   «         ¦  «        V — Œ,d S rq   )Úmatchr,   )rW   Úpatternr?   s     €rB   rY   z2MisdesignChecker.leave_classdef.<locals>.<genexpr>ð  sM   øè è € ð ð àð —M’M (§.¢.Ñ"2Ô"2Ñ3Ô3ðð ð ð ð ð rD   Nr   )r[   r]   r…   r‘   Úmax_public_methodsr¥   rx   r“   r+   ÚanyrC   ra   Úmin_public_methods)r‰   r&   Ú
my_methodsr`   r?   s       @rB   Úleave_classdefzMisdesignChecker.leave_classdefØ  s„  ø€ õ ð 
ð 
Ø ŸNšNÑ,Ô,ð
ñ 
ô 
ñ 
ô 
ˆ
ð ˜œÔ*Ô=Ò=Ð=Ø×ÒØ)ØØ  $¤+Ô"4Ô"GÐHð ñ ô ð ð Œ9˜ÒÐ DÔ$HÐØ ŸNšNÑ,Ô,ð ð �Ýð ð ð ð à#'Ô#Gðñ ô ñ ô ð ð �F�Fð	ð Œ9˜ÒÐÕ#AÀ$Ñ#GÔ#GÐØˆFõ
 .¨dÑ3Ô3ˆØ˜œÔ+Ô>Ò>Ð>Ø×ÒØ(ØØ! 4¤;Ô#5Ô#HÐIð ñ ô ð ð ð ð ?Ð>rD   r   r   r   r   r   zkeyword-arg-before-varargúnodes.FunctionDefc                ó¦  ‡— | j                              d¦  «         |j        j        |j        j        z   |j        j        z   }| j        j        j        Š|�}d}‰rt          ˆfd„|D ¦   «         ¦  «        }t          |¦  «        |z
  }|| j        j        j
        k    r6|                      d|t          |¦  «        | j        j        j
        f¬¦  «         nd}t          |j        ¦  «        |z
  }d|j        v r|dz  }|| j        j        j        k    r)|                      d||| j        j        j        f¬¦  «         | j                             d¦  «         dS )	zeCheck function name, docstring, arguments, redefinition,
        variable names, max locals.
        r   Nc              3  óP   •K  — | ] }‰                      |j        ¦  «        ¯d V — Œ!dS )rI   N)r°   r:   )rW   ÚargÚignored_argument_namess     €rB   rY   z5MisdesignChecker.visit_functiondef.<locals>.<genexpr>  sM   øè è € ð 'ð 'ØÐ)?×)EÒ)EÀcÄhÑ)OÔ)Oð'Øð'ð 'ð 'ð 'ð 'ð 'rD   r   r›   rS   rI   r   )rŽ   Úappendrœ   ÚposonlyargsÚ
kwonlyargsr…   r‘   r»   r[   r£   Úmax_argsr¥   r3   Ú
max_localsr�   )r‰   r&   rœ   Úignored_args_numÚargnumÚlocnumr»   s         @rB   Úvisit_functiondefz"MisdesignChecker.visit_functiondef  s‰  ø€ ð 	Œ×Ò˜QÑÔÐàŒyŒ~ ¤	Ô 5Ñ5¸¼	Ô8LÑLˆØ!%¤Ô!3Ô!JÐØÐØ ÐØ%ð Ý#&ð 'ð 'ð 'ð 'Ø!%ð'ñ 'ô 'ñ $ô $Ð õ ˜‘Y”YÐ!1Ñ1ˆFØ˜œÔ*Ô3Ò3Ð3Ø× Ò Ø(ØÝ˜d™)œ) T¤[Ô%7Ô%@ÐAð !ñ ô ð øð  !Ðå�T”[Ñ!Ô!Ð$4Ñ4ˆð �$”+ÐÐØ�a‰KˆFà�D”KÔ&Ô1Ò1Ð1Ø×ÒØ!ØØ˜dœkÔ0Ô;Ð<ð ñ ô ð ð 	Œ×Ò˜1ÑÔÐÐÐrD   c                óü  — | j                              ¦   «         }|| j        j        j        k    r)|                      d||| j        j        j        f¬¦  «         | j        |         }|| j        j        j        k    r)|                      d||| j        j        j        f¬¦  «         | j                             ¦   «         }|| j        j        j	        k    r+|                      d||| j        j        j	        f¬¦  «         dS dS )zlMost of the work is done here on close:
        checks for max returns, branch, return in __init__.
        r   r›   r   r   N)
rŽ   rh   r…   r‘   Úmax_returnsr¥   r�   Úmax_branchesr�   Úmax_statements)r‰   r&   ÚreturnsÚbranchesÚstmtss        rB   Úleave_functiondefz"MisdesignChecker.leave_functiondef9  s  € ð ”-×#Ò#Ñ%Ô%ˆØ�T”[Ô'Ô3Ò3Ð3Ø×ÒØ,ØØ˜tœ{Ô1Ô=Ð>ð ñ ô ð ð
 ”> $Ô'ˆØ�d”kÔ(Ô5Ò5Ð5Ø×ÒØ#ØØ ¤Ô 2Ô ?Ð@ð ñ ô ð ð ”—’Ñ!Ô!ˆØ�4”;Ô%Ô4Ò4Ð4Ø×ÒØ%ØØ˜Tœ[Ô/Ô>Ð?ð ñ ô ð ð ð ð 5Ð4rD   rS   únodes.Returnc                óB   — | j         sdS | j         dxx         dz  cc<   dS )zCount number of returns.NéÿÿÿÿrI   )rŽ   )r‰   rS   s     rB   Úvisit_returnzMisdesignChecker.visit_return]  s5   € àŒ}ð 	ØˆFØŒ�bÐÐÔ˜QÑÐÐÑÐÐrD   únodes.NodeNGc                óB   — |j         r|                      d¦  «         dS dS )zXDefault visit method -> increments the statements counter if
        necessary.
        rI   N)Úis_statementr™   )r‰   r&   s     rB   Úvisit_defaultzMisdesignChecker.visit_defaultc  s3   € ð Ôð 	#Ø×Ò Ñ"Ô"Ð"Ð"Ð"ð	#ð 	#rD   ú	nodes.Tryc                ó´   — t          |j        ¦  «        }|j        r|dz  }|j        r|dz  }|                      ||¦  «         |                      |¦  «         dS ©ú Increments the branches counter.rI   N)r£   ÚhandlersÚorelseÚ	finalbodyÚ_inc_branchr™   ©r‰   r&   rÊ   s      rB   Ú	visit_tryzMisdesignChecker.visit_tryj  sg   € å�t”}Ñ%Ô%ˆØŒ;ð 	Ø˜‰MˆHØŒ>ð 	Ø˜‰MˆHØ×Ò˜˜xÑ(Ô(Ð(Ø×Ò˜HÑ%Ô%Ð%Ð%Ð%rD   r   únodes.Ifc                ó  — |                       |¦  «         d}|j        rBt          |j        ¦  «        dk    s%t          |j        d         t          j        ¦  «        s|dz  }|                      ||¦  «         |                      |¦  «         dS )z?Increments the branches counter and checks boolean expressions.rI   r   N)Ú_check_boolean_expressionsrÚ   r£   r4   r5   ÚIfrÜ   r™   rÝ   s      rB   Úvisit_ifzMisdesignChecker.visit_ift  sŒ   € ð 	×'Ò'¨Ñ-Ô-Ð-ØˆàŒ;ð 	Ý�”ÑÔ˜qÒ Ð ­
°4´;¸q´>Å7Ä:Ñ(NÔ(NÐ à˜‰MˆHØ×Ò˜˜xÑ(Ô(Ð(Ø×Ò˜HÑ%Ô%Ð%Ð%Ð%rD   c                óê   — |j         }t          |t          j        ¦  «        sdS t	          |¦  «        }|| j        j        j        k    r+|                      d||| j        j        j        f¬¦  «         dS dS )zvGo through "if" node `node` and count its boolean expressions
        if the 'if' node test is a BoolOp node.
        Nr   r›   )	Útestr4   r5   rK   rL   r…   r‘   Úmax_bool_exprr¥   )r‰   r&   Ú	conditionrM   s       rB   rá   z+MisdesignChecker._check_boolean_expressions�  s‰   € ð ”Iˆ	Ý˜)¥W¤^Ñ4Ô4ð 	ØˆFÝ1°)Ñ<Ô<ˆØ˜$œ+Ô,Ô:Ò:Ð:Ø×ÒØ.ØØ" D¤KÔ$6Ô$DÐEð ñ ô ð ð ð ð ;Ð:rD   únodes.Whilec                óN   — d}|j         r|dz  }|                      ||¦  «         dS r×   )rÚ   rÜ   rÝ   s      rB   Úvisit_whilezMisdesignChecker.visit_while�  s6   € àˆØŒ;ð 	Ø˜‰MˆHØ×Ò˜˜xÑ(Ô(Ð(Ð(Ð(rD   rI   Úbranchesnumc                óT   — | j         |                     ¦   «         xx         |z  cc<   dS )rØ   N)r�   Úscope)r‰   r&   rë   s      rB   rÜ   zMisdesignChecker._inc_branch™  s.   € àŒ�t—z’z‘|”|Ð$Ð$Ô$¨Ñ3Ð$Ð$Ñ$Ð$Ð$rD   ©r…   r   r(   r†   )r(   r†   )r•   rG   r(   r†   )r&   rO   r(   r†   )r&   r·   r(   r†   )rS   rÍ   r(   r†   )r&   rÑ   r(   r†   )r&   rÕ   r(   r†   )r&   rß   r(   r†   )r&   rè   r(   r†   )rI   )r&   rÑ   rë   rG   r(   r†   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r:   r"   ÚmsgsÚoptionsrZ   r”   r™   r
   r«   r¶   rÄ   Úvisit_asyncfunctiondefrÌ   Úleave_asyncfunctiondefrÐ   rÔ   rÞ   rã   rá   rê   Ú	visit_forrÜ   Ú__classcell__)rŠ   s   @rB   rt   rt     sÅ  ø€ € € € € ðð ð €Dà€Dð àØØ"ØLð	ð ð	
ð àØØ"ØNð	ð ð	
ð àØØ"ðð	ð ð		
ð àØØ"ØNð	ð ð	
ð àØØ"ØQð	ð ð	
ð àØØ"ØLð	ð ð	
ð àØØBØið	ð ð	
ð àØØ"ðð	ð ð		
ð !àØØ"ðð	ð ð		
ð !àØØ"ðð	ð ð		
ð àØØ"ð)ð	ð ð		
ð -àØ$Ø5ðEð	ð ð		
ðSs€Gðjð ð ð ð ð ð
ð 
ð 
ð 
ð%ð %ð %ð %ð  ÐØØ&Ø Ø!ñ	ô ðð ð ñô ðð<  ÐÐ 8Ð:SÑTÔTð+ð +ð +ñ UÔTð+ðZ  ÐØ$ØØØØØ#ñô ð'ð 'ð 'ñô ð'ðR /ÐàÐØ$ØØØØñô ðð ð ñô ðð6 /Ððð ð ð ð#ð #ð #ð #ð&ð &ð &ð &ð  ÐÐ >Ð@SÑTÔTð
&ð 
&ð 
&ñ UÔTð
&ðð ð ð ð)ð )ð )ð )ð €Ið4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4rD   rt   r…   r   r†   c                óJ   — |                       t          | ¦  «        ¦  «         d S rq   )Úregister_checkerrt   )r…   s    rB   Úregisterrû   ž  s%   € Ø
×ÒÕ,¨VÑ4Ô4Ñ5Ô5Ð5Ð5Ð5rD   )r&   r'   r(   r)   )rE   rF   r(   rG   )r&   rO   r(   rG   )r&   rO   rb   rc   r(   rd   )r&   rO   rb   rc   r(   ro   rî   )'rò   Ú
__future__r   ÚreÚcollectionsr   Úcollections.abcr   Útypingr   r5   r   Úpylint.checkersr   Úpylint.checkers.utilsr	   r
   Úpylint.typingr   Úpylint.lintr   r"   Ú__annotations__Úcompiler^   Ú	frozensetr<   r>   r-   r.   r/   r¡   rC   rL   ra   rn   rr   rt   rû   r€   rD   rB   ú<module>r     s  ðð
 &Ð %Ð %à "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø  Ð  Ð  Ð  Ð  Ð  à €€€Ø Ð Ð Ð Ð Ð à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ 0Ð 0Ð 0Ð 0Ð 0Ð 0àð %Ø$Ð$Ð$Ð$Ð$Ð$ð
ð
ð
ð
ð
ð
ð
ð

ð

ð
ð

ðuAð Að ð Cð Cð Cñ CðH ˆbŒjÐ+Ñ,Ô,€Ø"˜ K°Ð#9Ñ:Ô:Ð Ø Ð Ø'Ð Ø%Ð Ø;Ð ð "+ ðOØðOàðOð 	ðOð 	ð	Oð
 	ðOð 	ðOð 	ðOð 	ðOð 	"ðOð 	ðOð 	ðOð 	!ðOð 	"ðOð 	ðOð 	!ðOð  	%ð!Oð" 	%ð#Oð$ 	)ð%Oð& 	)ð'Oð( 	*ð)Oð* 	$ð+Oð, 	$ð-Oð. 	$ð/Oð0 	%ð1Oð2 	&ð3Oð4 	!ð5Oð6 	%ð7Oð8 	&ð9Oð: 	ð;Oð< 	&ð=Oð> 	#ð?Oð@ 	*ðAOðB 	'ðCOðD 	$ðEOðF 	%ðGOðH 	&ðIOðJ 	$ðKOðL 	+ðMOðN 	&ðOOðP 	ðQOðR 	ðSOðT 	ðUOðV 	ðWOðX 	ðYOðZ 	ð[Oð\ 	ð]Oð^ 	ð_Oð` 	ðaOðb 	ðcOðd 	ðeOðf 	ðgOðh 	ðiOðj 	ðkOðl 	 ðmOðn 	ðoOðp 	ðqOðr 	ðsOðt 	ðuOðv 	ðwOðx 	ðyOðz 	ð{Oð| 	ð}Oð~ 	ðOð@ 	 ðAOðB 	ðCOðD 	!ðEOðF 	ðGOðH 	ðIOðJ 	ðKOðL 	ðMOðN 	ðOOðP 	 ðQOðR 	%ðSOðT 	ðUOðV 	ðWOðX 	ðYOðZ 	ð[Oð\ 	$ð]Oð OñQ"ô Q"Ð ðh!ð !ð !ð !ðHð ð ð ðð ð ð ð!>ð !>ð !>ð !>ðH9ð 9ð 9ð 9ð}4ð }4ð }4ð }4ð }4�{ñ }4ô }4ð }4ð@6ð 6ð 6ð 6ð 6ð 6rD   