28 from ..schema
import Field, Schema
29 from .schemaMapper
import SchemaMapper
35 def addOutputField(self, field, type=None, doc=None, units="", size=None,
36 doReplace=False, parse_strict="raise"):
37 """Add an un-mapped field to the output Schema. 42 The string name of the Field, or a fully-constructed Field object. 43 If the latter, all other arguments besides doReplace are ignored. 45 The type of field to create. Valid types are the keys of the 46 afw.table.Field dictionary. 48 Documentation for the field. 50 Units for the field, or an empty string if unitless. 52 Size of the field; valid for string and array fields only. 54 If a field with this name already exists, replace it instead of 55 raising pex.exceptions.InvalidParameterError. 57 One of 'raise' (default), 'warn', or 'strict', indicating how to 58 handle unrecognized unit strings. See also astropy.units.Unit. 60 if isinstance(field, str):
61 field = Field[type](field, doc=doc, units=units,
62 size=size, parse_strict=parse_strict)
63 return field._addTo(self.editOutputSchema(), doReplace)
65 def addMapping(self, input, output=None, doReplace=True):
66 """Add a mapped field to the output schema. 71 A Key from the input schema whose values will be mapped to the new 74 A Field object that describes the new field to be added to the 75 output schema, or the name of the field (with documentation and 76 units copied from the input schema). May be None to copy everything 77 from the input schema. 79 If a field with this name already exists in the output schema, 80 replace it instead of raising pex.exceptions.InvalidParameterError. 85 if output
is True or output
is False:
88 return input._addMappingTo(self, output, doReplace)
91 """SchemaMappers are equal if their respective input and output 92 schemas are identical, and they have the same mappings defined. 94 Note: It was simpler to implement equality in python than in C++. 96 iSchema = self.getInputSchema()
97 oSchema = self.getOutputSchema()
98 if (
not (iSchema.compare(other.getInputSchema(), Schema.IDENTICAL) == Schema.IDENTICAL
and 99 oSchema.compare(other.getOutputSchema(), Schema.IDENTICAL) == Schema.IDENTICAL)):
103 if self.isMapped(item.key)
and other.isMapped(item.key):
104 if (self.getMapping(item.key) == other.getMapping(item.key)):
108 elif (
not self.isMapped(item.key))
and (
not other.isMapped(item.key)):
116 """To support pickle.""" 118 for item
in self.getInputSchema():
120 key = self.getMapping(item.key)
124 mappings[item.key] = self.getOutputSchema().find(key).field
125 return (makeSchemaMapper, (self.getInputSchema(), self.getOutputSchema(), mappings))
129 """Build a mapper from two Schemas and the mapping between them. 134 input : `lsst.afw.table.Schema` 135 The input schema for the mapper. 136 output : `lsst.afw.table.Schema` 137 The output schema for the mapper. 138 mappings : `dict` [`lsst.afw.table.Key`, `lsst.afw.table.Key`] 139 The mappings to define between the input and output schema. 143 mapper : `lsst.afw.table.SchemaMapper` 144 The constructed SchemaMapper. 147 for key, value
in mappings.items():
148 mapper.addMapping(key, value)
Reports attempts to access elements using an invalid key.
def addOutputField(self, field, type=None, doc=None, units="", size=None, doReplace=False, parse_strict="raise")
def addMapping(self, input, output=None, doReplace=True)
def makeSchemaMapper(input, output, mappings)