o
    g                     @   s"  d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZmZ er>d dlmZ zd dlZW n eyO   dZY nw dadd	 Zd
ee fddZdddZdede	eeeeee	edf  eeeeef f fddZdd Zddee fddZdS )    N)TYPE_CHECKINGAnyDefaultDictDictIterableListTupleUnion)	reporters)_patch_sys_path)Message)CheckerStatsFileItem)Counterc                 C   s2   | j | j| j| j| j| jf}| j| j|| j| j	fS N)
abspathpathmoduleobjlinecolumnmsg_idsymbolmsg
confidence)messagelocation r   R/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/pylint/lint/parallel.py_get_new_args   s   r   statsc                 C   s   i }t  }| D ]4}|di }|| | D ]"\}}||vr&|||< qt|tr3|| | q|| | ||< qq||d< |S )Nby_msg)collectionsr   popupdateitems
isinstancedict)r    mergedr!   statmessage_statskeyitemr   r   r   _merge_stats&   s   


r-   c                 C   s*   | a t t  t   t|pd d S )Nr   )_worker_linterset_reporterr
   CollectingReporteropenr   )linter	argumentsr   r   r   _worker_initialize9   s   r4   	file_itemreturn.c              	   C   s   t stdt   t |  tt}t  D ]}z| }W n	 t	y)   Y qw ||j
 | qdd t jjD }t j  tt t j| jt jj|t jt j|fS )Nz!Worker linter not yet initialisedc                 S   s   g | ]}t |qS r   )r   ).0mr   r   r   
<listcomp>T   s    z-_worker_check_single_file.<locals>.<listcomp>)r.   	Exceptionr1   check_single_file_itemr"   defaultdictlistget_checkersget_map_dataAttributeErrornameappendreportermessagesresetidmultiprocessingcurrent_processcurrent_namefilepath
file_state	base_namer    
msg_status)r5   mapreduce_datacheckerdatamsgsr   r   r   _worker_check_single_fileF   s.   



rR   c           	      C   st   t t}| D ]}|D ]}| D ]\}}|| | qqq	|  }|D ]}|j|v r7|| ||j  q'dS )zIMerges map/reduce data across workers, invoking relevant APIs on checkersN)	r"   r<   r=   valuesr%   extendr>   rA   reduce_map_data)	r2   all_mapreduce_datacollated_map_reduce_datalinter_datarun_datachecker_namerP   original_checkersrO   r   r   r   _merge_mapreduce_datab   s   

r\   filesc              	   C   s,  | j }d| _ tjt|d}tj||| gd}| | |   zNg }t	t
}|t|D ]6\}	}
}}}}}}|| j_| |
| |D ]}t| }| j | qC|| ||	 | |  j|O  _q-W |  |  n	|  |  w t| | t| jg| | _|  D ]
}|| ur| j|_qdS )a#  Use the given linter to lint the files with given amount of workers (jobs)
    This splits the work filestream-by-filestream. If you need to do work across
    multiple files, as in the similarity-checker, then inherit from MapReduceMixin and
    implement the map/reduce mixin functionalityN)r3   )initializerinitargs)rC   	functoolspartialr4   rG   Poolr/   r1   r"   r<   r=   imap_unorderedrR   rK   rL   set_current_moduler   handle_messagerB   rM   closejoinr\   r-   r    r>   )r2   jobsr]   r3   original_reporterr^   pool	all_statsrV   
worker_idxr   	file_pathrL   rD   r    rM   rN   r   rO   r   r   r   check_parallelw   sR   






rn   r   ) r"   r`   typingr   r   r   r   r   r   r   r	   pylintr
   pylint.lint.utilsr   pylint.messager   pylint.typingr   r   r   rG   ImportErrorr.   r   r-   r4   intstrrR   r\   rn   r   r   r   r   <module>   s2   (
*
