Skip to content

data_fitting

PV_Circuit_Model.data_fitting

Fit_Parameter

Bases: Artifact

Single fit parameter with constraints and scaling.

Tracks nominal values, bounds, and linear/log scaling for optimization.

Parameters:

Name Type Description Default
name str

Parameter name.

'variable'
value float

Current parameter value.

0.0
nominal_value Optional[float]

Nominal value for regularization.

None
d_value Optional[float]

Differential step for sensitivity.

None
abs_min float

Absolute minimum bound.

-inf
abs_max float

Absolute maximum bound.

inf
is_log bool

If True, parameter is stored in log10 space.

False

Returns:

Name Type Description
Fit_Parameter

The constructed fit parameter.

Example
from PV_Circuit_Model.data_fitting import Fit_Parameter
param = Fit_Parameter(name="Rs", value=0.1)
param.get_parameter()

Fit_Parameters

Bases: Artifact

Collection of Fit_Parameter objects with helper utilities.

Supports enabling/disabling parameters, bounds, and differential mode.

Parameters:

Name Type Description Default
fit_parameters Optional[List[Fit_Parameter]]

Predefined parameters.

None
names Optional[Sequence[str]]

Names to create default parameters.

None

Returns:

Name Type Description
Fit_Parameters

The constructed parameter collection.

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters(names=["Rs", "Rsh"])
params.num_of_parameters()

initialize_from_sample(sample)

Set a reference sample for parameter application.

Parameters:

Name Type Description Default
sample Any

Reference object used during fitting.

required

Returns:

Type Description
None

None

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters()
params.initialize_from_sample(sample=None)
params.ref_sample is None

add_fit_parameter(fit_parameter)

Add a Fit_Parameter to the collection.

Parameters:

Name Type Description Default
fit_parameter Fit_Parameter

Parameter to add.

required

Returns:

Type Description
None

None

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters, Fit_Parameter
params = Fit_Parameters()
params.add_fit_parameter(Fit_Parameter(name="Rs"))
params.num_of_parameters()

enable_parameter(name=None)

Enable all or a named parameter.

Parameters:

Name Type Description Default
name Optional[str]

Parameter name to enable; None for all.

None

Returns:

Type Description
None

None

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters(names=["Rs"])
params.disable_parameter("Rs")
params.enable_parameter("Rs")

disable_parameter(name=None)

Disable all or a named parameter.

Parameters:

Name Type Description Default
name Optional[str]

Parameter name to disable; None for all.

None

Returns:

Type Description
None

None

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters(names=["Rs"])
params.disable_parameter("Rs")
params.fit_parameters[0].enabled

delete_fit_parameter(name)

Remove the first parameter with a matching name.

Parameters:

Name Type Description Default
name str

Parameter name to delete.

required

Returns:

Type Description
None

None

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters(names=["Rs"])
params.delete_fit_parameter("Rs")
params.num_of_parameters()

get(attribute, names=None, enabled_only=True)

Get an attribute list (or scalar if single) for parameters.

Parameters:

Name Type Description Default
attribute str

Attribute name or special key ("min", "max").

required
names Optional[Union[str, List[str]]]

Filter by name(s).

None
enabled_only bool

If True, include only enabled parameters.

True

Returns:

Type Description
Union[Any, List[Any]]

Union[Any, List[Any]]: Attribute values.

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters(names=["Rs"])
params.get("name")

set(attribute, values, names=None, enabled_only=True)

Set an attribute for parameters.

Parameters:

Name Type Description Default
attribute str

Attribute name or auxiliary key.

required
values Union[Any, List[Any], ndarray]

Values to set.

required
names Optional[Union[str, List[str]]]

Filter by name(s).

None
enabled_only bool

If True, apply only to enabled parameters.

True

Returns:

Type Description
None

None

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters(names=["Rs"])
params.set("value", 0.1)
params.get("value")

initialize(values, names=None, enabled_only=True)

Initialize current and nominal values together.

Parameters:

Name Type Description Default
values Union[Any, List[Any], ndarray]

Values to set.

required
names Optional[Union[str, List[str]]]

Filter by name(s).

None
enabled_only bool

If True, apply only to enabled parameters.

True

Returns:

Type Description
None

None

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters(names=["Rs"])
params.initialize(0.1)
params.get("nominal_value")

set_nominal()

Set all nominal values to their current values.

Returns:

Type Description
None

None

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters(names=["Rs"])
params.set("value", 0.2)
params.set_nominal()
params.get("nominal_value")

set_d_value()

Reset differential steps for all parameters.

Returns:

Type Description
None

None

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters(names=["Rs"])
params.set_d_value()
params.get("d_value")

set_differential(which=-1, enabled_only=True)

Enable differential mode for a single parameter index.

Parameters:

Name Type Description Default
which int

Index of parameter to mark; -1 disables.

-1
enabled_only bool

If True, count only enabled parameters.

True

Returns:

Type Description
None

None

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters(names=["Rs", "Rsh"])
params.set_differential(0)
params.is_differential

get_parameters()

Return a dictionary of effective parameter values.

Returns:

Type Description
Dict[str, float]

Dict[str, float]: Name-to-value mapping.

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters(names=["Rs"])
params.get_parameters()

limit_order_of_mag(order_of_mag=1.0)

Limit parameter bounds by order of magnitude.

Parameters:

Name Type Description Default
order_of_mag float

Number of decades to allow.

1.0

Returns:

Type Description
None

None

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters(names=["Rs"])
params.limit_order_of_mag(1.0)
params.get("min")

num_of_parameters()

Return the total number of parameters.

Returns:

Name Type Description
int int

Total parameter count.

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters(names=["Rs", "Rsh"])
params.num_of_parameters()

num_of_enabled_parameters()

Return the number of enabled parameters.

Returns:

Name Type Description
int int

Enabled parameter count.

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters(names=["Rs"])
params.num_of_enabled_parameters()

apply_to_ref(aux_info)

Apply parameters to the reference sample.

Warning

This is a stub meant to be overridden in subclasses.

Parameters:

Name Type Description Default
aux_info Any

Auxiliary data for applying parameters.

required

Returns:

Type Description
None

None

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters()
params.apply_to_ref(aux_info=None)

apply_to_device(device)

Apply parameters to a device instance.

Warning

This is a stub meant to be overridden in subclasses.

Parameters:

Name Type Description Default
device Any

Device object to modify.

required

Returns:

Type Description
None

None

Example
from PV_Circuit_Model.data_fitting import Fit_Parameters
params = Fit_Parameters()
params.apply_to_device(device=None)

Fit_Dashboard

Dashboard for visualizing fit progress and comparisons.

Supports multiple plot types and notebook or GUI rendering.

Parameters:

Name Type Description Default
nrows int

Number of subplot rows.

required
ncols int

Number of subplot columns.

required
save_file_name Optional[str]

Base filename for saved images.

None
measurements Optional[list]

Measurement objects to display.

None
RMS_errors Optional[list]

Error values for plotting progress.

None

Returns:

Name Type Description
Fit_Dashboard

The constructed dashboard.

Example
from PV_Circuit_Model.data_fitting import Fit_Dashboard
dashboard = Fit_Dashboard(1, 1)
dashboard.close()

Interactive_Fit_Dashboard

Bases: Fit_Dashboard

Interactive Tk-based dashboard with parameter sliders.

Warning

Requires a Tkinter environment; will not work in headless mode.

Parameters:

Name Type Description Default
measurement_samples Any

Samples with measurements to simulate.

required
fit_parameters Fit_Parameters

Parameter collection to adjust.

required
nrows Optional[int]

Number of subplot rows.

None
ncols Optional[int]

Number of subplot columns.

None
ref_fit_dashboard Optional[Fit_Dashboard]

Reference dashboard settings.

None
**kwargs Any

Optional configuration, including apply_function.

{}

Returns:

Name Type Description
Interactive_Fit_Dashboard

The constructed interactive dashboard.

Example
from PV_Circuit_Model.data_fitting import Interactive_Fit_Dashboard, Fit_Parameters
params = Fit_Parameters(names=["Rs", "Rsh"])
dashboard = Interactive_Fit_Dashboard([], params, nrows=1, ncols=1)
dashboard.close()

compare_experiments_to_simulations(fit_parameters, measurement_samples, aux)

Compare experimental measurements with simulated results.

Applies fit parameters to a reference sample and computes error vectors.

Parameters:

Name Type Description Default
fit_parameters Optional[Fit_Parameters]

Parameters to apply.

required
measurement_samples Any

Measurement samples or collection.

required
aux Dict[str, Any]

Auxiliary options for comparison.

required

Returns:

Type Description
Dict[str, Any]

Dict[str, Any]: Output dict with error and baseline vectors.

Example
from PV_Circuit_Model.data_fitting import compare_experiments_to_simulations, Fit_Parameters
output = compare_experiments_to_simulations(Fit_Parameters(), [], {})
"error_vector" in output or "differential_vector" in output

uncertainty_analysis(M, Y)

Estimate parameter resolution and error using SVD.

Parameters:

Name Type Description Default
M ndarray

Sensitivity matrix.

required
Y ndarray

Error vector.

required

Returns:

Type Description
Tuple[ndarray, ndarray]

Tuple[np.ndarray, np.ndarray]: (resolution, error) arrays.

Example
import numpy as np
from PV_Circuit_Model.data_fitting import uncertainty_analysis
M = np.eye(2)
Y = np.array([0.1, 0.2])
uncertainty_analysis(M, Y)

construct_M(iteration, measurement_samples, fit_parameters, comparison_function, aux)

Construct a differential measurement output for a fit iteration.

Parameters:

Name Type Description Default
iteration int

Iteration index for differential parameter selection.

required
measurement_samples Any

Measurement sample collection.

required
fit_parameters Fit_Parameters

Parameters to perturb.

required
comparison_function Any

Function to compare measurements.

required
aux Dict[str, Any]

Auxiliary configuration for progress.

required

Returns:

Type Description
Dict[str, Any]

Dict[str, Any]: Output from the comparison function.

Example
from PV_Circuit_Model.data_fitting import construct_M, Fit_Parameters
params = Fit_Parameters(names=["Rs"])
def compare(fp, samples, aux):
    return {"differential_vector": [0.0]}
construct_M(0, [], params, compare, {})

fit_routine(measurement_samples, fit_parameters, routine_functions, fit_dashboard=None, aux=None, num_of_epochs=10, enable_pbar=True, parallel=False)

Run an iterative fitting routine over measurement samples.

Supports optional parallel evaluation and fit dashboards.

Parameters:

Name Type Description Default
measurement_samples Any

Measurement samples to fit.

required
fit_parameters Fit_Parameters

Parameter collection to update.

required
routine_functions Dict[str, Any]

Functions for comparison and update.

required
fit_dashboard Optional[Fit_Dashboard]

Optional visualization dashboard.

None
aux Optional[Dict[str, Any]]

Auxiliary configuration.

None
num_of_epochs int

Number of fitting epochs.

10
enable_pbar bool

If True, show progress bar updates.

True
parallel bool

If True, use joblib parallel evaluation.

False

Returns:

Name Type Description
Any Any

Output from the final comparison function or intermediate data.

Example
from PV_Circuit_Model.data_fitting import fit_routine, Fit_Parameters
params = Fit_Parameters(names=["Rs"])
routine_functions = {"comparison_function": lambda fp, s, a: {"error_vector": [0.0], "baseline_vector": [0.0], "measurement_samples": s},
                     "update_function": lambda M, Y, fp, a: None}
fit_routine([], params, routine_functions, num_of_epochs=1)