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)