docs: def match(self, projectpath, parameters):
          """Check if the profile matches all inputdata *and* produces output given the set parameters. Returns a boolean"""
          parameters = sanitizeparameters(parameters)
  
          mandatory_absent = [] #list of input templates that are missing but mandatory
          optional_absent = [] #list of absent but optional input templates
  
          #check if profile matches inputdata (if there are no inputtemplate, this always matches intentionally!)
          for inputtemplate in self.input:
              if not inputtemplate.matchingfiles(projectpath):
                  if inputtemplate.optional:
                      optional_absent.append(inputtemplate)
                  else:
                      mandatory_absent.append(inputtemplate)
  
          if mandatory_absent:
              return False, mandatory_absent
  
          #check if output is produced
          if not self.output: return False, mandatory_absent
          for outputtemplate in self.output:
              if isinstance(outputtemplate, ParameterCondition):
                  outputtemplate = outputtemplate.evaluate(parameters)
              if not outputtemplate:
                  continue
              assert isinstance(outputtemplate, OutputTemplate)
              if outputtemplate.parent:
                  if outputtemplate.getparent(self) not in optional_absent: #pylint: disable=protected-access
                      return True, optional_absent
              else:
                  return True, optional_absent
  
          return False, optional_absent