
    vj1                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl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Zd dlmZ d dlmZmZ dadZej                            d	d          Zej                            d
d          ZdZej                            dd          Z e ed          sej!        e_"        d Z#d Z$d Z%d Z&de'fdZ( G d d          Z)d Z*de+fdZ,d Z-	 	 	 d"dZ.dZ/ G d  d!e	j0                  Z1dS )#    N)OrderedDict)Mapping)
expanduser)DEFAULT_CREDENTIALS_PATH)is_tf_availableis_torch_available   
TEST_LEVELTEST_ACCESS_TOKEN_CITESTTEST_ACCESS_TOKEN_SDKDEVu   内部测试模型TEST_MODEL_ORGcitestNaNc                  Z    t          t                    } t          j        | d           d S )NT)ignore_errors)r   r   shutilrmtree)path_credentials    k/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/modelscope/utils/test_utils.pydelete_credentialr   &   s+     !9::O
M/666666    c                  ~    t           t          j        v r$t          t          j        t                              at          S N)TEST_LEVEL_STRosenvironintr
    r   r   
test_levelr   +   s)    ##N344
r   c                 \    t                      s t          j        d          |           } | S )Nztest requires TensorFlow)r   unittestskip	test_cases    r   
require_tfr%   3   s1     I=HM"<==iHH	r   c                 \    t                      s t          j        d          |           } | S )Nztest requires PyTorch)r   r!   r"   r#   s    r   require_torchr'   9   s1     F:HM"9::9EE	r   levelc                 
    | a d S r   )r
   )r(   s    r   set_test_levelr*   ?   s    JJJr   c                   "    e Zd ZddZd Zd ZdS )DummyTorchDatasetreturnNc                 0    || _         || _        || _        d S r   featlabelnum)selfr0   r1   r2   s       r   __init__zDummyTorchDataset.__init__F   s    	
r   c                 t    dd l }|                    | j                  |                    | j                  dS )Nr   )r0   labels)torchTensorr0   r1   )r3   indexr7   s      r   __getitem__zDummyTorchDataset.__getitem__K   s<    LL++ll4:..
 
 	
r   c                     | j         S r   )r2   )r3   s    r   __len__zDummyTorchDataset.__len__R   s	    xr   )r-   N)__name__
__module____qualname__r4   r:   r<   r   r   r   r,   r,   D   sF           

 
 
    r   r,   c                 $    t          | ||          S r   )r,   r/   s      r   create_dummy_test_datasetrA   V   s    T5#...r   r-   c                    t           j                            |           sVt          j        |          }t          | d          5 }|                    |j                   d d d            n# 1 swxY w Y   t           j                            |           }t           j        	                    |           }t           j        
                    t           j        
                    |          d                   d         }t           j                            ||          }t          j        |           }	|	                    |           |S )Nwbr   )path)r   rD   existsrequestsgetopenwritecontentbasenamedirnamesplitextjointarfile
extractall)
fpathfurldstrf	file_nameroot_dirtarget_dir_nametarget_dir_pathts
             r   download_and_untarr[   Z   s6   7>>%   L% 	!GGAI	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   ''Iwu%%Hg&&rw'7'7	'B'B1'EFFqIOgll8_==O 	UALLcLs   A++A/2A/c                     t          j        d          \  } }|                    d          }t                      }t                      }|D ]0}|                                }|                    d          }|d         }|                    d          }|dk    s|dz
  t          |          k    rf||dz
           }	|                    |	          }
|||
         }||vrt                      ||<   ||         }|	                    |           ||vrt                      ||<   ||         }|	                    |
                    dd	          
                    d
d	          
                    dd                     2|S )NzTgrep -rn "damo/" tests/  | grep -v "*.pyc" | grep -v "Binary file" | grep -v run.py 
:r   damo   ztests/ .py/.)
subprocessgetstatusoutputsplitr   stripfindlenrfindsetaddreplace)status_coderesultlines
test_casesmodel_caseslineelements	test_file	model_pos
left_quote
rquote_idx
model_name
model_info	case_infos                 r   get_case_model_infor~   l   s   $4^ K LLEJ--K K Kzz||::c??QK	IIf%%	??y1}D		99)a-(
ZZ
++
)J./
J&&$'EEJy!	*
z"""[((&)eeK
#
+	h++33E468 88?S8I8I	K 	K 	K 	K r   MbP?:0yE>Tc           	         t                    }t                    }|j        |j        k    r%| !t          |  d|j         d|j                    dS dS t          t          t
          t          t          j        t          j	        t          j
        f          r#k    r| t          |  d d            dS dS t          t          t          j        f          r6t          j        d          s| t          |  d d            dS dS t          t          t          f          rt!                    t!                    k    r5| 1t          |  dt!                     d	t!                                dS t#          fd
t%                    D                       s| t          |             dS dS t          t&                    r                                }                                }	t!          |          t!          |	          k    r5| 1t          |  dt!          |           d	t!          |	                      dS t!          t+          |          t+          |	          z
            dk    r5| 1t          |  dt+          |          t+          |	          z
              dS t#          fd|D                       s| t          |             dS dS t          t          j                  rt          j        t          j        d           t          j                                      t                    t          j        t          j        d           t          j                                      t                    t#          t          j        d                                                    s| t          |             dS dS |rdS t9          d|           )Nz, type not equal:z and FTz, arg1:z, arg2:)rtolatol	equal_nanz, length is not equal:z, c           	      >    g | ]\  }}t          d ||          S N)r   r   compare_arguments_nested).0sub_arg1sub_arg2r   r   s      r   
<listcomp>z,compare_arguments_nested.<locals>.<listcomp>   sL     
 
 
 'Hh )(H4dD D D
 
 
r   z, key length is not equal:r   z, key diff:c           	      P    g | ]"}t          d |         |                   #S r   r   )r   keyarg1arg2r   r   s     r   r   z,compare_arguments_nested.<locals>.<listcomp>   sP     
 
 
  )$s)T#YTF F F
 
 
r   )dtypeztype not supported: )typer=   print
isinstancer   strboolnpbool_integerstr_floatfloatingisclosetuplelistrk   allzipr   keysrm   ndarraywhereequalr   astypeflatten
ValueError)
print_contentr   r   r   r   ignore_unknown_typetype1type2keys1keys2s
    ````     r   r   r      sd    JJEJJE~''$ XX5>XXXX   u|t	D3T28RZI	J	J @=4<<(BBtBBDBBCCC5t	D5"+.	/	/ :=z$4ddKKK 	(BBtBBDBBCCC5t	D5$-	(	( 4=t99D		!!($TTCIITTTTT   5 
 
 
 
 
 +.dD//
 
 
   	
 (()))5t	D'	"	" $=				u::U##($ZZE

ZZcRWjjZZ   5s5zzCJJ&''!++(LL3u::E

3JLLMMM5 
 
 
 
 
 
 
 !
 
 
   	
 (()))5t	D"*	%	% =xt,,bfd;;BBBOOxt,,bfd;;BBBOO
4Dt%)+ + ++27996 6 	 (()))5t 	=4;E;;<<<r   aW  
import ast
import argparse
import pickle
import torch
from torch import distributed as dist
from modelscope.utils.torch_utils import get_dist_info
import {}

parser = argparse.ArgumentParser()
parser.add_argument('--save_all_ranks', type=ast.literal_eval, help='save all ranks results')
parser.add_argument('--save_file', type=str, help='save file')
parser.add_argument('--local_rank', type=int, default=0)
args = parser.parse_args()


def main():
    results = {}.{}({})  # module.func(params)
    if args.save_all_ranks:
        save_file = args.save_file + str(dist.get_rank())
        with open(save_file, 'wb') as f:
            pickle.dump(results, f)
    else:
        rank, _ = get_dist_info()
        if rank == 0:
            with open(args.save_file, 'wb') as f:
                pickle.dump(results, f)


if __name__ == '__main__':
    main()
c                   0    e Zd ZdZ	 	 ddZ	 	 ddZd ZdS )DistributedTestCaseaD  Distributed TestCase for test function with distributed mode.
    Examples:
        >>> import torch
        >>> from torch import distributed as dist
        >>> from modelscope.utils.torch_utils import init_dist

        >>> def _test_func(*args, **kwargs):
        >>>     init_dist(launcher='pytorch')
        >>>     rank = dist.get_rank()
        >>>     if rank == 0:
        >>>         value = torch.tensor(1.0).cuda()
        >>>     else:
        >>>         value = torch.tensor(2.0).cuda()
        >>>     dist.all_reduce(value)
        >>>     return value.cpu().numpy()

        >>> class DistTest(DistributedTestCase):
        >>>     def test_function_dist(self):
        >>>         args = ()  # args should be python builtin type
        >>>         kwargs = {}  # kwargs should be python builtin type
        >>>         self.start(
        >>>             _test_func,
        >>>             num_gpus=2,
        >>>             assert_callback=lambda x: self.assertEqual(x, 3.0),
        >>>             *args,
        >>>             **kwargs,
        >>>         )
    NFc                 Z   |j         j        }t          j                            |          \  }	}
t          j                            |
          d         }
|j        }g }|D ]N}t          |t                    rd	                    |          }|
                    t          |                     O|                                D ]X\  }}t          |t                    rd	                    |          }|
                    d	                    ||                     Yd                    |                              d          }t          j        d          j        }t          j        d          j        }t#          |d          5 }t%          d		                    |                     t%          d
	                    |                     t&          	                    |
|
||          }|                    |           d d d            n# 1 swxY w Y   g }|r8t+          |          D ]'}|
                    |t          |          z              (n|g}|                     | j        |g|z              t1          j        t          j                  }d                    |                    dd          |	f                              d          |d<   d|d<   d|d|}|d|d|}t%          d|z             t;          j        |d|          }g }|D ]Q}t#          |d          5 }|
                    t?          j         |                     d d d            n# 1 swxY w Y   R|s|d         }|r ||           | !                    |dd	                    ||
                     |S )Nr   z'{}'z{}={},rc   )suffixz.pklwzsave temporary run file to : {}zsave results to : {}r^   
PYTHONPATHrb   1NCCL_P2P_DISABLEz--save_all_ranks=z --save_file= zscript command: %sT)shellenvrbz.The test function ``{}`` in ``{}`` run failed!)msg)"__code__co_filenamer   rD   rh   rM   r?   r   r   formatappenditemsrN   ri   tempfileNamedTemporaryFilenamerH   r   _DIST_SCRIPT_TEMPLATErI   range
addCleanup	clean_tmpcopydeepcopyr   rG   lstriprf   callpickleloadassertEqual)r3   dist_start_cmdfuncnum_gpusassert_callbacksave_all_ranksargskwargsscript_path
script_dirscript_name	func_namefunc_paramsargkvtmp_run_filetmp_res_filerU   run_file_contenttmp_res_filesitmp_envscript_params
script_cmdres
script_resres_files                               r   _startzDistributedTestCase._start!  s;    m/"$'--"<"<
Kg&&{33A6%	 	) 	)C#s## -s++s3xx((((LLNN 	5 	5DAq!S!! )__Q''w~~a334444hh{++11#662%@@@E2&AAAF,$$ 	&3::<HHIII(//==>>>4;;[)[ B  BGG$%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&  	+8__ < <$$\CFF%:;;;;< *NM(FGGG-
++ #[[r**J7!9 !99? 	 '*"##@N@LN#1>><<<O
"Z/000oj'BBB
% 	2 	2Hh%% 2!!&+a..1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 	'#AJ 	(OJ'''@GG;( ( 	 	) 	) 	) s%   A7H

HH((MM 	#M 	c           	          ddl m} t          j        t          j                              }d|v r|                    d          }	ndt          j        || |            fz  }	 | j        ||	||||d|S )Nra   )_find_free_portr   zV%s -m torch.distributed.launch --nproc_per_node=%d --master_addr='%s' --master_port=%s)r   r   r   r   r   )	torch_utilsr   socketgethostbynamegethostnamepopsys
executabler   )
r3   r   r   r   r   r   r   r   ipr   s
             r   startzDistributedTestCase.startj  s     	100000!&"4"6"677v%%#ZZ(899NNEHKX`bdfufufwfwGxyN t{  *+)    	r   c                     |D ]i}t           j                            |          rHt           j                            |          rt	          j        |           Ut          j        |           jd S r   )r   rD   rE   isdirr   r   remove)r3   tmp_file_listfiles      r   r   zDistributedTestCase.clean_tmp  sh    ! 	$ 	$Dw~~d## $7==&& $M$''''IdOOO	$ 	$r   )NF)r=   r>   r?   __doc__r   r   r   r   r   r   r   r     sk         B  $#G G G GX #"	   0$ $ $ $ $r   r   )r   r   T)2r   r   r   r   r   rf   r   rO   r   r!   collectionsr   collections.abcr   os.pathr   numpyr   rF   modelscope.hub.constantsr   modelscope.utils.import_utilsr   r   r
   r   r   rG   TEST_ACCESS_TOKEN1TEST_ACCESS_TOKEN2TEST_MODEL_CHINESE_NAMEr   hasattrnanr   r   r   r%   r'   r   r*   r,   rA   r   r[   r~   r   r   TestCaser   r   r   r   <module>r     ss    				        



    # # # # # # # # # # # #            = = = = = = M M M M M M M M
 Z^^$>EE Z^^$>EE .  0(;;wr5 VBF7 7 7
      #    
       $/ / /C    $  H #("'15Q= Q= Q= Q=h DE$ E$ E$ E$ E$(+ E$ E$ E$ E$ E$r   