[med-svn] [Git][med-team/libslow5lib][upstream] New upstream version 1.4.0+dfsg

Étienne Mollier (@emollier) gitlab at salsa.debian.org
Sat Feb 21 16:36:53 GMT 2026



Étienne Mollier pushed to branch upstream at Debian Med / libslow5lib


Commits:
37ff2491 by Étienne Mollier at 2026-02-21T16:54:44+01:00
New upstream version 1.4.0+dfsg
- - - - -


7 changed files:

- README.md
- docs/pyslow5_api/pyslow5.md
- include/slow5/slow5_defs.h
- python/README.md
- python/pyslow5.pyx
- python/test.py
- setup.py


Changes:

=====================================
README.md
=====================================
@@ -14,7 +14,8 @@ SLOW5 ecosystem: https://hasindu2008.github.io/slow5<br/>
 
 [![BioConda Install](https://img.shields.io/conda/dn/bioconda/pyslow5.svg?style=flag&label=BioConda%20install)](https://anaconda.org/bioconda/pyslow5)
 [![PyPI](https://img.shields.io/pypi/v/pyslow5.svg?style=flat)](https://pypi.python.org/pypi/pyslow5)
-![PyPI - Downloads](https://img.shields.io/pypi/dm/pyslow5?label=pyslow5%20PyPi)
+![PyPI - Downloads](https://img.shields.io/pypi/dm/pyslow5?label=downloads)
+[![PyPI Downloads](https://static.pepy.tech/badge/pyslow5)](https://pepy.tech/projects/pyslow5)
 [![C CI](https://github.com/hasindu2008/slow5lib/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/hasindu2008/slow5lib/actions/workflows/c-cpp.yml)
 [![Py CI](https://github.com/hasindu2008/slow5lib/actions/workflows/python.yml/badge.svg)](https://github.com/hasindu2008/slow5lib/actions/workflows/python.yml)
 


=====================================
docs/pyslow5_api/pyslow5.md
=====================================
@@ -338,7 +338,7 @@ print(end_reason_labels)
 
 > ['unknown', 'partial', 'mux_change', 'unblock_mux_change', 'signal_positive', 'signal_negative']
 # or from newer datsets
-> ["unknown", "mux_change", "unblock_mux_change", "data_service_unblock_mux_change", "signal_positive", "signal_negative", "api_request", "device_data_error"]
+> ["unknown", "mux_change", "unblock_mux_change", "data_service_unblock_mux_change", "signal_positive", "signal_negative", "api_request", "device_data_error", "analysis_config_change", "paused"]
 
 readID = "r1"
 read = s5.get_read(readID, aux='all')


=====================================
include/slow5/slow5_defs.h
=====================================
@@ -44,7 +44,7 @@ The API documentation is available at https://hasindu2008.github.io/slow5tools/
 */
 
 // library version
-#define SLOW5_LIB_VERSION "1.3.1"
+#define SLOW5_LIB_VERSION "1.4.0"
 
 // maximum file version supported by this library - independent of slow5 library version above
 // if updating change all 4 below


=====================================
python/README.md
=====================================
@@ -338,7 +338,7 @@ print(end_reason_labels)
 
 > ['unknown', 'partial', 'mux_change', 'unblock_mux_change', 'signal_positive', 'signal_negative']
 # or from newer datsets
-> ["unknown", "mux_change", "unblock_mux_change", "data_service_unblock_mux_change", "signal_positive", "signal_negative", "api_request", "device_data_error"]
+> ["unknown", "mux_change", "unblock_mux_change", "data_service_unblock_mux_change", "signal_positive", "signal_negative", "api_request", "device_data_error", "analysis_config_change", "paused"]
 
 readID = "r1"
 read = s5.get_read(readID, aux='all')


=====================================
python/pyslow5.pyx
=====================================
@@ -98,6 +98,7 @@ cdef class Open:
     cdef char *num_reads_since_mux_change
     cdef char *time_since_mux_change
     cdef char *num_minknow_events
+    cdef char *open_pore_level
     cdef char **end_reason_labels
     cdef pyslow5.uint8_t end_reason_labels_len
     cdef char *channel_number_val
@@ -113,6 +114,7 @@ cdef class Open:
     cdef pyslow5.uint32_t num_reads_since_mux_change_val
     cdef float time_since_mux_change_val
     cdef pyslow5.uint64_t num_minknow_events_val
+    cdef float open_pore_level_val
     cdef char **channel_number_val_array
     cdef double *median_before_val_array
     cdef pyslow5.int32_t *read_number_val_array
@@ -126,6 +128,7 @@ cdef class Open:
     cdef pyslow5.uint32_t *num_reads_since_mux_change_val_array
     cdef float *time_since_mux_change_val_array
     cdef pyslow5.uint64_t *num_minknow_events_val_array
+    cdef float *open_pore_level_val_array
 
     cdef np.int16_t[:] temp_array 
 
@@ -205,6 +208,7 @@ cdef class Open:
         self.num_reads_since_mux_change = strdup("num_reads_since_mux_change")
         self.time_since_mux_change = strdup("time_since_mux_change")
         self.num_minknow_events = strdup("num_minknow_events")
+        self.open_pore_level = strdup("open_pore_level")
         self.end_reason_labels = NULL
         self.end_reason_labels_len = 0
         self.channel_number_val = NULL
@@ -220,6 +224,7 @@ cdef class Open:
         self.num_reads_since_mux_change_val = 0
         self.time_since_mux_change_val = 0.0
         self.num_minknow_events_val = 0
+        self.open_pore_level_val = 0.0
         self.channel_number_val_array = NULL
         self.median_before_val_array = NULL
         self.read_number_val_array = NULL
@@ -233,6 +238,7 @@ cdef class Open:
         self.num_reads_since_mux_change_val_array = NULL
         self.time_since_mux_change_val_array = NULL
         self.num_minknow_events_val_array = NULL
+        self.open_pore_level_val_array = NULL
 
 
         self.total_time_slow5_get_next = 0.0
@@ -391,6 +397,7 @@ cdef class Open:
         free(self.num_reads_since_mux_change)
         free(self.time_since_mux_change)
         free(self.num_minknow_events)
+        free(self.open_pore_level)
         
         if self.end_reason_labels is not NULL:
             for i in range(self.end_reason_labels_len):
@@ -1504,7 +1511,7 @@ cdef class Open:
 
         # end_reason_labels = ['unknown', 'partial', 'mux_change', 'unblock_mux_change', 'signal_positive', 'signal_negative']
         # update end_reason to be more likely compatible with current pod5 format & end_reasons
-        end_reason_labels = ["unknown", "mux_change", "unblock_mux_change", "data_service_unblock_mux_change", "signal_positive", "signal_negative", "api_request", "device_data_error"]
+        end_reason_labels = ["unknown", "mux_change", "unblock_mux_change", "data_service_unblock_mux_change", "signal_positive", "signal_negative", "api_request", "device_data_error", "analysis_config_change", "paused"]
 
         if aux:
             return header, end_reason_labels
@@ -1537,6 +1544,7 @@ cdef class Open:
                "num_reads_since_mux_change": None,
                "time_since_mux_change": None,
                "num_minknow_events": None,
+               "open_pore_level": None,
                }
 
         if aux:
@@ -1583,6 +1591,7 @@ cdef class Open:
                      "num_reads_since_mux_change": type(1),
                      "time_since_mux_change": type(1.0),
                      "num_minknow_events": type(1),
+                     "open_pore_level": type(1.0),
                      }
 
         C_aux_types = {"channel_number": SLOW5_STRING,
@@ -1598,6 +1607,7 @@ cdef class Open:
                      "num_reads_since_mux_change": SLOW5_UINT32_T,
                      "time_since_mux_change": SLOW5_FLOAT,
                      "num_minknow_events": SLOW5_UINT64_T,
+                     "open_pore_level": SLOW5_FLOAT,
                      }
 
         for a in user_aux_types:
@@ -1642,6 +1652,7 @@ cdef class Open:
                         "num_reads_since_mux_change": type(1),
                         "time_since_mux_change": type(1.0),
                         "num_minknow_events": type(1),
+                        "open_pore_level": type(1.0),
                         }
 
         new_aux = {}
@@ -1710,6 +1721,9 @@ cdef class Open:
                     elif a == "num_minknow_events":
                         self.num_minknow_events_val = <uint64_t>aux[a]
                         new_aux[a] = aux[a]
+                    elif a == "open_pore_level":
+                        self.open_pore_level_val = <float>aux[a]
+                        new_aux[a] = aux[a]
                     else:
                          self.logger.error("_record_type_validation {}: {} user aux field unknown?".format(a, aux[a]))
 
@@ -1745,6 +1759,7 @@ cdef class Open:
                         "num_reads_since_mux_change": type(1),
                         "time_since_mux_change": type(1.0),
                         "num_minknow_events": type(1),
+                        "open_pore_level": type(1.0),
                         }
 
         new_aux = {}
@@ -1800,6 +1815,8 @@ cdef class Open:
                         new_aux[a] = aux[a]
                     elif a == "num_minknow_events":
                         new_aux[a] = aux[a]
+                    elif a == "open_pore_level":
+                        new_aux[a] = aux[a]
                     else:
                         self.logger.error("_record_type_validation {}: {} user aux field unknown".format(a, aux[a]))
 
@@ -1896,6 +1913,7 @@ cdef class Open:
                      "num_reads_since_mux_change": type(1),
                      "time_since_mux_change": type(1.0),
                      "num_minknow_events": type(1),
+                     "open_pore_level": type(1.0),
                      }
         
         aux_types_keys = [
@@ -1912,6 +1930,7 @@ cdef class Open:
             "num_reads_since_mux_change",
             "time_since_mux_change",
             "num_minknow_events",
+            "open_pore_level",
         ]
 
         self.logger.debug("write_record: _record_type_validation running")
@@ -2052,6 +2071,8 @@ cdef class Open:
                     ret = slow5_aux_set(self.write, self.time_since_mux_change, <const void *>&self.time_since_mux_change_val, self.s5.header)
                 elif a == "num_minknow_events":
                     ret = slow5_aux_set(self.write, self.num_minknow_events, <const void *>&self.num_minknow_events_val, self.s5.header)
+                elif a == "open_pore_level":
+                    ret = slow5_aux_set(self.write, self.open_pore_level, <const void *>&self.open_pore_level_val, self.s5.header)
                 else:
                     ret = -1
                 if ret < 0:
@@ -2081,6 +2102,7 @@ cdef class Open:
             self.num_reads_since_mux_change_val = 0
             self.time_since_mux_change_val = 0.0
             self.num_minknow_events_val = 0
+            self.open_pore_level_val = 0
 
 
         # free memory
@@ -2114,6 +2136,7 @@ cdef class Open:
                      "num_reads_since_mux_change": type(1),
                      "time_since_mux_change": type(1.0),
                      "num_minknow_events": type(1),
+                     "open_pore_level": type(1.0),
                      }
         
         aux_types_keys = [
@@ -2130,6 +2153,7 @@ cdef class Open:
             "num_reads_since_mux_change",
             "time_since_mux_change",
             "num_minknow_events",
+            "open_pore_level",
         ]
 
         # check if empty dic was given
@@ -2165,6 +2189,7 @@ cdef class Open:
             self.num_reads_since_mux_change_val_array = <uint32_t *> malloc(sizeof(uint32_t)*batch_len)
             self.time_since_mux_change_val_array = <float *> malloc(sizeof(float)*batch_len)
             self.num_minknow_events_val_array = <uint64_t *> malloc(sizeof(uint64_t)*batch_len)
+            self.open_pore_level_val_array = <float *> malloc(sizeof(float)*batch_len)
             for i, idx in enumerate(batch):
                 if aux is not None:
                     checked_record, checked_aux = self._multi_record_type_validation(records[idx], aux[idx])
@@ -2196,6 +2221,8 @@ cdef class Open:
                             self.time_since_mux_change_val_array[i] = <float>checked_aux[a]
                         elif a == "num_minknow_events":
                             self.num_minknow_events_val_array[i] = <uint64_t>checked_aux[a]
+                        elif a == "open_pore_level":
+                            self.open_pore_level_val_array[i] = <float>checked_aux[a]
                     checked_auxs[idx] = checked_aux
                 else:
                     checked_record, checked_aux = self._record_type_validation(records[idx], aux)
@@ -2345,6 +2372,8 @@ cdef class Open:
                             ret = slow5_aux_set(self.twrite[idx], self.time_since_mux_change, <const void *>&self.time_since_mux_change_val_array[idx], self.s5.header)
                         elif a == "num_minknow_events":
                             ret = slow5_aux_set(self.twrite[idx], self.num_minknow_events, <const void *>&self.num_minknow_events_val_array[idx], self.s5.header)
+                        elif a == "open_pore_level":
+                            ret = slow5_aux_set(self.twrite[idx], self.open_pore_level, <const void *>&self.open_pore_level_val_array[idx], self.s5.header)
                         else:
                             ret = -1
                         if ret < 0:
@@ -2389,6 +2418,7 @@ cdef class Open:
                 free(self.num_reads_since_mux_change_val_array)
                 free(self.time_since_mux_change_val_array)
                 free(self.num_minknow_events_val_array)
+                free(self.open_pore_level_val_array)
 
         end_multi_write = time.time() - start_multi_write
         self.total_multi_write_time = self.total_multi_write_time + end_multi_write


=====================================
python/test.py
=====================================
@@ -409,7 +409,8 @@ class TestWriteAux(unittest.TestCase):
                "predicted_scaling_scale": None,
                "num_reads_since_mux_change": None,
                "time_since_mux_change": None,
-               "num_minknow_events": None}
+               "num_minknow_events": None,
+               "open_pore_level": None,}
         _, aux = self.F.get_empty_record(aux=True)
         for i, rec in enumerate(aux):
             with self.subTest(i=i, attr=rec):


=====================================
setup.py
=====================================
@@ -89,7 +89,7 @@ def readme():
 
 setup(
     name = 'pyslow5',
-    version='1.3.1',
+    version='1.4.0',
     url = 'https://github.com/hasindu2008/slow5lib',
     description='slow5lib python bindings',
     long_description=readme(),



View it on GitLab: https://salsa.debian.org/med-team/libslow5lib/-/commit/37ff2491e95c2374bc9976827c4d752c1a88af3d

-- 
View it on GitLab: https://salsa.debian.org/med-team/libslow5lib/-/commit/37ff2491e95c2374bc9976827c4d752c1a88af3d
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20260221/4a2992d3/attachment-0001.htm>


More information about the debian-med-commit mailing list