Each taxon in the tree is represented by one
# - - - - - c l a s s T a x o n - - - - - class Taxon: """Represents one taxonomic grouping of organisms. Exports: Taxon ( txny, parentTaxon, taxonNode ): [ (txny is the containing Txny instance) and (parentTaxon is the parent Taxon instance, or None for root) and (taxonNode is a TAXON_N Element) -> return a new Taxon instance pointing back to txny, with parent=parentTaxon, representing taxonNode and its descendants ] .txny: [ as passed to constructor, read-only ] .parent: [ parentTaxon passed to constructor, read-only ] .abbr: [ if self has a standard abbreviation -> that abbrevation else -> None ] .rank: [ self's taxonomic rank as a Rank instance ] .sci: [ self's scientific name ] .txKey: [ self's taxonomic key, a string of digits that orders taxa in phylogenetic order ] .contains ( other ): [ other is a Taxon instance in self.txny -> if self is an ancestor of other -> return 1 else -> return 0 ] .nearestAncestor ( other ): [ other is a Taxon -> return the Taxon representing the nearest ancestor of self and other ] .__cmp__ ( self, other ): [ other is a Taxon -> if self precedes other -> return a negative number else if self is the same as other -> return 0 else -> return a positive number ] .__getitem__ ( n ): [ n is an integer -> if 0 <= n < (number of self's children) -> return self's nth child, counting from 0 else -> raise KeyError ] .__iter__ ( self ): [ return an iterator that generates self's children in taxonomic order ] .__len__ ( self ): [ return number of self's child taxa ] .__str__ ( self ): [ return a string representation of self ] .eng: [ self's English name, normalized ] .engComma: [ self's English name, inverted ] .tex: [ self's English name with TeX markup ] .texComma: [ same as .tex, but inverted ] .engHtml(cssClass=None): [ if cssClass is None -> return self's English name as HTML with italics marked up using the deprecated 'i' element else -> return self's English name as HTML with italics marked up using a span element with class=cssClass ] .engHtmlComma(cssClass=None): [ like .engHtml but "Generic[, Specific]" ] .engHtmlSubelt(node, cssClass=None): [ (node is an et.Element) -> if cssClass is None -> node := node with self's English name added, italics marked up using the deprecated 'i' element if cssClass is a string -> node := node with self's English name added, italics marked up using a span element with class=cssClass ] .engHtmlSubeltComma(node, cssClass=None): [ same as .engHtmlSubelt but with the name inverted ]
The internal state includes a list of self's child taxa, if any.
State/Invariant: .__rawEng: [ English name from file, inverted, with underbars to indicate italics ] .__childList: [ a list of the direct child taxa of self, in phylogenetic order, if any, as Taxon instances ] """
.__childList attribute will
hold pointers to self's children, if any.
The argument is another
Taxon. The method
True if and only if the other taxon is
The logic is straightforward: if the nearest common
self and the other
self contains the other taxon.
# - - - T a x o n . c o n t a i n s - - - def contains ( self, other ): """Does self contain other? """ #-- 1 -- # [ ancestor := nearest ancestor of self and other ] ancestor = self.nearestAncestor(other) #-- 2 -- return (self is ancestor)