Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compute Backends and Automatic Differentiation #581

Open
wants to merge 312 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
312 commits
Select commit Hold shift + click to select a range
3726101
Fix seeding in torch backend
marvinpfoertner Dec 21, 2021
03553eb
Fix circular imports
marvinpfoertner Dec 21, 2021
d4ebf8b
Fix matern tests
marvinpfoertner Dec 21, 2021
ddeac7c
Fix normal arithmetic and cholesky updates
marvinpfoertner Dec 21, 2021
b97932f
Cleanup of probnum's type aliases
marvinpfoertner Dec 22, 2021
7ac4990
Fix test collection
marvinpfoertner Jan 4, 2022
1013196
Remove `as_numpy_scalar` from `pn.utils`
marvinpfoertner Jan 4, 2022
a8fa45f
Move `as_shape` to `probnum.backend` and delete `pn.utils.argutils`
marvinpfoertner Jan 4, 2022
cd926dc
merged newest changes from probabilistic-numerics/main
JonathanWenger Feb 26, 2022
6636854
blacked code
JonathanWenger Feb 26, 2022
d1afe1d
removed unused import
JonathanWenger Feb 26, 2022
be03e9a
isort
JonathanWenger Feb 26, 2022
39dc112
ported function to backend
JonathanWenger Feb 26, 2022
f079c4e
unified notimplementedtype usage
JonathanWenger Feb 26, 2022
8611994
some bug fixes
JonathanWenger Feb 26, 2022
402c036
black fix
JonathanWenger Feb 26, 2022
84e0f41
ported utils.linalg to backend.linalg
JonathanWenger Feb 27, 2022
eb9ea4b
fixed test collection
JonathanWenger Feb 27, 2022
4ec1d79
remove probnum.utils from docs
JonathanWenger Feb 27, 2022
eebaad9
remove usage of as_numpy_scalar
JonathanWenger Feb 27, 2022
dda81c8
conatenate and expand_dims added
JonathanWenger Feb 27, 2022
c2d5b26
add expand_dims to __all__
JonathanWenger Feb 27, 2022
686fbac
uniform random sampling
JonathanWenger Mar 1, 2022
37e7931
imported uniform from backends
JonathanWenger Mar 1, 2022
f90da5a
fixed dtype for random.uniform
JonathanWenger Mar 1, 2022
51e361b
torch uniform sampling fixed
JonathanWenger Mar 3, 2022
aae5551
support for linops-valued constant random variables
JonathanWenger Mar 4, 2022
a65fe82
moved Constant to backend
JonathanWenger Mar 4, 2022
d6ce290
removed linop support for Constant
JonathanWenger Mar 4, 2022
b88e879
minor
JonathanWenger Mar 4, 2022
1f8bbb6
result type added
JonathanWenger Mar 4, 2022
95e70e9
meshgrid added
JonathanWenger Mar 4, 2022
6c46b2d
corrected type hint for torch.meshgrid
JonathanWenger Mar 4, 2022
c7fd24f
flip added
JonathanWenger Mar 4, 2022
af9350e
added arange
JonathanWenger Mar 5, 2022
0857fdb
Add SVD
marvinpfoertner Mar 12, 2022
42b2176
Correct type hint of `backend.to_numpy`
marvinpfoertner Mar 23, 2022
b8aa11a
`seed_from_sampling_args`
marvinpfoertner Mar 23, 2022
c37fcb0
Add `linalg.eigh`
marvinpfoertner Mar 23, 2022
97b065a
Add `backend.kron`
marvinpfoertner Mar 23, 2022
47ad0d2
Add `backend.max`
marvinpfoertner Mar 23, 2022
28904ab
Added `backend.any`
marvinpfoertner Mar 23, 2022
9469e3e
Added `LinAlgError`
marvinpfoertner Mar 23, 2022
be2217b
Use `cholesky` and `eigh` as matrix roots in `Normal`
marvinpfoertner Mar 23, 2022
ad66da8
Correct TODOs in `Normal`
marvinpfoertner Mar 23, 2022
306aef1
Bugfix in `normal`
marvinpfoertner Mar 24, 2022
618ef2f
Merge remote-tracking branch 'origin/main' into ad-prototype
marvinpfoertner Mar 24, 2022
6bb29e2
Add `typing.ArrayType` and improve typing documentation
marvinpfoertner Mar 24, 2022
c351460
Add colon in error message
marvinpfoertner Mar 24, 2022
4657f5c
removed configuration for obsolete sphinx bibtex plugin
JonathanWenger Mar 24, 2022
596e09f
Refactor `typing`
marvinpfoertner Mar 24, 2022
db0ebd5
Bugfix in NumPy `backend.random`
marvinpfoertner Mar 24, 2022
76a6229
Make `Kernel` tests run again
marvinpfoertner Mar 24, 2022
1bf463d
Move `Normal` tests
marvinpfoertner Mar 24, 2022
85a03ee
Bugfix in `Normal`
marvinpfoertner Mar 24, 2022
a8d9eef
Bugfix in `compat`
marvinpfoertner Mar 24, 2022
175e010
Update references to issues in `_normal.py`
marvinpfoertner Mar 24, 2022
534520f
Move covariance square root code to back of `Normal`
marvinpfoertner Mar 24, 2022
852ee47
Bugfix in `as_shape`
marvinpfoertner Mar 24, 2022
e14c97b
Bugfix in `GaussianProcess
marvinpfoertner Mar 24, 2022
7fb4873
Bugfix in `torch.any`
marvinpfoertner Mar 24, 2022
0620491
Bugfix in `Normal`
marvinpfoertner Mar 24, 2022
8ab805e
Bugfix in testing utils
marvinpfoertner Mar 24, 2022
cf8c091
Move some backend tests
marvinpfoertner Mar 24, 2022
486db2f
Move and fix the hypergrad test
marvinpfoertner Mar 24, 2022
8b4ef48
Delete old hyperopt test
marvinpfoertner Mar 24, 2022
5e37db0
Move and fix `test_inner_product`
marvinpfoertner Mar 24, 2022
48c95b7
Move and fix `test_orthogonalize`
marvinpfoertner Mar 24, 2022
acfb161
`tril` and `triu`
marvinpfoertner Mar 24, 2022
5a6561a
Move and fix `test_cholesky_updates`
marvinpfoertner Mar 24, 2022
17335d3
Move `test_function`
marvinpfoertner Mar 24, 2022
3afbf1a
Added `backend.isnan`
marvinpfoertner Mar 25, 2022
e4bf56b
Added `triu` and `tril`
marvinpfoertner Mar 25, 2022
059d2ad
Refactor `backend.linalg.cholesky` to comply with array API
marvinpfoertner Mar 25, 2022
edda0db
Add `backend` to the docs
marvinpfoertner Mar 25, 2022
2c2ec63
Make everything Cholesky-related private in `Normal`
marvinpfoertner Mar 25, 2022
16f26ec
Bugfix in `tril` and `triu`
marvinpfoertner Mar 25, 2022
d130daa
Bugfix in PyTorch `sampling`
marvinpfoertner Mar 25, 2022
bd98392
Default to NumPy backend
marvinpfoertner Mar 25, 2022
2d60fe9
Merge remote-tracking branch 'origin/main' into ad-prototype
marvinpfoertner Mar 25, 2022
741ac17
created seperate folders for array api subgroups
JonathanWenger Mar 25, 2022
dafa6de
moved tril, triu to corresponding folders in the backend
JonathanWenger Mar 25, 2022
d7373d8
improved backend docs structure
JonathanWenger Mar 26, 2022
8d93dd5
minor doc build fix
JonathanWenger Mar 26, 2022
b349f5f
revert merge change
JonathanWenger Mar 26, 2022
a7ddf7f
added solve to backend
JonathanWenger Mar 26, 2022
6100389
added sorting function interface
JonathanWenger Mar 26, 2022
b6231c0
sorting functions added
JonathanWenger Mar 27, 2022
df17ce4
Add `backend.vectorize`
marvinpfoertner Mar 27, 2022
c254530
Add `Kernel.input_size`
marvinpfoertner Mar 27, 2022
d432227
Port `Kernel` tests to backend
marvinpfoertner Mar 27, 2022
a6bf98a
Bugfix `backend.vectorize`
marvinpfoertner Mar 27, 2022
6b18778
Move `seed_from_sampling_args` to `tests.utils.random`
marvinpfoertner Mar 27, 2022
f6b229b
Move kernel tests to `tests.probnum.randprocs`
marvinpfoertner Mar 27, 2022
def2539
`tests.{testing => utils}.statistics`
marvinpfoertner Mar 27, 2022
d138e87
Migrate `randprocs` tests (excluding markov) to backend
marvinpfoertner Mar 27, 2022
dbc98b6
Move `test_{random,gaussian}_process` to `tests/probnum/randprocs`
marvinpfoertner Mar 27, 2022
45c6476
Bugfix in `ProductMatern` tests
marvinpfoertner Mar 27, 2022
93a945b
Bugfix in `backend.__init__`
marvinpfoertner Mar 27, 2022
f2ef375
Bugfix in Jax implementation of `backend.vectorize`
marvinpfoertner Mar 27, 2022
6047aea
merged main
JonathanWenger Mar 28, 2022
5d73476
moved types into backend
JonathanWenger Mar 28, 2022
122ed4e
improve docstring for backend.typing
JonathanWenger Mar 28, 2022
c207bcd
correct asarray implementation
JonathanWenger Mar 28, 2022
b6a933b
moved types into the backend and removed ArrayType in favor of Array
JonathanWenger Mar 28, 2022
892d87c
Merge branch 'main' into ad-prototype
JonathanWenger Mar 28, 2022
5adf707
some improvements to doc build config
JonathanWenger Mar 28, 2022
4c558ed
Add `cond`
marvinpfoertner Mar 30, 2022
d589cae
`backend._constants`
marvinpfoertner Mar 30, 2022
c94ebe4
Refactor the `Dispatcher`
marvinpfoertner Mar 30, 2022
6c79d15
Refactor `Dispatcher`
marvinpfoertner Mar 31, 2022
62ed6a0
Fix `Normal` tests
marvinpfoertner Mar 31, 2022
60804a5
Dispatcher docstring
marvinpfoertner Apr 1, 2022
8ccfab0
Bugfixes in backend._array_object
marvinpfoertner Apr 1, 2022
4db7dd2
Bugfix in backend.__init__
marvinpfoertner Apr 1, 2022
561406e
Bugfix in `Normal` and tests
marvinpfoertner Apr 1, 2022
5d1904a
Refactor `Normal` tests
marvinpfoertner Apr 1, 2022
46dcc5f
`SymmetricMatrixNormal` tests file
marvinpfoertner Apr 1, 2022
9b71fe8
Add sample shape tests
marvinpfoertner Apr 2, 2022
2c1c693
Merge remote-tracking branch 'origin/main' into ad-prototype
marvinpfoertner Apr 2, 2022
4a2bf7f
rename _core to _impl
JonathanWenger Apr 2, 2022
a04975f
remove backend.array
JonathanWenger Apr 2, 2022
1eb5570
improvements to backend documentation
JonathanWenger Apr 2, 2022
611e1d6
minor doc fix
JonathanWenger Apr 2, 2022
c91a5c6
docstrings for constants
JonathanWenger Apr 2, 2022
d8fa6e5
TESTING section in imports
marvinpfoertner Apr 2, 2022
33495b0
Bugfix in degenerate `Normal`
marvinpfoertner Apr 2, 2022
4a705eb
Add tests for degenerate `Normal`
marvinpfoertner Apr 2, 2022
e295d5b
Refactor `Normal` sample test
marvinpfoertner Apr 2, 2022
b0dd842
Bugfix in `SymmetricMatrixNormal`
marvinpfoertner Apr 2, 2022
93edfe6
Sampling tests for `SymmetricMatrixNormal`
marvinpfoertner Apr 2, 2022
176eb51
Test `Normal` mean cov shape mismatch
marvinpfoertner Apr 2, 2022
a698aaf
Tests for `Normal.__getitem__` most cases are still missing
marvinpfoertner Apr 2, 2022
52ea68e
Move randvar arithmetic test file
marvinpfoertner Apr 2, 2022
b9de441
fix test collection by replacing cov_cholesky argument of Normal with…
JonathanWenger Apr 8, 2022
1f9f94e
cleaned up what seeds and rng states are
JonathanWenger Apr 8, 2022
f70ba64
refactored backend tests now use rng_state
JonathanWenger Apr 8, 2022
646a997
better documentation for probnum.backend.random
JonathanWenger Apr 8, 2022
69a0565
removed unused imports in backend
JonathanWenger Apr 8, 2022
ab8e0a7
backend.dtype -> backend.Dtype
JonathanWenger Apr 8, 2022
3840354
device -> Device
JonathanWenger Apr 8, 2022
f4cfe74
removed superfluous tests
JonathanWenger Apr 8, 2022
f37a524
reverted changes to notebooks
JonathanWenger Apr 8, 2022
e94b0d0
sort documentation entries under probnum.backend
JonathanWenger Apr 8, 2022
3b95733
minor docstring improvements
JonathanWenger Apr 8, 2022
7844167
moved data types into separate file and added docstrings
JonathanWenger Apr 9, 2022
4c14bb2
more backend refactoring
JonathanWenger Apr 9, 2022
7c4a3cc
docs for grad and updated pytorch implementation
JonathanWenger Apr 9, 2022
420ff34
grad docstring fix
JonathanWenger Apr 9, 2022
df44ada
significantly improved docs structure and fix of most doc build errors
JonathanWenger Apr 9, 2022
5f629ba
added vector and matrix norm
JonathanWenger Apr 9, 2022
0ba55ac
renamed gram_schmidt
JonathanWenger Apr 9, 2022
989d1d3
consistent naming for seed type with shape type
JonathanWenger Apr 10, 2022
56eefd6
fixed positional argument bug
JonathanWenger Apr 10, 2022
b2c7a93
preventatively set norm computation to euclidean norm
JonathanWenger Apr 10, 2022
3fa64cb
added missing docstring for qr, svd, eigh to fix doc build
JonathanWenger Apr 11, 2022
86d5a89
remove superfluous assignments
JonathanWenger Apr 11, 2022
053b73c
minor doc fix
JonathanWenger Apr 11, 2022
6af87f5
added permutation to backend.random
JonathanWenger Apr 13, 2022
9473812
added statistical functions
JonathanWenger Apr 13, 2022
c2a6840
minor fix to kernel docs
JonathanWenger Apr 15, 2022
7966df6
minor improvement to error message in backend.random
JonathanWenger Apr 18, 2022
c81c151
Normal.__getitem__ tests and bugfixes
marvinpfoertner Apr 22, 2022
b4bf72d
RandomVariable addition tests
marvinpfoertner Apr 25, 2022
129aba4
More `RandomVariable.__getitem__` test cases
marvinpfoertner Apr 25, 2022
4ac2acd
Remove refactored tests from old `Normal` test file
marvinpfoertner Apr 25, 2022
0c5ad51
File structure for remaining random variable tests
marvinpfoertner Apr 25, 2022
3f0340e
minor fix in matern kernel
JonathanWenger May 1, 2022
7e8c691
Merge remote-tracking branch 'origin/main' into ad-prototype
marvinpfoertner May 2, 2022
c8ef1b3
Fix test collection
marvinpfoertner May 2, 2022
a5d6a57
Fix `backend.linalg.qr`
marvinpfoertner May 2, 2022
bff243f
minimum added
JonathanWenger May 13, 2022
5b425b3
fixed gaussian process doctest
JonathanWenger Nov 5, 2022
6222dcf
fixed documentation for aliases from different backends
JonathanWenger Nov 13, 2022
9e99dcf
fixed random matrix doctests
JonathanWenger Nov 13, 2022
615e132
searching functions added
JonathanWenger Nov 13, 2022
b078c7e
some fixes in doc build for searching functions
JonathanWenger Nov 13, 2022
c72218f
some fixes in doc build for searching functions
JonathanWenger Nov 13, 2022
ae40fa2
fixed bugs in randvars tests
JonathanWenger Nov 13, 2022
4709dc6
added shape argument to _like creation functions
JonathanWenger Nov 13, 2022
53fd769
removed docstring warning
JonathanWenger Nov 13, 2022
864e9a9
ported kernel doctests to backend
JonathanWenger Nov 13, 2022
6f27a11
fixed bug in _like functions without specified shape
JonathanWenger Nov 13, 2022
71050e0
moved config tests
JonathanWenger Nov 13, 2022
40e1dfd
delete unused testing function
JonathanWenger Nov 13, 2022
ffdf7fa
moved some passing tests under tests/probnum
JonathanWenger Nov 13, 2022
45ada67
some changes to make linalg tests pass
JonathanWenger Nov 13, 2022
1bd4a81
merged lastest changes and cleaned up tests for probnum.functions
JonathanWenger Nov 13, 2022
07d06fb
fixed some doc links
JonathanWenger Nov 13, 2022
631ed95
fix gradient test
JonathanWenger Nov 13, 2022
58874b5
added all elementwise functions
JonathanWenger Nov 13, 2022
20a5ed3
fixed expm1 docstring
JonathanWenger Nov 13, 2022
a9162a1
fixed elementwise docstrings
JonathanWenger Nov 13, 2022
6af5858
fixed elementwise docstrings
JonathanWenger Nov 13, 2022
9243453
array manipulation functions added and pulled out of _core
JonathanWenger Nov 14, 2022
4a42ee2
moved data type related functions out of _core
JonathanWenger Nov 14, 2022
6e5378c
fix some bugs in tests
JonathanWenger Nov 14, 2022
4612b6c
randprocs/markov tests pass with numpy backend
JonathanWenger Nov 14, 2022
8be6310
added compat to docs and fixed tests for probnum.problems
JonathanWenger Nov 14, 2022
0823d86
linops tests pass with numpy backend
JonathanWenger Nov 14, 2022
c1b9e45
updated codeowners
JonathanWenger Nov 14, 2022
4f6a4ed
merged in latest LambdaLinearOperator changes
JonathanWenger Nov 14, 2022
f4eb6ed
added aux argument to grad
JonathanWenger Nov 14, 2022
03cbccf
added autodiff functions via functorch
JonathanWenger Nov 14, 2022
a6c9ef9
minor updates to autodiff
JonathanWenger Nov 14, 2022
29b63b3
minor
JonathanWenger Nov 14, 2022
0a31624
minor doc typo
JonathanWenger Nov 14, 2022
5167e3a
linting fixes
JonathanWenger Nov 14, 2022
a1cf328
fixed some pylint issues
JonathanWenger Nov 14, 2022
3793799
some pylint fixes
JonathanWenger Nov 14, 2022
a15c659
minor
JonathanWenger Nov 14, 2022
75d8ef6
minor docstring
JonathanWenger Nov 14, 2022
d143f26
fixed automatic differentiation with torch and added some tests
JonathanWenger Nov 14, 2022
c2b51ef
added jacrev and jacfwd
JonathanWenger Nov 14, 2022
75ea7d7
fixes to benchmarks
JonathanWenger Nov 15, 2022
fb2c111
debugged benchmark error
JonathanWenger Nov 15, 2022
3461e3a
some documentation
JonathanWenger Nov 15, 2022
f385ce1
documentation for diag, maximum, minimum
JonathanWenger Nov 15, 2022
fa6376a
moved more functions out of core
JonathanWenger Nov 15, 2022
a0f5fe2
add sorting functions to documentation
JonathanWenger Nov 15, 2022
97857ec
moved diagonal to linalg
JonathanWenger Nov 15, 2022
6f8f66a
moved kron to backend
JonathanWenger Nov 15, 2022
c0a588d
fixed bug in backend.eye for torch backend
JonathanWenger Nov 15, 2022
0660d3e
more functions moved out of _core
JonathanWenger Nov 16, 2022
41f98be
added device to members who do not have their __module__ overriden
JonathanWenger Nov 17, 2022
10a60ea
more functions moved out of _core
JonathanWenger Nov 17, 2022
030ad7c
updates to improve documentation and fixed a bug in broadcast_to
JonathanWenger Nov 17, 2022
dc58fcf
moved einsum out of _core
JonathanWenger Nov 17, 2022
dd7a3d2
some missing linear algebra functions added
JonathanWenger Nov 17, 2022
4b67069
vectorization functions pulled out of _core
JonathanWenger Nov 17, 2022
8d17c99
value_and_grad added to autodiff
JonathanWenger Nov 18, 2022
1d2d4e2
some minor bugs
JonathanWenger Nov 18, 2022
4b0b89d
messed with imports
JonathanWenger Nov 18, 2022
8148ea0
made imports of backends conditional
JonathanWenger Nov 18, 2022
aab5086
merged newest updates from main
JonathanWenger Nov 18, 2022
14debd7
fixed typing imports in BQ modules
JonathanWenger Nov 19, 2022
b435cde
updated type hints to jax.Array
JonathanWenger Nov 19, 2022
e55d109
logic functions introduced
JonathanWenger Nov 19, 2022
365a19a
removed _core from the backend
JonathanWenger Nov 19, 2022
dc7d83d
fixed some test imports
JonathanWenger Nov 19, 2022
ab35d34
ensured correct type usage in asarray and asscalar
JonathanWenger Nov 19, 2022
f9b7704
config option for device added
JonathanWenger Nov 20, 2022
67427ef
fixed bug in numpy devices
JonathanWenger Nov 20, 2022
6f45953
minor bug in diffeq tests fixed
JonathanWenger Nov 21, 2022
a1195a1
added some missing linalg functions
JonathanWenger Nov 22, 2022
6610835
added some missing linalg functions
JonathanWenger Nov 22, 2022
3f68857
Merge branch 'main' of github.com:probabilistic-numerics/probnum into…
JonathanWenger Nov 22, 2022
13d86dc
minor docs update
JonathanWenger Nov 22, 2022
34b97e7
docs for special functions
JonathanWenger Nov 23, 2022
c10f68d
improved naming
JonathanWenger Nov 24, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
29 changes: 16 additions & 13 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
* @probabilistic-numerics/probnum-global-codeowners

# Compute Backends
/src/probnum/backend @marvinpfoertner @JonathanWenger
/tests/probnum/backend @marvinpfoertner @JonathanWenger

# Compatibility Functions
/src/probnum/compat @marvinpfoertner @JonathanWenger

# Differential Equations
/src/probnum/diffeq/ @pnkraemer @schmidtjonathan
/src/probnum/problems/zoo/diffeq/ @pnkraemer @schmidtjonathan

/tests/test_diffeq/ @pnkraemer @schmidtjonathan
/tests/test_problems/test_zoo/test_diffeq/ @pnkraemer @schmidtjonathan
/tests/probnum/problems/zoo/diffeq/ @pnkraemer @schmidtjonathan

/benchmarks/ivpsolvers.py @pnkraemer @schmidtjonathan

Expand All @@ -14,22 +21,22 @@
/src/probnum/problems/zoo/filtsmooth/ @pnkraemer @schmidtjonathan

/tests/test_filtsmooth/ @pnkraemer @schmidtjonathan
/tests/test_problems/test_zoo/test_filtsmooth/ @pnkraemer @schmidtjonathan
/tests/problems/zoo/filtsmooth/ @pnkraemer @schmidtjonathan

/benchmarks/filtsmooth.py @pnkraemer @schmidtjonathan

# Linear Algebra
/src/probnum/linalg/ @JonathanWenger @marvinpfoertner
/src/probnum/problems/zoo/linalg/ @JonathanWenger @marvinpfoertner

/tests/test_linalg/ @JonathanWenger @marvinpfoertner
/tests/test_problems/test_zoo/test_linalg/ @JonathanWenger @marvinpfoertner
/tests/probnum/linalg/ @JonathanWenger @marvinpfoertner
/tests/problems/zoo/linalg/ @JonathanWenger @marvinpfoertner

/benchmarks/linearsolvers.py @JonathanWenger @marvinpfoertner

# Linear Operators
/src/probnum/linops/ @marvinpfoertner @JonathanWenger
/tests/test_linops/ @marvinpfoertner @JonathanWenger
/tests/probnum/linops/ @marvinpfoertner @JonathanWenger

/benchmarks/linops.py @marvinpfoertner @JonathanWenger

Expand All @@ -38,24 +45,20 @@
/src/probnum/problems/zoo/quad/ @mmahsereci @tskarvone

/tests/test_quad/ @mmahsereci @tskarvone
/tests/test_problems/test_zoo/test_quad/ @mmahsereci @tskarvone
/tests/problems/zoo/quad/ @mmahsereci @tskarvone

# Random Processes & Kernels
/src/probnum/randprocs/ @marvinpfoertner @JonathanWenger
/tests/test_randprocs/ @marvinpfoertner @JonathanWenger
/tests/probnum/randprocs/ @marvinpfoertner @JonathanWenger

/benchmarks/randprocs.py @marvinpfoertner @JonathanWenger
/benchmarks/kernels.py @marvinpfoertner @JonathanWenger

/src/probnum/randprocs/markov/ @pnkraemer @schmidtjonathan
/tests/test_randprocs/test_markov/ @pnkraemer @schmidtjonathan
/tests/probnum/randprocs/markov/ @pnkraemer @schmidtjonathan

# Random Variables
/src/probnum/randvars/ @marvinpfoertner @JonathanWenger
/tests/test_randvars/ @marvinpfoertner @JonathanWenger
/tests/probnum/randvars/ @marvinpfoertner @JonathanWenger

/benchmarks/random_variables.py @marvinpfoertner @JonathanWenger

# Utils
/src/probnum/utils/linalg/_cholesky_updates.py @pnkraemer
/tests/test_utils/test_linalg/test_cholesky_updates.py @pnkraemer
7 changes: 4 additions & 3 deletions .github/workflows/CI-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ jobs:
matrix:
platform: [ubuntu-latest, macos-latest, windows-latest]
python: ["3.8", "3.9", "3.10"]
backend: ["numpy", "jax", "torch"]

steps:
- uses: actions/checkout@v2
Expand All @@ -28,11 +29,11 @@ jobs:
- name: Install Tox and any other packages
run: pip install tox
- name: Run Tox
# Run tox using the version of Python in `PATH`
run: tox -e py3
# Run tox using the version of Python in `PATH` and the corresponding compute backend
run: tox -e py3-${{ matrix.backend }}
- name: Upload coverage report to Codecov
uses: codecov/codecov-action@v2
if: startsWith(matrix.platform,'ubuntu') && matrix.python == '3.8'
if: startsWith(matrix.platform,'ubuntu') && matrix.python == '3.8' && matrix.backend == 'numpy'

documentation:
runs-on: ubuntu-latest
Expand Down
30 changes: 21 additions & 9 deletions benchmarks/linearsolvers.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Benchmarks for linear solvers."""
import numpy as np

from probnum import linops, problems, randvars
from probnum import backend, linops, problems, randvars
from probnum.linalg import problinsolve
from probnum.problems.zoo.linalg import random_sparse_spd_matrix, random_spd_matrix

Expand All @@ -11,26 +11,36 @@


def get_linear_system(name: str, dim: int):
rng = np.random.default_rng(0)
rng_state = backend.random.rng_state(42)

if name == "dense":
if dim > 1000:
raise NotImplementedError()
A = random_spd_matrix(rng=rng, dim=dim)
rng_state, rng_state_A = backend.random.split(rng_state, 2)
A = random_spd_matrix(rng_state=rng_state_A, shape=(dim, dim))
elif name == "sparse":
rng_state, rng_state_A_sparse = backend.random.split(rng_state, 2)
A = random_sparse_spd_matrix(
rng=rng, dim=dim, density=np.minimum(1.0, 1000 / dim**2)
rng_state=rng_state_A_sparse,
shape=(dim, dim),
density=backend.minimum(1.0, 1000 / dim**2),
)
elif name == "linop":
if dim > 100:
raise NotImplementedError()
# TODO: Larger benchmarks currently fail. Remove once PLS refactor
# (https://github.com/probabilistic-numerics/probnum/issues/51) is resolved
A = linops.Scaling(factors=rng.normal(size=(dim,)))
rng_state, rng_state_A_linop = backend.random.split(rng_state, 2)
A = linops.Scaling(
factors=backend.random.standard_normal(
rng_state=rng_state_A_linop, shape=(dim,)
)
)
else:
raise NotImplementedError()

solution = rng.normal(size=(dim,))
rng_state, rng_state_solution = backend.random.split(rng_state, 2)
solution = backend.random.standard_normal(rng_state_solution, shape=(dim,))
b = A @ solution
return problems.LinearSystem(A=A, b=b, solution=solution)

Expand Down Expand Up @@ -72,14 +82,16 @@ def peakmem_solve(self, linsys, dim):
problinsolve(A=self.linsys.A, b=self.linsys.b)

def track_residual_norm(self, linsys, dim):
return np.linalg.norm(self.linsys.b - self.linsys.A @ self.xhat.mean)
return backend.linalg.vector_norm(
self.linsys.b - self.linsys.A @ self.xhat.mean
).item()

def track_error_2norm(self, linsys, dim):
return np.linalg.norm(self.linsys.solution - self.xhat.mean)
return backend.linalg.vector_norm(self.linsys.solution - self.xhat.mean).item()

def track_error_Anorm(self, linsys, dim):
diff = self.linsys.solution - self.xhat.mean
return np.sqrt(np.inner(diff, self.linsys.A @ diff))
return backend.sqrt(np.inner(diff, self.linsys.A @ diff))


class PosteriorBelief:
Expand Down
18 changes: 9 additions & 9 deletions benchmarks/random_variables.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import numpy as np

from probnum import linops, randvars as rvs
from probnum import backend, linops, randvars

# Module level variables
RV_NAMES = [
Expand Down Expand Up @@ -39,15 +39,15 @@ def get_randvar(rv_name):
cov_2d_symkron = linops.SymmetricKronecker(A=SPD_MATRIX_5x5)

if rv_name == "univar_normal":
randvar = rvs.Normal(mean=mean_0d, cov=cov_0d)
randvar = randvars.Normal(mean=mean_0d, cov=cov_0d)
elif rv_name == "multivar_normal":
randvar = rvs.Normal(mean=mean_1d, cov=cov_1d)
randvar = randvars.Normal(mean=mean_1d, cov=cov_1d)
elif rv_name == "matrixvar_normal":
randvar = rvs.Normal(mean=mean_2d_mat, cov=cov_2d_kron)
randvar = randvars.Normal(mean=mean_2d_mat, cov=cov_2d_kron)
elif rv_name == "symmatrixvar_normal":
randvar = rvs.Normal(mean=mean_2d_mat, cov=cov_2d_symkron)
randvar = randvars.Normal(mean=mean_2d_mat, cov=cov_2d_symkron)
elif rv_name == "operatorvar_normal":
randvar = rvs.Normal(mean=mean_2d_linop, cov=cov_2d_symkron)
randvar = randvars.Normal(mean=mean_2d_linop, cov=cov_2d_symkron)
else:
raise ValueError("Random variable not found.")

Expand Down Expand Up @@ -87,14 +87,14 @@ class Sampling:
params = [RV_NAMES]

def setup(self, randvar):
self.rng = np.random.default_rng(seed=2)
self.rng_state = backend.random.rng_state(23529)
self.n_samples = 1000
self.randvar = get_randvar(rv_name=randvar)

def time_sample(self, randvar):
"""Times sampling from this distribution."""
self.randvar.sample(rng=self.rng, size=self.n_samples)
self.randvar.sample(rng_state=self.rng_state, sample_shape=self.n_samples)

def peakmem_sample(self, randvar):
"""Peak memory of sampling process."""
self.randvar.sample(rng=self.rng, size=self.n_samples)
self.randvar.sample(rng_state=self.rng_state, sample_shape=self.n_samples)
9 changes: 6 additions & 3 deletions docs/source/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ API Reference
+-------------------------------------------------+--------------------------------------------------------------+
| **Subpackage** | **Description** |
+-------------------------------------------------+--------------------------------------------------------------+
| :mod:`~probnum.backend` | Generic computation backend. |
+-------------------------------------------------+--------------------------------------------------------------+
| :mod:`~probnum.compat` | Compatibility functions. |
+-------------------------------------------------+--------------------------------------------------------------+
| :class:`config <probnum._config.Configuration>` | Global configuration options. |
+-------------------------------------------------+--------------------------------------------------------------+
| :mod:`~probnum.diffeq` | Probabilistic solvers for ordinary differential equations. |
Expand All @@ -29,15 +33,15 @@ API Reference
+-------------------------------------------------+--------------------------------------------------------------+
| :mod:`~probnum.typing` | Type aliases. |
+-------------------------------------------------+--------------------------------------------------------------+
| :mod:`~probnum.utils` | Utility functions. |
+-------------------------------------------------+--------------------------------------------------------------+


.. toctree::
:caption: API Reference
:hidden:

api/probnum
api/backend
api/compat
api/config
api/diffeq
api/filtsmooth
Expand All @@ -49,4 +53,3 @@ API Reference
api/randprocs
api/randvars
api/typing
api/utils
100 changes: 100 additions & 0 deletions docs/source/api/backend.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
***************
probnum.backend
***************

.. automodule:: probnum.backend

.. currentmodule:: probnum.backend

Classes
-------

.. autosummary::

~probnum.backend.Dispatcher


.. toctree::
:hidden:

backend/array_object

.. toctree::
:hidden:

backend/data_types

.. toctree::
:hidden:

backend/creation_functions

.. toctree::
:hidden:

backend/elementwise_functions

.. toctree::
:hidden:

backend/logic_functions

.. toctree::
:hidden:

backend/manipulation_functions

.. toctree::
:hidden:

backend/searching_functions

.. toctree::
:hidden:

backend/sorting_functions

.. toctree::
:hidden:

backend/statistical_functions

.. toctree::
:hidden:

backend/jit_compilation

.. toctree::
:hidden:

backend/vectorization

.. toctree::
:hidden:

backend/probnum.backend.Dispatcher

.. toctree::
:hidden:

backend/autodiff

.. toctree::
:hidden:

backend/linalg

.. toctree::
:hidden:

backend/random

.. toctree::
:hidden:

backend/special

.. toctree::
:hidden:

backend/typing
40 changes: 40 additions & 0 deletions docs/source/api/backend/array_object.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
Array Object
============

The basic object representing a multi-dimensional array and adjacent functionality.

.. currentmodule:: probnum.backend

Functions
---------

.. autosummary::

~probnum.backend.asshape
~probnum.backend.isarray
~probnum.backend.ndim
~probnum.backend.to_numpy

Classes
-------

+----------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
| :class:`~probnum.backend.Array` | Object representing a multi-dimensional array stored on a :class:`~probnum.backend.Device` and containing elements of the same |
| | :class:`~probnum.backend.DType`. |
+----------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
| :class:`~probnum.backend.Scalar` | Object representing a scalar with a :class:`~probnum.backend.DType`. |
+----------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
| :class:`~probnum.backend.Device` | Device, such as a CPU or GPU, on which an :class:`~probnum.backend.Array` is located. |
+----------------------------------+---------------------------------------------------------------------------------------------------------------------------------+


.. toctree::
:hidden:

array_object/probnum.backend.asshape
array_object/probnum.backend.isarray
array_object/probnum.backend.ndim
array_object/probnum.backend.to_numpy
array_object/probnum.backend.Array
array_object/probnum.backend.Device
array_object/probnum.backend.Scalar
Loading