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
Public Member Functions | Static Public Attributes | List of all members
lsst.pipe.base.argumentParser.ArgumentParser Class Reference
Inheritance diagram for lsst.pipe.base.argumentParser.ArgumentParser:
lsst.pipe.base.argumentParser.InputOnlyArgumentParser lsst.pipe.drivers.constructCalibs.CalibArgumentParser lsst.pipe.tasks.ingest.IngestArgumentParser lsst.pipe.tasks.ingestCalibs.IngestCalibsArgumentParser lsst.pipe.tasks.ingestCuratedCalibs.IngestCuratedCalibsArgumentParser lsst.obs.decam.ingest.DecamIngestArgumentParser

Public Member Functions

def __init__ (self, name, usage="%(prog)s input [options]", **kwargs)
 
def add_id_argument (self, name, datasetType, help, level=None, doMakeDataRefList=True, ContainerClass=DataIdContainer)
 
def parse_args (self, config, args=None, log=None, override=None)
 
def handleCamera (self, namespace)
 
def convert_arg_line_to_args (self, arg_line)
 
def addReuseOption (self, choices)
 

Static Public Attributes

bool requireOutput = True
 

Detailed Description

Argument parser for command-line tasks that is based on
`argparse.ArgumentParser`.

Parameters
----------
name : `str`
    Name of top-level task; used to identify camera-specific override
    files.
usage : `str`, optional
    Command-line usage signature.
**kwargs
    Additional keyword arguments for `argparse.ArgumentParser`.

Notes
-----
Users may wish to add additional arguments before calling `parse_args`.

Definition at line 408 of file argumentParser.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.pipe.base.argumentParser.ArgumentParser.__init__ (   self,
  name,
  usage = "%(prog)s input [options]",
**  kwargs 
)

Definition at line 435 of file argumentParser.py.

435  def __init__(self, name, usage="%(prog)s input [options]", **kwargs):
436  self._name = name
437  self._dataIdArgDict = {} # Dict of data identifier specifications, by argument name
438  argparse.ArgumentParser.__init__(self,
439  usage=usage,
440  fromfile_prefix_chars='@',
441  epilog=textwrap.dedent("""Notes:
442  * --config, --configfile, --id, --loglevel and @file may appear multiple times;
443  all values are used, in order left to right
444  * @file reads command-line options from the specified file:
445  * data may be distributed among multiple lines (e.g. one option per line)
446  * data after # is treated as a comment and ignored
447  * blank lines and lines starting with # are ignored
448  * To specify multiple values for an option, do not use = after the option name:
449  * right: --configfile foo bar
450  * wrong: --configfile=foo bar
451  """),
452  formatter_class=argparse.RawDescriptionHelpFormatter,
453  **kwargs)
454  self.add_argument(metavar='input', dest="rawInput",
455  help=f"path to input data repository, relative to ${DEFAULT_INPUT_NAME}")
456  self.add_argument("--calib", dest="rawCalib",
457  help=f"path to input calibration repository, relative to ${DEFAULT_CALIB_NAME}")
458  self.add_argument("--output", dest="rawOutput",
459  help="path to output data repository (need not exist), "
460  f"relative to ${DEFAULT_OUTPUT_NAME}")
461  self.add_argument("--rerun", dest="rawRerun", metavar="[INPUT:]OUTPUT",
462  help="rerun name: sets OUTPUT to ROOT/rerun/OUTPUT; "
463  "optionally sets ROOT to ROOT/rerun/INPUT")
464  self.add_argument("-c", "--config", nargs="*", action=ConfigValueAction,
465  help="config override(s), e.g. -c foo=newfoo bar.baz=3", metavar="NAME=VALUE")
466  self.add_argument("-C", "--configfile", dest="configfile", nargs="*", action=ConfigFileAction,
467  help="config override file(s)")
468  self.add_argument("-L", "--loglevel", nargs="*", action=LogLevelAction,
469  help="logging level; supported levels are [trace|debug|info|warn|error|fatal]",
470  metavar="LEVEL|COMPONENT=LEVEL")
471  self.add_argument("--longlog", action="store_true", help="use a more verbose format for the logging")
472  self.add_argument("--debug", action="store_true", help="enable debugging output?")
473  self.add_argument("--doraise", action="store_true",
474  help="raise an exception on error (else log a message and continue)?")
475  self.add_argument("--noExit", action="store_true",
476  help="Do not exit even upon failure (i.e. return a struct to the calling script)")
477  self.add_argument("--profile", help="Dump cProfile statistics to filename")
478  self.add_argument("--show", nargs="+", default=(),
479  help="display the specified information to stdout and quit "
480  "(unless run is specified); information is "
481  "(config[=PATTERN]|history=PATTERN|tasks|data|run)")
482  self.add_argument("-j", "--processes", type=int, default=1, help="Number of processes to use")
483  self.add_argument("-t", "--timeout", type=float,
484  help="Timeout for multiprocessing; maximum wall time (sec)")
485  self.add_argument("--clobber-output", action="store_true", dest="clobberOutput", default=False,
486  help=("remove and re-create the output directory if it already exists "
487  "(safe with -j, but not all other forms of parallel execution)"))
488  self.add_argument("--clobber-config", action="store_true", dest="clobberConfig", default=False,
489  help=("backup and then overwrite existing config files instead of checking them "
490  "(safe with -j, but not all other forms of parallel execution)"))
491  self.add_argument("--no-backup-config", action="store_true", dest="noBackupConfig", default=False,
492  help="Don't copy config to file~N backup.")
493  self.add_argument("--clobber-versions", action="store_true", dest="clobberVersions", default=False,
494  help=("backup and then overwrite existing package versions instead of checking"
495  "them (safe with -j, but not all other forms of parallel execution)"))
496  self.add_argument("--no-versions", action="store_true", dest="noVersions", default=False,
497  help="don't check package versions; useful for development")
498  lsstLog.configure_prop("""
499 log4j.rootLogger=INFO, A1
500 log4j.appender.A1=ConsoleAppender
501 log4j.appender.A1.Target=System.out
502 log4j.appender.A1.layout=PatternLayout
503 log4j.appender.A1.layout.ConversionPattern=%c %p: %m%n
504 """)
505 
506  # Forward all Python logging to lsst.log
507  lgr = logging.getLogger()
508  lgr.setLevel(logging.INFO) # same as in log4cxx config above
509  lgr.addHandler(lsstLog.LogHandler())
510 

Member Function Documentation

◆ add_id_argument()

def lsst.pipe.base.argumentParser.ArgumentParser.add_id_argument (   self,
  name,
  datasetType,
  help,
  level = None,
  doMakeDataRefList = True,
  ContainerClass = DataIdContainer 
)
Add a data ID argument.


Parameters
----------
name : `str`
    Data ID argument (including leading dashes, if wanted).
datasetType : `str` or `DynamicDatasetType`-type
    Type of dataset. Supply a string for a fixed dataset type.
    For a dynamically determined dataset type, supply
    a `DynamicDatasetType`, such a `DatasetArgument`.
help : `str`
    Help string for the argument.
level : `str`
    The lowest hierarchy level to descend to for this dataset type,
    for example `"amp"` for `"raw"` or `"ccd"` for `"calexp"`.
    Use `""` to use the mapper's default for the dataset type.
    Some container classes may also support `None`, which means
    the level should not be restricted; however the default class,
    `DataIdContainer`, does not support `None`.
doMakeDataRefList : bool, optional
    If `True` (default), construct data references.
ContainerClass : `class`, optional
Class to contain data IDs and data references; the default class
`DataIdContainer` will work for many, but not all, cases.
For example if the dataset type is specified on the command line
then use `DynamicDatasetType`.

Notes
-----
If ``datasetType`` is an instance of `DatasetArgument`,
then add a second argument to specify the dataset type.

The associated data is put into ``namespace.<dataIdArgument.name>``
as an instance of `ContainerClass`; the container includes fields:

- ``idList``: a list of data ID dicts.
- ``refList``: a list of `~lsst.daf.persistence.Butler`
    data references (empty if ``doMakeDataRefList`` is  `False`).

Definition at line 511 of file argumentParser.py.

511  def add_id_argument(self, name, datasetType, help, level=None, doMakeDataRefList=True,
512  ContainerClass=DataIdContainer):
513  """Add a data ID argument.
514 
515 
516  Parameters
517  ----------
518  name : `str`
519  Data ID argument (including leading dashes, if wanted).
520  datasetType : `str` or `DynamicDatasetType`-type
521  Type of dataset. Supply a string for a fixed dataset type.
522  For a dynamically determined dataset type, supply
523  a `DynamicDatasetType`, such a `DatasetArgument`.
524  help : `str`
525  Help string for the argument.
526  level : `str`
527  The lowest hierarchy level to descend to for this dataset type,
528  for example `"amp"` for `"raw"` or `"ccd"` for `"calexp"`.
529  Use `""` to use the mapper's default for the dataset type.
530  Some container classes may also support `None`, which means
531  the level should not be restricted; however the default class,
532  `DataIdContainer`, does not support `None`.
533  doMakeDataRefList : bool, optional
534  If `True` (default), construct data references.
535  ContainerClass : `class`, optional
536  Class to contain data IDs and data references; the default class
537  `DataIdContainer` will work for many, but not all, cases.
538  For example if the dataset type is specified on the command line
539  then use `DynamicDatasetType`.
540 
541  Notes
542  -----
543  If ``datasetType`` is an instance of `DatasetArgument`,
544  then add a second argument to specify the dataset type.
545 
546  The associated data is put into ``namespace.<dataIdArgument.name>``
547  as an instance of `ContainerClass`; the container includes fields:
548 
549  - ``idList``: a list of data ID dicts.
550  - ``refList``: a list of `~lsst.daf.persistence.Butler`
551  data references (empty if ``doMakeDataRefList`` is `False`).
552  """
553  argName = name.lstrip("-")
554 
555  if argName in self._dataIdArgDict:
556  raise RuntimeError(f"Data ID argument {name} already exists")
557  if argName in set(("camera", "config", "butler", "log", "obsPkg")):
558  raise RuntimeError(f"Data ID argument {name} is a reserved name")
559 
560  self.add_argument(name, nargs="*", action=IdValueAction, help=help,
561  metavar="KEY=VALUE1[^VALUE2[^VALUE3...]")
562 
563  dataIdArgument = DataIdArgument(
564  name=argName,
565  datasetType=datasetType,
566  level=level,
567  doMakeDataRefList=doMakeDataRefList,
568  ContainerClass=ContainerClass,
569  )
570 
571  if dataIdArgument.isDynamicDatasetType:
572  datasetType.addArgument(parser=self, idName=argName)
573 
574  self._dataIdArgDict[argName] = dataIdArgument
575 

◆ addReuseOption()

def lsst.pipe.base.argumentParser.ArgumentParser.addReuseOption (   self,
  choices 
)
Add a "--reuse-outputs-from SUBTASK" option to the argument
parser.

CmdLineTasks that can be restarted at an intermediate step using
outputs from earlier (but still internal) steps should use this
method to allow the user to control whether that happens when
outputs from earlier steps are present.

Parameters
----------
choices : sequence
    A sequence of string names (by convention, top-level subtasks)
    that identify the steps that could be skipped when their
    outputs are already present.  The list is ordered, so when the
    user specifies one step on the command line, all previous steps
    may be skipped as well.  In addition to the choices provided,
    users may pass "all" to indicate that all steps may be thus
    skipped.

When this method is called, the ``namespace`` object returned by
``parse_args`` will contain a ``reuse`` attribute containing
a list of all steps that should be skipped if their outputs
are already present.
If no steps should be skipped, the ``reuse`` will be an empty list.

Definition at line 883 of file argumentParser.py.

883  def addReuseOption(self, choices):
884  """Add a "--reuse-outputs-from SUBTASK" option to the argument
885  parser.
886 
887  CmdLineTasks that can be restarted at an intermediate step using
888  outputs from earlier (but still internal) steps should use this
889  method to allow the user to control whether that happens when
890  outputs from earlier steps are present.
891 
892  Parameters
893  ----------
894  choices : sequence
895  A sequence of string names (by convention, top-level subtasks)
896  that identify the steps that could be skipped when their
897  outputs are already present. The list is ordered, so when the
898  user specifies one step on the command line, all previous steps
899  may be skipped as well. In addition to the choices provided,
900  users may pass "all" to indicate that all steps may be thus
901  skipped.
902 
903  When this method is called, the ``namespace`` object returned by
904  ``parse_args`` will contain a ``reuse`` attribute containing
905  a list of all steps that should be skipped if their outputs
906  are already present.
907  If no steps should be skipped, the ``reuse`` will be an empty list.
908  """
909  choices = list(choices)
910  choices.append("all")
911  self.add_argument("--reuse-outputs-from", dest="reuse", choices=choices,
912  default=[], action=ReuseAction,
913  help=("Skip the given subtask and its predecessors and reuse their outputs "
914  "if those outputs already exist. Use 'all' to specify all subtasks."))
915 
916 

◆ convert_arg_line_to_args()

def lsst.pipe.base.argumentParser.ArgumentParser.convert_arg_line_to_args (   self,
  arg_line 
)
Allow files of arguments referenced by ``@<path>`` to contain
multiple values on each line.

Parameters
----------
arg_line : `str`
    Line of text read from an argument file.

Definition at line 866 of file argumentParser.py.

866  def convert_arg_line_to_args(self, arg_line):
867  """Allow files of arguments referenced by ``@<path>`` to contain
868  multiple values on each line.
869 
870  Parameters
871  ----------
872  arg_line : `str`
873  Line of text read from an argument file.
874  """
875  arg_line = arg_line.strip()
876  if not arg_line or arg_line.startswith("#"):
877  return
878  for arg in shlex.split(arg_line, comments=True, posix=True):
879  if not arg.strip():
880  continue
881  yield arg
882 

◆ handleCamera()

def lsst.pipe.base.argumentParser.ArgumentParser.handleCamera (   self,
  namespace 
)
Perform camera-specific operations before parsing the command-line.

Parameters
----------
namespace : `argparse.Namespace`
    Namespace (an ) with the following fields:

    - ``camera``: the camera name.
    - ``config``: the config passed to parse_args, with no overrides
      applied.
    - ``obsPkg``: the ``obs_`` package for this camera.
    - ``log``: a `lsst.log` Log.

Notes
-----
The default implementation does nothing.

Definition at line 846 of file argumentParser.py.

846  def handleCamera(self, namespace):
847  """Perform camera-specific operations before parsing the command-line.
848 
849  Parameters
850  ----------
851  namespace : `argparse.Namespace`
852  Namespace (an ) with the following fields:
853 
854  - ``camera``: the camera name.
855  - ``config``: the config passed to parse_args, with no overrides
856  applied.
857  - ``obsPkg``: the ``obs_`` package for this camera.
858  - ``log``: a `lsst.log` Log.
859 
860  Notes
861  -----
862  The default implementation does nothing.
863  """
864  pass
865 

◆ parse_args()

def lsst.pipe.base.argumentParser.ArgumentParser.parse_args (   self,
  config,
  args = None,
  log = None,
  override = None 
)
Parse arguments for a command-line task.

Parameters
----------
config : `lsst.pex.config.Config`
    Config for the task being run.
args : `list`, optional
    Argument list; if `None` then ``sys.argv[1:]`` is used.
log : `lsst.log.Log`, optional
    `~lsst.log.Log` instance; if `None` use the default log.
override : callable, optional
    A config override function. It must take the root config object
    as its only argument and must modify the config in place.
    This function is called after camera-specific overrides files
    are applied, and before command-line config overrides
    are applied (thus allowing the user the final word).

Returns
-------
namespace : `argparse.Namespace`
    A `~argparse.Namespace` instance containing fields:

    - ``camera``: camera name.
    - ``config``: the supplied config with all overrides applied,
validated and frozen.
    - ``butler``: a `lsst.daf.persistence.Butler` for the data.
    - An entry for each of the data ID arguments registered by
`add_id_argument`, of the type passed to its ``ContainerClass``
keyword (`~lsst.pipe.base.DataIdContainer` by default). It
includes public elements ``idList`` and ``refList``.
    - ``log``: a `lsst.log` Log.
    - An entry for each command-line argument,
with the following exceptions:

      - config is the supplied config, suitably updated.
      - configfile, id and loglevel are all missing.
    - ``obsPkg``: name of the ``obs_`` package for this camera.

Definition at line 576 of file argumentParser.py.

576  def parse_args(self, config, args=None, log=None, override=None):
577  """Parse arguments for a command-line task.
578 
579  Parameters
580  ----------
581  config : `lsst.pex.config.Config`
582  Config for the task being run.
583  args : `list`, optional
584  Argument list; if `None` then ``sys.argv[1:]`` is used.
585  log : `lsst.log.Log`, optional
586  `~lsst.log.Log` instance; if `None` use the default log.
587  override : callable, optional
588  A config override function. It must take the root config object
589  as its only argument and must modify the config in place.
590  This function is called after camera-specific overrides files
591  are applied, and before command-line config overrides
592  are applied (thus allowing the user the final word).
593 
594  Returns
595  -------
596  namespace : `argparse.Namespace`
597  A `~argparse.Namespace` instance containing fields:
598 
599  - ``camera``: camera name.
600  - ``config``: the supplied config with all overrides applied,
601  validated and frozen.
602  - ``butler``: a `lsst.daf.persistence.Butler` for the data.
603  - An entry for each of the data ID arguments registered by
604  `add_id_argument`, of the type passed to its ``ContainerClass``
605  keyword (`~lsst.pipe.base.DataIdContainer` by default). It
606  includes public elements ``idList`` and ``refList``.
607  - ``log``: a `lsst.log` Log.
608  - An entry for each command-line argument,
609  with the following exceptions:
610 
611  - config is the supplied config, suitably updated.
612  - configfile, id and loglevel are all missing.
613  - ``obsPkg``: name of the ``obs_`` package for this camera.
614  """
615  if args is None:
616  args = sys.argv[1:]
617 
618  if len(args) < 1 or args[0].startswith("-") or args[0].startswith("@"):
619  self.print_help()
620  if len(args) == 1 and args[0] in ("-h", "--help"):
621  self.exit()
622  else:
623  self.exit(f"{self.prog}: error: Must specify input as first argument")
624 
625  # Note that --rerun may change namespace.input, but if it does
626  # we verify that the new input has the same mapper class.
627  namespace = argparse.Namespace()
628  namespace.input = _fixPath(DEFAULT_INPUT_NAME, args[0])
629  if not os.path.isdir(namespace.input):
630  self.error(f"Error: input={namespace.input!r} not found")
631 
632  namespace.config = config
633  namespace.log = log if log is not None else lsstLog.Log.getDefaultLogger()
634  mapperClass = dafPersist.Butler.getMapperClass(namespace.input)
635  if mapperClass is None:
636  self.error(f"Error: no mapper specified for input repo {namespace.input!r}")
637 
638  namespace.camera = mapperClass.getCameraName()
639  namespace.obsPkg = mapperClass.getPackageName()
640 
641  self.handleCamera(namespace)
642 
643  self._applyInitialOverrides(namespace)
644  if override is not None:
645  override(namespace.config)
646 
647  # Add data ID containers to namespace
648  for dataIdArgument in self._dataIdArgDict.values():
649  setattr(namespace, dataIdArgument.name, dataIdArgument.ContainerClass(level=dataIdArgument.level))
650 
651  namespace = argparse.ArgumentParser.parse_args(self, args=args, namespace=namespace)
652  del namespace.configfile
653 
654  self._parseDirectories(namespace)
655 
656  if namespace.clobberOutput:
657  if namespace.output is None:
658  self.error("--clobber-output is only valid with --output or --rerun")
659  elif namespace.output == namespace.input:
660  self.error("--clobber-output is not valid when the output and input repos are the same")
661  if os.path.exists(namespace.output):
662  namespace.log.info("Removing output repo %s for --clobber-output", namespace.output)
663  shutil.rmtree(namespace.output)
664 
665  namespace.log.debug("input=%s", namespace.input)
666  namespace.log.debug("calib=%s", namespace.calib)
667  namespace.log.debug("output=%s", namespace.output)
668 
669  obeyShowArgument(namespace.show, namespace.config, exit=False)
670 
671  # No environment variable or --output or --rerun specified.
672  if self.requireOutput and namespace.output is None and namespace.rerun is None:
673  self.error("no output directory specified.\n"
674  "An output directory must be specified with the --output or --rerun\n"
675  "command-line arguments.\n")
676 
677  butlerArgs = {} # common arguments for butler elements
678  if namespace.calib:
679  butlerArgs = {'mapperArgs': {'calibRoot': namespace.calib}}
680  if namespace.output:
681  outputs = {'root': namespace.output, 'mode': 'rw'}
682  inputs = {'root': namespace.input}
683  inputs.update(butlerArgs)
684  outputs.update(butlerArgs)
685  namespace.butler = dafPersist.Butler(inputs=inputs, outputs=outputs)
686  else:
687  outputs = {'root': namespace.input, 'mode': 'rw'}
688  outputs.update(butlerArgs)
689  namespace.butler = dafPersist.Butler(outputs=outputs)
690 
691  # convert data in each of the identifier lists to proper types
692  # this is done after constructing the butler,
693  # hence after parsing the command line,
694  # because it takes a long time to construct a butler
695  self._processDataIds(namespace)
696  if "data" in namespace.show:
697  for dataIdName in self._dataIdArgDict.keys():
698  for dataRef in getattr(namespace, dataIdName).refList:
699  print(f"{dataIdName} dataRef.dataId = {dataRef.dataId}")
700 
701  if namespace.show and "run" not in namespace.show:
702  sys.exit(0)
703 
704  if namespace.debug:
705  try:
706  import debug
707  assert debug # silence pyflakes
708  except ImportError:
709  print("Warning: no 'debug' module found", file=sys.stderr)
710  namespace.debug = False
711 
712  del namespace.loglevel
713 
714  if namespace.longlog:
715  lsstLog.configure_prop("""
716 log4j.rootLogger=INFO, A1
717 log4j.appender.A1=ConsoleAppender
718 log4j.appender.A1.Target=System.out
719 log4j.appender.A1.layout=PatternLayout
720 log4j.appender.A1.layout.ConversionPattern=%-5p %d{yyyy-MM-ddTHH:mm:ss.SSSZ} %c (%X{LABEL})(%F:%L)- %m%n
721 """)
722  del namespace.longlog
723 
724  namespace.config.validate()
725  namespace.config.freeze()
726 
727  return namespace
728 

Member Data Documentation

◆ requireOutput

bool lsst.pipe.base.argumentParser.ArgumentParser.requireOutput = True
static

Definition at line 432 of file argumentParser.py.


The documentation for this class was generated from the following file:
lsst.pipe.base.argumentParser.obeyShowArgument
def obeyShowArgument(showOpts, config=None, exit=False)
Definition: argumentParser.py:968
astshim.keyMap.keyMapContinued.keys
def keys(self)
Definition: keyMapContinued.py:6
lsst::daf::persistence.butler.Butler
Definition: butler.py:321
list
daf::base::PropertyList * list
Definition: fits.cc:913
set
daf::base::PropertySet * set
Definition: fits.cc:912
lsst::jointcal.check_logged_chi2.parse_args
def parse_args()
Definition: check_logged_chi2.py:260