docs: def setup(self, in_name=None, out_name=None, required=None, hidden=None,
                  multiple=None, defaults=None):
          """ Set the options of the block.
          Only the not None given options are set
  
          .. note:: a block may have multiple inputs but have only one output
  
          :param in_name: name(s) of the block input data
          :type in_name: str or list of str
          :param out_name: name of the block output data
          :type out_name: str
          :param required: whether the block will be required or not
          :type required: bool
          :param hidden: whether the block will be hidden to the user or not
          :type hidden: bool
          :param multiple: if True more than one component may be selected/ run) 
          :type multiple: bool
          :param defaults: names of the selected components
          :type defaults: list of str, or str
          """
          if in_name is not None:
              self.in_name = in_name if isinstance(in_name, list) else [in_name]
          if out_name is not None:
              self.out_name = out_name
          if required is not None:
              self.required = required
          if hidden is not None:
              self.hidden = hidden
          if multiple is not None:
              self.multiple = multiple
          if defaults is not None:
              #if default is just a 'str' it is managed in setter
              self.defaults = defaults