LSST Applications  22.0.1,22.0.1+01bcf6a671,22.0.1+046ee49490,22.0.1+05c7de27da,22.0.1+0c6914dbf6,22.0.1+1220d50b50,22.0.1+12fd109e95,22.0.1+1a1dd69893,22.0.1+1c910dc348,22.0.1+1ef34551f5,22.0.1+30170c3d08,22.0.1+39153823fd,22.0.1+611137eacc,22.0.1+771eb1e3e8,22.0.1+94e66cc9ed,22.0.1+9a075d06e2,22.0.1+a5ff6e246e,22.0.1+a7db719c1a,22.0.1+ba0d97e778,22.0.1+bfe1ee9056,22.0.1+c4e1e0358a,22.0.1+cc34b8281e,22.0.1+d640e2c0fa,22.0.1+d72a2e677a,22.0.1+d9a6b571bd,22.0.1+e485e9761b,22.0.1+ebe8d3385e
LSST Data Management Base Package
Public Member Functions | List of all members
lsst.pipe.base.pipeline.TaskDatasetTypes Class Reference

Public Member Functions

TaskDatasetTypes fromTaskDef (cls, TaskDef taskDef, *Registry registry)
 

Detailed Description

An immutable struct that extracts and classifies the dataset types used
by a `PipelineTask`

Definition at line 605 of file pipeline.py.

Member Function Documentation

◆ fromTaskDef()

TaskDatasetTypes lsst.pipe.base.pipeline.TaskDatasetTypes.fromTaskDef (   cls,
TaskDef  taskDef,
*Registry  registry 
)
Extract and classify the dataset types from a single `PipelineTask`.

Parameters
----------
taskDef: `TaskDef`
    An instance of a `TaskDef` class for a particular `PipelineTask`.
registry: `Registry`
    Registry used to construct normalized `DatasetType` objects and
    retrieve those that are incomplete.

Returns
-------
types: `TaskDatasetTypes`
    The dataset types used by this task.

Definition at line 658 of file pipeline.py.

658  def fromTaskDef(cls, taskDef: TaskDef, *, registry: Registry) -> TaskDatasetTypes:
659  """Extract and classify the dataset types from a single `PipelineTask`.
660 
661  Parameters
662  ----------
663  taskDef: `TaskDef`
664  An instance of a `TaskDef` class for a particular `PipelineTask`.
665  registry: `Registry`
666  Registry used to construct normalized `DatasetType` objects and
667  retrieve those that are incomplete.
668 
669  Returns
670  -------
671  types: `TaskDatasetTypes`
672  The dataset types used by this task.
673  """
674  def makeDatasetTypesSet(connectionType: str, freeze: bool = True) -> NamedValueSet[DatasetType]:
675  """Constructs a set of true `DatasetType` objects
676 
677  Parameters
678  ----------
679  connectionType : `str`
680  Name of the connection type to produce a set for, corresponds
681  to an attribute of type `list` on the connection class instance
682  freeze : `bool`, optional
683  If `True`, call `NamedValueSet.freeze` on the object returned.
684 
685  Returns
686  -------
687  datasetTypes : `NamedValueSet`
688  A set of all datasetTypes which correspond to the input
689  connection type specified in the connection class of this
690  `PipelineTask`
691 
692  Notes
693  -----
694  This function is a closure over the variables ``registry`` and
695  ``taskDef``.
696  """
697  datasetTypes = NamedValueSet()
698  for c in iterConnections(taskDef.connections, connectionType):
699  dimensions = set(getattr(c, 'dimensions', set()))
700  if "skypix" in dimensions:
701  try:
702  datasetType = registry.getDatasetType(c.name)
703  except LookupError as err:
704  raise LookupError(
705  f"DatasetType '{c.name}' referenced by "
706  f"{type(taskDef.connections).__name__} uses 'skypix' as a dimension "
707  f"placeholder, but does not already exist in the registry. "
708  f"Note that reference catalog names are now used as the dataset "
709  f"type name instead of 'ref_cat'."
710  ) from err
711  rest1 = set(registry.dimensions.extract(dimensions - set(["skypix"])).names)
712  rest2 = set(dim.name for dim in datasetType.dimensions
713  if not isinstance(dim, SkyPixDimension))
714  if rest1 != rest2:
715  raise ValueError(f"Non-skypix dimensions for dataset type {c.name} declared in "
716  f"connections ({rest1}) are inconsistent with those in "
717  f"registry's version of this dataset ({rest2}).")
718  else:
719  # Component dataset types are not explicitly in the
720  # registry. This complicates consistency checks with
721  # registry and requires we work out the composite storage
722  # class.
723  registryDatasetType = None
724  try:
725  registryDatasetType = registry.getDatasetType(c.name)
726  except KeyError:
727  compositeName, componentName = DatasetType.splitDatasetTypeName(c.name)
728  parentStorageClass = DatasetType.PlaceholderParentStorageClass \
729  if componentName else None
730  datasetType = c.makeDatasetType(
731  registry.dimensions,
732  parentStorageClass=parentStorageClass
733  )
734  registryDatasetType = datasetType
735  else:
736  datasetType = c.makeDatasetType(
737  registry.dimensions,
738  parentStorageClass=registryDatasetType.parentStorageClass
739  )
740 
741  if registryDatasetType and datasetType != registryDatasetType:
742  raise ValueError(f"Supplied dataset type ({datasetType}) inconsistent with "
743  f"registry definition ({registryDatasetType}) "
744  f"for {taskDef.label}.")
745  datasetTypes.add(datasetType)
746  if freeze:
747  datasetTypes.freeze()
748  return datasetTypes
749 
750  # optionally add output dataset for metadata
751  outputs = makeDatasetTypesSet("outputs", freeze=False)
752  if taskDef.metadataDatasetName is not None:
753  # Metadata is supposed to be of the PropertySet type, its
754  # dimensions correspond to a task quantum
755  dimensions = registry.dimensions.extract(taskDef.connections.dimensions)
756  outputs |= {DatasetType(taskDef.metadataDatasetName, dimensions, "PropertySet")}
757  outputs.freeze()
758 
759  return cls(
760  initInputs=makeDatasetTypesSet("initInputs"),
761  initOutputs=makeDatasetTypesSet("initOutputs"),
762  inputs=makeDatasetTypesSet("inputs"),
763  prerequisites=makeDatasetTypesSet("prerequisiteInputs"),
764  outputs=outputs,
765  )
766 
767 
768 @dataclass(frozen=True)
daf::base::PropertySet * set
Definition: fits.cc:912
typing.Generator[BaseConnection, None, None] iterConnections(PipelineTaskConnections connections, Union[str, Iterable[str]] connectionType)
Definition: connections.py:503

The documentation for this class was generated from the following file: