From 72155c3b73aee952c3308e68558da33f5ed774c5 Mon Sep 17 00:00:00 2001 From: Celine Mercier Date: Mon, 28 Sep 2015 13:51:35 +0200 Subject: [PATCH] entirely reworked cython wrapper --- python/obitools3/obidms/_obidms.c | 1 - python/obitools3/obidms/_obidms.pxd | 27 ++- python/obitools3/obidms/_obidms.pyx | 197 ++++++++++++++---- .../obidms/_obidmscolumn_bool.cfiles | 16 ++ .../obitools3/obidms/_obidmscolumn_bool.pxd | 17 ++ .../obitools3/obidms/_obidmscolumn_bool.pyx | 46 ++++ .../obidms/_obidmscolumn_char.cfiles | 16 ++ .../obitools3/obidms/_obidmscolumn_char.pxd | 17 ++ .../obitools3/obidms/_obidmscolumn_char.pyx | 44 ++++ .../obidms/_obidmscolumn_float.cfiles | 16 ++ .../obitools3/obidms/_obidmscolumn_float.pxd | 16 ++ .../obitools3/obidms/_obidmscolumn_float.pyx | 44 ++++ .../obitools3/obidms/_obidmscolumn_idx.cfiles | 16 ++ python/obitools3/obidms/_obidmscolumn_idx.pxd | 16 ++ python/obitools3/obidms/_obidmscolumn_idx.pyx | 46 ++++ .../obitools3/obidms/_obidmscolumn_int.cfiles | 16 ++ python/obitools3/obidms/_obidmscolumn_int.pxd | 16 ++ python/obitools3/obidms/_obidmscolumn_int.pyx | 48 +++++ python/obitools3/obidms/capi/obidms.pxd | 4 + python/obitools3/obidms/capi/obidmscolumn.pxd | 110 +++++++++- python/obitools3/obidms/capi/obierrno.pxd | 4 +- python/obitools3/obidms/capi/obitypes.pxd | 14 +- .../obitools3/obidms/obidmscolumn/__init__.py | 0 .../obidms/obidmscolumn/_obidmscolumn.pxd | 20 -- .../obidms/obidmscolumn/capidmscolumn.cfiles | 16 -- .../obidms/obidmscolumn/capidmscolumn.pyx | 98 --------- .../obidmscolumn_bool/__init__.py | 0 .../capidmscolumn_bool.cfiles | 16 -- .../obidmscolumn_bool/capidmscolumn_bool.pxd | 7 - .../obidmscolumn_bool/capidmscolumn_bool.pyx | 35 ---- .../obidmscolumn_char/__init__.py | 0 .../capidmscolumn_char.cfiles | 16 -- .../obidmscolumn_char/capidmscolumn_char.pxd | 7 - .../obidmscolumn_char/capidmscolumn_char.pyx | 33 --- .../obidmscolumn_float/__init__.py | 0 .../capidmscolumn_float.cfiles | 16 -- .../capidmscolumn_float.pxd | 7 - .../capidmscolumn_float.pyx | 34 --- .../obidmscolumn/obidmscolumn_idx/__init__.py | 0 .../obidmscolumn_idx/capidmscolumn_idx.cfiles | 16 -- .../obidmscolumn_idx/capidmscolumn_idx.pxd | 7 - .../obidmscolumn_idx/capidmscolumn_idx.pyx | 33 --- .../obidmscolumn/obidmscolumn_int/__init__.py | 0 .../obidmscolumn_int/capidmscolumn_int.cfiles | 16 -- .../obidmscolumn_int/capidmscolumn_int.pxd | 21 -- .../obidmscolumn_int/capidmscolumn_int.pyx | 37 ---- python/obitools3/utils.pxd | 2 + python/obitools3/utils.pyx | 2 + 48 files changed, 698 insertions(+), 488 deletions(-) delete mode 100644 python/obitools3/obidms/_obidms.c create mode 100644 python/obitools3/obidms/_obidmscolumn_bool.cfiles create mode 100644 python/obitools3/obidms/_obidmscolumn_bool.pxd create mode 100644 python/obitools3/obidms/_obidmscolumn_bool.pyx create mode 100644 python/obitools3/obidms/_obidmscolumn_char.cfiles create mode 100644 python/obitools3/obidms/_obidmscolumn_char.pxd create mode 100644 python/obitools3/obidms/_obidmscolumn_char.pyx create mode 100644 python/obitools3/obidms/_obidmscolumn_float.cfiles create mode 100644 python/obitools3/obidms/_obidmscolumn_float.pxd create mode 100644 python/obitools3/obidms/_obidmscolumn_float.pyx create mode 100644 python/obitools3/obidms/_obidmscolumn_idx.cfiles create mode 100644 python/obitools3/obidms/_obidmscolumn_idx.pxd create mode 100644 python/obitools3/obidms/_obidmscolumn_idx.pyx create mode 100644 python/obitools3/obidms/_obidmscolumn_int.cfiles create mode 100644 python/obitools3/obidms/_obidmscolumn_int.pxd create mode 100644 python/obitools3/obidms/_obidmscolumn_int.pyx delete mode 100644 python/obitools3/obidms/obidmscolumn/__init__.py delete mode 100644 python/obitools3/obidms/obidmscolumn/_obidmscolumn.pxd delete mode 100644 python/obitools3/obidms/obidmscolumn/capidmscolumn.cfiles delete mode 100644 python/obitools3/obidms/obidmscolumn/capidmscolumn.pyx delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/__init__.py delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.cfiles delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.pxd delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.pyx delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_char/__init__.py delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.cfiles delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pxd delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pyx delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_float/__init__.py delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.cfiles delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.pxd delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.pyx delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/__init__.py delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.cfiles delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pxd delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pyx delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_int/__init__.py delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.cfiles delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.pxd delete mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.pyx diff --git a/python/obitools3/obidms/_obidms.c b/python/obitools3/obidms/_obidms.c deleted file mode 100644 index 06f2230..0000000 --- a/python/obitools3/obidms/_obidms.c +++ /dev/null @@ -1 +0,0 @@ -#error Do not use this file, it is the result of a failed Cython compilation. diff --git a/python/obitools3/obidms/_obidms.pxd b/python/obitools3/obidms/_obidms.pxd index e88888a..a12e620 100644 --- a/python/obitools3/obidms/_obidms.pxd +++ b/python/obitools3/obidms/_obidms.pxd @@ -1,5 +1,8 @@ -from .capi.obidms cimport OBIDMS_p -from .capi.obitypes cimport obiversion_t, OBIType_t +#cython: language_level=3 + +from .capi.obidms cimport OBIDMS_p +from .capi.obidmscolumn cimport OBIDMS_column_p +from .capi.obitypes cimport obiversion_t, OBIType_t cdef class OBIDMS_column @@ -10,12 +13,26 @@ cdef class OBIDMS: cpdef dict list(self) - cpdef OBIDMS_column open_column(self, - str column_name, + cpdef OBIDMS_column open_column(self, + str column_name, bint create=*, bint clone=*, bint clone_data=*, obiversion_t version_number=*, - OBIType_t data_type=*, + OBIType_t data_type=*, size_t nb_lines=*, size_t nb_elements_per_line=*, str elements_names=*) + + +cdef class OBIDMS_column: + + cdef OBIDMS_column_p pointer + cdef OBIDMS dms + cdef str data_type # TODO keep as OBIType_t? both? + cdef str dms_name + cdef str column_name + + cpdef object get_item(self, size_t line_nb, str element_name) + cpdef list get_elements_names(self) + cpdef str get_data_type(self) + cpdef size_t get_nb_lines_used(self) diff --git a/python/obitools3/obidms/_obidms.pyx b/python/obitools3/obidms/_obidms.pyx index 6223d25..f1f7de6 100644 --- a/python/obitools3/obidms/_obidms.pyx +++ b/python/obitools3/obidms/_obidms.pyx @@ -1,31 +1,44 @@ #cython: language_level=3 -from obitools3.utils cimport bytes2str, str2bytes -from obitools3.obidms.obidmscolumn._obidmscolumn cimport OBIDMS_column from pathlib import Path -# from obitools3.obidms.obidmscolumn.capidmscolumn cimport OBIDMS_column -# from obitools3.obidms.obidmscolumn.capidmscolumn cimport obiversion_t # TODO pourquoi je peux pas les declarer dans le pxd? -# from obitools3.obidms.obidmscolumn.capidmscolumn cimport name_data_type -# from obitools3.obidms.obidmscolumn.capidmscolumn cimport obi_column_get_data_type_from_name -# from obitools3.obidms.obidmscolumn.capidmscolumn cimport obi_column_get_latest_version_from_name -# from obitools3.obidms.obidmscolumn.capidmscolumn cimport obi_column_get_line_count_from_name -# -from obitools3.obidms.obidmscolumn.obidmscolumn_int.capidmscolumn_int cimport OBIDMS_column_int_writable # TODO pourquoi pas cimport? -from obitools3.obidms.obidmscolumn.obidmscolumn_int.capidmscolumn_int cimport OBIDMS_column_int_read -from obitools3.obidms.obidmscolumn.obidmscolumn_float.capidmscolumn_float cimport OBIDMS_column_float_writable -from obitools3.obidms.obidmscolumn.obidmscolumn_float.capidmscolumn_float cimport OBIDMS_column_float_read -from obitools3.obidms.obidmscolumn.obidmscolumn_bool.capidmscolumn_bool cimport OBIDMS_column_bool_writable -from obitools3.obidms.obidmscolumn.obidmscolumn_bool.capidmscolumn_bool cimport OBIDMS_column_bool_read -from obitools3.obidms.obidmscolumn.obidmscolumn_char.capidmscolumn_char cimport OBIDMS_column_char_writable -from obitools3.obidms.obidmscolumn.obidmscolumn_char.capidmscolumn_char cimport OBIDMS_column_char_read -from obitools3.obidms.obidmscolumn.obidmscolumn_idx.capidmscolumn_idx cimport OBIDMS_column_idx_writable -from obitools3.obidms.obidmscolumn.obidmscolumn_idx.capidmscolumn_idx cimport OBIDMS_column_idx_read +from obitools3.utils cimport bytes2str, str2bytes + +from .capi.obidms cimport obi_dms +from .capi.obidmscolumn cimport obi_column_get_data_type_from_name, \ + obi_column_get_latest_version_from_name, \ + obi_column_get_line_count_from_name, \ + obi_column_get_nb_lines_used, \ + obi_column_get_elements_names, \ + obi_create_column, \ + obi_clone_column, \ + obi_open_column, \ + obi_close_column +from .capi.obitypes cimport const_char_p, name_data_type + + +from ._obidms cimport OBIDMS +from ._obidms cimport OBIDMS_column + +from ._obidmscolumn_int cimport OBIDMS_column_int, \ + OBIDMS_column_int_writable + +from ._obidmscolumn_float cimport OBIDMS_column_float, \ + OBIDMS_column_float_writable + +from ._obidmscolumn_bool cimport OBIDMS_column_bool, \ + OBIDMS_column_bool_writable + +from ._obidmscolumn_char cimport OBIDMS_column_char, \ + OBIDMS_column_char_writable + +from ._obidmscolumn_idx cimport OBIDMS_column_idx, \ + OBIDMS_column_idx_writable cdef class OBIDMS : - def __init__(self, str dms_name) : # TODO + def __init__(self, str dms_name) : # Declarations cdef bytes dms_name_b @@ -61,7 +74,7 @@ cdef class OBIDMS : column_name = entry.stem column_name_b = str2bytes(column_name) dms[column_name] = {} - data_type = bytes2str((name_data_type(obi_column_get_data_type_from_name(self.pointer, column_name_b))) + data_type = bytes2str(name_data_type(obi_column_get_data_type_from_name(self.pointer, column_name_b))) latest_version = obi_column_get_latest_version_from_name(self.pointer, column_name_b) line_count = obi_column_get_line_count_from_name(self.pointer, column_name_b) dms[column_name]['data_type'] = data_type @@ -71,18 +84,18 @@ cdef class OBIDMS : return dms - cpdef OBIDMS_column open_column(self, # TODO j'arrive pas a le passer en cpdef - str column_name, # TODO - bint create=False, - bint clone=False, bint clone_data=True, - obiversion_t version_number=-1, - OBIType_t data_type=0, # TODO - size_t nb_lines=0, - size_t nb_elements_per_line=1, - str elements_names=None): + cpdef OBIDMS_column open_column(self, + str column_name, + bint create=False, + bint clone=False, bint clone_data=True, + obiversion_t version_number=-1, + OBIType_t data_type= 0, + size_t nb_lines=0, + size_t nb_elements_per_line=1, + str elements_names=None): # Declarations - cdef OBIDMS_column column # TODO not sure object + cdef OBIDMS_column column cdef bytes column_name_b # Format the character string to send to C function @@ -104,7 +117,7 @@ cdef class OBIDMS : nb_lines, nb_elements_per_line, elements_names) else : - column = OBIDMS_column_int_read(self, column_name, + column = OBIDMS_column_int(self, column_name, create, clone, clone_data, version_number, data_type, nb_lines, nb_elements_per_line, @@ -118,7 +131,7 @@ cdef class OBIDMS : nb_lines, nb_elements_per_line, elements_names) else : - column = OBIDMS_column_float_read(self, column_name, + column = OBIDMS_column_float(self, column_name, create, clone, clone_data, version_number, data_type, nb_lines, nb_elements_per_line, @@ -132,7 +145,7 @@ cdef class OBIDMS : nb_lines, nb_elements_per_line, elements_names) else : - column = OBIDMS_column_bool_read(self, column_name, + column = OBIDMS_column_bool(self, column_name, create, clone, clone_data, version_number, data_type, nb_lines, nb_elements_per_line, @@ -146,13 +159,125 @@ cdef class OBIDMS : nb_lines, nb_elements_per_line, elements_names) else : - column = OBIDMS_column_char_read(self, column_name, + column = OBIDMS_column_char(self, column_name, create, clone, clone_data, version_number, data_type, nb_lines, nb_elements_per_line, elements_names) - + +# elif data_type == 5 : +# if (create or clone) : +# column = OBIDMS_column_idx_writable(self, column_name, +# create, clone, clone_data, +# version_number, data_type, +# nb_lines, nb_elements_per_line, +# elements_names) +# else : +# column = OBIDMS_column_idx(self, column_name, +# create, clone, clone_data, +# version_number, data_type, +# nb_lines, nb_elements_per_line, +# elements_names) + else : raise Exception("Problem with the data type") return column + + + +cdef class OBIDMS_column : + + # Should only be initialized through a subclass + def __init__(self, + OBIDMS dms, + str column_name, + bint create, + bint clone, bint clone_data, + obiversion_t version_number, + OBIType_t type, + size_t nb_lines, + size_t nb_elements_per_line, + str elements_names): + + # Declarations + cdef bytes column_name_b + cdef bytes dms_name_b + cdef bytes elements_names_b + + # Fill structure + self.dms = dms + self.data_type = bytes2str(name_data_type(type)) + self.column_name = column_name + + # Format the character strings to send them to C functions + column_name_b = str2bytes(column_name) + dms_name_b = str2bytes(self.dms.dms_name) + + # Create, clone or open column + if create : + if elements_names == None : + elements_names_b = column_name_b + else : + elements_names_b = str2bytes(elements_names) + self.pointer = obi_create_column(self.dms.pointer, column_name_b, type, nb_lines, nb_elements_per_line, elements_names_b) + else : + if clone : + self.pointer = obi_clone_column(self.dms.pointer, column_name_b, version_number, clone_data) + else : + self.pointer = obi_open_column(self.dms.pointer, column_name_b, version_number) + + + def __iter__(self): + + # Declarations + cdef list elements_names + cdef str element_name + cdef bint multiple_elements + cdef object line # TODO + cdef size_t lines_used + cdef size_t line_nb + + # Check if there are multiple elements per line anf if yes, get their names + elements_names = self.get_elements_names() + if len(elements_names) > 1 : + multiple_elements = True + else : + element_name = elements_names[0] + + # Yield each line + lines_used = obi_column_get_nb_lines_used(self.pointer) + for line_nb in xrange(lines_used): + if multiple_elements : + line = [] + for element_name in elements_names : + line.append(self.get_item(line_nb, element_name)) + else : + line = self.get_item(line_nb, element_name) + yield line + + + def __setitem__(self, size_t line_nb, object value): + self.set_item(line_nb, "", value) + + + def __getitem__(self, size_t line_nb): + return self.get_item(line_nb, "") + + cpdef object get_item(self, size_t line_nb, str element_name): + raise NotImplementedError + + cpdef list get_elements_names(self): + cdef bytes elements_names + elements_names = obi_column_get_elements_names(self.pointer) + return (bytes2str(elements_names)).split(';') + + + cpdef str get_data_type(self): + return self.data_type + + + cpdef size_t get_nb_lines_used(self): + return obi_column_get_nb_lines_used(self.pointer) + + diff --git a/python/obitools3/obidms/_obidmscolumn_bool.cfiles b/python/obitools3/obidms/_obidmscolumn_bool.cfiles new file mode 100644 index 0000000..fb8a24a --- /dev/null +++ b/python/obitools3/obidms/_obidmscolumn_bool.cfiles @@ -0,0 +1,16 @@ +../../../src/obidmscolumn_bool.c +../../../src/obidmscolumn_bool.h +../../../src/obidmscolumn.h +../../../src/obidmscolumn.c +../../../src/obidmscolumndir.h +../../../src/obidmscolumndir.c +../../../src/obidms.h +../../../src/obidms.c +../../../src/obierrno.h +../../../src/obierrno.c +../../../src/obilittlebigman.h +../../../src/obilittlebigman.c +../../../src/obitypes.h +../../../src/obitypes.c +../../../src/private_at_functions.h +../../../src/private_at_functions.c diff --git a/python/obitools3/obidms/_obidmscolumn_bool.pxd b/python/obitools3/obidms/_obidmscolumn_bool.pxd new file mode 100644 index 0000000..98809c6 --- /dev/null +++ b/python/obitools3/obidms/_obidmscolumn_bool.pxd @@ -0,0 +1,17 @@ +#cython: language_level=3 + +from .capi.obitypes cimport obibool_t +from .capi.obidmscolumn cimport OBIDMS_column_p + +from ._obidms cimport OBIDMS_column + + +cdef class OBIDMS_column_bool(OBIDMS_column): + cpdef object get_item(self, size_t line_nb, str element_name) + cpdef set_item(self, size_t line_nb, str element_name, obibool_t value) + cpdef close(self) + +cdef class OBIDMS_column_bool_writable(OBIDMS_column_bool): + cpdef set_item(self, size_t line_nb, str element_name, obibool_t value) + cpdef close(self) + diff --git a/python/obitools3/obidms/_obidmscolumn_bool.pyx b/python/obitools3/obidms/_obidmscolumn_bool.pyx new file mode 100644 index 0000000..9426b9e --- /dev/null +++ b/python/obitools3/obidms/_obidmscolumn_bool.pyx @@ -0,0 +1,46 @@ +#cython: language_level=3 + +from .capi.obidmscolumn cimport obi_close_column,\ + obi_truncate_and_close_column, \ + obi_column_get_obibool_with_elt_name, \ + obi_column_set_obibool_with_elt_name +from .capi.obierrno cimport obi_errno +from .capi.obitypes cimport OBIBool_NA + +from obitools3.utils cimport str2bytes + +from cpython.bool cimport PyBool_FromLong + + +cdef class OBIDMS_column_bool(OBIDMS_column): + + cpdef object get_item(self, size_t line_nb, str element_name): + cdef obibool_t value + cdef object result + value = obi_column_get_obibool_with_elt_name(self.pointer, line_nb, str2bytes(element_name)) + if obi_errno > 0 : + raise IndexError(line_nb, element_name) + if value == OBIBool_NA : + result = None + else : + result = PyBool_FromLong(value) + return result + + cpdef set_item(self, size_t line_nb, str element_name, obibool_t value): + raise Exception("Column is read-only") + + cpdef close(self): + if obi_close_column(self.pointer) < 0 : + raise Exception("Problem closing a column") + + +cdef class OBIDMS_column_bool_writable(OBIDMS_column_bool): + + cpdef set_item(self, size_t line_nb, str element_name, obibool_t value): + if obi_column_set_obibool_with_elt_name(self.pointer, line_nb, str2bytes(element_name), value) < 0 : + raise Exception("Problem setting a value in a column") + + cpdef close(self): + if obi_truncate_and_close_column(self.pointer) < 0 : + raise Exception("Problem closing a column") + \ No newline at end of file diff --git a/python/obitools3/obidms/_obidmscolumn_char.cfiles b/python/obitools3/obidms/_obidmscolumn_char.cfiles new file mode 100644 index 0000000..94eb20a --- /dev/null +++ b/python/obitools3/obidms/_obidmscolumn_char.cfiles @@ -0,0 +1,16 @@ +../../../src/obidmscolumn_char.c +../../../src/obidmscolumn_char.h +../../../src/obidmscolumn.h +../../../src/obidmscolumn.c +../../../src/obidmscolumndir.h +../../../src/obidmscolumndir.c +../../../src/obidms.h +../../../src/obidms.c +../../../src/obierrno.h +../../../src/obierrno.c +../../../src/obilittlebigman.h +../../../src/obilittlebigman.c +../../../src/obitypes.h +../../../src/obitypes.c +../../../src/private_at_functions.h +../../../src/private_at_functions.c diff --git a/python/obitools3/obidms/_obidmscolumn_char.pxd b/python/obitools3/obidms/_obidmscolumn_char.pxd new file mode 100644 index 0000000..e0b5ca1 --- /dev/null +++ b/python/obitools3/obidms/_obidmscolumn_char.pxd @@ -0,0 +1,17 @@ +#cython: language_level=3 + +from .capi.obitypes cimport obichar_t +from .capi.obidmscolumn cimport OBIDMS_column_p + +from ._obidms cimport OBIDMS_column + + +cdef class OBIDMS_column_char(OBIDMS_column): + cpdef object get_item(self, size_t line_nb, str element_name) + cpdef set_item(self, size_t line_nb, str element_name, bytes value) + cpdef close(self) + +cdef class OBIDMS_column_char_writable(OBIDMS_column_char): + cpdef set_item(self, size_t line_nb, str element_name, bytes value) + cpdef close(self) + diff --git a/python/obitools3/obidms/_obidmscolumn_char.pyx b/python/obitools3/obidms/_obidmscolumn_char.pyx new file mode 100644 index 0000000..f1cc4a0 --- /dev/null +++ b/python/obitools3/obidms/_obidmscolumn_char.pyx @@ -0,0 +1,44 @@ +#cython: language_level=3 + +from .capi.obidmscolumn cimport obi_close_column,\ + obi_truncate_and_close_column, \ + obi_column_get_obichar_with_elt_name, \ + obi_column_set_obichar_with_elt_name +from .capi.obierrno cimport obi_errno +from .capi.obitypes cimport OBIChar_NA + +from obitools3.utils cimport str2bytes + + +cdef class OBIDMS_column_char(OBIDMS_column) : + + cpdef object get_item(self, size_t line_nb, str element_name): + cdef char value + cdef object result + value = obi_column_get_obichar_with_elt_name(self.pointer, line_nb, str2bytes(element_name)) + if obi_errno > 0 : + raise IndexError(line_nb, element_name) + if value == OBIChar_NA : + result = None + else : + result = value + return result + + cpdef set_item(self, size_t line_nb, str element_name, bytes value): + raise Exception("Column is read-only") + + cpdef close(self): + if obi_close_column(self.pointer) < 0 : + raise Exception("Problem closing a column") + + +cdef class OBIDMS_column_char_writable(OBIDMS_column_char) : + + cpdef set_item(self, size_t line_nb, str element_name, bytes value): + if obi_column_set_obichar_with_elt_name(self.pointer, line_nb, str2bytes(element_name), value[0]) < 0: + raise Exception("Problem setting a value in a column") + + cpdef close(self): + if obi_truncate_and_close_column(self.pointer) < 0 : + raise Exception("Problem closing a column") + diff --git a/python/obitools3/obidms/_obidmscolumn_float.cfiles b/python/obitools3/obidms/_obidmscolumn_float.cfiles new file mode 100644 index 0000000..4cf1ea3 --- /dev/null +++ b/python/obitools3/obidms/_obidmscolumn_float.cfiles @@ -0,0 +1,16 @@ +../../../src/obidmscolumn_float.c +../../../src/obidmscolumn_float.h +../../../src/obidmscolumn.h +../../../src/obidmscolumn.c +../../../src/obidmscolumndir.h +../../../src/obidmscolumndir.c +../../../src/obidms.h +../../../src/obidms.c +../../../src/obierrno.h +../../../src/obierrno.c +../../../src/obilittlebigman.h +../../../src/obilittlebigman.c +../../../src/obitypes.h +../../../src/obitypes.c +../../../src/private_at_functions.h +../../../src/private_at_functions.c diff --git a/python/obitools3/obidms/_obidmscolumn_float.pxd b/python/obitools3/obidms/_obidmscolumn_float.pxd new file mode 100644 index 0000000..c8cb52e --- /dev/null +++ b/python/obitools3/obidms/_obidmscolumn_float.pxd @@ -0,0 +1,16 @@ +#cython: language_level=3 + +from .capi.obitypes cimport obifloat_t +from .capi.obidmscolumn cimport OBIDMS_column_p + +from ._obidms cimport OBIDMS_column + + +cdef class OBIDMS_column_float(OBIDMS_column): + cpdef object get_item(self, size_t line_nb, str element_name) + cpdef set_item(self, size_t line_nb, str element_name, obifloat_t value) + cpdef close(self) + +cdef class OBIDMS_column_float_writable(OBIDMS_column_float): + cpdef set_item(self, size_t line_nb, str element_name, obifloat_t value) + cpdef close(self) diff --git a/python/obitools3/obidms/_obidmscolumn_float.pyx b/python/obitools3/obidms/_obidmscolumn_float.pyx new file mode 100644 index 0000000..a374bbb --- /dev/null +++ b/python/obitools3/obidms/_obidmscolumn_float.pyx @@ -0,0 +1,44 @@ +#cython: language_level=3 + +from .capi.obidmscolumn cimport obi_close_column,\ + obi_truncate_and_close_column, \ + obi_column_get_obifloat_with_elt_name, \ + obi_column_set_obifloat_with_elt_name +from .capi.obierrno cimport obi_errno +from .capi.obitypes cimport OBIFloat_NA + +from obitools3.utils cimport str2bytes + + +cdef class OBIDMS_column_float(OBIDMS_column): + + cpdef object get_item(self, size_t line_nb, str element_name): + cdef obifloat_t value + cdef object result + value = obi_column_get_obifloat_with_elt_name(self.pointer, line_nb, str2bytes(element_name)) + if obi_errno > 0 : + raise IndexError(line_nb, element_name) + if value == OBIFloat_NA : + result = None + else : + result = value + return result + + cpdef set_item(self, size_t line_nb, str element_name, obifloat_t value): + raise Exception("Column is read-only") + + cpdef close(self): + if obi_close_column(self.pointer) < 0 : + raise Exception("Problem closing a column") + + +cdef class OBIDMS_column_float_writable(OBIDMS_column_float): + + cpdef set_item(self, size_t line_nb, str element_name, obifloat_t value): + if obi_column_set_obifloat_with_elt_name(self.pointer, line_nb, str2bytes(element_name), value) < 0: + raise Exception("Problem setting a value in a column") + + cpdef close(self): + if obi_truncate_and_close_column(self.pointer) < 0 : + raise Exception("Problem closing a column") + \ No newline at end of file diff --git a/python/obitools3/obidms/_obidmscolumn_idx.cfiles b/python/obitools3/obidms/_obidmscolumn_idx.cfiles new file mode 100644 index 0000000..5dfff68 --- /dev/null +++ b/python/obitools3/obidms/_obidmscolumn_idx.cfiles @@ -0,0 +1,16 @@ +../../../src/obidmscolumn_idx.c +../../../src/obidmscolumn_idx.h +../../../src/obidmscolumn.h +../../../src/obidmscolumn.c +../../../src/obidmscolumndir.h +../../../src/obidmscolumndir.c +../../../src/obidms.h +../../../src/obidms.c +../../../src/obierrno.h +../../../src/obierrno.c +../../../src/obilittlebigman.h +../../../src/obilittlebigman.c +../../../src/obitypes.h +../../../src/obitypes.c +../../../src/private_at_functions.h +../../../src/private_at_functions.c diff --git a/python/obitools3/obidms/_obidmscolumn_idx.pxd b/python/obitools3/obidms/_obidmscolumn_idx.pxd new file mode 100644 index 0000000..b997522 --- /dev/null +++ b/python/obitools3/obidms/_obidmscolumn_idx.pxd @@ -0,0 +1,16 @@ +#cython: language_level=3 + +from .capi.obitypes cimport obiidx_t +from .capi.obidmscolumn cimport OBIDMS_column_p + +from ._obidms cimport OBIDMS_column + + +cdef class OBIDMS_column_idx(OBIDMS_column): + cpdef object get_item(self, size_t line_nb, str element_name) + cpdef set_item(self, size_t line_nb, str element_name, obiidx_t value) + cpdef close(self) + +cdef class OBIDMS_column_idx_writable(OBIDMS_column_idx): + cpdef set_item(self, size_t line_nb, str element_name, obiidx_t value) + cpdef close(self) diff --git a/python/obitools3/obidms/_obidmscolumn_idx.pyx b/python/obitools3/obidms/_obidmscolumn_idx.pyx new file mode 100644 index 0000000..47a8336 --- /dev/null +++ b/python/obitools3/obidms/_obidmscolumn_idx.pyx @@ -0,0 +1,46 @@ +#cython: language_level=3 + +from .capi.obidmscolumn cimport obi_close_column,\ + obi_truncate_and_close_column, \ + obi_column_get_obiidx_with_elt_name, \ + obi_column_set_obiidx_with_elt_name +from .capi.obierrno cimport obi_errno +from .capi.obitypes cimport OBIIdx_NA + +from obitools3.utils cimport str2bytes + +from cpython.int cimport PyInt_FromSsize_t + + +cdef class OBIDMS_column_idx(OBIDMS_column): + + cpdef object get_item(self, size_t line_nb, str element_name): + cdef obiidx_t value + cdef object result + value = obi_column_get_obiidx_with_elt_name(self.pointer, line_nb, str2bytes(element_name)) + if obi_errno > 0 : + raise IndexError(line_nb, element_name) + if value == OBIIdx_NA : + result = None + else : + result = PyInt_FromSsize_t(value) + return result + + cpdef set_item(self, size_t line_nb, str element_name, obiidx_t value): + raise Exception("Column is read-only") + + cpdef close(self): + if obi_close_column(self.pointer) < 0 : + raise Exception("Problem closing a column") + + +cdef class OBIDMS_column_idx_writable(OBIDMS_column_idx): + + cpdef set_item(self, size_t line_nb, str element_name, obiidx_t value): + if obi_column_set_obiidx_with_elt_name(self.pointer, line_nb, str2bytes(element_name), value) < 0: + raise Exception("Problem setting a value in a column") + + cpdef close(self): + if obi_truncate_and_close_column(self.pointer) < 0 : + raise Exception("Problem closing a column") + \ No newline at end of file diff --git a/python/obitools3/obidms/_obidmscolumn_int.cfiles b/python/obitools3/obidms/_obidmscolumn_int.cfiles new file mode 100644 index 0000000..cc10725 --- /dev/null +++ b/python/obitools3/obidms/_obidmscolumn_int.cfiles @@ -0,0 +1,16 @@ +../../../src/obidmscolumn_int.c +../../../src/obidmscolumn_int.h +../../../src/obidmscolumn.h +../../../src/obidmscolumn.c +../../../src/obidmscolumndir.h +../../../src/obidmscolumndir.c +../../../src/obidms.h +../../../src/obidms.c +../../../src/obierrno.h +../../../src/obierrno.c +../../../src/obilittlebigman.h +../../../src/obilittlebigman.c +../../../src/obitypes.h +../../../src/obitypes.c +../../../src/private_at_functions.h +../../../src/private_at_functions.c diff --git a/python/obitools3/obidms/_obidmscolumn_int.pxd b/python/obitools3/obidms/_obidmscolumn_int.pxd new file mode 100644 index 0000000..eae7dd2 --- /dev/null +++ b/python/obitools3/obidms/_obidmscolumn_int.pxd @@ -0,0 +1,16 @@ +#cython: language_level=3 + +from .capi.obitypes cimport obiint_t +from .capi.obidmscolumn cimport OBIDMS_column_p + +from ._obidms cimport OBIDMS_column + + +cdef class OBIDMS_column_int(OBIDMS_column): + cpdef object get_item(self, size_t line_nb, str element_name) + cpdef set_item(self, size_t line_nb, str element_name, obiint_t value) + cpdef close(self) + +cdef class OBIDMS_column_int_writable(OBIDMS_column_int): + cpdef set_item(self, size_t line_nb, str element_name, obiint_t value) + cpdef close(self) diff --git a/python/obitools3/obidms/_obidmscolumn_int.pyx b/python/obitools3/obidms/_obidmscolumn_int.pyx new file mode 100644 index 0000000..8ae54bf --- /dev/null +++ b/python/obitools3/obidms/_obidmscolumn_int.pyx @@ -0,0 +1,48 @@ +#cython: language_level=3 + +from .capi.obidmscolumn cimport obi_close_column,\ + obi_truncate_and_close_column, \ + obi_column_get_obiint_with_elt_name, \ + obi_column_set_obiint_with_elt_name +from .capi.obierrno cimport obi_errno +from .capi.obitypes cimport OBIInt_NA + +from obitools3.utils cimport str2bytes + +from cpython.int cimport PyInt_FromLong + +from ._obidms cimport OBIDMS_column + + +cdef class OBIDMS_column_int(OBIDMS_column): + + cpdef object get_item(self, size_t line_nb, str element_name): + cdef obiint_t value + cdef object result + value = obi_column_get_obiint_with_elt_name(self.pointer, line_nb, str2bytes(element_name)) + if obi_errno > 0 : + raise IndexError(line_nb, element_name) + if value == OBIInt_NA : + result = None + else : + result = PyInt_FromLong(value) + return result + + cpdef set_item(self, size_t line_nb, str element_name, obiint_t value): + raise Exception("Column is read-only") + + cpdef close(self): + if obi_close_column(self.pointer) < 0 : + raise Exception("Problem closing a column") + + +cdef class OBIDMS_column_int_writable(OBIDMS_column_int): + + cpdef set_item(self, size_t line_nb, str element_name, obiint_t value): + if obi_column_set_obiint_with_elt_name(self.pointer, line_nb, str2bytes(element_name), value) < 0: + raise Exception("Problem setting a value in a column") + + cpdef close(self): + if obi_truncate_and_close_column(self.pointer) < 0 : + raise Exception("Problem closing a column") + \ No newline at end of file diff --git a/python/obitools3/obidms/capi/obidms.pxd b/python/obitools3/obidms/capi/obidms.pxd index 5b922eb..884e466 100644 --- a/python/obitools3/obidms/capi/obidms.pxd +++ b/python/obitools3/obidms/capi/obidms.pxd @@ -1,3 +1,7 @@ +#cython: language_level=3 + +from .obitypes cimport const_char_p + cdef extern from "obidms.h" nogil: struct OBIDMS_t: pass diff --git a/python/obitools3/obidms/capi/obidmscolumn.pxd b/python/obitools3/obidms/capi/obidmscolumn.pxd index 1492402..67c9549 100644 --- a/python/obitools3/obidms/capi/obidmscolumn.pxd +++ b/python/obitools3/obidms/capi/obidmscolumn.pxd @@ -1,19 +1,113 @@ +#cython: language_level=3 + +from ..capi.obidms cimport OBIDMS_p +from ..capi.obitypes cimport const_char_p, \ + OBIType_t, \ + obiversion_t, \ + obiint_t, \ + obibool_t, \ + obichar_t, \ + obifloat_t, \ + obiidx_t + cdef extern from "obidmscolumn.h" nogil: struct OBIDMS_column_t: pass ctypedef OBIDMS_column_t* OBIDMS_column_p - OBIDMS_column_p obi_create_column(OBIDMS_p dms, const char* column_name, OBIType_t type, size_t nb_lines, size_t nb_elements_per_line, const char* elements_names) + OBIDMS_column_p obi_create_column(OBIDMS_p dms, + const_char_p column_name, + OBIType_t type, + size_t nb_lines, + size_t nb_elements_per_line, + const_char_p elements_names) + size_t obi_column_get_nb_lines_used(OBIDMS_column_p column) - const char* obi_column_get_elements_names(OBIDMS_column_p column) + + const_char_p obi_column_get_elements_names(OBIDMS_column_p column) + void obi_column_make_unwritable(OBIDMS_column_p column) - OBIDMS_column_p obi_open_column(OBIDMS_p dms, const char* column_name, obiversion_t version_number) + + OBIDMS_column_p obi_open_column(OBIDMS_p dms, + const_char_p column_name, + obiversion_t version_number) + OBIType_t obi_column_get_type(OBIDMS_column_p column) + int obi_close_column(OBIDMS_column_p column) - OBIType_t obi_column_get_data_type_from_name(OBIDMS_p dms, const char* column_name) - OBIDMS_column_p obi_clone_column(OBIDMS_p dms, const char* column_name, obiversion_t version_number, bint clone_data) + + OBIType_t obi_column_get_data_type_from_name(OBIDMS_p dms, + const_char_p column_name) + + OBIDMS_column_p obi_clone_column(OBIDMS_p dms, + const_char_p column_name, + obiversion_t version_number, + bint clone_data) + int obi_truncate_and_close_column(OBIDMS_column_p column) - obiversion_t obi_column_get_latest_version_from_name(OBIDMS_p dms, const char* column_name) - OBIType_t obi_column_get_data_type_from_name(OBIDMS_p dms, const char* column_name) - size_t obi_column_get_line_count_from_name(OBIDMS_p dms, const char* column_name) + + obiversion_t obi_column_get_latest_version_from_name(OBIDMS_p dms, + const_char_p column_name) + + OBIType_t obi_column_get_data_type_from_name(OBIDMS_p dms, + const_char_p column_name) + + size_t obi_column_get_line_count_from_name(OBIDMS_p dms, + const_char_p column_name) + + +cdef extern from "obidmscolumn_int.h" nogil: + int obi_column_set_obiint_with_elt_name(OBIDMS_column_p column, + size_t line_nb, + const_char_p element_name, + obiint_t value) + + obiint_t obi_column_get_obiint_with_elt_name(OBIDMS_column_p column, + size_t line_nb, + const_char_p element_name) + +cdef extern from "obidmscolumn_bool.h" nogil: + + int obi_column_set_obibool_with_elt_name(OBIDMS_column_p column, + size_t line_nb, + const_char_p element_name, + obibool_t value) + + obibool_t obi_column_get_obibool_with_elt_name(OBIDMS_column_p column, + size_t line_nb, + const_char_p element_name) + +cdef extern from "obidmscolumn_char.h" nogil: + + int obi_column_set_obichar_with_elt_name(OBIDMS_column_p column, + size_t line_nb, + const_char_p element_name, + obichar_t value) + + obichar_t obi_column_get_obichar_with_elt_name(OBIDMS_column_p column, + size_t line_nb, + const_char_p element_name) + +cdef extern from "obidmscolumn_float.h" nogil: + + int obi_column_set_obifloat_with_elt_name(OBIDMS_column_p column, + size_t line_nb, + const_char_p element_name, + obifloat_t value) + + obifloat_t obi_column_get_obifloat_with_elt_name(OBIDMS_column_p column, + size_t line_nb, + const_char_p element_name) + +cdef extern from "obidmscolumn_idx.h" nogil: + + int obi_column_set_obiidx_with_elt_name(OBIDMS_column_p column, + size_t line_nb, + const_char_p element_name, + obiidx_t value) + + obiidx_t obi_column_get_obiidx_with_elt_name(OBIDMS_column_p column, + size_t line_nb, + const_char_p element_name) + diff --git a/python/obitools3/obidms/capi/obierrno.pxd b/python/obitools3/obidms/capi/obierrno.pxd index 186d945..eb8c4bb 100644 --- a/python/obitools3/obidms/capi/obierrno.pxd +++ b/python/obitools3/obidms/capi/obierrno.pxd @@ -1,3 +1,5 @@ +#cython: language_level=3 + + cdef extern from "obierrno.h" nogil: extern int obi_errno - diff --git a/python/obitools3/obidms/capi/obitypes.pxd b/python/obitools3/obidms/capi/obitypes.pxd index cd3a75e..1b62ea4 100644 --- a/python/obitools3/obidms/capi/obitypes.pxd +++ b/python/obitools3/obidms/capi/obitypes.pxd @@ -1,13 +1,18 @@ +#cython: language_level=3 + + from libc.stdint cimport int32_t cdef extern from *: ctypedef char* const_char_p "const char*" + cdef extern from "obidmscolumn.h" nogil: ctypedef int32_t obiversion_t + cdef extern from "obitypes.h" nogil: enum OBIType: # TODO je sais pas si ça sert de declarer le contenu de l'enum @@ -19,8 +24,7 @@ cdef extern from "obitypes.h" nogil: OBI_IDX ctypedef OBIType OBIType_t - - + enum OBIBool: pass @@ -30,4 +34,10 @@ cdef extern from "obitypes.h" nogil: ctypedef char obichar_t ctypedef size_t obiidx_t + extern obiint_t OBIInt_NA + extern obiidx_t OBIIdx_NA + extern obifloat_t OBIFloat_NA + extern obichar_t OBIChar_NA + extern obibool_t OBIBool_NA + char* name_data_type(int data_type) diff --git a/python/obitools3/obidms/obidmscolumn/__init__.py b/python/obitools3/obidms/obidmscolumn/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/python/obitools3/obidms/obidmscolumn/_obidmscolumn.pxd b/python/obitools3/obidms/obidmscolumn/_obidmscolumn.pxd deleted file mode 100644 index d6cc90e..0000000 --- a/python/obitools3/obidms/obidmscolumn/_obidmscolumn.pxd +++ /dev/null @@ -1,20 +0,0 @@ -from obitools3.obidms.capi.obidms cimport OBIDMS_p -from obitools3.obidms.capi.obierrno cimport obi_errno -from obitools3.obidms.capi.obidmscolumn cimport OBIDMS_column_p - - -cdef class OBIDMS - - -cdef class OBIDMS_column: - - cdef OBIDMS_column_p pointer - cdef OBIDMS dms - cdef str data_type # TODO keep as OBIType_t? both? - cdef str dms_name - cdef str column_name - - cpdef object get_item(self, size_t line_nb, str element_name) - cpdef list get_elements_names(self) - cpdef str get_data_type(self) - cpdef size_t get_nb_lines_used(self) diff --git a/python/obitools3/obidms/obidmscolumn/capidmscolumn.cfiles b/python/obitools3/obidms/obidmscolumn/capidmscolumn.cfiles deleted file mode 100644 index 103582d..0000000 --- a/python/obitools3/obidms/obidmscolumn/capidmscolumn.cfiles +++ /dev/null @@ -1,16 +0,0 @@ -../../../../src/obidmscolumn_int.c -../../../../src/obidmscolumn_int.h -../../../../src/obidmscolumn.h -../../../../src/obidmscolumn.c -../../../../src/obidmscolumndir.h -../../../../src/obidmscolumndir.c -../../../../src/obidms.h -../../../../src/obidms.c -../../../../src/obierrno.h -../../../../src/obierrno.c -../../../../src/obilittlebigman.h -../../../../src/obilittlebigman.c -../../../../src/obitypes.h -../../../../src/obitypes.c -../../../../src/private_at_functions.h -../../../../src/private_at_functions.c diff --git a/python/obitools3/obidms/obidmscolumn/capidmscolumn.pyx b/python/obitools3/obidms/obidmscolumn/capidmscolumn.pyx deleted file mode 100644 index dc39518..0000000 --- a/python/obitools3/obidms/obidmscolumn/capidmscolumn.pyx +++ /dev/null @@ -1,98 +0,0 @@ -#cython: language_level=3 - -cdef class OBIDMS_column: - - # Should only be initialized through a subclass - def __init__(self, - OBIDMS dms, - object column_name, # TODO - bint create, - bint clone, bint clone_data, - obiversion_t version_number, - OBIType_t type, - size_t nb_lines, - size_t nb_elements_per_line, - str elements_names): - - # Declarations - cpdef bytes column_name_b - cpdef bytes dms_name_b - cpdef bytes elements_names_b - - # Fill structure - self.dms = dms - self.data_type = (name_data_type(type)).decode('UTF-8') - self.column_name = column_name - - # Format the character strings to send them to C functions - column_name_b = column_name.encode(encoding='UTF-8') - dms_name_b = self.dms.dms_name.encode(encoding='UTF-8') - - # Create, clone or open column - if create : - if elements_names == None : - elements_names_b = column_name_b - else : - elements_names_b = elements_names.encode(encoding='UTF-8') - self.pointer = obi_create_column(self.dms.pointer, column_name_b, type, nb_lines, nb_elements_per_line, elements_names_b) - else : - if clone : - self.pointer = obi_clone_column(self.dms.pointer, column_name_b, version_number, clone_data) - else : - self.pointer = obi_open_column(self.dms.pointer, column_name_b, version_number) - - - def __iter__(self): - - # Declarations - cpdef list elements_names - cpdef str element_name - cpdef bint multiple_elements - cpdef object line # TODO - cdef size_t lines_used - cdef size_t line_nb - - # Check if there are multiple elements per line anf if yes, get their names - elements_names = self.get_elements_names() - if len(elements_names) > 1 : - multiple_elements = True - else : - element_name = elements_names[0] - - # Yield each line - lines_used = obi_column_get_nb_lines_used(self.pointer) - for line_nb in xrange(lines_used): - if multiple_elements : - line = [] - for element_name in elements_names : - line.append(self.get_item(line_nb, element_name)) - else : - line = self.get_item(line_nb, element_name) - yield line - - - def __setitem__(self, size_t line_nb, object value): - self.set_item(line_nb, "", value) - - - def __getitem__(self, size_t line_nb): - return self.get_item(line_nb, "") - - cpdef object get_item(self, line_nb, element_name): - raise NotImplementedError - - - cpdef get_elements_names(self): - cpdef bytes elements_names - elements_names = obi_column_get_elements_names(self.pointer) - return (elements_names.decode('UTF-8')).split(';') - - - cpdef get_data_type(self): - return self.data_type - - - cpdef get_nb_lines_used(self): - return obi_column_get_nb_lines_used(self.pointer) - - diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/__init__.py b/python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.cfiles b/python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.cfiles deleted file mode 100644 index 02b49a6..0000000 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.cfiles +++ /dev/null @@ -1,16 +0,0 @@ -../../../../../src/obidmscolumn_bool.c -../../../../../src/obidmscolumn_bool.h -../../../../../src/obidmscolumn.h -../../../../../src/obidmscolumn.c -../../../../../src/obidmscolumndir.h -../../../../../src/obidmscolumndir.c -../../../../../src/obidms.h -../../../../../src/obidms.c -../../../../../src/obierrno.h -../../../../../src/obierrno.c -../../../../../src/obilittlebigman.h -../../../../../src/obilittlebigman.c -../../../../../src/obitypes.h -../../../../../src/obitypes.c -../../../../../src/private_at_functions.h -../../../../../src/private_at_functions.c diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.pxd b/python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.pxd deleted file mode 100644 index b4fc65c..0000000 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.pxd +++ /dev/null @@ -1,7 +0,0 @@ -from obitools3.obidms.obidmscolumn.capidmscolumn cimport * - - -cdef extern from "obidmscolumn_bool.h" nogil: - - int obi_column_set_obibool_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name, obibool_t value); - obibool_t obi_column_get_obibool_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name); diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.pyx b/python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.pyx deleted file mode 100644 index 3ab797a..0000000 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.pyx +++ /dev/null @@ -1,35 +0,0 @@ -#cython: language_level=3 - -from .capidmscolumn_bool cimport * - - -cdef class OBIDMS_column_bool(OBIDMS_column) : - - def get_item(self, line_nb, element_name): - value = obi_column_get_obibool_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8')) - if obi_errno > 0 : - raise IndexError(line_nb, element_name) - return value - - -cdef class OBIDMS_column_bool_read(OBIDMS_column_bool) : - - def set_item(self, line_nb, element_name, value): - raise Exception('Column is read-only') - - def close(self): - if obi_close_column(self.pointer) < 0 : - raise Exception("Problem closing a column") - - -cdef class OBIDMS_column_bool_writable(OBIDMS_column_bool) : - - def set_item(self, line_nb, element_name, value): - return obi_column_set_obibool_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'), value) - - def close(self): - if obi_truncate_and_close_column(self.pointer) < 0 : - raise Exception("Problem closing a column") - - - \ No newline at end of file diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/__init__.py b/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.cfiles b/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.cfiles deleted file mode 100644 index 0f03cca..0000000 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.cfiles +++ /dev/null @@ -1,16 +0,0 @@ -../../../../../src/obidmscolumn_char.c -../../../../../src/obidmscolumn_char.h -../../../../../src/obidmscolumn.h -../../../../../src/obidmscolumn.c -../../../../../src/obidmscolumndir.h -../../../../../src/obidmscolumndir.c -../../../../../src/obidms.h -../../../../../src/obidms.c -../../../../../src/obierrno.h -../../../../../src/obierrno.c -../../../../../src/obilittlebigman.h -../../../../../src/obilittlebigman.c -../../../../../src/obitypes.h -../../../../../src/obitypes.c -../../../../../src/private_at_functions.h -../../../../../src/private_at_functions.c diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pxd b/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pxd deleted file mode 100644 index cc194a7..0000000 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pxd +++ /dev/null @@ -1,7 +0,0 @@ -from obitools3.obidms.obidmscolumn.capidmscolumn cimport * - - -cdef extern from "obidmscolumn_char.h" nogil: - - int obi_column_set_obichar_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name, obichar_t value) - obichar_t obi_column_get_obichar_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name) diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pyx b/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pyx deleted file mode 100644 index ec8bbc7..0000000 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pyx +++ /dev/null @@ -1,33 +0,0 @@ -#cython: language_level=3 - -from .capidmscolumn_char cimport * - - -cdef class OBIDMS_column_char(OBIDMS_column) : - - def get_item(self, line_nb, element_name): - cdef char value = obi_column_get_obichar_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8')) - if obi_errno > 0 : - raise IndexError(line_nb, element_name) - return value - - -cdef class OBIDMS_column_char_read(OBIDMS_column_char) : - - def set_item(self, line_nb, element_name, value): - raise Exception('Column is read-only') - - cpdef close(self): - if obi_close_column(self.pointer) < 0 : - raise Exception("Problem closing a column") - - -cdef class OBIDMS_column_char_writable(OBIDMS_column_char) : - - def set_item(self, line_nb, element_name, bytes value): - return obi_column_set_obichar_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'), value[0]) - - def close(self): - if obi_truncate_and_close_column(self.pointer) < 0 : - raise Exception("Problem closing a column") - diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_float/__init__.py b/python/obitools3/obidms/obidmscolumn/obidmscolumn_float/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.cfiles b/python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.cfiles deleted file mode 100644 index 497db12..0000000 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.cfiles +++ /dev/null @@ -1,16 +0,0 @@ -../../../../../src/obidmscolumn_float.c -../../../../../src/obidmscolumn_float.h -../../../../../src/obidmscolumn.h -../../../../../src/obidmscolumn.c -../../../../../src/obidmscolumndir.h -../../../../../src/obidmscolumndir.c -../../../../../src/obidms.h -../../../../../src/obidms.c -../../../../../src/obierrno.h -../../../../../src/obierrno.c -../../../../../src/obilittlebigman.h -../../../../../src/obilittlebigman.c -../../../../../src/obitypes.h -../../../../../src/obitypes.c -../../../../../src/private_at_functions.h -../../../../../src/private_at_functions.c diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.pxd b/python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.pxd deleted file mode 100644 index f250281..0000000 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.pxd +++ /dev/null @@ -1,7 +0,0 @@ -from obitools3.obidms.obidmscolumn.capidmscolumn cimport * - - -cdef extern from "obidmscolumn_float.h" nogil: - - int obi_column_set_obifloat_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name, obifloat_t value); - obifloat_t obi_column_get_obifloat_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name); diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.pyx b/python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.pyx deleted file mode 100644 index 20b53da..0000000 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.pyx +++ /dev/null @@ -1,34 +0,0 @@ -#cython: language_level=3 - -from .capidmscolumn_float cimport * - - -cdef class OBIDMS_column_float(OBIDMS_column) : - - def get_item(self, line_nb, element_name): - value = obi_column_get_obifloat_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8')) - if obi_errno > 0 : - raise IndexError(line_nb, element_name) - return value - - -cdef class OBIDMS_column_float_read(OBIDMS_column_float) : - - def set_item(self, line_nb, element_name, value): - raise Exception('Column is read-only') - - def close(self): - if obi_close_column(self.pointer) < 0 : - raise Exception("Problem closing a column") - - -cdef class OBIDMS_column_float_writable(OBIDMS_column_float) : - - def set_item(self, line_nb, element_name, value): - return obi_column_set_obifloat_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'), value) - - def close(self): - if obi_truncate_and_close_column(self.pointer) < 0 : - raise Exception("Problem closing a column") - - \ No newline at end of file diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/__init__.py b/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.cfiles b/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.cfiles deleted file mode 100644 index 798a321..0000000 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.cfiles +++ /dev/null @@ -1,16 +0,0 @@ -../../../../../src/obidmscolumn_idx.c -../../../../../src/obidmscolumn_idx.h -../../../../../src/obidmscolumn.h -../../../../../src/obidmscolumn.c -../../../../../src/obidmscolumndir.h -../../../../../src/obidmscolumndir.c -../../../../../src/obidms.h -../../../../../src/obidms.c -../../../../../src/obierrno.h -../../../../../src/obierrno.c -../../../../../src/obilittlebigman.h -../../../../../src/obilittlebigman.c -../../../../../src/obitypes.h -../../../../../src/obitypes.c -../../../../../src/private_at_functions.h -../../../../../src/private_at_functions.c diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pxd b/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pxd deleted file mode 100644 index 200f037..0000000 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pxd +++ /dev/null @@ -1,7 +0,0 @@ -from obitools3.obidms.obidmscolumn.capidmscolumn cimport * - - -cdef extern from "obidmscolumn_idx.h" nogil: - - int obi_column_set_obiidx_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name, obiidx_t value); - obiidx_t obi_column_get_obiidx_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name); diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pyx b/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pyx deleted file mode 100644 index ddf536c..0000000 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pyx +++ /dev/null @@ -1,33 +0,0 @@ -#cython: language_level=3 - -from .capidmscolumn_idx cimport * - - -cdef class OBIDMS_column_idx(OBIDMS_column) : - - def get_item(self, line_nb, element_name): - value = obi_column_get_obiidx_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8')) - if obi_errno > 0 : - raise IndexError(line_nb, element_name) - return value - - -cdef class OBIDMS_column_idx_read(OBIDMS_column_idx) : - - def set_item(self, line_nb, element_name, value): - raise Exception('Column is read-only') - - def close(self): - if obi_close_column(self.pointer) < 0 : - raise Exception("Problem closing a column") - - -cdef class OBIDMS_column_idx_writable(OBIDMS_column_idx) : - - def set_item(self, line_nb, element_name, value): - return obi_column_set_obiidx_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'), value) - - def close(self): - if obi_truncate_and_close_column(self.pointer) < 0 : - raise Exception("Problem closing a column") - \ No newline at end of file diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_int/__init__.py b/python/obitools3/obidms/obidmscolumn/obidmscolumn_int/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.cfiles b/python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.cfiles deleted file mode 100644 index ba23433..0000000 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.cfiles +++ /dev/null @@ -1,16 +0,0 @@ -../../../../../src/obidmscolumn_int.c -../../../../../src/obidmscolumn_int.h -../../../../../src/obidmscolumn.h -../../../../../src/obidmscolumn.c -../../../../../src/obidmscolumndir.h -../../../../../src/obidmscolumndir.c -../../../../../src/obidms.h -../../../../../src/obidms.c -../../../../../src/obierrno.h -../../../../../src/obierrno.c -../../../../../src/obilittlebigman.h -../../../../../src/obilittlebigman.c -../../../../../src/obitypes.h -../../../../../src/obitypes.c -../../../../../src/private_at_functions.h -../../../../../src/private_at_functions.c diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.pxd b/python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.pxd deleted file mode 100644 index 2b2428a..0000000 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.pxd +++ /dev/null @@ -1,21 +0,0 @@ -from obitools3.obidms.capitypes cimport obiint_t -from obitools3.obidms.obidmscolumn.capidmscolumn cimport OBIDMS_column_p -from obitools3.obidms.obidmscolumn.capidmscolumn cimport OBIDMS_column - -cdef extern from "obidmscolumn_int.h" nogil: - int obi_column_set_obiint_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name, obiint_t value); - obiint_t obi_column_get_obiint_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name); - -cdef class OBIDMS_column_int(OBIDMS_column): - - #cpdef get_item(self, size_t line_nb, str element_name) - -cdef class OBIDMS_column_int_read(OBIDMS_column_int): - -# cpdef set_item(self, size_t line_nb, str element_name, obiint_t value) -# cpdef close(self) - -cdef class OBIDMS_column_int_writable(OBIDMS_column_int): - -# cpdef set_item(self, size_t line_nb, str element_name, obiint_t value) -# cpdef close(self) \ No newline at end of file diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.pyx b/python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.pyx deleted file mode 100644 index 121d4ab..0000000 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.pyx +++ /dev/null @@ -1,37 +0,0 @@ -#cython: language_level=3 - -from obitools3.obidms.obidmscolumn.capidmscolumn cimport obi_close_column -from obitools3.obidms.obidmscolumn.capidmscolumn cimport obi_truncate_and_close_column -from obitools3.obidms.capidms cimport obi_errno - -from cpython.int cimport PyInt_FromLong - -cdef class OBIDMS_column_int(OBIDMS_column) : - - def object get_item(self, size_t line_nb, str element_name): - cdef obiint_t value - value = obi_column_get_obiint_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8')) - if obi_errno > 0 : - raise IndexError(line_nb, element_name) - return PyInt_FromLong(value) - - -cdef class OBIDMS_column_int_read(OBIDMS_column_int) : - - def set_item(self, size_t line_nb, str element_name, obiint_t value): - raise Exception('Column is read-only') - - def close(self): - if obi_close_column(self.pointer) < 0 : - raise Exception("Problem closing a column") - - -cdef class OBIDMS_column_int_writable(OBIDMS_column_int) : - - def set_item(self, size_t line_nb, str element_name, obiint_t value): - return obi_column_set_obiint_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'), value) - - def close(self): - if obi_truncate_and_close_column(self.pointer) < 0 : - raise Exception("Problem closing a column") - \ No newline at end of file diff --git a/python/obitools3/utils.pxd b/python/obitools3/utils.pxd index b37e77a..0eafa4d 100644 --- a/python/obitools3/utils.pxd +++ b/python/obitools3/utils.pxd @@ -1,3 +1,5 @@ +#cython: language_level=3 + cdef bytes str2bytes(str string) cdef str bytes2str(bytes string) \ No newline at end of file diff --git a/python/obitools3/utils.pyx b/python/obitools3/utils.pyx index 0d22078..183b373 100644 --- a/python/obitools3/utils.pyx +++ b/python/obitools3/utils.pyx @@ -1,3 +1,5 @@ +#cython: language_level=3 + cdef bytes str2bytes(str string): return string.encode('ascii')