In the taxonomic tree, each node is an instance of this class, representing one biological taxon. The root taxon has no parent; for all other taxa, the parent is the containing taxon. For example, the root taxon bird systematics is class Aves; its children are taxa at the order level; each order taxon has families as children, and so on. Here is the interface:
# - - - - - c l a s s T a x o n
class Taxon(object):
'''Represents one biological taxon.
Exports:
Taxon ( hier, parent, rawTaxon ):
[ (hier is a Hier instance) and
(parent is the new taxon's parent as a Taxon or None) and
(rawTaxon is a RawTaxon instance whose .rankCode is
in self.hier) ->
if all fields are acceptably short ->
return a new Taxon object with those values
else ->
Log() +:= error message(s)
raise SyntaxError ]
.hier: [ as passed to constructor ]
.parent: [ as passed to constructor ]
.rank: [ Rank representing rawTaxon.rank ]
.sci: [ rawTaxon.sci value, read-only ]
.eng: [ rawTaxon.eng value, read-only ]
.status:
[ rawTaxon.status value, read-only, a string that
matches STATUS_RE ]
.canon: [ rawTaxon.canon value, read-only ]
.disamb: [ rawTaxon.disamb value, read-only ]
.shortTxKey:
[ if self's parent is None ->
None
else ->
self's taxonomic key string without trailing zeroes ]
.txKey:
[ self's taxonomic key string, right-zero-padded to length
self.hier.txKeyLen ]
.birthOrder:
[ if self.parent is None ->
0
else ->
return self's birth order relative to its parent ]
.__len__(self):
[ return the number of self's children, >= 0 ]
.__getitem__(self, childx):
[ if self has at least (childx+1) children ->
return the (childx)th child
else ->
raise IndexError ]
.__iter__():
[ return an iterator for self's children in birth order,
if any ]
.__str__():
[ return self as a string ]
.abbr():
[ if self has an unambiguous substitute bird code ->
return that code
else if self has a canonical bird code ->
return that code
else ->
return None ]
.childKey ( childRank ):
[ childRank is a Rank instance ->
return the .shortTxKey field for the next child of
self to be added of rank (childRank) ]
.writeFlat ( outFile ):
[ outFile is a writeable file ->
outFile +:= flat tree file representation of self ]
.writeXML(parent):
[ parentNode is an et.Element ->
parent := parent with a new rnc.TAXON_N child
added representing self and self's descendants ]
Here is the internal state of an instance.
State/invariants:
.__childList:
[ a list of self's child Taxon instances, in birth order ]
'''