diff --git a/src/glypy/_c/utils.pyx b/src/glypy/_c/utils.pyx index 1b3a963..30abf98 100644 --- a/src/glypy/_c/utils.pyx +++ b/src/glypy/_c/utils.pyx @@ -161,7 +161,7 @@ cdef struct monosaccharide_count_cell: float mass -cdef int cmp_monosaccharide_count_cell(const void* lhs, const void* rhs) nogil: +cdef int cmp_monosaccharide_count_cell(const void* lhs, const void* rhs) noexcept nogil: cdef monosaccharide_count_cell* left = lhs cdef monosaccharide_count_cell* right = rhs diff --git a/src/glypy/structure/stereochemistry.py b/src/glypy/structure/stereochemistry.py index 49b0c9b..5ef6b35 100644 --- a/src/glypy/structure/stereochemistry.py +++ b/src/glypy/structure/stereochemistry.py @@ -129,12 +129,17 @@ def _update_stereocode_basic(code, monosaccharide): def _update_stereocode_extended(code, monosaccharide): null_position = (UnknownPosition, NoPosition) + # Count starting from 1 instead of 0 because ring coordinates are 1-base if monosaccharide.ring_start not in null_position and monosaccharide.ring_end not in null_position: ring_range = range(monosaccharide.ring_start, monosaccharide.ring_end + 1) else: ring_range = [] ring_dimensions = range(1, monosaccharide.superclass.value + 1) termini = set(ring_dimensions) - set(ring_range) + if not termini: + # We cannot find an available carbon, so it must be on an otherwise + # occupied carbon, e.g. in xylopyranose + termini = ring_dimensions terminal = max(termini) - 1 code[terminal] = Stereocoding.h for i in range(len(code)):