Depletion Calculations with varying material temperatures

I understand that you can feed in different power levels at each depletion step but how you do update the material temperatures at each of these times as well. I have attempted this by changing the Integrator and Operator classes in python but I have not been successfull. The only way it has worked is listed below and it was to recreate a process at each step of the simulation and openMC would re-open all the cross section files but at a different temperature. This was incredibly resource wasteful and I am looking for a way to not restart or re-open these cross sections in between depletion steps, here is the slow (but successful) code:

for i in range(n):
    logger.info(f"Step {i+1}/{n}: T_fuel={fuel_temps[i]}K, T_mod={mod_temps[i]}K, Power={power[i]}W")
    
    # Update temperatures for all the materials
    fuel.temperature = fuel_temps[i]
    water.temperature = mod_temps[i]
    clad.temperature = clad_temps[i]
    materials.export_to_xml(path=results_dir)

    model = openmc.model.Model(geometry, materials, settings)
    
    if i == 0: operator = openmc.deplete.CoupledOperator(model, chain)
    else: # For subsequent steps create new operator based on prev results
      operator = openmc.deplete.CoupledOperator(model, chain,  prev_results=openmc.deplete.Results("depletion_results.h5"))
    
    # Depletion Integration step
    integrator = openmc.deplete.PredictorIntegrator(operator, [time_steps[i]], [power[i]*fuel_mass_g], timestep_units='s')
    integrator.integrate()

Notably an attemp like the one shown below, appears to work on the surface as the cross section files are not re-opened etc. but the temperatures are not truly updated and the cross sections from the temperatures in the first step are used:

class TemperatureVaryingOperator(openmc.deplete.CoupledOperator):
    """Custom operator that updates temperatures in _update_materials_and_nuclides."""
    
    def __init__(self, model, chain, fuel_temps, mod_temps, clad_temps,
                 fuel_mat, water_mat, clad_mat, **kwargs):
        super().__init__(model, chain, **kwargs)
        self.fuel_temps = fuel_temps
        self.mod_temps = mod_temps
        self.clad_temps = clad_temps
        self.fuel_mat = fuel_mat
        self.water_mat = water_mat
        self.clad_mat = clad_mat
        self.current_step = 0
    
    def _update_materials_and_nuclides(self, vec):
        logger.info(f"_update_materials_and_nuclides called for step {self.current_step+1}")
        
        # Update temperatures before parent regenerates materials.xml
        if self.current_step < len(self.fuel_temps):
            self.fuel_mat.temperature = self.fuel_temps[self.current_step]
            self.water_mat.temperature = self.mod_temps[self.current_step]
            self.clad_mat.temperature = self.clad_temps[self.current_step]
            
            logger.info(f"  Set temps: T_fuel={self.fuel_temps[self.current_step]:.1f}K, "
                       f"T_mod={self.mod_temps[self.current_step]:.1f}K, "
                       f"T_clad={self.clad_temps[self.current_step]:.1f}K")
        
        # Call parent which will generate materials.xml with our updated temperatures
        super()._update_materials_and_nuclides(vec)
        
        logger.info(f"  Parent updated materials.xml")
        self.current_step += 1