Skip to content

Commit

Permalink
Fix segfault when element has no stable isotopes and a monoisotopic e…
Browse files Browse the repository at this point in the history
…ntry exists in NIST database
  • Loading branch information
mobiusklein committed Nov 25, 2023
1 parent 7226550 commit 60fad15
Show file tree
Hide file tree
Showing 8 changed files with 211 additions and 200 deletions.
74 changes: 37 additions & 37 deletions src/brainpy/_c/composition.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ nist_mass = __nist_mass

cdef double PROTON = nist_mass["H+"][0][0]

cdef double neutral_mass(double mz, int z, double charge_carrier=*) nogil
cdef double mass_charge_ratio(double neutral_mass, int z, double charge_carrier=*) nogil
cdef char* _parse_isotope_string(char* label, int* isotope_num, char* element_name) nogil
cdef double neutral_mass(double mz, int z, double charge_carrier=*) noexcept nogil
cdef double mass_charge_ratio(double neutral_mass, int z, double charge_carrier=*) noexcept nogil
cdef char* _parse_isotope_string(char* label, int* isotope_num, char* element_name) noexcept nogil

# -----------------------------------------------------------------------------
# Isotope and IsotopeMap Declarations
Expand All @@ -26,9 +26,9 @@ cdef struct IsotopeMap:

cdef IsotopeMap* make_isotope_map(list organized_isotope_data, size_t size)

cdef Isotope* get_isotope_by_neutron_shift(IsotopeMap* isotopes, int neutron_shift) nogil
cdef void free_isotope_map(IsotopeMap* isotopes) nogil
cdef void print_isotope_map(IsotopeMap* isotope_map) nogil
cdef Isotope* get_isotope_by_neutron_shift(IsotopeMap* isotopes, int neutron_shift) noexcept nogil
cdef void free_isotope_map(IsotopeMap* isotopes) noexcept nogil
cdef void print_isotope_map(IsotopeMap* isotope_map) noexcept nogil

# -----------------------------------------------------------------------------
# Element Declarations
Expand All @@ -41,13 +41,13 @@ cdef struct Element:
cdef void _isotopes_of(char* element_symbol, IsotopeMap** isotope_frequencies)
cdef Element* make_element(char* symbol)

cdef double element_monoisotopic_mass(Element* element) nogil
cdef int element_min_neutron_shift(Element* element) nogil
cdef int element_max_neutron_shift(Element* element) nogil
cdef void free_element(Element* element) nogil
cdef void print_element(Element* element) nogil
cdef double element_monoisotopic_mass(Element* element) noexcept nogil
cdef int element_min_neutron_shift(Element* element) noexcept nogil
cdef int element_max_neutron_shift(Element* element) noexcept nogil
cdef void free_element(Element* element) noexcept nogil
cdef void print_element(Element* element) noexcept nogil

cdef Element* make_fixed_isotope_element(Element* element, int neutron_count) nogil
cdef Element* make_fixed_isotope_element(Element* element, int neutron_count) noexcept nogil


# -----------------------------------------------------------------------------
Expand All @@ -59,7 +59,7 @@ cdef struct ElementHashBucket:
size_t size


cdef void free_element_hash_bucket(ElementHashBucket* bucket) nogil
cdef void free_element_hash_bucket(ElementHashBucket* bucket) noexcept nogil


cdef struct ElementHashTable:
Expand All @@ -68,24 +68,24 @@ cdef struct ElementHashTable:

cdef ElementHashTable* _ElementTable

cdef ElementHashTable* make_element_hash_table(size_t size) nogil
cdef ElementHashTable* make_element_hash_table(size_t size) noexcept nogil

cdef int element_hash_bucket_insert(ElementHashBucket* bucket, Element* element) nogil
cdef int element_hash_bucket_insert(ElementHashBucket* bucket, Element* element) noexcept nogil

cdef int element_hash_bucket_find(ElementHashBucket* bucket, char* symbol, Element** out) nogil
cdef int element_hash_bucket_find(ElementHashBucket* bucket, char* symbol, Element** out) noexcept nogil

cdef int element_hash_table_get(ElementHashTable* table, char* symbol, Element** out) nogil
cdef int element_hash_table_get(ElementHashTable* table, char* symbol, Element** out) noexcept nogil

cdef int element_hash_table_put(ElementHashTable* table, Element* element) nogil
cdef int element_hash_table_put(ElementHashTable* table, Element* element) noexcept nogil

cdef size_t hash_string(char *str) nogil
cdef size_t hash_string(char *str) noexcept nogil

cdef size_t free_element_hash_table(ElementHashTable* table) nogil
cdef size_t free_element_hash_table(ElementHashTable* table) noexcept nogil


cdef ElementHashTable* get_system_element_hash_table() nogil
cdef ElementHashTable* get_system_element_hash_table() noexcept nogil

cdef int set_system_element_hash_table(ElementHashTable* table) nogil
cdef int set_system_element_hash_table(ElementHashTable* table) noexcept nogil


# -----------------------------------------------------------------------------
Expand All @@ -98,21 +98,21 @@ cdef struct Composition:
size_t used
int max_variants

cdef Composition* make_composition() nogil
cdef Composition* copy_composition(Composition* composition) nogil
cdef void print_composition(Composition* composition) nogil
cdef int composition_set_element_count(Composition* composition, char* element, count_type count) nogil
cdef int composition_get_element_count(Composition* composition, char* element, count_type* count) nogil
cdef int composition_inc_element_count(Composition* composition, char* element, count_type increment) nogil
cdef int composition_resize(Composition* composition) nogil
cdef double composition_mass(Composition* composition) nogil
cdef void free_composition(Composition* composition) nogil

cdef Composition* composition_add(Composition* composition_1, Composition* composition_2, int sign) nogil
cdef int composition_iadd(Composition* composition_1, Composition* composition_2, int sign) nogil
cdef Composition* composition_mul(Composition* composition, long scale) nogil
cdef void composition_imul(Composition* composition, long scale) nogil
cdef int initialize_composition_from_formula(char* formula, ssize_t n, Composition* composition) nogil
cdef Composition* make_composition() noexcept nogil
cdef Composition* copy_composition(Composition* composition) noexcept nogil
cdef void print_composition(Composition* composition) noexcept nogil
cdef int composition_set_element_count(Composition* composition, char* element, count_type count) noexcept nogil
cdef int composition_get_element_count(Composition* composition, char* element, count_type* count) noexcept nogil
cdef int composition_inc_element_count(Composition* composition, char* element, count_type increment) noexcept nogil
cdef int composition_resize(Composition* composition) noexcept nogil
cdef double composition_mass(Composition* composition) noexcept nogil
cdef void free_composition(Composition* composition) noexcept nogil

cdef Composition* composition_add(Composition* composition_1, Composition* composition_2, int sign) noexcept nogil
cdef int composition_iadd(Composition* composition_1, Composition* composition_2, int sign) noexcept nogil
cdef Composition* composition_mul(Composition* composition, long scale) noexcept nogil
cdef void composition_imul(Composition* composition, long scale) noexcept nogil
cdef int initialize_composition_from_formula(char* formula, ssize_t n, Composition* composition) noexcept nogil

cdef dict composition_to_dict(Composition* composition)
cdef Composition* dict_to_composition(dict comp_dict)
Expand Down
Loading

0 comments on commit 60fad15

Please sign in to comment.