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
20 changes: 10 additions & 10 deletions docs/src/fitting/constraints.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Constraints on Parameters
Constraints on Fitting
^^^^^^^^^^^^^^^^^^^^^^

:class:`easyscience.Fitting.Fitting.Fitter` has the ability to evaluate user supplied constraints which effect the value of both fixed and non-fixed parameters. A good example of one such use case would be the ratio between two parameters, where you would create a :class:`easyscience.Fitting.Constraints.ObjConstraint`.
:class:`easyscience.fitting.Fitter` has the ability to evaluate user supplied constraints which effect the value of both fixed and non-fixed parameters. A good example of one such use case would be the ratio between two parameters, where you would create a :class:`easyscience.fitting.Constraints.ObjConstraint`.

Using constraints
-----------------
Expand All @@ -28,7 +28,7 @@ A constraint can be used in one of three ways; Assignment to a parameter, assign

.. code-block:: python

from easyscience.Fitting.Constraints import NumericConstraint
from easyscience.fitting.Constraints import NumericConstraint
from easyscience.Objects.Base import Parameter
# Create an `a < 1` constraint
a = Parameter('a', 0.5)
Expand All @@ -41,35 +41,35 @@ A constraint can be used in one of three ways; Assignment to a parameter, assign
Constraint Reference
--------------------

.. minigallery:: easyscience.Fitting.Constraints.NumericConstraint
.. minigallery:: easyscience.fitting.Constraints.NumericConstraint
:add-heading: Examples using `Constraints`

Built-in constraints
^^^^^^^^^^^^^^^^^^^^

These are the built in constraints which you can use

.. autoclass:: easyscience.Fitting.Constraints.SelfConstraint
.. autoclass:: easyscience.fitting.Constraints.SelfConstraint
:members: +enabled

.. autoclass:: easyscience.Fitting.Constraints.NumericConstraint
.. autoclass:: easyscience.fitting.Constraints.NumericConstraint
:members: +enabled

.. autoclass:: easyscience.Fitting.Constraints.ObjConstraint
.. autoclass:: easyscience.fitting.Constraints.ObjConstraint
:members: +enabled

.. autoclass:: easyscience.Fitting.Constraints.FunctionalConstraint
.. autoclass:: easyscience.fitting.Constraints.FunctionalConstraint
:members: +enabled

.. autoclass:: easyscience.Fitting.Constraints.MultiObjConstraint
.. autoclass:: easyscience.fitting.Constraints.MultiObjConstraint
:members: +enabled

User created constraints
^^^^^^^^^^^^^^^^^^^^^^^^

You can also make your own constraints by subclassing the :class:`easyscience.Fitting.Constraints.ConstraintBase` class. For this at a minimum the abstract methods ``_parse_operator`` and ``__repr__`` need to be written.
You can also make your own constraints by subclassing the :class:`easyscience.fitting.Constraints.ConstraintBase` class. For this at a minimum the abstract methods ``_parse_operator`` and ``__repr__`` need to be written.

.. autoclass:: easyscience.Fitting.Constraints.ConstraintBase
.. autoclass:: easyscience.fitting.Constraints.ConstraintBase
:members:
:private-members:
:special-members: __repr__
2 changes: 1 addition & 1 deletion examples_old/dataset_examples.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"import numpy as np\n",
"from easyscience.Datasets.xarray import xr\n",
"from easyscience.Objects.Base import Parameter, BaseObj\n",
"from easyscience.Fitting.Fitting import Fitter"
"from easyscience.fitting import Fitter"
]
},
{
Expand Down
4 changes: 2 additions & 2 deletions examples_old/dimer_example.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"import numpy as np\n",
"from easyscience.Datasets.xarray import xr\n",
"from easyscience.Objects.Base import Parameter, BaseObj\n",
"from easyscience.Fitting.Fitting import Fitter"
"from easyscience.fitting import Fitter"
]
},
{
Expand Down Expand Up @@ -914,7 +914,7 @@
"metadata": {},
"outputs": [],
"source": [
"from easyscience.Fitting.Fitting import Fitter\n",
"from easyscience.fitting import Fitter\n",
"f = Fitter()\n",
"f.initialize(sl, sl.dispersion)"
]
Expand Down
2 changes: 1 addition & 1 deletion examples_old/example1_dream.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def fit_fun(x):

f = Fitter()
f.initialize(b, fit_fun)
f.switch_engine("bumps")
f.switch_minimizer("bumps")

x = np.array([1, 2, 3])
y = np.array([2, 4, 6]) - 1
Expand Down
2 changes: 1 addition & 1 deletion examples_old/example5_broken.py
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@ def __repr__(self):
a = line.c

# Now lets change fitting engine
f.switch_engine("bumps")
f.switch_minimizer("bumps")
# Reset the values so we don't cheat
line.m = 1
line.c = 0
Expand Down
2 changes: 1 addition & 1 deletion examples_old/example6_broken.py
Original file line number Diff line number Diff line change
Expand Up @@ -436,7 +436,7 @@ def __repr__(self):
print(hybrid)

# Now lets change fitting engine
f.switch_engine("bumps")
f.switch_minimizer("bumps")
# Reset the values so we don't cheat
hybrid.m = 1
hybrid.c = 0
Expand Down
2 changes: 1 addition & 1 deletion examples_old/example_dataset2pt2.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def fit_fun(x, *args, **kwargs):

b.m = m_starting_point
b.c = c_starting_point
f.switch_engine(minimizer)
f.switch_minimizer(minimizer)

f_res = d['y'].easyscience.fit(f, vectorize=True)
print(f_res.p)
Expand Down
2 changes: 1 addition & 1 deletion examples_old/example_dataset2pt2_broken.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def fit_fun(x, *args, **kwargs):

b.m = m_starting_point
b.c = c_starting_point
f.switch_engine(minimizer)
f.switch_minimizer(minimizer)

f_res = d['y'].easyscience.fit(f, vectorize=True)
print(f_res.p)
Expand Down
5 changes: 3 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,11 @@ dependencies = [
"bumps",
"DFO-LS",
"lmfit",
"numpy",
"numpy==1.26", # Should be updated to numpy 2.0
"pint",
"uncertainties",
"xarray"
"xarray",
"pint==0.23" # Only to ensure that unit is reported as dimensionless rather than empty string
]

[project.optional-dependencies]
Expand Down
14 changes: 7 additions & 7 deletions src/easyscience/Datasets/xarray.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import xarray as xr

from easyscience import ureg
from easyscience.Fitting import FitResults
from easyscience.fitting import FitResults

T_ = TypeVar('T_')

Expand Down Expand Up @@ -371,13 +371,13 @@ def fit(
**kwargs,
) -> List[FitResults]:
"""
Perform a fit on one or more DataArrays. This fit utilises a given fitter from `EasyScience.Fitting.Fitter`, though
Perform a fit on one or more DataArrays. This fit utilises a given fitter from `EasyScience.fitting.Fitter`, though
there are a few differences to a standard EasyScience fit. In particular, key-word arguments to control the
optimisation algorithm go in the `fit_kwargs` dictionary, fit function key-word arguments go in the `fn_kwargs`
and given key-word arguments control the `xarray.apply_ufunc` function.

:param fitter: Fitting object which controls the fitting
:type fitter: EasyScience.Fitting.Fitter
:type fitter: EasyScience.fitting.Fitter
:param args: Arguments to go to the fit function
:type args: Any
:param dask: Dask control string. See `xarray.apply_ufunc` documentation
Expand Down Expand Up @@ -681,13 +681,13 @@ def fit(
**kwargs,
) -> FitResults:
"""
Perform a fit on the given DataArray. This fit utilises a given fitter from `EasyScience.Fitting.Fitter`, though
Perform a fit on the given DataArray. This fit utilises a given fitter from `EasyScience.fitting.Fitter`, though
there are a few differences to a standard EasyScience fit. In particular, key-word arguments to control the
optimisation algorithm go in the `fit_kwargs` dictionary, fit function key-word arguments go in the `fn_kwargs`
and given key-word arguments control the `xarray.apply_ufunc` function.

:param fitter: Fitting object which controls the fitting
:type fitter: EasyScience.Fitting.Fitter
:type fitter: EasyScience.fitting.Fitter
:param args: Arguments to go to the fit function
:type args: Any
:param dask: Dask control string. See `xarray.apply_ufunc` documentation
Expand Down Expand Up @@ -732,7 +732,7 @@ def local_fit_func(x, *args, **kwargs):

# Set the new callable to the fitter and initialize
fitter.initialize(fitter.fit_object, local_fit_func)
# Make EasyScience.Fitting.Fitter compatible `x`
# Make EasyScience.fitting.Fitter compatible `x`
x_for_fit = xr.concat(bdims, dim='fit_dim')
x_for_fit = x_for_fit.stack(all_x=[d.name for d in bdims])
try:
Expand Down Expand Up @@ -803,7 +803,7 @@ def check_sanity_multiple(fit_results: FitResults, originals: List[xr.DataArray]
current_results = fit_results.__class__()
# Fill out the basic stuff....
current_results.engine_result = fit_results.engine_result
current_results.fitting_engine = fit_results.fitting_engine
current_results.minimizer_engine = fit_results.minimizer_engine
current_results.success = fit_results.success
current_results.p = fit_results.p
current_results.p0 = fit_results.p0
Expand Down
37 changes: 0 additions & 37 deletions src/easyscience/Fitting/minimizers/__init__.py

This file was deleted.

4 changes: 2 additions & 2 deletions src/easyscience/Objects/Inferface.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
_C = TypeVar('_C', bound=ABCMeta)
_M = TypeVar('_M')
if TYPE_CHECKING:
from easyscience.Fitting import Fitter
from easyscience.fitting import Fitter


class InterfaceFactoryTemplate:
Expand Down Expand Up @@ -65,7 +65,7 @@ def switch(self, new_interface: str, fitter: Optional[Type[Fitter]] = None):
:param new_interface: name of new interface to be created
:type new_interface: str
:param fitter: Fitting interface which contains the fitting object which may have bindings which will be updated.
:type fitter: EasyScience.Fitting.Fitting.Fitter
:type fitter: EasyScience.fitting.Fitter
:return: None
:rtype: noneType
"""
Expand Down
2 changes: 1 addition & 1 deletion src/easyscience/Objects/Variable.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
from easyscience import borg
from easyscience import pint
from easyscience import ureg
from easyscience.Fitting.Constraints import SelfConstraint
from easyscience.fitting.Constraints import SelfConstraint
from easyscience.Objects.core import ComponentSerializer
from easyscience.Utils.classTools import addProp
from easyscience.Utils.Exceptions import CoreSetException
Expand Down
Loading