Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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