Skip to content

Commit

Permalink
count sig figs with decimal package
Browse files Browse the repository at this point in the history
  • Loading branch information
arjunsavel committed Jul 31, 2024
1 parent ef0d20f commit d18b084
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 24 deletions.
27 changes: 5 additions & 22 deletions schema/schema_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
from sqlalchemy.orm import validates
from astropy.io.votable.ucd import check_ucd
import numpy as np
from decimal import Decimal
import logging

# Globals
Expand All @@ -33,27 +34,9 @@ def check_string_length(value, max_length, key):
else:
pass

def count_significant_digits_numpy(number):
# Convert to string with numpy and handle scientific notation
num_str = np.format_float_positional(number, precision=15, unique=False, fractional=False, trim='k')

# Remove leading zeros and the decimal point
if '.' in num_str:
num_str = num_str.rstrip('0').rstrip('.')

# Remove leading minus if the number is negative
num_str = num_str.lstrip('-')

# Split into integer and fractional parts
if '.' in num_str:
integer_part, fractional_part = num_str.split('.')
else:
integer_part, fractional_part = num_str, ''

# Count significant digits
significant_digits = len(integer_part.lstrip('0')) + len(fractional_part)

return significant_digits
def count_significant_digits(numstr):
return len(Decimal(numstr).normalize().as_tuple().digits)



Expand Down Expand Up @@ -411,8 +394,8 @@ def validate_parallax_sig_figs(self, key, value):

if hasattr(self, 'parallax_error') and self.parallax_error is not None:

n_sig_figs_error = count_significant_digits_numpy(self.parallax_error)
n_sig_figs_value = count_significant_digits_numpy(value)
n_sig_figs_error = count_significant_digits(self.parallax_error)
n_sig_figs_value = count_significant_digits(value)

if n_sig_figs_value > n_sig_figs_error:
# raise warning instead of error.
Expand Down
4 changes: 2 additions & 2 deletions tests/test_database.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,8 +186,8 @@ def test_sig_figs_parallax(db):

wrong_sig_figs = []
for i in t:
parallax_sig_figs = count_significant_digits_numpy(i['parallax_mas'])
error_sig_figs = count_significant_digits_numpy(i['parallax_error'])
parallax_sig_figs = count_significant_digits(i['parallax_mas'])
error_sig_figs = count_significant_digits(i['parallax_error'])

if error_sig_figs >= parallax_sig_figs:
wrong_sig_figs.append(i)
Expand Down

0 comments on commit d18b084

Please sign in to comment.