LSSTApplications  19.0.0-14-gb0260a2+72efe9b372,20.0.0+7927753e06,20.0.0+8829bf0056,20.0.0+995114c5d2,20.0.0+b6f4b2abd1,20.0.0+bddc4f4cbe,20.0.0-1-g253301a+8829bf0056,20.0.0-1-g2b7511a+0d71a2d77f,20.0.0-1-g5b95a8c+7461dd0434,20.0.0-12-g321c96ea+23efe4bbff,20.0.0-16-gfab17e72e+fdf35455f6,20.0.0-2-g0070d88+ba3ffc8f0b,20.0.0-2-g4dae9ad+ee58a624b3,20.0.0-2-g61b8584+5d3db074ba,20.0.0-2-gb780d76+d529cf1a41,20.0.0-2-ged6426c+226a441f5f,20.0.0-2-gf072044+8829bf0056,20.0.0-2-gf1f7952+ee58a624b3,20.0.0-20-geae50cf+e37fec0aee,20.0.0-25-g3dcad98+544a109665,20.0.0-25-g5eafb0f+ee58a624b3,20.0.0-27-g64178ef+f1f297b00a,20.0.0-3-g4cc78c6+e0676b0dc8,20.0.0-3-g8f21e14+4fd2c12c9a,20.0.0-3-gbd60e8c+187b78b4b8,20.0.0-3-gbecbe05+48431fa087,20.0.0-38-ge4adf513+a12e1f8e37,20.0.0-4-g97dc21a+544a109665,20.0.0-4-gb4befbc+087873070b,20.0.0-4-gf910f65+5d3db074ba,20.0.0-5-gdfe0fee+199202a608,20.0.0-5-gfbfe500+d529cf1a41,20.0.0-6-g64f541c+d529cf1a41,20.0.0-6-g9a5b7a1+a1cd37312e,20.0.0-68-ga3f3dda+5fca18c6a4,20.0.0-9-g4aef684+e18322736b,w.2020.45
LSSTDataManagementBasePackage
Functions
lsst.pipe.base.testUtils Namespace Reference

Functions

def makeQuantum (task, butler, dataId, ioDataIds)
 
def runTestQuantum (task, butler, quantum, mockRun=True)
 
def assertValidOutput (task, result)
 

Function Documentation

◆ assertValidOutput()

def lsst.pipe.base.testUtils.assertValidOutput (   task,
  result 
)
Test that the output of a call to ``run`` conforms to its own
connections.

Parameters
----------
task : `lsst.pipe.base.PipelineTask`
    The task whose connections need validation. This is a fully-configured
    task object to support features such as optional outputs.
result : `lsst.pipe.base.Struct`
    A result object produced by calling ``task.run``.

Raises
-------
AssertionError:
    Raised if ``result`` does not match what's expected from ``task's``
    connections.

Definition at line 245 of file testUtils.py.

245 def assertValidOutput(task, result):
246  """Test that the output of a call to ``run`` conforms to its own
247  connections.
248 
249  Parameters
250  ----------
251  task : `lsst.pipe.base.PipelineTask`
252  The task whose connections need validation. This is a fully-configured
253  task object to support features such as optional outputs.
254  result : `lsst.pipe.base.Struct`
255  A result object produced by calling ``task.run``.
256 
257  Raises
258  -------
259  AssertionError:
260  Raised if ``result`` does not match what's expected from ``task's``
261  connections.
262  """
263  connections = task.config.ConnectionsClass(config=task.config)
264  recoveredOutputs = result.getDict()
265 
266  for name in connections.outputs:
267  connection = connections.__getattribute__(name)
268  # name
269  try:
270  output = recoveredOutputs[name]
271  except KeyError:
272  raise AssertionError(f"No such output: {name}")
273  # multiple
274  if connection.multiple:
275  if not isinstance(output, collections.abc.Sequence):
276  raise AssertionError(f"Expected {name} to be a sequence, got {output} instead.")
277  else:
278  # use lazy evaluation to not use StorageClassFactory unless
279  # necessary
280  if isinstance(output, collections.abc.Sequence) \
281  and not issubclass(
282  StorageClassFactory().getStorageClass(connection.storageClass).pytype,
283  collections.abc.Sequence):
284  raise AssertionError(f"Expected {name} to be a single value, got {output} instead.")
285  # no test for storageClass, as I'm not sure how much persistence
286  # depends on duck-typing

◆ makeQuantum()

def lsst.pipe.base.testUtils.makeQuantum (   task,
  butler,
  dataId,
  ioDataIds 
)
Create a Quantum for a particular data ID(s).

Parameters
----------
task : `lsst.pipe.base.PipelineTask`
    The task whose processing the quantum represents.
butler : `lsst.daf.butler.Butler`
    The collection the quantum refers to.
dataId: any data ID type
    The data ID of the quantum. Must have the same dimensions as
    ``task``'s connections class.
ioDataIds : `collections.abc.Mapping` [`str`]
    A mapping keyed by input/output names. Values must be data IDs for
    single connections and sequences of data IDs for multiple connections.

Returns
-------
quantum : `lsst.daf.butler.Quantum`
    A quantum for ``task``, when called with ``dataIds``.

Definition at line 35 of file testUtils.py.

35 def makeQuantum(task, butler, dataId, ioDataIds):
36  """Create a Quantum for a particular data ID(s).
37 
38  Parameters
39  ----------
40  task : `lsst.pipe.base.PipelineTask`
41  The task whose processing the quantum represents.
42  butler : `lsst.daf.butler.Butler`
43  The collection the quantum refers to.
44  dataId: any data ID type
45  The data ID of the quantum. Must have the same dimensions as
46  ``task``'s connections class.
47  ioDataIds : `collections.abc.Mapping` [`str`]
48  A mapping keyed by input/output names. Values must be data IDs for
49  single connections and sequences of data IDs for multiple connections.
50 
51  Returns
52  -------
53  quantum : `lsst.daf.butler.Quantum`
54  A quantum for ``task``, when called with ``dataIds``.
55  """
56  connections = task.config.ConnectionsClass(config=task.config)
57 
58  try:
59  inputs = defaultdict(list)
60  outputs = defaultdict(list)
61  for name in itertools.chain(connections.inputs, connections.prerequisiteInputs):
62  connection = connections.__getattribute__(name)
63  _checkDataIdMultiplicity(name, ioDataIds[name], connection.multiple)
64  ids = _normalizeDataIds(ioDataIds[name])
65  for id in ids:
66  ref = _refFromConnection(butler, connection, id)
67  inputs[ref.datasetType].append(ref)
68  for name in connections.outputs:
69  connection = connections.__getattribute__(name)
70  _checkDataIdMultiplicity(name, ioDataIds[name], connection.multiple)
71  ids = _normalizeDataIds(ioDataIds[name])
72  for id in ids:
73  ref = _refFromConnection(butler, connection, id)
74  outputs[ref.datasetType].append(ref)
75  quantum = Quantum(taskClass=type(task),
76  dataId=dataId,
77  inputs=inputs,
78  outputs=outputs)
79  return quantum
80  except KeyError as e:
81  raise ValueError("Mismatch in input data.") from e
82 
83 

◆ runTestQuantum()

def lsst.pipe.base.testUtils.runTestQuantum (   task,
  butler,
  quantum,
  mockRun = True 
)
Run a PipelineTask on a Quantum.

Parameters
----------
task : `lsst.pipe.base.PipelineTask`
    The task to run on the quantum.
butler : `lsst.daf.butler.Butler`
    The collection to run on.
quantum : `lsst.daf.butler.Quantum`
    The quantum to run.
mockRun : `bool`
    Whether or not to replace ``task``'s ``run`` method. The default of
    `True` is recommended unless ``run`` needs to do real work (e.g.,
    because the test needs real output datasets).

Returns
-------
run : `unittest.mock.Mock` or `None`
    If ``mockRun`` is set, the mock that replaced ``run``. This object can
    be queried for the arguments ``runQuantum`` passed to ``run``.

Definition at line 209 of file testUtils.py.

209 def runTestQuantum(task, butler, quantum, mockRun=True):
210  """Run a PipelineTask on a Quantum.
211 
212  Parameters
213  ----------
214  task : `lsst.pipe.base.PipelineTask`
215  The task to run on the quantum.
216  butler : `lsst.daf.butler.Butler`
217  The collection to run on.
218  quantum : `lsst.daf.butler.Quantum`
219  The quantum to run.
220  mockRun : `bool`
221  Whether or not to replace ``task``'s ``run`` method. The default of
222  `True` is recommended unless ``run`` needs to do real work (e.g.,
223  because the test needs real output datasets).
224 
225  Returns
226  -------
227  run : `unittest.mock.Mock` or `None`
228  If ``mockRun`` is set, the mock that replaced ``run``. This object can
229  be queried for the arguments ``runQuantum`` passed to ``run``.
230  """
231  _resolveTestQuantumInputs(butler, quantum)
232  butlerQc = ButlerQuantumContext(butler, quantum)
233  connections = task.config.ConnectionsClass(config=task.config)
234  inputRefs, outputRefs = connections.buildDatasetRefs(quantum)
235  if mockRun:
236  with unittest.mock.patch.object(task, "run") as mock, \
237  unittest.mock.patch("lsst.pipe.base.ButlerQuantumContext.put"):
238  task.runQuantum(butlerQc, inputRefs, outputRefs)
239  return mock
240  else:
241  task.runQuantum(butlerQc, inputRefs, outputRefs)
242  return None
243 
244 
ast::append
std::shared_ptr< FrameSet > append(FrameSet const &first, FrameSet const &second)
Construct a FrameSet that performs two transformations in series.
Definition: functional.cc:33
lsst.pipe.base.testUtils.makeQuantum
def makeQuantum(task, butler, dataId, ioDataIds)
Definition: testUtils.py:35
lsst.pipe.base.testUtils.runTestQuantum
def runTestQuantum(task, butler, quantum, mockRun=True)
Definition: testUtils.py:209
type
table::Key< int > type
Definition: Detector.cc:163
lsst.pipe.base.testUtils.assertValidOutput
def assertValidOutput(task, result)
Definition: testUtils.py:245