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,8 +23,9 @@ 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 :
|
||||
cdef ecotx_t* _pointer
|
||||
cdef Taxonomy _tax
|
@ -46,7 +46,7 @@ cdef class Taxonomy(OBIWrapper) :
|
||||
taxo._ranks = []
|
||||
for r in range((<OBIDMS_taxonomy_p>pointer).ranks.count) :
|
||||
taxo._ranks.append(obi_taxo_rank_index_to_label(r, (<OBIDMS_taxonomy_p>pointer).ranks))
|
||||
|
||||
|
||||
return taxo
|
||||
|
||||
|
||||
@ -71,7 +71,7 @@ cdef class Taxonomy(OBIWrapper) :
|
||||
taxo._ranks = []
|
||||
for r in range((<OBIDMS_taxonomy_p>pointer).ranks.count) :
|
||||
taxo._ranks.append(obi_taxo_rank_index_to_label(r, (<OBIDMS_taxonomy_p>pointer).ranks))
|
||||
|
||||
|
||||
return taxo
|
||||
|
||||
|
||||
@ -157,7 +157,16 @@ cdef class Taxonomy(OBIWrapper) :
|
||||
if taxon_p == NULL:
|
||||
raise Exception("Error getting a taxon with given taxid", taxid)
|
||||
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