def create_layer_from_dict(param_dict, reference=None, caller_name=None, allowed_types=None, default_type=None, **kwargs): if default_type is None: default_type = DEFAULT_LAYER_TYPE default_param_dict = { "path": None, "name": None, "type": default_type, "data_backend": DEFAULT_DATA_BACKEND, "args": {}, "readonly": False } for k in param_dict.keys(): if k not in default_param_dict: raise exceptions.CorgieException(f"Unkown layer parameter '{k}'") params = {**default_param_dict, **param_dict} if params["path"] is None: arg_spec = '"path" key in layer specification' if caller_name is not None: arg_spec += ' of {}'.format(caller_name) raise exceptions.ArgumentError(arg_spec, 'not given') layer_path = params["path"] layer_type = params["type"] layer_args = params["args"] data_backend = params["data_backend"] corgie_logger.debug("Parsing layer path: {}".format(layer_path)) if allowed_types is not None and layer_type not in allowed_types: raise exceptions.ArgumentError("layer_type", f'must be of type in {allowed_types}') backend = str_to_backend(data_backend)() layer = backend.create_layer(path=layer_path, layer_type=layer_type, reference=reference, layer_args=layer_args, **kwargs) name = params["name"] if name is None: name = layer.get_layer_type() layer.name = name return layer
def __init__(self, *args, num_channels=2, **kwargs): if num_channels != 2: raise exceptions.ArgumentError( "Field layer 'num_channels'", "Field layer must have 2 channels. 'num_channels' provided: {}" .format(num_channels)) super().__init__(*args, **kwargs)
def __init__(self, *args, num_channels=1, **kwargs): if num_channels != 1: raise exceptions.ArgumentError( "Segmentation layer 'num_channels'", "Segmentation layer must have 1 channels. 'num_channels' provided: {}" .format(num_channels)) super().__init__(*args, **kwargs)
def __init__(self, binarization=None, num_channels=1, **kwargs): self.binarizer = helpers.Binarizer(binarization) if num_channels != 1: raise exceptions.ArgumentError( "Mask layer 'num_channels'", "Mask layer must have 1 channels. 'num_channels' provided: {}". format(num_channels)) super().__init__(**kwargs)
def __init__(self, backend_dtype='float32', **kwargs): super().__init__(**kwargs) if backend_dtype not in self.supported_backend_dtypes: raise exceptions.ArgumentError( "Field layer 'backend_type'", "\n{} is not a supported field backend data type. \n" "Supported backend data types: {}".format( backend_type, self.supported_backend_dtypes)) self.backend_dtype = backend_dtype
def add_layer(self, layer): if layer.name is None: raise exceptions.UnnamedLayerException( layer, f"Layer name " f"needs to be set for it to be added to {self.name} stack.") if layer.name in self.layers: raise exceptions.ArgumentError( layer, f"Layer with name " f"'{layer.name}' added twice to '{self.name}' stack.") if self.reference_layer is None: self.reference_layer = layer self.layers[layer.name] = layer