o 1 i @sdddlmZddlZddlZddlmZmZddlmZm Z ddl Z ddl m Z ddlmZddlmZddlmZddlmZmZmZmZmZdd lmZmZmZdd lmZm Z dd l!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'dd l(m)Z)dd l*m+Z+m,Z,ddl-m.Z.m/Z/ddl0m1Z1ee2Z3d&ddZ4ddZ5d'ddZ6Gdd d e Z7e/d!d"e.d#Gd$d%d%ee7Z8dS)() annotationsN)MappingMutableMapping)Anycast) DataAnalyzer) get_logger) SegSummarizer)BundleWorkflowConfigComponent ConfigItem ConfigParserConfigWorkflow)SupervisedEvaluatorSupervisedTrainerTrainer) ClientAlgoClientAlgoStats) ExtraItems FiltersTypeFlPhase FlStatistics ModelType WeightType)ExchangeObject)copy_model_stateget_state_dict) min_version require_pkg) DataStatsKeysglobal_weightsrlocal_var_dictrreturntuple[MutableMapping, int]c Cs|}d}|D]6}||vr>||}ztt|||j}|||<|d7}Wqty=}z td|d|d}~wwq||fS)zAHelper function to convert global weights to local weights formatrzConvert weight from z failed.N)keystorchreshape as_tensorshape Exception ValueError)r r!Z model_keys n_convertedvar_nameweightser0\/home/dell461/cl/sdc2/last_ska_mid/HISourceFinder-master-l/src/monai/fl/client/monai_algo.pyconvert_global_weights%s  r2cCs|durtd|durtdi}d}|D]+}||vrq||||||<|d7}tt||rAtd|dq|dkrJtd|S)Nz>Cannot compute weight differences if `global_weights` is None!z>Cannot compute weight differences if `local_var_dict` is None!rr$z Weights for z became NaN...zNo weight differences computed!)r+cpur&anyisnan RuntimeError)r r!Z weight_diffZn_diffnamer0r0r1compute_weight_diff8s"r8parserr NonecCs<d|vr|dD]}t|rd|dvrd|d<qdSdS)Nzvalidate#handlersCheckpointLoader_target_T _disabled_)r is_instantiable)r9hr0r0r1disable_ckpt_loadersMs   r@c@sZeZdZdZ     d d!ddZd"ddZd"d#ddZd"ddZeddZ ddZ dS)$MonaiAlgoStatsa7 Implementation of ``ClientAlgoStats`` to allow federated learning with MONAI bundle configurations. Args: bundle_root: directory path of the bundle. config_train_filename: bundle training config path relative to bundle_root. Can be a list of files; defaults to "configs/train.json". only useful when `workflow` is None. config_filters_filename: filter configuration file. Can be a list of files; defaults to `None`. data_stats_transform_list: transforms to apply for the data stats result. histogram_only: whether to only compute histograms. Defaults to False. workflow: the bundle workflow to execute, usually it's training, evaluation or inference. if None, will create an `ConfigWorkflow` internally based on `config_train_filename`. configs/train.jsonNF bundle_rootstrconfig_train_filenamestr | list | Noneconfig_filters_filenamedata_stats_transform_list list | Nonehistogram_onlyboolworkflowBundleWorkflow | NonecCst|_||_||_||_d|_d|_||_||_d|_|dur5t |t s(t d| dur2t d||_d|_ d|_d|_tj|_d|_dS)Ntrainevalz.workflow must be a subclass of BundleWorkflow.z"workflow doesn't specify the type.)loggerrCrErGtrain_data_key eval_data_keyrHrJrL isinstancer r+get_workflow_type client_nameapp_rootpost_statistics_filtersrIDLEphase dataset_root)selfrCrErGrHrJrLr0r0r1__init__ds(    zMonaiAlgoStats.__init__cCs|duri}|tjd|_|tjd}|jd|jd|tjd|_t j |j|j |_ |j durF||j}t|d|dd|_ |j |j |j _ |j ||j}t}t|dkrv|||jtjtdtjd |_|jd |jd dS)  Initialize routine to parse configuration files and extract main components such as trainer, evaluator, and filters. Args: extra: Dict with additional information that should be provided by FL system, i.e., `ExtraItems.CLIENT_NAME`, `ExtraItems.APP_ROOT` and `ExtraItems.LOGGING_FILE`. You can diable the logging logic in the monai bundle by setting {ExtraItems.LOGGING_FILE} to False. Nnoname Initializing  ...rPrN config_file meta_file logging_file workflow_typerdefault Initialized .)getr CLIENT_NAMErV LOGGING_FILErQinfoAPP_ROOTrWospathjoinrCrL_add_config_filesrEr initializerGr len read_configget_parsed_contentrPOST_STATISTICS_FILTERSr rX)r\extrareconfig_train_filesconfig_filter_files filter_parserr0r0r1rts.         zMonaiAlgoStats.initializery dict | Noner"rc Csp|durtd|jjrtj|_|jd|jjtj |vr$td|tj }tj |vr2td|tj }i}|j |jj |j ||tj|jdd\}}|rX||j |id}d}|jjdurx|j |jj|j||tj|jdd\}}n|jd |r||j|i|r|r|||g||} |tj| it|d } |jdur|jD]} | | |} q| Std ) aX Returns summary statistics about the local data. Args: extra: Dict with additional information that can be provided by the FL system. Both FlStatistics.HIST_BINS and FlStatistics.HIST_RANGE must be provided. Returns: stats: ExchangeObject with summary statistics. Nz`extra` has to be setzComputing statistics on z1FlStatistics.NUM_OF_BINS not specified in `extra`z0FlStatistics.HIST_RANGE not specified in `extra`ztrain_data_stats.yaml)datadata_key hist_bins hist_range output_pathzeval_data_stats.yamlz0the datalist doesn't contain validation section.) statisticszdata_root not set!)r+rL dataset_dirrGET_DATA_STATSrZrQrnr HIST_BINS HIST_RANGE_get_data_key_statstrain_dataset_datarRrprqrrrWupdateval_dataset_datarSwarning_compute_total_stats TOTAL_DATArrX) r\ryrrZ stats_dictZtrain_summary_statsZtrain_case_statsZeval_summary_statsZeval_case_statstotal_summary_statsstats_filterr0r0r1get_data_statssZ             zMonaiAlgoStats.get_data_statsc Cst||i|jj||||jd}|j|jd|d|j|j|d}|t j }t j |t j t jt|t jt|t|i} | |fS)N)datalistdatarootrrrrJz compute data statistics on z...)transform_listkey)rrLrrJrQrnrVget_all_case_statsrHrBY_CASEr DATA_STATSSUMMARY DATA_COUNTru FAIL_COUNT) r\r~rrrranalyzerZ all_statsZ case_stats summary_statsr0r0r1rs     z"MonaiAlgoStats._get_data_key_statscCsRg}|D]}||7}qtdddd||d}||}tj|tjt|tjdi}|S)NimagelabelT)averagedo_ccprrr)r summarizerrrrur)Zcase_stats_listsrrZtotal_case_statsZcase_stats_list summarizerrrr0r0r1rs    z#MonaiAlgoStats._compute_total_statscCsg}|rJt|tr|tj|j||St|tr>|D]}t|tr0|tj|j|qtdt |d||Stdt |d||S)Nz/Expected config file to be of type str but got z: z8Expected config files to be of type str or list but got ) rTrDappendrprqrrrClistr+type)r\ config_filesfilesfiler0r0r1rs$s   z MonaiAlgoStats._add_config_files)rBNNFN) rCrDrErFrGrFrHrIrJrKrLrMN)ryr}r"r) __name__ __module__ __qualname____doc__r]rtrr staticmethodrrsr0r0r0r1rAUs  ( M  rAignitez0.4.10)pkg_nameversionversion_checkerc@seZdZdZ             d:d;d#d$Zdd0d1Zds4           b