LSSTApplications  18.1.0
LSSTDataManagementBasePackage
Public Member Functions | Properties | List of all members
lsst.afw.table.base.baseContinued.Catalog Class Reference
Inheritance diagram for lsst.afw.table.base.baseContinued.Catalog:
lsst.utils.wrappers.TemplateMeta

Public Member Functions

def getColumnView (self)
 
def __getitem__ (self, key)
 
def __setitem__ (self, key, value)
 
def __delitem__ (self, key)
 
def append (self, record)
 
def insert (self, key, value)
 
def clear (self)
 
def addNew (self)
 
def cast (self, type_, deep=False)
 
def copy (self, deep=False)
 
def extend (self, iterable, deep=False, mapper=None)
 
def __reduce__ (self)
 
def asAstropy (self, cls=None, copy=False, unviewable="copy")
 Return an astropy.table.Table (or subclass thereof) view into this catalog. More...
 
def __dir__ (self)
 
def __getattr__ (self, name)
 
def __str__ (self)
 
def __repr__ (self)
 
def __new__ (cls, name, bases, attrs)
 
def __call__ (cls, args, kwds)
 
def __subclasscheck__ (cls, subclass)
 
def __instancecheck__ (cls, instance)
 
def __subclasses__ (cls)
 
def register (cls, key, subclass)
 
def alias (cls, key, subclass)
 
def __iter__ (cls)
 
def __len__ (cls)
 
def __contains__ (cls, key)
 
def keys (cls)
 
def values (cls)
 
def items (cls)
 
def get (cls, key, default=None)
 

Properties

 columns = property(__getColumns, doc="a column view of the catalog")
 

Detailed Description

Definition at line 94 of file baseContinued.py.

Member Function Documentation

◆ __call__()

def lsst.utils.wrappers.TemplateMeta.__call__ (   cls,
  args,
  kwds 
)
inherited

Definition at line 293 of file wrappers.py.

293  def __call__(cls, *args, **kwds):
294  # __call__ is invoked when someone tries to construct an instance of
295  # the abstract base class.
296  # If the ABC defines a "TEMPLATE_PARAMS" attribute, we use those strings
297  # as the kwargs we should intercept to find the right type.
298  # Generate a type mapping key from input keywords. If the type returned
299  # from the keyword lookup is a numpy dtype object, fetch the underlying
300  # type of the dtype
301  key = []
302  for p, d in zip(cls.TEMPLATE_PARAMS, cls.TEMPLATE_DEFAULTS):
303  tempKey = kwds.pop(p, d)
304  if isinstance(tempKey, np.dtype):
305  tempKey = tempKey.type
306  key.append(tempKey)
307  key = tuple(key)
308 
309  # indices are only tuples if there are multiple elements
310  clz = cls._registry.get(key[0] if len(key) == 1 else key, None)
311  if clz is None:
312  d = {k: v for k, v in zip(cls.TEMPLATE_PARAMS, key)}
313  raise TypeError("No registered subclass for {}.".format(d))
314  return clz(*args, **kwds)
315 
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:168

◆ __contains__()

def lsst.utils.wrappers.TemplateMeta.__contains__ (   cls,
  key 
)
inherited

Definition at line 458 of file wrappers.py.

458  def __contains__(cls, key):
459  return key in cls._registry
460 

◆ __delitem__()

def lsst.afw.table.base.baseContinued.Catalog.__delitem__ (   self,
  key 
)

Definition at line 153 of file baseContinued.py.

153  def __delitem__(self, key):
154  self._columns = None
155  if isinstance(key, slice):
156  self._delslice_(key)
157  else:
158  self._delitem_(key)
159 

◆ __dir__()

def lsst.afw.table.base.baseContinued.Catalog.__dir__ (   self)
This custom dir is necessary due to the custom getattr below.
Without it, not all of the methods available are returned with dir.
See DM-7199

Definition at line 302 of file baseContinued.py.

302  def __dir__(self):
303  """
304  This custom dir is necessary due to the custom getattr below.
305  Without it, not all of the methods available are returned with dir.
306  See DM-7199
307  """
308  def recursive_get_class_dir(cls):
309  """
310  Return a set containing the names of all methods
311  for a given class *and* all of its subclasses.
312  """
313  result = set()
314  if cls.__bases__:
315  for subcls in cls.__bases__:
316  result |= recursive_get_class_dir(subcls)
317  result |= set(cls.__dict__.keys())
318  return result
319  return sorted(set(dir(self.columns)) | set(dir(self.table)) |
320  recursive_get_class_dir(type(self)) | set(self.__dict__.keys()))
321 
daf::base::PropertySet * set
Definition: fits.cc:884
table::Key< int > type
Definition: Detector.cc:167

◆ __getattr__()

def lsst.afw.table.base.baseContinued.Catalog.__getattr__ (   self,
  name 
)

Definition at line 322 of file baseContinued.py.

322  def __getattr__(self, name):
323  # Catalog forwards unknown method calls to its table and column view
324  # for convenience. (Feature requested by RHL; complaints about magic
325  # should be directed to him.)
326  if name == "_columns":
327  self._columns = None
328  return None
329  try:
330  return getattr(self.table, name)
331  except AttributeError:
332  return getattr(self.columns, name)
333 

◆ __getitem__()

def lsst.afw.table.base.baseContinued.Catalog.__getitem__ (   self,
  key 
)
Return the record at index key if key is an integer,
return a column if key is a string field name or Key,
or return a subset of the catalog if key is a slice
or boolean NumPy array.

Definition at line 106 of file baseContinued.py.

106  def __getitem__(self, key):
107  """Return the record at index key if key is an integer,
108  return a column if key is a string field name or Key,
109  or return a subset of the catalog if key is a slice
110  or boolean NumPy array.
111  """
112  if type(key) is slice:
113  (start, stop, step) = (key.start, key.stop, key.step)
114  if step is None:
115  step = 1
116  if start is None:
117  start = 0
118  if stop is None:
119  stop = len(self)
120  return self.subset(start, stop, step)
121  elif isinstance(key, np.ndarray):
122  if key.dtype == bool:
123  return self.subset(key)
124  raise RuntimeError("Unsupported array type for indexing non-contiguous Catalog: %s" %
125  (key.dtype,))
126  elif isinstance(key, Key) or isinstance(key, str):
127  if not self.isContiguous():
128  if isinstance(key, str):
129  key = self.schema[key].asKey()
130  array = self._getitem_(key)
131  # This array doesn't share memory with the Catalog, so don't let it be modified by
132  # the user who thinks that the Catalog itself is being modified.
133  # Just be aware that this array can only be passed down to C++ as an ndarray::Array<T const>
134  # instead of an ordinary ndarray::Array<T>. If pybind isn't letting it down into C++,
135  # you may have left off the 'const' in the definition.
136  array.flags.writeable = False
137  return array
138  return self.columns[key]
139  else:
140  return self._getitem_(key)
141 
table::Key< int > type
Definition: Detector.cc:167

◆ __instancecheck__()

def lsst.utils.wrappers.TemplateMeta.__instancecheck__ (   cls,
  instance 
)
inherited

Definition at line 326 of file wrappers.py.

326  def __instancecheck__(cls, instance):
327  # Special method hook for the isinstance built-in: we return true for
328  # an instance of any registered type or true subclass thereof.
329  if type(instance) in cls._registry:
330  return True
331  for v in cls._registry.values():
332  if isinstance(instance, v):
333  return True
334  return False
335 
table::Key< int > type
Definition: Detector.cc:167

◆ __iter__()

def lsst.utils.wrappers.TemplateMeta.__iter__ (   cls)
inherited

Definition at line 452 of file wrappers.py.

452  def __iter__(cls):
453  return iter(cls._registry)
454 

◆ __len__()

def lsst.utils.wrappers.TemplateMeta.__len__ (   cls)
inherited

Definition at line 455 of file wrappers.py.

455  def __len__(cls):
456  return len(cls._registry)
457 

◆ __new__()

def lsst.utils.wrappers.TemplateMeta.__new__ (   cls,
  name,
  bases,
  attrs 
)
inherited

Definition at line 261 of file wrappers.py.

261  def __new__(cls, name, bases, attrs):
262  # __new__ is invoked when the abstract base class is defined (via a
263  # class statement). We save a dict of class attributes (including
264  # methods) that were defined in the class body so we can copy them
265  # to registered subclasses later.
266  # We also initialize an empty dict to store the registered subclasses.
267  attrs["_inherited"] = {k: v for k, v in attrs.items()
268  if isAttributeSafeToTransfer(k, v)}
269  # The special "TEMPLATE_PARAMS" class attribute, if defined, contains
270  # names of the template parameters, which we use to set those
271  # attributes on registered subclasses and intercept arguments to the
272  # constructor. This line removes it from the dict of things that
273  # should be inherited while setting a default of 'dtype' if it's not
274  # defined.
275  attrs["TEMPLATE_PARAMS"] = \
276  attrs["_inherited"].pop("TEMPLATE_PARAMS", ("dtype",))
277  attrs["TEMPLATE_DEFAULTS"] = \
278  attrs["_inherited"].pop("TEMPLATE_DEFAULTS",
279  (None,)*len(attrs["TEMPLATE_PARAMS"]))
280  attrs["_registry"] = dict()
281  self = type.__new__(cls, name, bases, attrs)
282 
283  if len(self.TEMPLATE_PARAMS) == 0:
284  raise ValueError(
285  "TEMPLATE_PARAMS must be a tuple with at least one element."
286  )
287  if len(self.TEMPLATE_DEFAULTS) != len(self.TEMPLATE_PARAMS):
288  raise ValueError(
289  "TEMPLATE_PARAMS and TEMPLATE_DEFAULTS must have same length."
290  )
291  return self
292 
def isAttributeSafeToTransfer(name, value)
Definition: wrappers.py:45

◆ __reduce__()

def lsst.afw.table.base.baseContinued.Catalog.__reduce__ (   self)

Definition at line 224 of file baseContinued.py.

224  def __reduce__(self):
225  import lsst.afw.fits
226  return lsst.afw.fits.reduceToFits(self)
227 

◆ __repr__()

def lsst.afw.table.base.baseContinued.Catalog.__repr__ (   self)

Definition at line 342 of file baseContinued.py.

342  def __repr__(self):
343  return "%s\n%s" % (type(self), self)
344 
345 
346 Catalog.register("Base", BaseCatalog)
347 
table::Key< int > type
Definition: Detector.cc:167

◆ __setitem__()

def lsst.afw.table.base.baseContinued.Catalog.__setitem__ (   self,
  key,
  value 
)
If ``key`` is an integer, set ``catalog[key]`` to ``value``. Otherwise select column ``key``
and set it to ``value``.

Definition at line 142 of file baseContinued.py.

142  def __setitem__(self, key, value):
143  """
144  If ``key`` is an integer, set ``catalog[key]`` to ``value``. Otherwise select column ``key``
145  and set it to ``value``.
146  """
147  self._columns = None
148  if isinstance(key, Key) or isinstance(key, str):
149  self.columns[key] = value
150  else:
151  return self.set(key, value)
152 

◆ __str__()

def lsst.afw.table.base.baseContinued.Catalog.__str__ (   self)

Definition at line 334 of file baseContinued.py.

334  def __str__(self):
335  if self.isContiguous():
336  return str(self.asAstropy())
337  else:
338  fields = ' '.join(x.field.getName() for x in self.schema)
339  string = "Non-contiguous afw.Catalog of %d rows.\ncolumns: %s" % (len(self), fields)
340  return string
341 

◆ __subclasscheck__()

def lsst.utils.wrappers.TemplateMeta.__subclasscheck__ (   cls,
  subclass 
)
inherited

Definition at line 316 of file wrappers.py.

316  def __subclasscheck__(cls, subclass):
317  # Special method hook for the issubclass built-in: we return true for
318  # any registered type or true subclass thereof.
319  if subclass in cls._registry:
320  return True
321  for v in cls._registry.values():
322  if issubclass(subclass, v):
323  return True
324  return False
325 

◆ __subclasses__()

def lsst.utils.wrappers.TemplateMeta.__subclasses__ (   cls)
inherited
Return a tuple of all classes that inherit from this class.

Definition at line 336 of file wrappers.py.

336  def __subclasses__(cls):
337  """Return a tuple of all classes that inherit from this class.
338  """
339  # This special method isn't defined as part of the Python data model,
340  # but it exists on builtins (including ABCMeta), and it provides useful
341  # functionality.
342  return tuple(set(cls._registry.values()))
343 
daf::base::PropertySet * set
Definition: fits.cc:884

◆ addNew()

def lsst.afw.table.base.baseContinued.Catalog.addNew (   self)

Definition at line 172 of file baseContinued.py.

172  def addNew(self):
173  self._columns = None
174  return self._addNew()
175 

◆ alias()

def lsst.utils.wrappers.TemplateMeta.alias (   cls,
  key,
  subclass 
)
inherited
Add an alias that allows an existing subclass to be accessed with a
different key.

Definition at line 429 of file wrappers.py.

429  def alias(cls, key, subclass):
430  """Add an alias that allows an existing subclass to be accessed with a
431  different key.
432  """
433  if key is None:
434  raise ValueError("None may not be used as a key.")
435  if key in cls._registry:
436  raise KeyError("Cannot multiply-register key {}".format(key))
437  primaryKey = tuple(getattr(subclass, p, None)
438  for p in cls.TEMPLATE_PARAMS)
439  if len(primaryKey) == 1:
440  # indices are only tuples if there are multiple elements
441  primaryKey = primaryKey[0]
442  if cls._registry.get(primaryKey, None) != subclass:
443  raise ValueError("Subclass is not registered with this base class.")
444  cls._registry[key] = subclass
445 
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:168

◆ append()

def lsst.afw.table.base.baseContinued.Catalog.append (   self,
  record 
)

Definition at line 160 of file baseContinued.py.

160  def append(self, record):
161  self._columns = None
162  self._append(record)
163 
std::shared_ptr< FrameSet > append(FrameSet const &first, FrameSet const &second)
Construct a FrameSet that performs two transformations in series.
Definition: functional.cc:33

◆ asAstropy()

def lsst.afw.table.base.baseContinued.Catalog.asAstropy (   self,
  cls = None,
  copy = False,
  unviewable = "copy" 
)

Return an astropy.table.Table (or subclass thereof) view into this catalog.

Parameters
[in]clsTable subclass to use; None implies astropy.table.Table itself. Use astropy.table.QTable to get Quantity columns.
[in]copyWhether to copy data from the LSST catalog to the astropy table. Not copying is usually faster, but can keep memory from being freed if columns are later removed from the Astropy view.
[in]unviewableOne of the following options, indicating how to handle field types (string and Flag) for which views cannot be constructed:
  • 'copy' (default): copy only the unviewable fields.
  • 'raise': raise ValueError if unviewable fields are present.
  • 'skip': do not include unviewable fields in the Astropy Table. This option is ignored if copy=True.

Definition at line 228 of file baseContinued.py.

228  def asAstropy(self, cls=None, copy=False, unviewable="copy"):
229  """!Return an astropy.table.Table (or subclass thereof) view into this catalog.
230 
231  @param[in] cls Table subclass to use; None implies astropy.table.Table itself.
232  Use astropy.table.QTable to get Quantity columns.
233 
234  @param[in] copy Whether to copy data from the LSST catalog to the astropy table.
235  Not copying is usually faster, but can keep memory from being
236  freed if columns are later removed from the Astropy view.
237 
238  @param[in] unviewable One of the following options, indicating how to handle field types
239  (string and Flag) for which views cannot be constructed:
240  - 'copy' (default): copy only the unviewable fields.
241  - 'raise': raise ValueError if unviewable fields are present.
242  - 'skip': do not include unviewable fields in the Astropy Table.
243  This option is ignored if copy=True.
244  """
245  import astropy.table
246  if cls is None:
247  cls = astropy.table.Table
248  if unviewable not in ("copy", "raise", "skip"):
249  raise ValueError(
250  "'unviewable'=%r must be one of 'copy', 'raise', or 'skip'" % (unviewable,))
251  ps = self.getMetadata()
252  meta = ps.toOrderedDict() if ps is not None else None
253  columns = []
254  items = self.schema.extract("*", ordered=True)
255  for name, item in items.items():
256  key = item.key
257  unit = item.field.getUnits() or None # use None instead of "" when empty
258  if key.getTypeString() == "String":
259  if not copy:
260  if unviewable == "raise":
261  raise ValueError("Cannot extract string "
262  "unless copy=True or unviewable='copy' or 'skip'.")
263  elif unviewable == "skip":
264  continue
265  data = np.zeros(
266  len(self), dtype=np.dtype((str, key.getSize())))
267  for i, record in enumerate(self):
268  data[i] = record.get(key)
269  elif key.getTypeString() == "Flag":
270  if not copy:
271  if unviewable == "raise":
272  raise ValueError("Cannot extract packed bit columns "
273  "unless copy=True or unviewable='copy' or 'skip'.")
274  elif unviewable == "skip":
275  continue
276  data = self.columns.get_bool_array(key)
277  elif key.getTypeString() == "Angle":
278  data = self.columns.get(key)
279  unit = "radian"
280  if copy:
281  data = data.copy()
282  elif "Array" in key.getTypeString() and key.isVariableLength():
283  # Can't get columns for variable-length array fields.
284  if unviewable == "raise":
285  raise ValueError("Cannot extract variable-length array fields unless unviewable='skip'.")
286  elif unviewable == "skip" or unviewable == "copy":
287  continue
288  else:
289  data = self.columns.get(key)
290  if copy:
291  data = data.copy()
292  columns.append(
293  astropy.table.Column(
294  data,
295  name=name,
296  unit=unit,
297  description=item.field.getDoc()
298  )
299  )
300  return cls(columns, meta=meta, copy=False)
301 

◆ cast()

def lsst.afw.table.base.baseContinued.Catalog.cast (   self,
  type_,
  deep = False 
)
Return a copy of the catalog with the given type, optionally
cloning the table and deep-copying all records if deep==True.

Definition at line 176 of file baseContinued.py.

176  def cast(self, type_, deep=False):
177  """Return a copy of the catalog with the given type, optionally
178  cloning the table and deep-copying all records if deep==True.
179  """
180  if deep:
181  table = self.table.clone()
182  table.preallocate(len(self))
183  else:
184  table = self.table
185  copy = type_(table)
186  copy.extend(self, deep=deep)
187  return copy
188 

◆ clear()

def lsst.afw.table.base.baseContinued.Catalog.clear (   self)

Definition at line 168 of file baseContinued.py.

168  def clear(self):
169  self._columns = None
170  self._clear()
171 

◆ copy()

def lsst.afw.table.base.baseContinued.Catalog.copy (   self,
  deep = False 
)
Copy a catalog (default is not a deep copy).

Definition at line 189 of file baseContinued.py.

189  def copy(self, deep=False):
190  """
191  Copy a catalog (default is not a deep copy).
192  """
193  return self.cast(type(self), deep)
194 
table::Key< int > type
Definition: Detector.cc:167

◆ extend()

def lsst.afw.table.base.baseContinued.Catalog.extend (   self,
  iterable,
  deep = False,
  mapper = None 
)
Append all records in the given iterable to the catalog.

Arguments:
  iterable ------ any Python iterable containing records
  deep ---------- if True, the records will be deep-copied; ignored
          if mapper is not None (that always implies True).
  mapper -------- a SchemaMapper object used to translate records

Definition at line 195 of file baseContinued.py.

195  def extend(self, iterable, deep=False, mapper=None):
196  """Append all records in the given iterable to the catalog.
197 
198  Arguments:
199  iterable ------ any Python iterable containing records
200  deep ---------- if True, the records will be deep-copied; ignored
201  if mapper is not None (that always implies True).
202  mapper -------- a SchemaMapper object used to translate records
203  """
204  self._columns = None
205  # We can't use isinstance here, because the SchemaMapper symbol isn't available
206  # when this code is part of a subclass of Catalog in another package.
207  if type(deep).__name__ == "SchemaMapper":
208  mapper = deep
209  deep = None
210  if isinstance(iterable, type(self)):
211  if mapper is not None:
212  self._extend(iterable, mapper)
213  else:
214  self._extend(iterable, deep)
215  else:
216  for record in iterable:
217  if mapper is not None:
218  self._append(self.table.copyRecord(record, mapper))
219  elif deep:
220  self._append(self.table.copyRecord(record))
221  else:
222  self._append(record)
223 
table::Key< int > type
Definition: Detector.cc:167

◆ get()

def lsst.utils.wrappers.TemplateMeta.get (   cls,
  key,
  default = None 
)
inherited
Return the subclass associated with the given key (including
aliases), or ``default`` if the key is not recognized.

Definition at line 477 of file wrappers.py.

477  def get(cls, key, default=None):
478  """Return the subclass associated with the given key (including
479  aliases), or ``default`` if the key is not recognized.
480  """
481  return cls._registry.get(key, default)
482 

◆ getColumnView()

def lsst.afw.table.base.baseContinued.Catalog.getColumnView (   self)

Definition at line 96 of file baseContinued.py.

96  def getColumnView(self):
97  self._columns = self._getColumnView()
98  return self._columns
99 

◆ insert()

def lsst.afw.table.base.baseContinued.Catalog.insert (   self,
  key,
  value 
)

Definition at line 164 of file baseContinued.py.

164  def insert(self, key, value):
165  self._columns = None
166  self._insert(key, value)
167 

◆ items()

def lsst.utils.wrappers.TemplateMeta.items (   cls)
inherited
Return an iterable of (key, subclass) pairs.

Definition at line 472 of file wrappers.py.

472  def items(cls):
473  """Return an iterable of (key, subclass) pairs.
474  """
475  return cls._registry.items()
476 
std::vector< SchemaItem< Flag > > * items

◆ keys()

def lsst.utils.wrappers.TemplateMeta.keys (   cls)
inherited
Return an iterable containing all keys (including aliases).

Definition at line 461 of file wrappers.py.

461  def keys(cls):
462  """Return an iterable containing all keys (including aliases).
463  """
464  return cls._registry.keys()
465 

◆ register()

def lsst.utils.wrappers.TemplateMeta.register (   cls,
  key,
  subclass 
)
inherited
Register a subclass of this ABC with the given key (a string,
number, type, or other hashable).

Register may only be called once for a given key or a given subclass.

Definition at line 344 of file wrappers.py.

344  def register(cls, key, subclass):
345  """Register a subclass of this ABC with the given key (a string,
346  number, type, or other hashable).
347 
348  Register may only be called once for a given key or a given subclass.
349  """
350  if key is None:
351  raise ValueError("None may not be used as a key.")
352  if subclass in cls._registry.values():
353  raise ValueError(
354  "This subclass has already registered with another key; "
355  "use alias() instead."
356  )
357  if cls._registry.setdefault(key, subclass) != subclass:
358  if len(cls.TEMPLATE_PARAMS) == 1:
359  d = {cls.TEMPLATE_PARAMS[0]: key}
360  else:
361  d = {k: v for k, v in zip(cls.TEMPLATE_PARAMS, key)}
362  raise KeyError(
363  "Another subclass is already registered with {}".format(d)
364  )
365  # If the key used to register a class matches the default key,
366  # make the static methods available through the ABC
367  if cls.TEMPLATE_DEFAULTS:
368  defaults = (cls.TEMPLATE_DEFAULTS[0] if
369  len(cls.TEMPLATE_DEFAULTS) == 1 else
370  cls.TEMPLATE_DEFAULTS)
371  if key == defaults:
372  conflictStr = ("Base class has attribute {}"
373  " which is a {} method of {}."
374  " Cannot link method to base class.")
375  # In the following if statements, the explicit lookup in
376  # __dict__ must be done, as a call to getattr returns the
377  # bound method, which no longer reports as a static or class
378  # method. The static methods must be transfered to the ABC
379  # in this unbound state, so that python will still see them
380  # as static methods and not attempt to pass self. The class
381  # methods must be transfered to the ABC as a bound method
382  # so that the correct cls be called with the class method
383  for name in subclass.__dict__:
384  if name in ("__new__", "__init_subclass__"):
385  continue
386  obj = subclass.__dict__[name]
387  # copy over the static methods
388  isBuiltin = isinstance(obj, types.BuiltinFunctionType)
389  isStatic = isinstance(obj, staticmethod)
390  if isBuiltin or isStatic:
391  if hasattr(cls, name):
392  raise AttributeError(
393  conflictStr.format(name, "static", subclass))
394  setattr(cls, name, obj)
395  # copy over the class methods
396  elif isinstance(obj, classmethod):
397  if hasattr(cls, name):
398  raise AttributeError(
399  conflictStr.format(name, "class", subclass))
400  setattr(cls, name, getattr(subclass, name))
401 
402  def setattrSafe(name, value):
403  try:
404  currentValue = getattr(subclass, name)
405  if currentValue != value:
406  msg = ("subclass already has a '{}' attribute with "
407  "value {} != {}.")
408  raise ValueError(
409  msg.format(name, currentValue, value)
410  )
411  except AttributeError:
412  setattr(subclass, name, value)
413 
414  if len(cls.TEMPLATE_PARAMS) == 1:
415  setattrSafe(cls.TEMPLATE_PARAMS[0], key)
416  elif len(cls.TEMPLATE_PARAMS) == len(key):
417  for p, k in zip(cls.TEMPLATE_PARAMS, key):
418  setattrSafe(p, k)
419  else:
420  raise ValueError(
421  "key must have {} elements (one for each of {})".format(
422  len(cls.TEMPLATE_PARAMS), cls.TEMPLATE_PARAMS
423  )
424  )
425 
426  for name, attr in cls._inherited.items():
427  setattr(subclass, name, attr)
428 
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:168
std::vector< SchemaItem< Flag > > * items

◆ values()

def lsst.utils.wrappers.TemplateMeta.values (   cls)
inherited
Return an iterable of registered subclasses, with duplicates
corresponding to any aliases.

Definition at line 466 of file wrappers.py.

466  def values(cls):
467  """Return an iterable of registered subclasses, with duplicates
468  corresponding to any aliases.
469  """
470  return cls._registry.values()
471 

Property Documentation

◆ columns

lsst.afw.table.base.baseContinued.Catalog.columns = property(__getColumns, doc="a column view of the catalog")
static

Definition at line 104 of file baseContinued.py.


The documentation for this class was generated from the following file:
  • /j/snowflake/release/lsstsw/stack/Linux64/afw/18.1.0/python/lsst/afw/table/base/baseContinued.py