Cython API: in taxonomy, added get_taxon_at_rank() function for Taxonomy
class and rank_idx property for Taxon class
This commit is contained in:
@ -23,6 +23,7 @@ cdef class Taxonomy(OBIWrapper) :
|
||||
cpdef object get_family(self, int taxid)
|
||||
cpdef bytes get_scientific_name(self, int taxid)
|
||||
cpdef bytes get_rank(self, int taxid)
|
||||
cpdef object get_taxon_at_rank(self, int taxid, object rank)
|
||||
|
||||
|
||||
cdef class Taxon :
|
||||
|
@ -159,6 +159,15 @@ cdef class Taxonomy(OBIWrapper) :
|
||||
return self._ranks[taxon_p.rank]
|
||||
|
||||
|
||||
cpdef object get_taxon_at_rank(self, int taxid, object rank):
|
||||
if isinstance(rank, str) or isinstance(rank, bytes):
|
||||
rank = self._ranks.index(tobytes(rank))
|
||||
try:
|
||||
return [x.taxid for x in self.parental_tree_iterator(taxid) if x.rank_idx==rank][0]
|
||||
except IndexError:
|
||||
return None
|
||||
|
||||
|
||||
def __len__(self):
|
||||
return self.pointer().taxa.count
|
||||
|
||||
@ -272,7 +281,7 @@ cdef class Taxon : # TODO dict subclass?
|
||||
def __richcmp__(self, Taxon taxon2, int op):
|
||||
return (self.name == taxon2.name) and \
|
||||
(self.taxid == taxon2.taxid) and \
|
||||
(self.rank == taxon2.rank) and \
|
||||
(self.rank_idx == taxon2.rank_idx) and \
|
||||
(self.farest == taxon2.farest) and \
|
||||
(self.parent.taxid == taxon2.parent.taxid) and \
|
||||
(self.preferred_name == taxon2.preferred_name)
|
||||
@ -293,6 +302,11 @@ cdef class Taxon : # TODO dict subclass?
|
||||
def rank(self):
|
||||
return ((self._tax)._ranks)[(self._pointer).rank]
|
||||
|
||||
# rank_idx property getter
|
||||
@property
|
||||
def rank_idx(self):
|
||||
return (self._pointer).rank
|
||||
|
||||
# farest property getter
|
||||
@property
|
||||
def farest(self):
|
||||
@ -321,6 +335,7 @@ cdef class Taxon : # TODO dict subclass?
|
||||
d['taxid'] = self.taxid
|
||||
d['name'] = self.name
|
||||
d['rank'] = self.rank
|
||||
d['rank_idx'] = self.rank_idx
|
||||
d['preferred name'] = self.preferred_name
|
||||
d['parent'] = self.parent.taxid
|
||||
d['farest'] = self.farest
|
||||
|
Reference in New Issue
Block a user