Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
21 changes: 0 additions & 21 deletions .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,27 +29,6 @@ jobs:
run: |
pre-commit run -a

test_code_python3p8:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.8"]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install .[dev]
- name: Test code
run: |
mkdir test_report
tox


test_code_and_coverage_report_python3p11:
runs-on: ubuntu-latest
strategy:
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ coverage.xml
*.cover
.hypothesis/
.pytest_cache/

test_report/
# Translations
*.mo
*.pot
Expand Down
14 changes: 3 additions & 11 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Default image, if not specified
image: "python:3.8"
image: "python:3.11"

stages:
- Static Analysis
Expand Down Expand Up @@ -98,23 +98,15 @@ mypy:
junit: cov_report.xml
expire_in: 1 hour

tox-3.10:
extends: ".tox"
stage: "Test"
image: "python:3.6"
rules:
- if: '$CI_COMMIT_TAG'
when: always

tox-3.11:
extends: ".tox"
stage: "Test"
image: "python:3.11"

tox-3.8:
tox-3.9:
extends: ".tox"
stage: "Test"
image: "python:3.8"
image: "python:3.9"
rules:
- if: '$CI_COMMIT_TAG'
when: always
Expand Down
2 changes: 1 addition & 1 deletion comet_maths/_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "1.0.0"
__version__ = "1.0.6"
36 changes: 22 additions & 14 deletions comet_maths/generate_sample/generate_sample.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,8 +212,10 @@ def generate_sample_same(MCsteps, param, dtype=None):
:return: generated sample
:rtype: array
"""
tileshape = generate_sample_shape(MCsteps, param)
MC_sample = np.tile(param, tileshape).astype(dtype)
# tileshape = generate_sample_shape(MCsteps, param)
MC_sample = np.repeat(np.array(param)[np.newaxis], MCsteps, axis=0)
if dtype is not None:
MC_sample = MC_sample.astype(dtype)
return MC_sample


Expand Down Expand Up @@ -696,33 +698,39 @@ def correlate_sample_corr(
"comet_math.correlate_sample_corr: it is not yet possible to provide a sample with inhomogeneous dimensions."
)

try:
L = np.array(np.linalg.cholesky(corr))
except:
L = cm.nearestPD_cholesky(corr, corr=True)

if maintain_sample_unmodified:
sample_out = copy.deepcopy(sample)
else:
sample_out = sample

if iterate_sample:
sample_out_iter = np.empty(len(sample), dtype=object)
for i in range(len(sample)):
sample_i = np.roll(sample_out, i, axis=0)
sample_i = np.roll(sample, i, axis=0)
if mean is not None:
mean_i = np.roll(mean, i, axis=0)
if std is not None:
std_i = np.roll(std, i, axis=0)
sample_out_iter[i] = np.roll(
correlate_sample_corr(
sample_i, corr, mean_i, std_i, dtype=dtype, iterate_sample=False
sample_i,
corr,
mean_i,
std_i,
dtype=dtype,
iterate_sample=False,
maintain_sample_unmodified=True,
),
-i,
axis=0,
)
return np.mean(sample_out_iter, axis=0)

try:
L = np.array(np.linalg.cholesky(corr))
except:
L = cm.nearestPD_cholesky(corr, corr=True)

if maintain_sample_unmodified:
sample_out = copy.deepcopy(sample)
else:
sample_out = sample

if mean is None:
mean = np.array(
[np.mean(sample[i], axis=0) for i in range(len(sample))],
Expand Down
7 changes: 7 additions & 0 deletions comet_maths/generate_sample/tests/test_generate_sample.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ def test_generate_sample_same(self):
sample = generate_sample_same(100, x0)
npt.assert_equal(sample.shape, (100,))
npt.assert_equal(sample[:-1], sample[1:])
assert sample.dtype == int

sample = generate_sample_same(100, x1)
npt.assert_equal(sample.shape, (100, 20))
Expand All @@ -121,7 +122,13 @@ def test_generate_sample_same(self):
npt.assert_equal(sample.shape, (100, 5, 6))
npt.assert_equal(sample[:-1], sample[1:])

sample = generate_sample_same(100, "test")
npt.assert_equal(sample.shape, (100,))
npt.assert_equal(sample[:-1], sample[1:])
assert sample.dtype.type is np.str_

def test_generate_sample_systematic(self):
np.random.seed(123456)
sample = generate_sample_systematic(1000, x0, u_x0)
npt.assert_equal(sample.shape, (1000,))
npt.assert_allclose(u_x0, np.std(sample, axis=0), rtol=0.1)
Expand Down
30 changes: 21 additions & 9 deletions comet_maths/interpolation/interpolation.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ def interpolate_1d(
return_corr: Optional[bool] = False,
include_model_uncertainties: Optional[bool] = True,
add_model_error: Optional[bool] = False,
MCsteps: Optional[int] = 100,
MCsteps: Optional[int] = 50,
parallel_cores: Optional[int] = 4,
interpolate_axis: Optional[int] = 0,
) -> Union[
Expand Down Expand Up @@ -402,14 +402,26 @@ def _redo_extrapolation(
:param extrapolate: extrapolation method, which can be set to "extrapolate" (in which case extrapolation is used using interpolation method defined in "method"), "nearest" (in which case nearest values are used for extrapolation), or "linear" (in which case linear extrapolation is used). Defaults to "extrapolate".
:return: interpolated values with correct extrapolation
"""
if extrapolate == "nearest":
y[x < x_i[0]] = y_i[0]
y[x > x_i[-1]] = y_i[-1]
if hasattr(x, "__len__") and len(x) > 1:
if extrapolate == "nearest":
y[x < x_i[0]] = y_i[0]
y[x > x_i[-1]] = y_i[-1]

elif extrapolate == "linear":
f_lin = interp1d(x_i, y_i, kind="linear", fill_value="extrapolate")
y[x < x_i[0]] = f_lin(x[x < x_i[0]])
y[x > x_i[-1]] = f_lin(x[x > x_i[-1]])
else:
if extrapolate == "nearest":
if x < x_i[0]:
y = y_i[0]
elif x > x_i[-1]:
y = y_i[-1]

elif extrapolate == "linear":
f_lin = interp1d(x_i, y_i, kind="linear", fill_value="extrapolate")
y[x < x_i[0]] = f_lin(x[x < x_i[0]])
y[x > x_i[-1]] = f_lin(x[x > x_i[-1]])
elif extrapolate == "linear":
if x < x_i[0] or x > x_i[-1]:
f_lin = interp1d(x_i, y_i, kind="linear", fill_value="extrapolate")
y = f_lin(x)

return y

Expand Down Expand Up @@ -628,7 +640,7 @@ def interpolate_1d_along_example(
include_model_uncertainties: Optional[bool] = True,
add_model_error: Optional[bool] = False,
plot_residuals: Optional[bool] = False,
MCsteps: Optional[int] = 100,
MCsteps: Optional[int] = 50,
parallel_cores: Optional[int] = 4,
) -> Union[
np.ndarray, Tuple[np.ndarray, np.ndarray], Tuple[np.ndarray, np.ndarray, np.ndarray]
Expand Down
29 changes: 28 additions & 1 deletion comet_maths/interpolation/tests/test_interpolation.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,33 @@ def test_interpolation_1d(self):
fig2.colorbar(p2)
fig2.savefig("interpolation_test_1d_corrs.png", bbox_inches="tight")

def test_interpolation_1d(self):
xi = np.arange(0, 3.0, 0.2)
yi = function1(xi)
u_yi = 0.05 * np.abs(yi)
# yi = cm.generate_sample(1, yi, u_yi, corr_x="rand")

x = np.array([0.33333, 0.666666, 1, 1.33333, 1.66666, 2.00, 2.3333])
# t1=time.time()
y = cm.interpolate_1d(xi, yi, x, method="cubic")
y2 = cm.interpolate_1d(xi, yi, x, method="quadratic")

y, u_y, corr_y = cm.interpolate_1d(
xi,
yi,
x,
u_y_i=u_yi,
corr_y_i="syst",
method="linear",
return_uncertainties=True,
return_corr=True,
MCsteps=20000,
include_model_uncertainties=False,
)

print(u_y / y)
print(u_y, u_yi)

def test_interpolation_1d_along_example(self):
np.random.seed(1234567)
xi = np.arange(0, 3.0, 0.2)
Expand Down Expand Up @@ -296,7 +323,7 @@ def test_interpolation_1d_along_example_unc(self):

# npt.assert_allclose(y_hr_gpr,y_hr_gpr2,atol=0.01)

mcprop = punpy.MCPropagation(100, parallel_cores=4)
mcprop = punpy.MCPropagation(50, parallel_cores=1)

inp2 = cm.Interpolator(
relative=False,
Expand Down
17 changes: 9 additions & 8 deletions quality_documentation/QualityDocumentation.tex
Original file line number Diff line number Diff line change
Expand Up @@ -110,13 +110,14 @@ \section{Test report}\label{testreport}
\clearpage
}

\part*{User Manual}
\phantomsection
\addcontentsline{toc}{part}{User Manual}
\appendix
\label{UserManual}
\def\maketitle{}
\def\tableofcontents{}
\input{./latex/user_manual.tex}
%\part*{User Manual}
%\usepackage{./latex/sphinxmanual}
%\phantomsection
%\addcontentsline{toc}{part}{User Manual}
%\appendix
%\label{UserManual}
%\def\maketitle{}
%\def\tableofcontents{}
%\input{./latex/user_manual.tex}

\end{document}
3 changes: 2 additions & 1 deletion quality_documentation/base/CookiecutterMacros.tex
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
\verbdef\authorname{Pieter De Vis}
\verbdef\authoremail{[email protected]}
\newcommand{\packagedescription}{Mathematical algorithms and tools to use within CoMet toolkit.}
\newcommand{\sil}{sil3}
\newcommand{\sil}{sil3}
\newcommand{\sphinxAtStartPar}{\hspace{0}}
Binary file modified quality_documentation/comet_maths_requirements.docx
Binary file not shown.
Binary file added quality_documentation/uml/comet_maths.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
63 changes: 63 additions & 0 deletions quality_documentation/uml/comet_maths.uxf
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<diagram program="umletino" version="15.1"><zoom_level>10</zoom_level><element><id>UMLPackage</id><coordinates><x>0</x><y>10</y><w>900</w><h>480</h></coordinates><panel_attributes>comet_maths
--
bg=orange</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLPackage</id><coordinates><x>10</x><y>40</y><w>280</w><h>440</h></coordinates><panel_attributes>generate_samples
--
bg=blue</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLPackage</id><coordinates><x>300</x><y>40</y><w>280</w><h>440</h></coordinates><panel_attributes>linear_algebra
--
bg=green</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLPackage</id><coordinates><x>590</x><y>40</y><w>290</w><h>440</h></coordinates><panel_attributes>interpolation
--
bg=red</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>30</x><y>80</y><w>250</w><h>180</h></coordinates><panel_attributes>generate_sample
--
generate_sample()
generate_error_sample()
generate_sample_shape()
generate_sample_same()
generate_sample_systematic()
generate_sample_random()
generate_sample_correlated()
generate_sample_same()
generate_sample_cov()
correlate_sample_corr()</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>30</x><y>270</y><w>250</w><h>180</h></coordinates><panel_attributes>probability_density_function
--
generate_sample_pdf()</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>320</x><y>80</y><w>250</w><h>180</h></coordinates><panel_attributes>matrix_calculation
--
calculate_Jacobian()
calculate_corr()
nearestPD_cholesky()
isPD()</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>320</x><y>270</y><w>250</w><h>180</h></coordinates><panel_attributes>matrix_conversion
--
calculate_flattened_corr()
separate_flattened_corr()
convert_corr_to_cov()
convert_cov_to_corr()
correlation_from_covariance()
uncertainty_from_covariance()
change_order_errcorr_dims()
expand_errcorr_dims()</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>610</x><y>80</y><w>260</w><h>370</h></coordinates><panel_attributes>interpolation
--
interpolate_1d()
interpolate_1d_along_example()
gaussian_process_regression()
gpr_basics()
default_unc_methods()
model_error_analytical_methods()
</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>620</x><y>220</y><w>230</w><h>210</h></coordinates><panel_attributes>Interpolator
--
relative
method
method_hr
add_model_error
min_scale
extrapolate
plot_residuals
unc_methods
unc_methods_hr
--
interpolate_1d()
interpolate_1d_along_example()
</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>10</x><y>160</y><w>40</w><h>170</h></coordinates><panel_attributes>lt=&lt;&lt;-
</panel_attributes><additional_attributes>20;150;10;150;10;10;20;10</additional_attributes></element><element><id>Relation</id><coordinates><x>300</x><y>160</y><w>40</w><h>170</h></coordinates><panel_attributes>lt=&lt;&lt;-
</panel_attributes><additional_attributes>20;150;10;150;10;10;20;10</additional_attributes></element><element><id>Relation</id><coordinates><x>590</x><y>150</y><w>50</w><h>170</h></coordinates><panel_attributes>lt=&lt;&lt;-
</panel_attributes><additional_attributes>30;150;10;150;10;10;20;10</additional_attributes></element><element><id>Relation</id><coordinates><x>10</x><y>150</y><w>330</w><h>200</h></coordinates><panel_attributes>lt=&lt;&lt;-
</panel_attributes><additional_attributes>310;180;10;180;10;10;20;10</additional_attributes></element><element><id>Relation</id><coordinates><x>270</x><y>160</y><w>360</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;-
</panel_attributes><additional_attributes>10;20;340;20</additional_attributes></element></diagram>
10 changes: 5 additions & 5 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ def read(filename):
long_description=read("README.rst"),
packages=find_packages(exclude=("tests",)),
install_requires=[
"numpy",
"scikit-learn",
"numpy>=2.2.4",
"scikit-learn>=1.6.1",
"numdifftools",
"scipy",
"punpy>=1.0.0",
"matplotlib",
"scipy>=1.15.2",
"punpy>=1.0.4",
"matplotlib>=3.10.1",
],
extras_require={
"dev": [
Expand Down
3 changes: 1 addition & 2 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,4 @@ deps =
pytest-html
pytest-cov
commands =
pytest --html=test_report/report.html
pytest --cov-report html:test_report/cov_report --cov=comet_maths
pytest --html=test_report/report.html --cov-report html:test_report/cov_report --cov=comet_maths