def test_inplace(PM_ds_initialized_1d, PM_ds_control_1d): """Tests that inplace operations do not work.""" pm = PerfectModelEnsemble(PM_ds_initialized_1d) # Adding a control. pm.add_control(PM_ds_control_1d) with_ctrl = pm.add_control(PM_ds_control_1d) assert pm != with_ctrl # Adding an uninitialized ensemble. pm = pm.add_control(PM_ds_control_1d) pm.generate_uninitialized() with_uninit = pm.generate_uninitialized() assert pm != with_uninit # Applying arbitrary func. pm.sum("init") summed = pm.sum("init") assert pm != summed
def test_HindcastEnsemble_as_PerfectModelEnsemble(hindcast_recon_1d_mm): """Test that initialized dataset for HindcastEnsemble can also be used for PerfectModelEnsemble.""" v = "SST" alignment = "maximize" hindcast = hindcast_recon_1d_mm assert (not hindcast.verify( metric="acc", comparison="e2o", dim="init", alignment=alignment)[v].isnull().any()) # try PerfectModelEnsemble predictability init = hindcast.get_initialized() pm = PerfectModelEnsemble(init) assert (not pm.verify(metric="acc", comparison="m2e", dim=["member", "init"])[v].isnull().any()) pm = pm.add_control( init.isel(member=0, lead=0, drop=True).rename({ "init": "time" }).resample(time="1MS").interpolate("linear")) pm = pm.generate_uninitialized() assert (not pm.verify( metric="acc", comparison="m2e", dim=["member", "init"], reference=["uninitialized"], )[v].isnull().any()) pm.bootstrap(iterations=2, metric="acc", comparison="m2e", dim=["member", "init"])
def test_PerfectModelEnsemble_plot(PM_ds_initialized_1d, PM_ds_control_1d, variable, show_members, cmap): """Test PredictionEnsemble.plot().""" pm = PerfectModelEnsemble(PM_ds_initialized_1d) kws = {"cmap": cmap, "show_members": show_members, "variable": variable} pm.plot(**kws) pm = pm.add_control(PM_ds_control_1d) pm.plot(**kws) pm = pm.generate_uninitialized() pm.plot(**kws)
class GeneratePerfectModelEnsemble(GenerateHindcastEnsemble): """Generate `PerfectModelEnsemble` out of `HindcastEnsemble`.""" def setup(self, *args, **kwargs): self.get_data() self.PredictionEnsemble = PerfectModelEnsemble( self.initialized).add_control(self.observations) self.PredictionEnsemble = self.PredictionEnsemble.generate_uninitialized( ) self.reference = None self.resample_dim = "member" self.iterations = ITERATIONS
class GeneratePerfectModelEnsembleSmall(GeneratePerfectModelEnsemble): """Generate single grid point `PerfectModelEnsemble`.""" def setup(self, *args, **kwargs): self.get_data(spatial_res=360) self.PredictionEnsemble = PerfectModelEnsemble( self.initialized).add_control(self.observations) self.PredictionEnsemble = self.PredictionEnsemble.generate_uninitialized( ) self.alignment = None self.reference = None self.resample_dim = "member" self.iterations = ITERATIONS
def test_compute_uninitialized(pm_ds_ds1d, pm_ds_control1d): """Test that compute uninitialized can be run for perfect model ensemble""" pm = PerfectModelEnsemble(pm_ds_ds1d) pm.add_control(pm_ds_control1d) pm.generate_uninitialized() pm.compute_uninitialized()
def test_generate_uninit(pm_ds_ds1d, pm_ds_control1d): """Test to see if uninitialized ensemble can be bootstrapped""" pm = PerfectModelEnsemble(pm_ds_ds1d) pm.add_control(pm_ds_control1d) pm.generate_uninitialized()
def perfectModelEnsemble_initialized_control(PM_ds_initialized_1d, PM_ds_control_1d): """PerfectModelEnsemble initialized with `initialized` and `control` xr.Dataset.""" pm = PerfectModelEnsemble(PM_ds_initialized_1d).add_control( PM_ds_control_1d) return pm.generate_uninitialized()