Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
118 commits
Select commit Hold shift + click to select a range
3a53d8c
A first pass on linear_combo -> ucombo
jagerber48 Aug 9, 2024
01ef70d
revert test changes
jagerber48 Aug 10, 2024
f338549
rework UCombo, delete Variable
jagerber48 Aug 11, 2024
5f64b9e
some test updates
jagerber48 Aug 11, 2024
80e3d31
Pass more tests
jagerber48 Aug 12, 2024
f939766
Merge branch 'master' into feature/linear_combo_refactor
jagerber48 Nov 5, 2024
d7b9a2e
remove large float test
jagerber48 Nov 16, 2024
48c3973
Clean up UFloat class
jagerber48 Nov 17, 2024
1731b5a
some formatting changes
jagerber48 Nov 17, 2024
f0d4225
uncertainty instead of _linear_combo
jagerber48 Nov 17, 2024
1b385f2
variety of updates and test cleanup
jagerber48 Nov 17, 2024
fe849ff
copy tests
jagerber48 Nov 17, 2024
c8fc497
pickling tests
jagerber48 Nov 17, 2024
681bef9
no negative std_dev in tests
jagerber48 Nov 17, 2024
2c1b11d
modify test
jagerber48 Nov 17, 2024
ac6b497
more tests
jagerber48 Nov 17, 2024
b3f7fb2
handle some edge cases with 0 uncertainty
jagerber48 Nov 18, 2024
fc6e592
fix test_hypot
jagerber48 Dec 5, 2024
f2bfc60
compare analytic and numerical derivatives on math functions
jagerber48 Dec 7, 2024
2361849
unumpy
jagerber48 Dec 7, 2024
3c428a2
mainly code to handle inv and pinv array function
jagerber48 Dec 12, 2024
24f1249
Merge remote-tracking branch 'lmfit/master' into feature/linear_combo…
jagerber48 Dec 12, 2024
4084e7f
fix import
jagerber48 Dec 12, 2024
ec8d7f8
slim down UCombo, especially remove __hash__
jagerber48 Dec 13, 2024
eba7ccd
Add hashes
jagerber48 Dec 13, 2024
3f78e5c
bring back is_expanded
jagerber48 Dec 13, 2024
c80dd9b
do not check std_dev during operations. This kills performance.
jagerber48 Dec 13, 2024
5fc3cbd
avoid empty ucombos, or ucombo/uatom weights exactly equal to zero.
jagerber48 Dec 13, 2024
6d53afb
special case empty uncertainty in the tests. Is this something we want??
jagerber48 Dec 13, 2024
7ad82ba
fix broken test that wasn't running
jagerber48 Dec 17, 2024
fb69b1f
ucombo clean up and refactor
jagerber48 Dec 17, 2024
7c35233
don't calculate std_dev with kwargs inputs, cleanup f_with_affine_out…
jagerber48 Dec 17, 2024
0eb135b
some correlated_values_norm cleanup
jagerber48 Dec 17, 2024
c6f116f
todo on untested, probably broken functions
jagerber48 Dec 17, 2024
a8fd413
codecov CI
jagerber48 Dec 18, 2024
0abc0f6
revert previous commit (it was made to the wrong branch and had a wro…
jagerber48 Dec 18, 2024
0086a0a
fixed ucombo hash
jagerber48 Dec 26, 2024
e6211ca
Merge branch 'master' into feature/linear_combo_refactor
jagerber48 Dec 28, 2024
7aeeed0
start updating docs
jagerber48 Dec 28, 2024
ddf2e1d
instance check for ABC real seems to be slow. See if removing that im…
jagerber48 Dec 28, 2024
40b088c
need to include int
jagerber48 Dec 28, 2024
968feef
documentation and doctest
jagerber48 Dec 30, 2024
d5edb5f
fix index
jagerber48 Dec 30, 2024
76a4b80
cast default dict to dict for ucombo expanded dict. Also don't do eag…
jagerber48 Dec 30, 2024
1da88c3
Add back make.bat
jagerber48 Dec 30, 2024
54179b7
add doctest sphinx extension in conf.py so doctests can run
jagerber48 Dec 30, 2024
e8aba3f
Merge branch 'feature/add_make.bat' into feature/linear_combo_refactor
jagerber48 Dec 30, 2024
1da127e
UAtom repr
jagerber48 Dec 30, 2024
17bc5a7
error_components doctest
jagerber48 Dec 30, 2024
34701c2
doctests
jagerber48 Dec 30, 2024
5c309d4
more documentation
jagerber48 Dec 30, 2024
79e00d0
don't document Variable
jagerber48 Dec 31, 2024
9607a0d
add tuples instead of nesting for addition. Will this be faster?
jagerber48 Dec 31, 2024
e7e327d
Merge branch 'master' into feature/linear_combo_refactor
jagerber48 Mar 15, 2025
357a37f
refactor test_power_derivatives
jagerber48 Mar 15, 2025
ee48ae2
Merge branch 'master' into feature/linear_combo_refactor
jagerber48 Apr 10, 2025
1b6bffa
Merge branch 'master' into feature/linear_combo_refactor
jagerber48 Apr 29, 2025
1b95718
fixed mangled merge ordering
jagerber48 Apr 29, 2025
cb5e067
fix import
jagerber48 Apr 29, 2025
abb3c4d
Merge branch 'main' into test_merge_2
jagerber48 May 23, 2025
3485582
fix some tests
jagerber48 May 23, 2025
951abf8
use simpler test
jagerber48 May 23, 2025
f506876
Merge branch 'main' into test_merge_2
jagerber48 May 28, 2025
6c119c9
remove unused cases and generation code
jagerber48 May 28, 2025
0003ed8
use other case strategy
jagerber48 May 28, 2025
abca48a
Merge branch 'test_merge_2' into feature/linear_combo_refactor
jagerber48 May 28, 2025
2f899e0
start handling zero weight differently
jagerber48 May 28, 2025
42542fa
rewrite tests
jagerber48 May 28, 2025
8b14818
calculated zero equality test
jagerber48 May 28, 2025
7e2bf91
Merge branch 'main' into feature/linear_combo_refactor
jagerber48 May 31, 2025
fd95a83
See if uuid1 is faster
jagerber48 Jun 6, 2025
0d7594e
pickle docs
jagerber48 Jun 6, 2025
a63b0bc
stop doctests for now
jagerber48 Jun 6, 2025
357601b
try getrandbits
jagerber48 Jun 6, 2025
1b675bd
remove checks
jagerber48 Jun 6, 2025
7688ac7
remove more checks
jagerber48 Jun 6, 2025
ceda0d3
simplify hash
jagerber48 Jun 6, 2025
4b0588c
remove the bigger performance tests
jagerber48 Jun 6, 2025
fbc05e3
back to hash calculation
jagerber48 Jun 6, 2025
d270258
Merge branch 'main' into feature/linear_combo_refactor
jagerber48 Jun 6, 2025
fcdf1a1
Merge branch 'main' into feature/linear_combo_refactor
jagerber48 Jun 6, 2025
9b9bca1
Merge branch 'main' into feature/linear_combo_refactor
jagerber48 Jun 6, 2025
a2d5bc4
ValueError
jagerber48 Jun 6, 2025
6df7b46
large number changelog
jagerber48 Jun 6, 2025
cb4f7b7
better type annotations
jagerber48 Jun 7, 2025
5d3be9a
UFloat class accepts std_dev only now for a better public API.
jagerber48 Jun 7, 2025
2d9fb89
smaller uuid
jagerber48 Jun 7, 2025
0a21c25
add correlation and covariance functions
jagerber48 Jun 8, 2025
4d584e5
changelog
jagerber48 Jun 8, 2025
1a222e1
make uncertainty and UCombo stuff private
jagerber48 Jun 8, 2025
4fb33b1
readme.rst
jagerber48 Jun 8, 2025
7f4f00f
index.rst
jagerber48 Jun 8, 2025
fda9f90
repr and str include tag
jagerber48 Jun 8, 2025
10e63e0
user_guide work
jagerber48 Jun 8, 2025
8d4c8bb
user guide
jagerber48 Jun 9, 2025
ba509bb
more user guide
jagerber48 Jun 9, 2025
87f2461
user guide work
jagerber48 Jun 9, 2025
b93b44f
numpy array if possible
jagerber48 Jun 10, 2025
87bc13d
more user guide
jagerber48 Jun 10, 2025
3805a83
more docs numpy test
jagerber48 Jun 10, 2025
9ede78c
more user guide
jagerber48 Jun 15, 2025
4f71856
random seed
jagerber48 Jun 15, 2025
f0a334f
pickling
jagerber48 Jun 15, 2025
47cae37
comparison
jagerber48 Jun 15, 2025
b21d4ff
don't need to document `isinstance`
jagerber48 Jun 15, 2025
59c44ac
linear breakdown
jagerber48 Jun 15, 2025
532e3c8
nan docs
jagerber48 Jun 15, 2025
b890d23
more documentation
jagerber48 Jun 16, 2025
c3c3cd3
ufloat as alias
jagerber48 Jun 16, 2025
4098296
remove special topics section
jagerber48 Jun 16, 2025
95060b4
doc updates
jagerber48 Jun 16, 2025
60ae418
top bar
jagerber48 Jun 16, 2025
7de5299
pass warning
jagerber48 Jun 16, 2025
703e57c
numpy guide
jagerber48 Jun 16, 2025
ca66831
formatting guide
jagerber48 Jun 16, 2025
8b0a753
bring doctest back
jagerber48 Jun 16, 2025
6583987
formatting
jagerber48 Jun 16, 2025
ac5ae02
Merge branch 'main' into feature/linear_combo_refactor
jagerber48 Jul 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 40 additions & 24 deletions tests/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,60 +32,74 @@ def power_all_cases(op):
non_int_larger_than_one = ufloat(3.1, 0.01)
positive_smaller_than_one = ufloat(0.3, 0.01)

negative_uatom = next(iter(negative.uncertainty.expanded_dict))
positive_uatom = next(iter(positive.uncertainty.expanded_dict))
positive2_uatom = next(iter(positive2.uncertainty.expanded_dict))
integer_uatom = next(iter(integer.uncertainty.expanded_dict))
one_uatom = next(iter(one.uncertainty.expanded_dict))
zero_uatom = next(iter(zero.uncertainty.expanded_dict))
zero2_uatom = next(iter(zero2.uncertainty.expanded_dict))
non_int_larger_than_one_uatom = next(
iter(non_int_larger_than_one.uncertainty.expanded_dict)
)
positive_smaller_than_one_uatom = next(
iter(positive_smaller_than_one.uncertainty.expanded_dict)
)
## negative**integer

result = op(negative, integer)
assert not isnan(result.derivatives[negative])
assert isnan(result.derivatives[integer])
assert not isnan(result.uncertainty.expanded_dict[negative_uatom])
assert isnan(result.uncertainty.expanded_dict[integer_uatom])

# Limit cases:
result = op(negative, one)
assert result.derivatives[negative] == 1
assert isnan(result.derivatives[one])
print(result.uncertainty.expanded_dict)
assert result.uncertainty.expanded_dict[negative_uatom] == negative.std_dev
assert isnan(result.uncertainty.expanded_dict[one_uatom])

result = op(negative, zero)
assert result.derivatives[negative] == 0
assert isnan(result.derivatives[zero])
assert result.uncertainty.expanded_dict[negative_uatom] == 0
assert isnan(result.uncertainty.expanded_dict[zero_uatom])

## negative**non-integer

## zero**...

result = op(zero, non_int_larger_than_one)
assert isnan(result.derivatives[zero])
assert result.derivatives[non_int_larger_than_one] == 0
assert isnan(result.uncertainty.expanded_dict[zero_uatom])
assert result.uncertainty.expanded_dict[non_int_larger_than_one_uatom] == 0

# Special cases:
result = op(zero, one)
assert result.derivatives[zero] == 1
assert result.derivatives[one] == 0
assert result.uncertainty.expanded_dict[zero_uatom] == zero.std_dev
assert result.uncertainty.expanded_dict[one_uatom] == 0

result = op(zero, 2 * one)
assert result.derivatives[zero] == 0
assert result.derivatives[one] == 0
assert result.uncertainty.expanded_dict[zero_uatom] == 0
assert result.uncertainty.expanded_dict[one_uatom] == 0

result = op(zero, positive_smaller_than_one)
assert isnan(result.derivatives[zero])
assert result.derivatives[positive_smaller_than_one] == 0
assert isnan(result.uncertainty.expanded_dict[zero_uatom])
assert result.uncertainty.expanded_dict[positive_smaller_than_one_uatom] == 0

result = op(zero, zero2)
assert result.derivatives[zero] == 0
assert isnan(result.derivatives[zero2])
assert result.uncertainty.expanded_dict[zero_uatom] == 0
assert isnan(result.uncertainty.expanded_dict[zero2_uatom])

## positive**...: this is a quite regular case where the value and
## the derivatives are all defined.
## the uncertainty.expanded_dict are all defined.

result = op(positive, positive2)
assert not isnan(result.derivatives[positive])
assert not isnan(result.derivatives[positive2])
assert not isnan(result.uncertainty.expanded_dict[positive_uatom])
assert not isnan(result.uncertainty.expanded_dict[positive2_uatom])

result = op(positive, zero)
assert result.derivatives[positive] == 0
assert not isnan(result.derivatives[zero])
assert result.uncertainty.expanded_dict[positive_uatom] == 0
assert not isnan(result.uncertainty.expanded_dict[zero_uatom])

result = op(positive, negative)
assert not isnan(result.derivatives[positive])
assert not isnan(result.derivatives[negative])
assert not isnan(result.uncertainty.expanded_dict[positive_uatom])
assert not isnan(result.uncertainty.expanded_dict[negative_uatom])


def power_special_cases(op):
Expand Down Expand Up @@ -282,7 +296,9 @@ def compare_derivatives(func, numerical_derivatives, num_args_list=None):
if arg_num in integer_arg_nums:
args.append(random.choice(range(-10, 10)))
else:
args.append(uncert_core.Variable(random.random() * 4 - 2, 0))
args.append(
uncert_core.AffineScalarFunc(random.random() * 4 - 2, 0)
)

# 'args', but as scalar values:
args_scalar = [uncert_core.nominal_value(v) for v in args]
Expand Down
Loading