Source code for suboptimumg.sweep.motor_sweep
from ..compsim.models import CompetitionData
from ..vehicle.models import MotorModel
from .models import MotorSweepData, SweepParamConfig
from .motor_sweep_results import MotorSweepResults
from .sweeper_1d import Sweeper1D
[docs]
class MotorSweeper:
def __init__(
self,
comp_data: CompetitionData,
motors: list[MotorModel],
var_1: SweepParamConfig,
):
self.comp_data = comp_data
self.motors = motors
self.var_1 = var_1
[docs]
def sweep(
self, verbose: bool = False, num_processes: int | None = None
) -> MotorSweepResults:
"""
Runs a one-parameter sweep across all motors.
Parameters
----------
verbose : bool, optional
Whether to show detailed progress (default is False)
num_processes : int, optional
Number of processes to use. Defaults to CPU count.
Returns
-------
MotorSweepResults
Results of the motor sweep operation
"""
res = {}
for motor in self.motors:
# Create car config with new motor
new_comp = self.comp_data.model_copy(deep=True)
mass_delta = motor.mass - new_comp.vehicle_model.pwrtn.motor.mass
new_comp.vehicle_model.pwrtn.motor = motor
new_comp.vehicle_model.mass += mass_delta
print(f"Sweeping using {motor.name}")
sweeper = Sweeper1D(
comp_data=new_comp,
var_1=self.var_1,
)
# Run sweep and collect results
sweep_results = sweeper.sweep(verbose=verbose, num_processes=num_processes)
res[motor.name] = sweep_results.sweep_data
return MotorSweepResults(sweep_data=MotorSweepData(data_by_motor=res))