
    c                        d Z ddlmZ ddlZddlmZ ddlmZ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 ej        ej        ej        ej        j        fZ G d
 de
          ZddZdS )z*Check for use of nested min/max functions.    )annotationsN)TYPE_CHECKING)nodesobjects)BaseChecker)only_required_for_messages
safe_infer)	INFERENCE)PyLinterc                  |    e Zd ZdZdZdZddiZedd
            Zedd            Z	 e
d          dd            ZdS )NestedMinMaxCheckerzMultiple nested min/max calls on the same line will raise multiple messages.

    This behaviour is intended as it would slow down the checker to check
    for nested call with minimal benefits.
    )zbuiltins.minzbuiltins.maxnested_min_maxW3301)z@Do not use nested call of '%s'; it's possible to do '%s' insteadnested-min-maxzHNested calls ``min(1, min(2, 3))`` can be rewritten as ``min(1, 2, 3)``.nodenodes.NodeNGreturnboolc                    t          |t          j                  sdS t          |j                  }t          |t          j                  o|                                | j        v S )NF)
isinstancer   Callr	   funcFunctionDefqname
FUNC_NAMES)clsr   inferreds      >lib/python3.11/site-packages/pylint/checkers/nested_min_max.pyis_min_max_callz#NestedMinMaxChecker.is_min_max_call/   sX    $
++ 	5di((x!233 3  CN2	
    
nodes.Calllist[nodes.Call]c                .      fdj         D             S )Nc                r    g | ]3}                     |          |j        j        j        j        k    1|4S  )r   r   name).0argr   r   s     r   
<listcomp>z;NestedMinMaxChecker.get_redundant_calls.<locals>.<listcomp><   sT     
 
 
""3''
 -0HMTY^,K

 
 
r    )args)r   r   s   ``r   get_redundant_callsz'NestedMinMaxChecker.get_redundant_calls:   s6    
 
 
 
 
y
 
 
 	
r    r   Nonec                    |                      |          sd S |                     |          }|sd S t          j        |          }t          |          dk    rt	          |j                  D ]u\  }}t          |t          j                  r!t          d |j        D                       r d S ||v r1|j        d |         |j        z   |j        |dz   d          z   |_         nv|                     |          }t          |          dk    t	          |j                  D ]\  }}t          |t          j
                  st          |          }t          |t          j        t          j        t          j        gt          R           rLt          j        |j                  }||_        |j        d |         |gz   |j        |dz   |         z   |_        |                     d||j        j        |                                ft.                     d S )Nr   c              3  J   K   | ]}t          |t          j                  V  d S N)r   r   GeneratorExp)r'   as     r   	<genexpr>z1NestedMinMaxChecker.visit_call.<locals>.<genexpr>P   s@       7 7:;Jq%"4557 7 7 7 7 7r       )linenor   )r   r*   
confidence)r   r+   copylen	enumerater*   r   r   r   anyConstr	   ListTupleSet
DICT_TYPESStarredr4   valueadd_messager   r&   	as_stringr
   )	selfr   redundant_calls
fixed_nodeir(   idxr   
splat_nodes	            r   
visit_callzNestedMinMaxChecker.visit_callB   sJ   ##D)) 	F22488 	FYt__
/""Q& 	C#JO44  3 c5:.. 3 7 7?Bx7 7 7 4 4  FF/) "+ch6Q9QQ O E	 #66zBBO /""Q& 	C" "*/22 	 	HCc5;// %c??uz5;	OJOO  	 "'ho!F!F!FJ'*J$"-%,'$/#'C-89 O 	).*"6"6"8"89 	 	 	
 	
 	
 	
 	
r    N)r   r   r   r   )r   r!   r   r"   )r   r!   r   r,   )__name__
__module____qualname____doc__r   r&   msgsclassmethodr   r+   r   rI   r%   r    r   r   r      s          2JD 
D 
 
 
 [
 
 
 
 [
   011-
 -
 -
 21-
 -
 -
r    r   linterr   r   r,   c                J    |                      t          |                      d S r/   )register_checkerr   )rP   s    r   registerrS   s   s%    
/7788888r    )rP   r   r   r,   )rM   
__future__r   r6   typingr   astroidr   r   pylint.checkersr   pylint.checkers.utilsr   r	   pylint.interfacesr
   pylint.lintr   
DictValuesDictKeys	DictItemsnode_classesDictr>   r   rS   r%   r    r   <module>r`      s  
 1 0 " " " " " "              " " " " " " " " ' ' ' ' ' ' H H H H H H H H ' ' ' ' ' ' %$$$$$$ 		
S
 S
 S
 S
 S
+ S
 S
 S
l9 9 9 9 9 9r    