.. Copyright (C) 2026 Edward F. Behn, Jr. .. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. .. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .. You should have received a copy of the GNU General Public License along with this program. If not, see . Parameters ========== There are three type of parameters that may be used in a fit. Free Parameters +++++++++++++++ A free parameter is adjusted by the fitter to minimize :math:`\chi^2`. It is represented by the class :py:class:`frankford.FreeParameter`. .. autoclass:: frankford.FreeParameter :members: __init__ When the fitter is called, a :py:class:`frankford.FreeParameterSetting` object must be passed in the ``dict`` ``parameter_settings`` for each free parameter. .. autoclass:: frankford.FreeParameterSetting :members: __init__, init_values, lower, upper, step, relative_step, side The values for ``init_values``, ``lower``, and ``upper`` must each be either a scalar or an array with the same shape as the output array as determined by the datasets. .. autoclass:: frankford.Side :members: AUTO, POS, NEG, BOTH Fixed Parameters ++++++++++++++++ A fixed parameter is assigned a value that does not change. It is represented by the class :py:class:`frankford.FixedParameter`. .. autoclass:: frankford.FixedParameter :members: __init__ When the fitter is called, a :py:class:`frankford.FixedParameterSetting` object must be passed in the ``dict`` ``parameter_settings`` for each fixed parameter. .. autoclass:: frankford.FixedParameterSetting :members: __init__ Tied Parameters +++++++++++++++ A tied parameter has a value that is a function of other parameters. It is represented by the class :py:class:`frankford.TiedParameter`. .. autoclass:: frankford.TiedParameter :members: __init__, args, function The functions must take only arguments with the same name as other parameters. The function must return a ``double`` when all arguments are type ``double``. Further, it must conform to the requirements laid out in the `numba documentation `_ for cuda device functions. If the function raises a python error, the result for the fit is :py:class:`frankford.Result.ERR_USER_FUNC`. Returning a non-finite (:math:`\pm \infty` or not-a-number (NaN)) value has the same result. While the function can take one or more other tied parameters as arguments, there may not be a circular dependency. For example, if ``a`` is a tied parameter with an argument of ``b``, ``b`` is a tied parameter with an argument of ``c``, and ``c`` is a tied parameter with an argument of ``a``, an error will be raised.