o ) iU@s8ddlmZddlmZmZdgZGdddedZdS)) annotations)ABCMetaabstractmethod BaseEncoderc@sXeZdZdZeedddZeedddZeedd d Zeedd dZ dS)ra Abstract class defines interface of encoders in flexible unet. Encoders in flexible unet must derive from this class. Each interface method should return a list containing relative information about a series of networks defined by encoder. For example, the efficient-net encoder implement 10 basic network structures in one encoder. When calling `get_encoder_name_string_list` function, a string list like ["efficientnet-b0", "efficientnet-b1" ... "efficientnet-l2"] should be returned. return list[dict]cCt)a Get parameter list to initialize encoder networks. Each parameter dict must have `spatial_dims`, `in_channels` and `pretrained` parameters. The reason that this function should return a list is that a series of encoders can be implemented by one encoder class given different initialization parameters. Each parameter dict in return list should be able to initialize a unique encoder. NotImplementedErrorclsr _/home/dell461/cl/sdc2/last_ska_mid/HISourceFinder-master-l/src/monai/networks/blocks/encoder.pyget_encoder_parameters z"BaseEncoder.get_encoder_parameterslist[tuple[int, ...]]cCr)a Get number of output features' channels. The reason that this function should return a list is that a series of encoders can be implemented by one encoder class given different initialization parameters. And it is possible that different encoders have different output feature map channels. Therefore a list of output feature map channel tuples corresponding to each encoder should be returned by this method. r r r r rnum_channels_per_output,rz#BaseEncoder.num_channels_per_output list[int]cCr)a Get number of outputs of encoder. The reason that this function should return a list is that a series of encoders can be implemented by one encoder class given different initialization parameters. And it is possible that different encoders have different output feature numbers. Therefore a list of output feature numbers corresponding to each encoder should be returned by this method. r r r r r num_outputs:rzBaseEncoder.num_outputs list[str]cCr)a Get the name string of encoders which will be used to initialize flexible unet. The reason that this function should return a list is that a series of encoders can be implemented by one encoder class given different initialization parameters. And a name string is the key to each encoder in flexible unet backbone registry. Therefore this method should return every encoder name that needs to be registered in flexible unet. r r r r rget_encoder_namesHs zBaseEncoder.get_encoder_namesN)rr)rr)rr)rr) __name__ __module__ __qualname____doc__ classmethodrrrrrr r r rrs    ) metaclassN) __future__rabcrr__all__rr r r rs