Cython view API: added NUC_SEQS views and sequence classes + changed
cloning API
This commit is contained in:
126
python/obitools3/dms/obiseq.pyx
Normal file
126
python/obitools3/dms/obiseq.pyx
Normal file
@ -0,0 +1,126 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from obitools3.utils cimport bytes2str, str2bytes
|
||||
|
||||
from .capi.obiview cimport NUC_SEQUENCE_COLUMN, \
|
||||
ID_COLUMN, \
|
||||
DEFINITION_COLUMN, \
|
||||
QUALITY_COLUMN
|
||||
|
||||
|
||||
cdef class Seq(dict) :
|
||||
def __init__(self, str id, object seq, object definition=None) :
|
||||
self.id = id
|
||||
self.seq = seq
|
||||
if definition is not None :
|
||||
self.definition = definition
|
||||
|
||||
# sequence id property getter and setter
|
||||
@property
|
||||
def id(self): # @ReservedAssignment
|
||||
return self._id
|
||||
|
||||
@id.setter
|
||||
def id(self, str new_id): # @ReservedAssignment @DuplicatedSignature
|
||||
self._id = new_id
|
||||
self[bytes2str(ID_COLUMN)] = new_id
|
||||
|
||||
# sequence property getter and setter
|
||||
@property
|
||||
def seq(self):
|
||||
return self._seq
|
||||
|
||||
@seq.setter
|
||||
def seq(self, object new_seq): # @DuplicatedSignature
|
||||
self._seq = new_seq
|
||||
self["SEQ"] = new_seq # TODO discuss
|
||||
|
||||
# sequence definition property getter and setter
|
||||
@property
|
||||
def definition(self):
|
||||
return self._definition
|
||||
|
||||
@definition.setter
|
||||
def definition(self, object new_definition): # @DuplicatedSignature
|
||||
self._definition = new_definition
|
||||
self[bytes2str(DEFINITION_COLUMN)] = new_definition
|
||||
|
||||
|
||||
cdef class Nuc_Seq(Seq) :
|
||||
|
||||
# nuc sequence property getter and setter
|
||||
@property
|
||||
def seq(self):
|
||||
return self._seq
|
||||
|
||||
@seq.setter
|
||||
def seq(self, object new_seq): # @DuplicatedSignature
|
||||
self._seq = new_seq
|
||||
self[bytes2str(NUC_SEQUENCE_COLUMN)] = new_seq
|
||||
|
||||
# sequence quality property getter and setter
|
||||
@property
|
||||
def quality(self):
|
||||
return self._quality
|
||||
|
||||
@quality.setter
|
||||
def quality(self, object new_quality): # @DuplicatedSignature
|
||||
self._quality = new_quality
|
||||
self[bytes2str(QUALITY_COLUMN)] = new_quality
|
||||
|
||||
# cpdef str reverse_complement(self) : TODO in C ?
|
||||
# pass
|
||||
|
||||
|
||||
cdef class Nuc_Seq_Stored(Line) :
|
||||
|
||||
# TODO store the str version of column name macros?
|
||||
|
||||
# sequence id property getter and setter
|
||||
@property
|
||||
def id(self): # @ReservedAssignment @DuplicatedSignature
|
||||
return self[bytes2str(ID_COLUMN)]
|
||||
|
||||
@id.setter
|
||||
def id(self, str new_id): # @ReservedAssignment @DuplicatedSignature
|
||||
self[bytes2str(ID_COLUMN)] = new_id
|
||||
|
||||
# sequence definition property getter and setter
|
||||
@property
|
||||
def definition(self):
|
||||
return self[bytes2str(DEFINITION_COLUMN)]
|
||||
|
||||
@definition.setter
|
||||
def definition(self, str new_def): # @DuplicatedSignature
|
||||
self[bytes2str(DEFINITION_COLUMN)] = new_def
|
||||
|
||||
# nuc_seq property getter and setter
|
||||
@property
|
||||
def nuc_seq(self):
|
||||
return self[bytes2str(NUC_SEQUENCE_COLUMN)]
|
||||
|
||||
@nuc_seq.setter
|
||||
def nuc_seq(self, object new_seq): # @DuplicatedSignature
|
||||
self[bytes2str(NUC_SEQUENCE_COLUMN)] = new_seq
|
||||
|
||||
# quality property getter and setter
|
||||
@property
|
||||
def quality(self):
|
||||
return self[bytes2str(QUALITY_COLUMN)]
|
||||
|
||||
@quality.setter
|
||||
def quality(self, object new_qual): # @DuplicatedSignature
|
||||
if (type(new_qual) == list) or (new_qual is None) : # TODO check that quality column exists
|
||||
self[bytes2str(QUALITY_COLUMN)] = new_qual
|
||||
else : # Quality is in str form
|
||||
(((self._view).columns)[bytes2str(QUALITY_COLUMN)]).set_str_line(self._index, new_qual)
|
||||
|
||||
cpdef object get_str_quality(self) : # TODO not ideal. Make quality_int and quality_str properties
|
||||
return ((self._view).columns)[bytes2str(QUALITY_COLUMN)].get_str_line(self._index)
|
||||
|
||||
# cpdef str reverse_complement(self) : TODO in C ?
|
||||
# pass
|
||||
|
||||
# TODO static method to import OBI_Nuc_Seq to OBI_Nuc_Seq_Stored ?
|
||||
|
||||
|
Reference in New Issue
Block a user