From d95d5c93e22f8362094e6e73a404a6fe8075427d Mon Sep 17 00:00:00 2001 From: Shan Zhao Date: Tue, 24 Feb 2026 08:08:13 -0500 Subject: [PATCH 01/16] use result/params.json for rollout, name:add timestap, reduce length --- .gitignore | 1 + climatem/model/train_model.py | 6 ++++++ climatem/model/tsdcd_latent.py | 9 +++++---- configs/single_param_file_savar.json | 8 ++++---- scripts/main_picabu.py | 19 ++++++++++++++----- scripts/rollout_bf.py | 23 +++++++++++++---------- scripts/run_rollout_bf.sh | 8 ++++---- scripts/run_single_jsonfile.sh | 10 ++++++---- 8 files changed, 53 insertions(+), 31 deletions(-) diff --git a/.gitignore b/.gitignore index 9fc5fbc..c0f116a 100644 --- a/.gitignore +++ b/.gitignore @@ -186,3 +186,4 @@ notebooks/plots/ notebooks/rollouts/ scripts/run_single_*.txt +scripts/srun_outs_ft/ diff --git a/climatem/model/train_model.py b/climatem/model/train_model.py index 3eb69fb..43586a1 100644 --- a/climatem/model/train_model.py +++ b/climatem/model/train_model.py @@ -553,6 +553,7 @@ def train_step(self): # noqa: C901 # we have to take care here to make sure that we have the right tensors with requires_grad for k in range(self.future_timesteps): nll_bis, recons_bis, kl_bis, y_pred_recons = self.get_nll(x_bis, y[:, k], z) + # sz: nll_bis (positive): -elbo (elbo is negative, -elbo is positive) we want to minimize, recons_bis (negative number): construction we want to maximize, nll += (self.optim_params.loss_decay_future_timesteps**k) * nll_bis recons += (self.optim_params.loss_decay_future_timesteps**k) * recons_bis kl += (self.optim_params.loss_decay_future_timesteps**k) * kl_bis @@ -573,6 +574,7 @@ def train_step(self): # noqa: C901 h_sparsity = self.get_sparsity_violation( lower_threshold=0.05, upper_threshold=self.optim_params.sparsity_upper_threshold ) + # sz: upper_threshold = 0.5: half of the edges are connected sparsity_reg = self.ALM_sparsity.gamma * h_sparsity + 0.5 * self.ALM_sparsity.mu * h_sparsity**2 if self.optim_params.binarize_transition and h_sparsity == 0: h_sparsity = self.adj_transition_variance() @@ -593,6 +595,7 @@ def train_step(self): # noqa: C901 # compute total loss - here we are removing the sparsity regularisation as we are usings the constraint here. loss = nll + connect_reg + sparsity_reg + # sz: loss: -elbo + regularzation ->(loss is postive number) if not self.no_w_constraint: if self.constraint_func == "sum": loss = ( @@ -1106,7 +1109,9 @@ def log_losses(self): """Append in lists values of the losses and more.""" # train self.train_loss_list.append(-self.train_loss) + # sz: train_loss is positive number we want to minimize, -train_loss is negative self.train_recons_list.append(self.train_recons) + # train_recons is negative number (logp) self.train_kl_list.append(self.train_kl) # here note that train_ortho_cons_list is a torch.sum... @@ -1191,6 +1196,7 @@ def get_nll(self, x, y, z=None) -> torch.Tensor: # this is just running the forward pass of LatentTSDCD... elbo, recons, kl, preds = self.model(x, y, z, self.iteration) + # elbo=reconstrction-kl, maximize elbo-> minimize -elbo return -elbo, recons, kl, preds diff --git a/climatem/model/tsdcd_latent.py b/climatem/model/tsdcd_latent.py index 98cea93..27f914f 100644 --- a/climatem/model/tsdcd_latent.py +++ b/climatem/model/tsdcd_latent.py @@ -184,15 +184,15 @@ class LatentTSDCD(nn.Module): def __init__( self, - num_layers: int, - num_hidden: int, + num_layers: int, # sz: transition model + num_hidden: int, # sz: transition model num_input: int, num_output: int, - num_layers_mixing: int, + num_layers_mixing: int, # sz: encoder/decoder num_hidden_mixing: int, position_embedding_dim: int, transition_param_sharing: bool, - position_embedding_transition: int, + position_embedding_transition: int, # sz: 1NN per location, after sharing: 1NN for all locations coeff_kl: float, distr_z0: str, distr_encoder: str, @@ -520,6 +520,7 @@ def forward(self, x, y, gt_z, iteration, xi=None): else: px_distr = self.distr_decoder(px_mu, px_std) recons = torch.mean(torch.sum(px_distr.log_prob(y), dim=[1, 2])) + # sz: log_theta p​(y∣z): 0 Date: Tue, 24 Feb 2026 09:47:38 -0500 Subject: [PATCH 02/16] set reload_data=true --- scripts/rollout_bf.py | 8 +++++--- scripts/run_rollout_bf.sh | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/scripts/rollout_bf.py b/scripts/rollout_bf.py index 8d41560..55a3faf 100644 --- a/scripts/rollout_bf.py +++ b/scripts/rollout_bf.py @@ -266,8 +266,7 @@ def main( cwd = Path.cwd() root_path = cwd.parent # config_path = root_path / f"configs" - exp_id = "var_tas_scen_piControl_nlinmix_True_nlindyn_True_tau_5_z_90_futt_1_ldec_1_lr_0.0001_bs_128_ormuin_100000.0_spmuin_1_spth_0.5_nens_1_inst_False_crpscoef_1_sspcoef_1000_tspcoef_2000_frachiwn_0.5_nummix_hid_16_2_16_2_embdim_100_trparamsh_True_posembdimtr_100" - + exp_id = args.exp_id config_path = Path("/home/mila/s/shanz/scratch/results/test_debug") / exp_id json_path = config_path / args.config_path @@ -286,7 +285,10 @@ def main( # get directory of project via current file (aka .../climatem/scripts/main_picabu.py) params["data_params"]["icosahedral_coordinates_path"] = params["data_params"]["icosahedral_coordinates_path"].replace("$CLIMATEMDIR", root_path.absolute().as_posix()) print ("new icosahedron path:", params["data_params"]["icosahedral_coordinates_path"]) - + + params["data_params"]["reload_climate_set_data"] = True + # print ("new reload_climate_set_data:", params["data_params"]["reload_climate_set_data"]) + # params["data_params"]["num_ensembles"] = 2 experiment_params = expParams(**params["exp_params"]) data_params = dataParams(**params["data_params"]) # gt_params = gtParams(**params["gt_params"]) diff --git a/scripts/run_rollout_bf.sh b/scripts/run_rollout_bf.sh index bfd0300..7605b99 100644 --- a/scripts/run_rollout_bf.sh +++ b/scripts/run_rollout_bf.sh @@ -40,4 +40,5 @@ accelerate launch \ --num_processes=1 \ --num_machines=1 \ --gpu_ids='all' \ - $HOME/dev/climatem/scripts/rollout_bf.py --config-path params.json + $HOME/dev/climatem/scripts/rollout_bf.py --config-path params.json --exp-id "var_ts_scen_piControl_nlinmix_True_nlindyn_True_tau_5_z_90_futt_1_ldec_1_lr_0.0001_bs_128_ormuin_100000.0_spmuin_1_spth_0.5_nens_2_inst_False_crpscoef_1_sspcoef_1000_tspcoef_2000_frachiwn_0.5_nummix_hid_16_2_16_2_embdim_100_trparamsh_True_posembdimtr_100" + From 6dea9ddc8dcf85363503fa3e0d8c182ac4635e80 Mon Sep 17 00:00:00 2001 From: Shan Zhao Date: Tue, 24 Feb 2026 11:06:15 -0500 Subject: [PATCH 03/16] add arg exp-id --- climatem/utils.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/climatem/utils.py b/climatem/utils.py index f4ed3f3..8755ed6 100644 --- a/climatem/utils.py +++ b/climatem/utils.py @@ -194,6 +194,12 @@ def parse_args(): default="configs/param_file.json", help="Path to a json file with values for all parameters", ) + parser.add_argument( + "--exp-id", + type=str, + default="var_ts", + help="experiment name for rollout", + ) # Add an argument for nested keys, this will be handled dynamically later parser.add_argument("--hp", action="append", metavar="KEY=VALUE", help="Cmd line arguments") return parser.parse_args() From d7c9e0205e2aa0a05e18a82e08b015533d7b8385 Mon Sep 17 00:00:00 2001 From: Shan Zhao Date: Tue, 24 Feb 2026 11:10:21 -0500 Subject: [PATCH 04/16] reformat --- climatem/config.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/climatem/config.py b/climatem/config.py index 6d6165b..dc7c8ff 100644 --- a/climatem/config.py +++ b/climatem/config.py @@ -71,6 +71,7 @@ def __init__( num_months_aggregated: List[int] = [ 1 ], # Aggregate num_months_aggregated months i.e. if you want yearly temporal resolution set this param to [12] + **kwargs, # accept any new keys in the parameter configs (e.g returned by the class) ): self.data_dir = data_dir self.climateset_data = climateset_data @@ -134,6 +135,7 @@ def __init__( patience_post_thresh: int = 50, # NOT SURE: if mapping converges before patience, and for patience_post_thresh it's stable, then optimize everything valid_freq: int = 5, # get validation metrics every valid_freq iteration # here valid_freq is critical for updating the parameters of the ALM method as they get updated every valid_freq + **kwargs, # accept any new keys in the parameter configs ): self.ratio_train = ratio_train self.ratio_valid = 1 - self.ratio_train From d5508d7ad208d14b80b08cda9ffdae0e8962964b Mon Sep 17 00:00:00 2001 From: Shan Zhao Date: Tue, 24 Feb 2026 11:11:52 -0500 Subject: [PATCH 05/16] force using reloaded data, use config exported in results --- scripts/rollout_bf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/rollout_bf.py b/scripts/rollout_bf.py index 55a3faf..997a508 100644 --- a/scripts/rollout_bf.py +++ b/scripts/rollout_bf.py @@ -287,8 +287,8 @@ def main( print ("new icosahedron path:", params["data_params"]["icosahedral_coordinates_path"]) params["data_params"]["reload_climate_set_data"] = True - # print ("new reload_climate_set_data:", params["data_params"]["reload_climate_set_data"]) - # params["data_params"]["num_ensembles"] = 2 + print ("new reload_climate_set_data:", params["data_params"]["reload_climate_set_data"]) + experiment_params = expParams(**params["exp_params"]) data_params = dataParams(**params["data_params"]) # gt_params = gtParams(**params["gt_params"]) From 23a3897a228e8d35077a2aabf82c2f1882084d48 Mon Sep 17 00:00:00 2001 From: Shan Zhao Date: Mon, 2 Mar 2026 07:52:19 -0500 Subject: [PATCH 06/16] reversed adj temporal axis --- climatem/model/train_model.py | 2 ++ configs/single_param_file.json | 12 ++++++------ configs/single_param_file_savar.json | 4 ++-- scripts/rollout_bf.py | 1 + scripts/run_rollout_bf.sh | 2 +- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/climatem/model/train_model.py b/climatem/model/train_model.py index 43586a1..7de8cc2 100644 --- a/climatem/model/train_model.py +++ b/climatem/model/train_model.py @@ -641,6 +641,7 @@ def train_step(self): # noqa: C901 else: coef = 0 for new_coef, iter_schedule in zip(self.coefs_scheduler_spectra, self.optim_params.scheduler_spectra): + coef = 0 if self.iteration >= iter_schedule: coef = new_coef if self.iteration == iter_schedule: @@ -648,6 +649,7 @@ def train_step(self): # noqa: C901 f"Scheduling spectrum coefficient at iterations {self.optim_params.scheduler_spectra} at coefficients {self.coefs_scheduler_spectra}" ) print(f"Updating spectral coefficient to {coef} at iteration {self.iteration}!!") + loss = ( loss + self.optim_params.crps_coeff * crps diff --git a/configs/single_param_file.json b/configs/single_param_file.json index 37f0dd8..2b6b745 100644 --- a/configs/single_param_file.json +++ b/configs/single_param_file.json @@ -66,15 +66,15 @@ "no_w_constraint": false, "tied_w": false, "nonlinear_mixing": true, - "num_hidden_mixing": 16, + "num_hidden_mixing": 8, "num_layers_mixing": 2, "nonlinear_dynamics": true, - "num_hidden": 16, + "num_hidden": 8, "num_layers": 2, "num_output": 2, "position_embedding_dim": 100, "transition_param_sharing": true, - "position_embedding_transition": 100, + "position_embedding_transition": 45, "fixed": false, "fixed_output_fraction": null, "constraint_func": "trace" @@ -85,16 +85,16 @@ "use_sparsity_constraint": true, "binarize_transition": true, "crps_coeff": 1, - "spectral_coeff": 1000, + "spectral_coeff": 500, "temporal_spectral_coeff": 2000, "coeff_kl": 1, "loss_decay_future_timesteps": 1, - "fraction_highest_wavenumbers": 0.5, + "fraction_highest_wavenumbers": 0.75, "fraction_lowest_wavenumbers": null, "take_log_spectra": true, - "scheduler_spectra": null, + "scheduler_spectra": [50000,100000], "reg_coeff": 0.12801, "reg_coeff_connect": 0, diff --git a/configs/single_param_file_savar.json b/configs/single_param_file_savar.json index 70c751e..5956748 100644 --- a/configs/single_param_file_savar.json +++ b/configs/single_param_file_savar.json @@ -52,7 +52,7 @@ "max_iteration": 100000, "patience": 5000, "patience_post_thresh": 50, - "valid_freq": 1 + "valid_freq": 100 }, "model_params": { "instantaneous": false, @@ -142,7 +142,7 @@ "linearity": "linear", "poly_degrees": [2,3], "plot_original_data": true, - "use_correct_hyperparams": true + "use_correct_hyperparams": false }, "rollout_params": { "final_30_years_of_ssps": false, diff --git a/scripts/rollout_bf.py b/scripts/rollout_bf.py index 997a508..b170f5b 100644 --- a/scripts/rollout_bf.py +++ b/scripts/rollout_bf.py @@ -286,6 +286,7 @@ def main( params["data_params"]["icosahedral_coordinates_path"] = params["data_params"]["icosahedral_coordinates_path"].replace("$CLIMATEMDIR", root_path.absolute().as_posix()) print ("new icosahedron path:", params["data_params"]["icosahedral_coordinates_path"]) + # For rollout, most cases we already have the climate dataset during training params["data_params"]["reload_climate_set_data"] = True print ("new reload_climate_set_data:", params["data_params"]["reload_climate_set_data"]) diff --git a/scripts/run_rollout_bf.sh b/scripts/run_rollout_bf.sh index 7605b99..afb55e0 100644 --- a/scripts/run_rollout_bf.sh +++ b/scripts/run_rollout_bf.sh @@ -40,5 +40,5 @@ accelerate launch \ --num_processes=1 \ --num_machines=1 \ --gpu_ids='all' \ - $HOME/dev/climatem/scripts/rollout_bf.py --config-path params.json --exp-id "var_ts_scen_piControl_nlinmix_True_nlindyn_True_tau_5_z_90_futt_1_ldec_1_lr_0.0001_bs_128_ormuin_100000.0_spmuin_1_spth_0.5_nens_2_inst_False_crpscoef_1_sspcoef_1000_tspcoef_2000_frachiwn_0.5_nummix_hid_16_2_16_2_embdim_100_trparamsh_True_posembdimtr_100" + $HOME/dev/climatem/scripts/rollout_bf.py --config-path params.json --exp-id "var_ts_scen_piControl_nlinmix_True_nlindyn_True_tau_5_z_90_futt_1_ldec_1_lr_0.0001_bs_128_20260301_055455" From eefd6bdf8e4c07e7d295f8267167621ac036a12d Mon Sep 17 00:00:00 2001 From: Shan Zhao Date: Tue, 3 Mar 2026 09:51:01 -0500 Subject: [PATCH 07/16] try with different parameter settings --- climatem/model/train_model.py | 5 ++++- configs/single_param_file.json | 12 ++++++------ configs/single_param_file_savar.json | 10 +++++----- scripts/main_picabu.py | 2 +- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/climatem/model/train_model.py b/climatem/model/train_model.py index 7de8cc2..9df7d51 100644 --- a/climatem/model/train_model.py +++ b/climatem/model/train_model.py @@ -595,7 +595,7 @@ def train_step(self): # noqa: C901 # compute total loss - here we are removing the sparsity regularisation as we are usings the constraint here. loss = nll + connect_reg + sparsity_reg - # sz: loss: -elbo + regularzation ->(loss is postive number) + if not self.no_w_constraint: if self.constraint_func == "sum": loss = ( @@ -1233,6 +1233,9 @@ def get_ortho_violation(self, w: torch.Tensor) -> float: # constraint = constraint + torch.norm(w[i].T @ w[i] - torch.eye(k), p=2) i = 0 # constraint = torch.norm(w[i].T @ w[i] - torch.eye(k), p=2, dim=1) + # col_norms = torch.linalg.norm(w[i], axis=0) + # w_normalized = w[i] / col_norms + # constraint = w_normalized.T @ w_normalized - torch.eye(k) constraint = w[i].T @ w[i] - torch.eye(k) # print('What is the ortho constraint shape:', constraint.shape) h = constraint / self.ortho_normalization diff --git a/configs/single_param_file.json b/configs/single_param_file.json index 2b6b745..bdb7b74 100644 --- a/configs/single_param_file.json +++ b/configs/single_param_file.json @@ -66,15 +66,15 @@ "no_w_constraint": false, "tied_w": false, "nonlinear_mixing": true, - "num_hidden_mixing": 8, + "num_hidden_mixing": 16, "num_layers_mixing": 2, "nonlinear_dynamics": true, - "num_hidden": 8, + "num_hidden": 16, "num_layers": 2, "num_output": 2, "position_embedding_dim": 100, "transition_param_sharing": true, - "position_embedding_transition": 45, + "position_embedding_transition": 60, "fixed": false, "fixed_output_fraction": null, "constraint_func": "trace" @@ -85,8 +85,8 @@ "use_sparsity_constraint": true, "binarize_transition": true, "crps_coeff": 1, - "spectral_coeff": 500, - "temporal_spectral_coeff": 2000, + "spectral_coeff": 800, + "temporal_spectral_coeff": 1, "coeff_kl": 1, "loss_decay_future_timesteps": 1, @@ -94,7 +94,7 @@ "fraction_highest_wavenumbers": 0.75, "fraction_lowest_wavenumbers": null, "take_log_spectra": true, - "scheduler_spectra": [50000,100000], + "scheduler_spectra": [100000], "reg_coeff": 0.12801, "reg_coeff_connect": 0, diff --git a/configs/single_param_file_savar.json b/configs/single_param_file_savar.json index 5956748..bc910b8 100644 --- a/configs/single_param_file_savar.json +++ b/configs/single_param_file_savar.json @@ -1,6 +1,6 @@ { "exp_params": { - "exp_path": "$SCRATCH/results/savar_data_new", + "exp_path": "$SCRATCH/results/SAVAR_DATA_TEST_True", "_target_": "emulator.src.datamodules.climate_datamodule.ClimateDataModule", "latent": true, "d_z": 4, @@ -57,7 +57,7 @@ "model_params": { "instantaneous": false, "no_w_constraint": false, - "tied_w": false, + "tied_w": true, "nonlinear_mixing": false, "num_hidden_mixing": 8, "num_layers_mixing": 2, @@ -106,7 +106,7 @@ "sparsity_omega_mu": 0.95, "sparsity_h_threshold": 1e-4, "sparsity_min_iter_convergence": 1000, - "sparsity_upper_threshold": 0.1, + "sparsity_upper_threshold": 0.05, "acyclic_mu_init": 1, "acyclic_mu_mult_factor": 2, @@ -126,7 +126,7 @@ "print_freq": 1000 }, "savar_params": { - "n_per_col": 3, + "n_per_col": 2, "time_len": 10000, "comp_size": 10, "noise_val": 0.2, @@ -142,7 +142,7 @@ "linearity": "linear", "poly_degrees": [2,3], "plot_original_data": true, - "use_correct_hyperparams": false + "use_correct_hyperparams": true }, "rollout_params": { "final_30_years_of_ssps": false, diff --git a/scripts/main_picabu.py b/scripts/main_picabu.py index 1dd313d..c76a4a2 100755 --- a/scripts/main_picabu.py +++ b/scripts/main_picabu.py @@ -276,7 +276,7 @@ def main( tau, ) - # adj_permuted = adj_permuted[::-1] + adj_permuted = adj_permuted[::-1] metrics["shd"] = str(shd(adj_permuted, adj_gt)) precision, recall = precision_recall(adj_permuted, adj_gt) From 006cdab2480b290ce73f8dbb4b5b8c9f3d5d0afb Mon Sep 17 00:00:00 2001 From: Shan Zhao Date: Fri, 13 Mar 2026 05:17:56 -0400 Subject: [PATCH 08/16] check ortho: trace and threshold --- climatem/model/train_model.py | 8 ++++- climatem/utils.py | 6 ++++ configs/single_param_file.json | 14 ++++----- configs/single_param_file_savar.json | 10 +++++-- scripts/main_picabu.py | 5 ++-- scripts/rollout_bf.py | 16 +++++++--- scripts/run_rollout_bf.sh | 28 +++++++++++------- scripts/run_single_jsonfile_savar.sh | 44 ++++++++++++++++++++++++++++ 8 files changed, 103 insertions(+), 28 deletions(-) create mode 100755 scripts/run_single_jsonfile_savar.sh diff --git a/climatem/model/train_model.py b/climatem/model/train_model.py index 9df7d51..7655fd6 100644 --- a/climatem/model/train_model.py +++ b/climatem/model/train_model.py @@ -406,8 +406,10 @@ def trace_handler(p): # Todo propagate the path! if not self.plot_params.savar: self.plotter.save_coordinates_and_adjacency_matrices(self) + torch.save(self.model.state_dict(), self.save_path / f"model_{self.iteration}.pth") + # try to use the accelerator.save function here self.accelerator.save_state(output_dir=self.save_path) @@ -597,6 +599,7 @@ def train_step(self): # noqa: C901 loss = nll + connect_reg + sparsity_reg if not self.no_w_constraint: + if self.constraint_func == "sum": loss = ( loss + torch.sum(self.ALM_ortho.gamma @ h_ortho) + 0.5 * self.ALM_ortho.mu * torch.sum(h_ortho**2) @@ -605,6 +608,7 @@ def train_step(self): # noqa: C901 loss = ( loss + torch.sum(self.ALM_ortho.gamma * h_ortho) + 0.5 * self.ALM_ortho.mu * torch.sum(h_ortho**2) ) + if self.instantaneous: loss = loss + 0.5 * self.QPM_acyclic.mu * h_acyclic**2 @@ -641,7 +645,6 @@ def train_step(self): # noqa: C901 else: coef = 0 for new_coef, iter_schedule in zip(self.coefs_scheduler_spectra, self.optim_params.scheduler_spectra): - coef = 0 if self.iteration >= iter_schedule: coef = new_coef if self.iteration == iter_schedule: @@ -1239,6 +1242,9 @@ def get_ortho_violation(self, w: torch.Tensor) -> float: constraint = w[i].T @ w[i] - torch.eye(k) # print('What is the ortho constraint shape:', constraint.shape) h = constraint / self.ortho_normalization + + # mask = ~torch.eye(k, dtype=bool, device=w.device) + # h = h*mask else: h = torch.as_tensor([0.0]) diff --git a/climatem/utils.py b/climatem/utils.py index 8755ed6..ed8bd01 100644 --- a/climatem/utils.py +++ b/climatem/utils.py @@ -200,6 +200,12 @@ def parse_args(): default="var_ts", help="experiment name for rollout", ) + parser.add_argument( + "--iter-id", + type=int, + default=200000, + help="model saving epoch", + ) # Add an argument for nested keys, this will be handled dynamically later parser.add_argument("--hp", action="append", metavar="KEY=VALUE", help="Cmd line arguments") return parser.parse_args() diff --git a/configs/single_param_file.json b/configs/single_param_file.json index bdb7b74..6eff66e 100644 --- a/configs/single_param_file.json +++ b/configs/single_param_file.json @@ -54,12 +54,12 @@ "train_params": { "ratio_train": 0.9, "lr": 0.0001, - "lr_scheduler_epochs": [10000, 25000, 50000], + "lr_scheduler_epochs": [10000,25000,50000], "lr_scheduler_gamma": 1, "max_iteration": 200000, "patience": 5000, "patience_post_thresh": 50, - "valid_freq": 100 + "valid_freq": 200 }, "model_params": { "instantaneous": false, @@ -69,7 +69,7 @@ "num_hidden_mixing": 16, "num_layers_mixing": 2, "nonlinear_dynamics": true, - "num_hidden": 16, + "num_hidden": 8, "num_layers": 2, "num_output": 2, "position_embedding_dim": 100, @@ -85,16 +85,16 @@ "use_sparsity_constraint": true, "binarize_transition": true, "crps_coeff": 1, - "spectral_coeff": 800, - "temporal_spectral_coeff": 1, + "spectral_coeff": 2000, + "temporal_spectral_coeff": 2000, "coeff_kl": 1, "loss_decay_future_timesteps": 1, - "fraction_highest_wavenumbers": 0.75, + "fraction_highest_wavenumbers": 0.5, "fraction_lowest_wavenumbers": null, "take_log_spectra": true, - "scheduler_spectra": [100000], + "scheduler_spectra": null, "reg_coeff": 0.12801, "reg_coeff_connect": 0, diff --git a/configs/single_param_file_savar.json b/configs/single_param_file_savar.json index bc910b8..473143a 100644 --- a/configs/single_param_file_savar.json +++ b/configs/single_param_file_savar.json @@ -52,12 +52,12 @@ "max_iteration": 100000, "patience": 5000, "patience_post_thresh": 50, - "valid_freq": 100 + "valid_freq": 200 }, "model_params": { "instantaneous": false, "no_w_constraint": false, - "tied_w": true, + "tied_w": false, "nonlinear_mixing": false, "num_hidden_mixing": 8, "num_layers_mixing": 2, @@ -121,9 +121,13 @@ "udpate_ALM_using_nll": false }, "plot_params": { - "plot_freq": 10000, + "plot_freq": 50000, "plot_through_time": true, +<<<<<<< HEAD "print_freq": 1000 +======= + "print_freq": 50000 +>>>>>>> 295679e (check ortho: trace and threshold) }, "savar_params": { "n_per_col": 2, diff --git a/scripts/main_picabu.py b/scripts/main_picabu.py index c76a4a2..57d8500 100755 --- a/scripts/main_picabu.py +++ b/scripts/main_picabu.py @@ -205,6 +205,7 @@ def main( exp_path = exp_path.parent / f"{exp_path.name}_{timestamp}" os.makedirs(exp_path, exist_ok=False) + print(f"The experiment name is {exp_path}") # create path to exp and save hyperparameters save_path = exp_path / "training_results" @@ -275,8 +276,8 @@ def main( adj, tau, ) - - adj_permuted = adj_permuted[::-1] + # Verified: this one has to be commneted + # adj_permuted = adj_permuted[::-1] metrics["shd"] = str(shd(adj_permuted, adj_gt)) precision, recall = precision_recall(adj_permuted, adj_gt) diff --git a/scripts/rollout_bf.py b/scripts/rollout_bf.py index b170f5b..2e2e50f 100644 --- a/scripts/rollout_bf.py +++ b/scripts/rollout_bf.py @@ -44,6 +44,7 @@ def main( savar_params, rollout_params, exp_id, + iter_id, ): """ :param hp: object containing hyperparameter values @@ -186,8 +187,9 @@ def main( os.makedirs(save_path, exist_ok=True) # seed = 1 - save_path = save_path / f"bs_{rollout_params.batch_size}_np_{rollout_params.num_particles}_npp_{rollout_params.num_particles_per_particle}_t_{rollout_params.num_timesteps}_sc_{rollout_params.score}_temp_{rollout_params.tempering}" + save_path = save_path / f"bs_{rollout_params.batch_size}_np_{rollout_params.num_particles}_npp_{rollout_params.num_particles_per_particle}_t_{rollout_params.num_timesteps}_sc_{rollout_params.score}_temp_{rollout_params.tempering}_iter{iter_id}" os.makedirs(save_path, exist_ok=True) + model_path = exp_path #/ "training_results" @@ -214,8 +216,11 @@ def main( y = y.to(device) # Here we load a final model, when we do learn the causal graph. Make sure it is on GPU: + # model_file = f"model_{iter_id}.pth" + # model_path = exp_path + model_file = "model.pth" state_dict_vae_final = torch.load( - model_path / "model.pth", + model_path / model_file, map_location=device ) model.load_state_dict({k.replace("module.", ""): v for k, v in state_dict_vae_final.items()}) @@ -267,7 +272,10 @@ def main( root_path = cwd.parent # config_path = root_path / f"configs" exp_id = args.exp_id - config_path = Path("/home/mila/s/shanz/scratch/results/test_debug") / exp_id + iter_id = args.iter_id + folder = exp_id.split("/")[0] + exp_id = exp_id.split("/")[-1] + config_path = Path("/home/mila/s/shanz/scratch/results") / folder / exp_id json_path = config_path / args.config_path with open(json_path, "r") as f: @@ -309,5 +317,5 @@ def main( else: plot_params.savar = False - final_picontrol_particles = main(experiment_params, data_params, train_params, model_params, optim_params, plot_params, savar_params, rollout_params, exp_id) + final_picontrol_particles = main(experiment_params, data_params, train_params, model_params, optim_params, plot_params, savar_params, rollout_params, exp_id, iter_id) diff --git a/scripts/run_rollout_bf.sh b/scripts/run_rollout_bf.sh index afb55e0..00c14a8 100644 --- a/scripts/run_rollout_bf.sh +++ b/scripts/run_rollout_bf.sh @@ -30,15 +30,21 @@ export TORCH_DISTRIBUTED_DEBUG=INFO export TORCH_CPP_LOG_LEVEL=INFO echo "=== calling accelerate" - -# Make sure to change program file path to correct dir -accelerate launch \ - --machine_rank=$SLURM_NODEID \ - --num_cpu_threads_per_process=8 \ - --main_process_ip=$MASTER_ADDR \ - --main_process_port=$MASTER_PORT \ - --num_processes=1 \ - --num_machines=1 \ - --gpu_ids='all' \ - $HOME/dev/climatem/scripts/rollout_bf.py --config-path params.json --exp-id "var_ts_scen_piControl_nlinmix_True_nlindyn_True_tau_5_z_90_futt_1_ldec_1_lr_0.0001_bs_128_20260301_055455" +exp_ids=("test_debug_trace/var_ts_scen_piControl_nlinmix_True_nlindyn_True_tau_5_z_90_futt_1_ldec_1_lr_0.0001_bs_128_20260311_141027") + +for exp_id in "${exp_ids[@]}" +do + echo "Running experiment: $exp_id" + + # Make sure to change program file path to correct dir + accelerate launch \ + --machine_rank=$SLURM_NODEID \ + --num_cpu_threads_per_process=8 \ + --main_process_ip=$MASTER_ADDR \ + --main_process_port=$MASTER_PORT \ + --num_processes=1 \ + --num_machines=1 \ + --gpu_ids='all' \ + $HOME/dev/climatem/scripts/rollout_bf.py --config-path params.json --exp-id "$exp_id" --iter-id 600 +done diff --git a/scripts/run_single_jsonfile_savar.sh b/scripts/run_single_jsonfile_savar.sh new file mode 100755 index 0000000..48fd679 --- /dev/null +++ b/scripts/run_single_jsonfile_savar.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +#SBATCH --job-name=run_single # Set name of job +#SBATCH --output=srun_outs_ft/rs_%j.out # Set location of output file +#SBATCH --error=srun_outs_ft/rs_%j.err # Set location of error file +#SBATCH --gpus-per-task=1 # Ask for 1 GPU +#SBATCH --cpus-per-task=8 # Ask for 4 CPUs +#SBATCH --ntasks-per-node=1 # Ask for 4 CPUs +#SBATCH --nodes=1 # Ask for 4 CPUs +#SBATCH --mem=128G # Ask for 32 GB of RAM +#SBATCH --time=6:00:00 # The job will run for 2 hours +#SBATCH --partition=long # Ask for long partition + +# 0. Clear the environment +module purge + +# 1. Load the required modules +module --quiet load python/3.10 + +# 2. Load your environment assuming environment is called "env_climatem" in $HOME/env/ (standardized) +source $HOME/envs/env_emulator_climatem/bin/activate +# 3. Enable expandable allocator to avoid fragmentation +export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True + +# 3. Get a unique port for this job based on the job ID +export MASTER_PORT=$(expr 10000 + $(echo -n $SLURM_JOBID | tail -c 4)) +export MASTER_ADDR="127.0.0.1" + + +export TORCH_DISTRIBUTED_DEBUG=INFO +export TORCH_CPP_LOG_LEVEL=INFO + +echo "=== calling accelerate" + +# Make sure to change program file path to correct dir +accelerate launch \ + --machine_rank=$SLURM_NODEID \ + --num_cpu_threads_per_process=8 \ + --main_process_ip=$MASTER_ADDR \ + --main_process_port=$MASTER_PORT \ + --num_processes=1 \ + --num_machines=1 \ + --gpu_ids='all' \ + $HOME/dev/climatem/scripts/main_picabu.py --config-path single_param_file_savar.json From 6e812a7c9be03691340088ff1219979ff171f1d2 Mon Sep 17 00:00:00 2001 From: Shan Zhao Date: Fri, 13 Mar 2026 06:32:17 -0400 Subject: [PATCH 09/16] update params --- configs/single_param_file_savar.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/configs/single_param_file_savar.json b/configs/single_param_file_savar.json index 473143a..a82c0c3 100644 --- a/configs/single_param_file_savar.json +++ b/configs/single_param_file_savar.json @@ -123,11 +123,8 @@ "plot_params": { "plot_freq": 50000, "plot_through_time": true, -<<<<<<< HEAD "print_freq": 1000 -======= - "print_freq": 50000 ->>>>>>> 295679e (check ortho: trace and threshold) + }, "savar_params": { "n_per_col": 2, From 5254693abea0297f45dd4bbc40bb8e954ba9e7fc Mon Sep 17 00:00:00 2001 From: Shan Zhao Date: Fri, 13 Mar 2026 06:38:42 -0400 Subject: [PATCH 10/16] shorter savepath --- scripts/main_picabu.py | 2 +- scripts/rollout_bf.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/main_picabu.py b/scripts/main_picabu.py index 57d8500..85dddd7 100755 --- a/scripts/main_picabu.py +++ b/scripts/main_picabu.py @@ -196,7 +196,7 @@ def main( if data_params.in_var_ids[0] == "savar": name = f"savar_{savar_params.linearity}_{savar_params.is_forced}_{savar_params.difficulty}_{savar_params.n_per_col**2}_nlinmix_{model_params.nonlinear_mixing}_nlindyn_{model_params.nonlinear_dynamics}" else: - name = f"{start_name}_{second_name_name}_{train_params.valid_freq}_var_{data_var_ids_str}_nlinmix_{model_params.nonlinear_mixing}_nlindyn_{model_params.nonlinear_dynamics}_tau_{experiment_params.tau}_z_{experiment_params.d_z}_lr_{train_params.lr}_bs_{data_params.batch_size}_ormuin_{optim_params.ortho_mu_init}_spmuin_{optim_params.sparsity_mu_init}_spth_{optim_params.sparsity_upper_threshold}_crpscoef_{optim_params.crps_coeff}_sspcoef_{optim_params.spectral_coeff}_tspcoef_{optim_params.temporal_spectral_coeff}_frachiwn_{optim_params.fraction_highest_wavenumbers}_nummix_hid_{model_params.num_hidden_mixing}_{model_params.num_layers_mixing}_{model_params.num_hidden}_{model_params.num_layers}_embdim_{model_params.position_embedding_dim}_trparamsh_{model_params.transition_param_sharing}_posembdimtr_{model_params.position_embedding_transition}" + name = f"{start_name}_{second_name_name}_{train_params.valid_freq}_var_{data_var_ids_str}_nlinmix_{model_params.nonlinear_mixing}_nlindyn_{model_params.nonlinear_dynamics}_tau_{experiment_params.tau}_z_{experiment_params.d_z}_lr_{train_params.lr}_bs_{data_params.batch_size}" exp_path = exp_path / name diff --git a/scripts/rollout_bf.py b/scripts/rollout_bf.py index 2e2e50f..e66a5b0 100644 --- a/scripts/rollout_bf.py +++ b/scripts/rollout_bf.py @@ -192,7 +192,7 @@ def main( - model_path = exp_path #/ "training_results" + model_path = exp_path / "training_results" y_true_fft_mean, y_true_fft_std = calculate_fft_mean_std_across_all_noresm(datamodule, accelerator) print("y_true_fft_mean shape:", y_true_fft_mean.shape) @@ -216,9 +216,9 @@ def main( y = y.to(device) # Here we load a final model, when we do learn the causal graph. Make sure it is on GPU: - # model_file = f"model_{iter_id}.pth" + model_file = f"model_{iter_id}.pth" # model_path = exp_path - model_file = "model.pth" + # model_file = "model.pth" state_dict_vae_final = torch.load( model_path / model_file, map_location=device From ca3cc4d07a33a6e1147ba4195e1ee511d0277403 Mon Sep 17 00:00:00 2001 From: Shan Zhao Date: Mon, 16 Mar 2026 08:58:48 -0400 Subject: [PATCH 11/16] remove use_gumbel_mask, change test model path --- climatem/model/train_model.py | 6 ++++-- climatem/model/tsdcd_latent.py | 4 ++-- scripts/rollout_bf.py | 7 ++++--- scripts/run_rollout_bf.sh | 8 ++++---- scripts/run_single_jsonfile.sh | 7 +++---- 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/climatem/model/train_model.py b/climatem/model/train_model.py index 7655fd6..247b514 100644 --- a/climatem/model/train_model.py +++ b/climatem/model/train_model.py @@ -409,7 +409,6 @@ def trace_handler(p): torch.save(self.model.state_dict(), self.save_path / f"model_{self.iteration}.pth") - # try to use the accelerator.save function here self.accelerator.save_state(output_dir=self.save_path) @@ -675,7 +674,7 @@ def train_step(self): # noqa: C901 self.optimizer.step() if self.optim_params.optimizer == "rmsprop" else self.optimizer.step() ), self.train_params.lr # projection of the gradient for w - if self.model.autoencoder.use_grad_project and not self.no_w_constraint: + if not self.no_w_constraint: with torch.no_grad(): self.model.autoencoder.get_w_decoder().clamp_(min=0.0) @@ -1482,6 +1481,7 @@ def get_spatial_spectral_loss(self, y_true, y_pred, take_log=True): assert y_true.dim() == 3 assert y_pred.dim() == 3 + # print("y_pred shape", y_pred.shape) if y_true.size(-1) == self.lat * self.lon: @@ -1515,6 +1515,8 @@ def get_spatial_spectral_loss(self, y_true, y_pred, take_log=True): fft_pred = torch.log(torch.abs(fft_pred) + 1e-4) spectral_loss = torch.mean(torch.abs(fft_pred - fft_true), dim=0) + # print("spectral_loss shape", spectral_loss.shape) + # print("spectral_loss shape final", torch.mean(spectral_loss)) # spectral_loss = torch.mean(torch.nan_to_num(spectral_loss, 0), dim=0) # Calculate the power spectrum diff --git a/climatem/model/tsdcd_latent.py b/climatem/model/tsdcd_latent.py index 27f914f..d824319 100644 --- a/climatem/model/tsdcd_latent.py +++ b/climatem/model/tsdcd_latent.py @@ -921,7 +921,7 @@ def __init__( def encode(self, x, i): - mask = super().get_encode_mask(x.shape[0]) + mask = super().get_encode_mask() mu = torch.zeros((x.shape[0], self.d_z), device=x.device) j_values = torch.arange(self.d_z, device=x.device).expand( @@ -951,7 +951,7 @@ def encode(self, x, i): def decode(self, z, i): - mask = super().get_decode_mask(z.shape[0]) + mask = super().get_decode_mask() mu = torch.zeros((z.shape[0], self.d_x), device=z.device) # Create a tensor of shape (z.shape[0], self.d_x) where each row is a sequence from 0 to self.d_x diff --git a/scripts/rollout_bf.py b/scripts/rollout_bf.py index e66a5b0..75180f0 100644 --- a/scripts/rollout_bf.py +++ b/scripts/rollout_bf.py @@ -192,7 +192,7 @@ def main( - model_path = exp_path / "training_results" + model_path = exp_path #/ "training_results" y_true_fft_mean, y_true_fft_std = calculate_fft_mean_std_across_all_noresm(datamodule, accelerator) print("y_true_fft_mean shape:", y_true_fft_mean.shape) @@ -216,9 +216,10 @@ def main( y = y.to(device) # Here we load a final model, when we do learn the causal graph. Make sure it is on GPU: - model_file = f"model_{iter_id}.pth" + # model_file = f"model_{iter_id}.pth" # model_path = exp_path - # model_file = "model.pth" + model_file = "model.pth" + print(f"The model being teseted is under: {model_path / model_file}") state_dict_vae_final = torch.load( model_path / model_file, map_location=device diff --git a/scripts/run_rollout_bf.sh b/scripts/run_rollout_bf.sh index 00c14a8..170ad0c 100644 --- a/scripts/run_rollout_bf.sh +++ b/scripts/run_rollout_bf.sh @@ -1,8 +1,8 @@ #!/bin/bash #SBATCH --job-name=run_pf # Set name of job -#SBATCH --output=srun_outs_ft/ro_%j.out # Set location of output file -#SBATCH --error=srun_outs_ft/ro_%j.err # Set location of error file +#SBATCH --output=srun_outs_ft/ro/ro_%j.out # Set location of output file +#SBATCH --error=srun_outs_ft/ro/ro_%j.err # Set location of error file #SBATCH --gpus-per-task=1 # Ask for 1 GPU #SBATCH --cpus-per-task=8 # Ask for 4 CPUs #SBATCH --ntasks-per-node=1 # Ask for 4 CPUs @@ -30,7 +30,7 @@ export TORCH_DISTRIBUTED_DEBUG=INFO export TORCH_CPP_LOG_LEVEL=INFO echo "=== calling accelerate" -exp_ids=("test_debug_trace/var_ts_scen_piControl_nlinmix_True_nlindyn_True_tau_5_z_90_futt_1_ldec_1_lr_0.0001_bs_128_20260311_141027") +exp_ids=("test_debug_small/FALSE_AUG_200_var_ts_nlinmix_True_nlindyn_True_tau_5_z_90_lr_0.0001_bs_128_20260313_080329") for exp_id in "${exp_ids[@]}" do @@ -45,6 +45,6 @@ do --num_processes=1 \ --num_machines=1 \ --gpu_ids='all' \ - $HOME/dev/climatem/scripts/rollout_bf.py --config-path params.json --exp-id "$exp_id" --iter-id 600 + $HOME/dev/climatem/scripts/rollout_bf.py --config-path params.json --exp-id "$exp_id" --iter-id 200000 done diff --git a/scripts/run_single_jsonfile.sh b/scripts/run_single_jsonfile.sh index 5e88b2a..92d5360 100755 --- a/scripts/run_single_jsonfile.sh +++ b/scripts/run_single_jsonfile.sh @@ -1,8 +1,8 @@ #!/bin/bash #SBATCH --job-name=run_single # Set name of job -#SBATCH --output=srun_outs_ft/rs_%j.out # Set location of output file -#SBATCH --error=srun_outs_ft/rs_%j.err # Set location of error file +#SBATCH --output=srun_outs_ft/rs/rs_%j.out # Set location of output file +#SBATCH --error=srun_outs_ft/rs/rs_%j.err # Set location of error file #SBATCH --gpus-per-task=1 # Ask for 1 GPU #SBATCH --cpus-per-task=8 # Ask for 4 CPUs #SBATCH --ntasks-per-node=1 # Ask for 4 CPUs @@ -41,6 +41,5 @@ accelerate launch \ --num_processes=1 \ --num_machines=1 \ --gpu_ids='all' \ - - $HOME/dev/climatem/scripts/main_picabu.py --config-path single_param_file.json + $HOME/dev/climatem/scripts/main_picabu.py --config-path single_param_file_new.json From 51a989c5cae3c80cd7844afaf2fe4423727956f4 Mon Sep 17 00:00:00 2001 From: Shan Zhao Date: Mon, 16 Mar 2026 09:00:00 -0400 Subject: [PATCH 12/16] new config for lower reso. data --- configs/single_param_file_new.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/configs/single_param_file_new.json b/configs/single_param_file_new.json index 0a7bf36..c341957 100644 --- a/configs/single_param_file_new.json +++ b/configs/single_param_file_new.json @@ -1,6 +1,6 @@ { "exp_params": { - "exp_path": "$SCRATCH/results/latest_runs/", + "exp_path": "$SCRATCH/results/test_debug_small/", "_target_": "emulator.src.datamodules.climate_datamodule.ClimateDataModule", "latent": true, "d_z": 90, @@ -59,7 +59,7 @@ "max_iteration": 200000, "patience": 5000, "patience_post_thresh": 50, - "valid_freq": 100 + "valid_freq": 200 }, "model_params": { "instantaneous": false, @@ -83,7 +83,7 @@ "optimizer": "rmsprop", "use_sparsity_constraint": true, - "binarize_transition": true, + "binarize_transition": false, "crps_coeff": 1, "spectral_coeff": 1000, "temporal_spectral_coeff": 2000, @@ -92,9 +92,9 @@ "loss_decay_future_timesteps": 1, "fraction_highest_wavenumbers": 0.5, - "fraction_lowest_wavenumbers": null, + "fraction_lowest_wavenumbers": 0.95, "take_log_spectra": true, - "scheduler_spectra": [100000], + "scheduler_spectra": null, "reg_coeff": 0.12801, "reg_coeff_connect": 0, @@ -134,7 +134,7 @@ "plot_params": { "plot_freq": 20000, "plot_through_time": true, - "print_freq": 1000 + "print_freq": 20000 }, "savar_params": { "n_per_col": 2, From d5f4c3aa30539661f11f7b56a01b0d56272114ba Mon Sep 17 00:00:00 2001 From: Shan Zhao Date: Thu, 26 Mar 2026 09:50:09 -0400 Subject: [PATCH 13/16] fix: log mask, add spherical spectral loss (coeff) --- climatem/config.py | 2 + climatem/model/train_model.py | 101 ++-- climatem/model/tsdcd_latent.py | 17 +- configs/single_param_file_dev.json | 171 +++++++ configs/single_param_file_new.json | 9 +- configs/single_param_file_savar.json | 2 +- poetry.lock | 662 ++++++++++++++++----------- pyproject.toml | 3 + scripts/main_picabu.py | 11 +- scripts/run_rollout_bf.sh | 4 +- scripts/run_single_jsonfile.sh | 3 +- 11 files changed, 678 insertions(+), 307 deletions(-) create mode 100644 configs/single_param_file_dev.json diff --git a/climatem/config.py b/climatem/config.py index dc7c8ff..04b5c47 100644 --- a/climatem/config.py +++ b/climatem/config.py @@ -202,6 +202,7 @@ def __init__( fraction_highest_wavenumbers: float = None, fraction_lowest_wavenumbers: float = None, take_log_spectra: bool = True, + take_spherical_harmonics: bool = False, scheduler_spectra: List[ int ] = None, # the spectra term coefficient in the loss will be linearly increased from 0 to 1 if this is not None, ex: [0, 30_000, 50_000] @@ -247,6 +248,7 @@ def __init__( self.fraction_highest_wavenumbers = fraction_highest_wavenumbers self.fraction_lowest_wavenumbers = fraction_lowest_wavenumbers self.take_log_spectra = take_log_spectra + self.take_spherical_harmonics = take_spherical_harmonics self.scheduler_spectra = scheduler_spectra self.schedule_reg = schedule_reg diff --git a/climatem/model/train_model.py b/climatem/model/train_model.py index 247b514..f8a1838 100644 --- a/climatem/model/train_model.py +++ b/climatem/model/train_model.py @@ -1,10 +1,16 @@ # Adapting to do training across multiple GPUs with huggingface accelerate. +import os + +import healpy as hp +import jax import numpy as np +import s2fft import torch import torch.distributions as dist # we use accelerate for distributed training from geopy import distance +from jax2torch import jax2torch # from torch.nn.parallel import DistributedDataParallel as DDP from torch.profiler import ProfilerActivity @@ -14,8 +20,24 @@ from climatem.model.utils import ALM from climatem.plotting.plot_model_output import Plotter +os.environ["JAX_PLATFORMS"] = "cuda" + +# Prevent JAX from pre-allocating all GPU memory (important for Torch compatibility) +os.environ["XLA_PYTHON_CLIENT_PREALLOCATE"] = "false" euler_mascheroni = 0.57721566490153286060 +# def flm_to_psd(flm, L): +# # flm shape: (batch, L, 2*L-1) +# # The center of the last dim (L-1) is m=0 +# psd_list = [] +# for l in range(L): +# # Extract m from -l to +l +# m_modes = flm[:, l, L-1-l : L+l] +# # C_l = 1/(2l+1) * sum(|f_lm|^2) +# power = torch.sum(torch.abs(m_modes)**2, dim=-1) / (2 * l + 1) +# psd_list.append(power) +# return torch.stack(psd_list, dim=1) # Result shape: (batch, L) + class TrainingLatent: def __init__( @@ -224,6 +246,13 @@ def __init__( else: self.sparsity_normalization = self.tau * self.d_z * self.d_z + nside = hp.npix2nside(self.d_x) + lmax = 3 * nside - 1 + L = lmax + 1 + self.spherical_weights = (2 * torch.arange(L) + 1).unsqueeze(0) # unsqueeze the batch dimension + batched_sht = jax.vmap(lambda f: s2fft.forward(f, L=L, nside=nside, sampling="healpix", method="jax")) + self.torch_sht = jax2torch(batched_sht) + def train_with_QPM(self): # noqa: C901 """ Optimize a problem under constraint using the Augmented Lagragian method (or QPM). @@ -625,6 +654,7 @@ def train_step(self): # noqa: C901 y[:, k], y_pred_all[:, k], take_log=self.optim_params.take_log_spectra, + take_spherical_harmonics=self.optim_params.take_spherical_harmonics, ) # Remove this component if instantaneous and tau = 0 - actually have a minimum tau for this or set coeff to 0 @@ -919,6 +949,7 @@ def valid_step(self): # noqa: C901 # noqa: C901 y[:, k], y_pred_all[:, k], take_log=self.optim_params.take_log_spectra, + take_spherical_harmonics=self.optim_params.take_spherical_harmonics, ) # Remove this component if instantaneous and tau = 0 - actually have a minimum tau for this or set coeff to 0 @@ -1257,10 +1288,8 @@ def get_ortho_violation(self, w: torch.Tensor) -> float: def adj_transition_variance(self) -> float: adj = self.model.get_adj() - - h = torch.norm(adj - torch.square(adj), p=1) / self.sparsity_normalization - assert torch.is_tensor(h) - + h = torch.sum(torch.minimum(adj, 1 - adj)) / self.sparsity_normalization + # assert torch.is_tensor(h) return h def get_sparsity_violation(self, lower_threshold, upper_threshold) -> float: @@ -1456,7 +1485,7 @@ def get_crps_loss(self, y, mu, sigma): return crps - def get_spatial_spectral_loss(self, y_true, y_pred, take_log=True): + def get_spatial_spectral_loss(self, y_true, y_pred, take_log=True, take_spherical_harmonics=False): """ Calculate the spectral loss between the true values and the predicted values. We need to calculate the spectra of thhe true values and the predicted values, and then determine an appropriate metric to compare them. @@ -1494,31 +1523,50 @@ def get_spatial_spectral_loss(self, y_true, y_pred, take_log=True): # calculate the spectra of the predicted values fft_pred = torch.fft.rfft(y_pred, dim=3) - elif y_true.size(-1) == self.d_x: - - y_true = y_true + elif y_true.size(-1) == self.d_x: # y_true shape(b, 1, d_x) + y_true = y_true # torch.float32 y_pred = y_pred - - # calculate the spectra of the true values - # note we calculate the spectra across space, and then take the mean across the batch - fft_true = torch.fft.rfft(y_true, dim=2) - # calculate the spectra of the predicted values - fft_pred = torch.fft.rfft(y_pred, dim=2) + if take_spherical_harmonics: + # loss on coefficient: Sensitive to the orientation/phase of the features on the sphere. raw alm -> prefered + # loss on psd: Only sensitive to the "size" of the features, not where they are. + alm_pred = self.torch_sht(y_pred[:, 0, :]) # first squeeze the time dimension + alm_true = self.torch_sht( + y_true[:, 0, :] + ) # (128, 48, 95) (batch_size, harmonic degree l, harmonic order m), alm is zero padded, nonzeros: [:,l, L-1-l : L+l] + # alm_pred = (torch.sum(torch.abs(alm_pred)**2, dim=-1)/self.spherical_weights).unsqueeze(1) #c (128, 1, 48) + # alm_true = (torch.sum(torch.abs(alm_true)**2, dim=-1)/self.spherical_weights).unsqueeze(1) #c + # print("first 3 psd pred: ",alm_pred[0,0,:3], "gt:", alm_true[0,0,:3]) + # print("last 3 psd pred: ",alm_pred[0,0,-3:], "gt:",alm_true[0,0,-3:]) + if take_log: + idx_pos = torch.logical_or(torch.abs(alm_pred) < 1e-4, torch.abs(alm_true) < 1e-4) + alm_true = torch.where(idx_pos, 0.0, alm_true) # uc + alm_pred = torch.where(idx_pos, 0.0, alm_pred) # uc + alm_true = torch.log(torch.abs(alm_true) + 1e-4) # uc + alm_pred = torch.log(torch.abs(alm_pred) + 1e-4) # uc + # element-wise difference, sum over the harmonic order dimension, weighted by harmonic degree, the batch dim is kept and no time dim + spectral_loss = ( + torch.sum(torch.abs(alm_pred - alm_true), dim=-1) / self.spherical_weights + ) # (b,L)/(1,L) -> (b,L) #uc + # take the mean over batch + # spectral_loss = torch.mean(torch.abs(alm_pred - alm_true), dim=0) #c + + else: # 1D FFT + # calculate the spectra of the true values + # note we calculate the spectra across space, and then take the mean across the batch + fft_true = torch.fft.rfft(y_true, dim=2) + # calculate the spectra of the predicted values + fft_pred = torch.fft.rfft(y_pred, dim=2) + if take_log: + idx_pos = torch.logical_or(torch.abs(fft_pred) < 1e-4, torch.abs(fft_true) < 1e-4) + fft_true = torch.where(idx_pos, 0.0, fft_true) + fft_pred = torch.where(idx_pos, 0.0, fft_pred) + fft_true = torch.log(torch.abs(fft_true) + 1e-4) + fft_pred = torch.log(torch.abs(fft_pred) + 1e-4) + # taking the mean over batch, mean absolute loss + spectral_loss = torch.mean(torch.abs(fft_pred - fft_true), dim=0) else: raise ValueError("The size of the input is a surprise, and should be addressed here.") - if take_log: - idx_pos = torch.logical_or(torch.abs(fft_pred) < 1e-4, torch.abs(fft_true) < 1e-4) - fft_true = torch.where(idx_pos, fft_true, 0.0) - fft_pred = torch.where(idx_pos, fft_pred, 0.0) - fft_true = torch.log(torch.abs(fft_true) + 1e-4) - fft_pred = torch.log(torch.abs(fft_pred) + 1e-4) - - spectral_loss = torch.mean(torch.abs(fft_pred - fft_true), dim=0) - # print("spectral_loss shape", spectral_loss.shape) - # print("spectral_loss shape final", torch.mean(spectral_loss)) - # spectral_loss = torch.mean(torch.nan_to_num(spectral_loss, 0), dim=0) - # Calculate the power spectrum if self.optim_params.fraction_highest_wavenumbers is not None: spectral_loss = spectral_loss[ @@ -1528,7 +1576,6 @@ def get_spatial_spectral_loss(self, y_true, y_pred, take_log=True): spectral_loss = spectral_loss[ :, : round(self.optim_params.fraction_lowest_wavenumbers * spectral_loss.shape[1]) ] - return torch.mean(spectral_loss) def get_temporal_spectral_loss(self, x, y_true, y_pred): diff --git a/climatem/model/tsdcd_latent.py b/climatem/model/tsdcd_latent.py index d824319..f7c08dd 100644 --- a/climatem/model/tsdcd_latent.py +++ b/climatem/model/tsdcd_latent.py @@ -152,6 +152,7 @@ def __init__(self, num_layers: int, num_hidden: int, num_input: int, num_output: self.num_hidden = num_hidden self.num_input = num_input self.num_output = num_output + self.use_grad_project = True module_dict = OrderedDict() @@ -184,15 +185,15 @@ class LatentTSDCD(nn.Module): def __init__( self, - num_layers: int, # sz: transition model - num_hidden: int, # sz: transition model + num_layers: int, + num_hidden: int, num_input: int, num_output: int, - num_layers_mixing: int, # sz: encoder/decoder + num_layers_mixing: int, num_hidden_mixing: int, position_embedding_dim: int, transition_param_sharing: bool, - position_embedding_transition: int, # sz: 1NN per location, after sharing: 1NN for all locations + position_embedding_transition: int, coeff_kl: float, distr_z0: str, distr_encoder: str, @@ -520,7 +521,6 @@ def forward(self, x, y, gt_z, iteration, xi=None): else: px_distr = self.distr_decoder(px_mu, px_std) recons = torch.mean(torch.sum(px_distr.log_prob(y), dim=[1, 2])) - # sz: log_theta p​(y∣z): 0=3.2.0)", "brotlicffi"] +speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.2.0) ; sys_platform == \"linux\" or sys_platform == \"darwin\"", "brotlicffi ; platform_python_implementation != \"CPython\""] [[package]] name = "aiosignal" @@ -158,7 +155,6 @@ description = "aiosignal: a list of registered asynchronous callbacks" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, @@ -174,7 +170,6 @@ description = "ANTLR 4.9.3 runtime for Python 3.7" optional = false python-versions = "*" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "antlr4-python3-runtime-4.9.3.tar.gz", hash = "sha256:f224469b4168294902bb1efa80a8bf7855f24c99aef99cbefc1bcd3cce77881b"}, ] @@ -186,7 +181,6 @@ description = "High level compatibility layer for multiple asynchronous event lo optional = false python-versions = ">=3.9" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a"}, {file = "anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a"}, @@ -200,7 +194,7 @@ typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\" and python_version < \"3.14\""] trio = ["trio (>=0.26.1)"] [[package]] @@ -210,7 +204,7 @@ description = "Disable App Nap on macOS >= 10.9" optional = false python-versions = ">=3.6" groups = ["main", "dev"] -markers = "platform_system == \"Darwin\" and python_version <= \"3.11\"" +markers = "platform_system == \"Darwin\"" files = [ {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, @@ -223,7 +217,6 @@ description = "Argon2 for Python" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, @@ -245,7 +238,6 @@ description = "Low-level CFFI bindings for Argon2" optional = false python-versions = ">=3.6" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, @@ -284,7 +276,6 @@ description = "Better dates & times for Python" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, @@ -305,7 +296,6 @@ description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.9.0" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "astroid-3.3.8-py3-none-any.whl", hash = "sha256:187ccc0c248bfbba564826c26f070494f7bc964fd286b6d9fff4420e55de828c"}, {file = "astroid-3.3.8.tar.gz", hash = "sha256:a88c7994f914a4ea8572fac479459f4955eeccc877be3f2d959a33273b0cf40b"}, @@ -321,7 +311,6 @@ description = "Astronomy and astrophysics core library" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "astropy-6.1.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:be954c5f7707a089609053665aeb76493b79e5c4753c39486761bc6d137bf040"}, {file = "astropy-6.1.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b5e48df5ab2e3e521e82a7233a4b1159d071e64e6cbb76c45415dc68d3b97af1"}, @@ -363,7 +352,7 @@ PyYAML = ">=3.13" [package.extras] all = ["asdf-astropy (>=0.3)", "astropy[recommended]", "astropy[typing]", "beautifulsoup4", "bleach", "bottleneck", "certifi", "dask[array]", "fsspec[http] (>=2023.4.0)", "h5py", "html5lib", "ipython (>=4.2)", "jplephem", "mpmath", "pandas", "pre-commit", "pyarrow (>=7.0.0)", "pytest (>=7.0)", "pytz", "s3fs (>=2023.4.0)", "sortedcontainers"] -docs = ["Jinja2 (>=3.1.3)", "astropy[recommended]", "matplotlib (>=3.9.1)", "numpy (<2.0)", "pytest (>=7.0)", "sphinx", "sphinx-astropy[confv2] (>=1.9.1)", "sphinx-changelog (>=1.2.0)", "sphinx_design", "sphinxcontrib-globalsubs (>=0.1.1)", "tomli"] +docs = ["Jinja2 (>=3.1.3)", "astropy[recommended]", "matplotlib (>=3.9.1)", "numpy (<2.0)", "pytest (>=7.0)", "sphinx", "sphinx-astropy[confv2] (>=1.9.1)", "sphinx-changelog (>=1.2.0)", "sphinx_design", "sphinxcontrib-globalsubs (>=0.1.1)", "tomli ; python_version < \"3.11\""] recommended = ["matplotlib (>=3.5.0,!=3.5.2)", "scipy (>=1.8)"] test = ["pytest (>=7.0)", "pytest-astropy (>=0.10)", "pytest-astropy-header (>=0.2.1)", "pytest-doctestplus (>=0.12)", "pytest-xdist", "threadpoolctl"] test-all = ["array-api-strict", "astropy[test]", "coverage[toml]", "ipython (>=4.2)", "objgraph", "sgp4 (>=2.3)", "skyfield (>=1.20)"] @@ -376,7 +365,6 @@ description = "IERS Earth Rotation and Leap Second tables for the astropy core p optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "astropy_iers_data-0.2026.2.16.0.48.25-py3-none-any.whl", hash = "sha256:180d1c3f59d18aa616345560799c2d88ec6e5164b8c45c746380acf892946136"}, {file = "astropy_iers_data-0.2026.2.16.0.48.25.tar.gz", hash = "sha256:be14512844e71536a15e165d729385f3cb4865d7822172509e68c4ac79322067"}, @@ -393,7 +381,6 @@ description = "Annotate AST trees with source code positions" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, @@ -410,7 +397,6 @@ description = "Simple LRU cache for asyncio" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, @@ -426,7 +412,7 @@ description = "Timeout context manager for asyncio programs" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version < \"3.11\"" +markers = "python_version == \"3.10\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, @@ -439,19 +425,18 @@ description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "attrs-25.1.0-py3-none-any.whl", hash = "sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a"}, {file = "attrs-25.1.0.tar.gz", hash = "sha256:1c97078a80c814273a76b2a298a932eb681c87415c11dee0a6921de7f1b02c3e"}, ] [package.extras] -benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] -tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] +tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] [[package]] name = "babel" @@ -460,14 +445,13 @@ description = "Internationalization utilities" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, ] [package.extras] -dev = ["backports.zoneinfo", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata"] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""] [[package]] name = "beautifulsoup4" @@ -476,7 +460,6 @@ description = "Screen-scraping library" optional = false python-versions = ">=3.7.0" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "beautifulsoup4-4.13.3-py3-none-any.whl", hash = "sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16"}, {file = "beautifulsoup4-4.13.3.tar.gz", hash = "sha256:1bd32405dacc920b42b83ba01644747ed77456a65760e285fbc47633ceddaf8b"}, @@ -500,7 +483,6 @@ description = "An easy safelist-based HTML-sanitizing tool." optional = false python-versions = ">=3.9" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"}, @@ -520,7 +502,6 @@ description = "A Python library for cartographic visualizations with Matplotlib" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "Cartopy-0.24.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ce0c83314570c61a695a1f7c3a4a22dc75f79d28f4c68b88a8aeaf13d6a2343c"}, {file = "Cartopy-0.24.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:511f992340baea2c171cb17b3ef595537e5355640f3baa7ac895de25df016a70"}, @@ -564,7 +545,6 @@ description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, @@ -577,7 +557,6 @@ description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -658,7 +637,6 @@ description = "Python interface to map GRIB files to the NetCDF Common Data Mode optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "cfgrib-0.9.15.0-py3-none-any.whl", hash = "sha256:469cfd25dc173863795e596263b3b6b5ea1402b1715f2b7b1d4b995b40b32c18"}, {file = "cfgrib-0.9.15.0.tar.gz", hash = "sha256:d455034e19b9560a75d008ba9d09b2d4e65762adfb2e911f28b841f4b9c6b47f"}, @@ -681,7 +659,6 @@ description = "Validate configuration and produce human readable error messages. optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, @@ -694,7 +671,6 @@ description = "Time-handling functionality from netcdf4-python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "cftime-1.6.4.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0baa9bc4850929da9f92c25329aa1f651e2d6f23e237504f337ee9e12a769f5d"}, {file = "cftime-1.6.4.post1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bb6b087f4b2513c37670bccd457e2a666ca489c5f2aad6e2c0e94604dc1b5b9"}, @@ -744,7 +720,6 @@ description = "The Real First Universal Charset Detector. Open, modern and activ optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, @@ -847,7 +822,6 @@ description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -863,7 +837,6 @@ description = "Pickler class to extend the standard pickle.Pickler functionality optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "cloudpickle-3.1.1-py3-none-any.whl", hash = "sha256:c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e"}, {file = "cloudpickle-3.1.1.tar.gz", hash = "sha256:b216fa8ae4019d5482a8ac3c95d8f6346115d8835911fd4aefd1a445e4242c64"}, @@ -880,7 +853,7 @@ files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -markers = {main = "(sys_platform == \"win32\" or platform_system == \"Windows\") and python_version <= \"3.11\"", dev = "python_version <= \"3.11\" and sys_platform == \"win32\""} +markers = {main = "platform_system == \"Windows\" or sys_platform == \"win32\"", dev = "sys_platform == \"win32\""} [[package]] name = "comm" @@ -889,7 +862,6 @@ description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus- optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, @@ -908,7 +880,6 @@ description = "Python library for calculating contours of 2D quadrilateral grids optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab"}, {file = "contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124"}, @@ -983,7 +954,6 @@ description = "Composable style cycles" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, @@ -1000,7 +970,6 @@ description = "Parallel PyData with Task Scheduling" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "dask-2025.2.0-py3-none-any.whl", hash = "sha256:f0fdeef6ceb0a06569d456c9e704f220f7f54e80f3a6ea42ab98cea6bc642b6e"}, {file = "dask-2025.2.0.tar.gz", hash = "sha256:89c87125d04d28141eaccc4794164ce9098163fd22d8ad943db48f8d4c815460"}, @@ -1009,7 +978,7 @@ files = [ [package.dependencies] click = ">=8.1" cloudpickle = ">=3.0.0" -fsspec = ">=2021.09.0" +fsspec = ">=2021.9.0" importlib_metadata = {version = ">=4.13.0", markers = "python_version < \"3.12\""} packaging = ">=20.0" partd = ">=1.4.0" @@ -1031,7 +1000,6 @@ description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "debugpy-1.8.12-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:a2ba7ffe58efeae5b8fad1165357edfe01464f9aef25e814e891ec690e7dd82a"}, {file = "debugpy-1.8.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbbd4149c4fc5e7d508ece083e78c17442ee13b0e69bfa6bd63003e486770f45"}, @@ -1068,7 +1036,6 @@ description = "Decorators for Humans" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, @@ -1081,7 +1048,6 @@ description = "XML bomb protection for Python stdlib modules" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, @@ -1094,7 +1060,6 @@ description = "serialize all of Python" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, @@ -1111,7 +1076,6 @@ description = "Distribution utilities" optional = false python-versions = "*" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, @@ -1124,7 +1088,6 @@ description = "Python interface to the ecCodes GRIB and BUFR decoder/encoder" optional = false python-versions = "*" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "eccodes-2.40.0-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:7aa6b7da34c08179e81b52a57abb69a1bb868f85896bf8c58957ae9b1ff3a0ca"}, {file = "eccodes-2.40.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:abcf539bf0501ba0e2a6fcac21e39b30a24a83c7c1f8bc175ba6314149294e6e"}, @@ -1165,7 +1128,7 @@ description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version < \"3.11\"" +markers = "python_version == \"3.10\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, @@ -1181,14 +1144,13 @@ description = "Get the currently executing AST node of a frame, and other inform optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"}, {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"}, ] [package.extras] -tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich ; python_version >= \"3.11\""] [[package]] name = "fastjsonschema" @@ -1197,7 +1159,6 @@ description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"}, {file = "fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4"}, @@ -1213,7 +1174,6 @@ description = "A platform independent file lock." optional = false python-versions = ">=3.9" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "filelock-3.17.0-py3-none-any.whl", hash = "sha256:533dc2f7ba78dc2f0f531fc6c4940addf7b70a481e269a5a3b93be94ffbe8338"}, {file = "filelock-3.17.0.tar.gz", hash = "sha256:ee4e77401ef576ebb38cd7f13b9b28893194acc20a8e68e18730ba9c0e54660e"}, @@ -1222,7 +1182,7 @@ files = [ [package.extras] docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] -typing = ["typing-extensions (>=4.12.2)"] +typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] [[package]] name = "findlibs" @@ -1231,7 +1191,6 @@ description = "A packages to search for shared libraries on various platforms" optional = false python-versions = "*" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "findlibs-0.1.0-py3-none-any.whl", hash = "sha256:1e5aeeaa33e972da79f54d120d0e4b0eb5d7384016b618a9b7da2ada2deb2248"}, {file = "findlibs-0.1.0.tar.gz", hash = "sha256:2d458b844c7044a75f68d909a0f6ca5a598fdec895a0e009a7f6cde0905de659"}, @@ -1247,7 +1206,6 @@ description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.8.1" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "flake8-7.1.1-py2.py3-none-any.whl", hash = "sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213"}, {file = "flake8-7.1.1.tar.gz", hash = "sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38"}, @@ -1265,7 +1223,6 @@ description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "fonttools-4.56.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:331954d002dbf5e704c7f3756028e21db07097c19722569983ba4d74df014000"}, {file = "fonttools-4.56.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d1613abd5af2f93c05867b3a3759a56e8bf97eb79b1da76b2bc10892f96ff16"}, @@ -1320,18 +1277,18 @@ files = [ ] [package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +all = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\"", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0) ; python_version <= \"3.12\"", "xattr ; sys_platform == \"darwin\"", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "pycairo", "scipy"] +interpolatable = ["munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\""] lxml = ["lxml (>=4.0)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] repacker = ["uharfbuzz (>=0.23.0)"] symfont = ["sympy"] -type1 = ["xattr"] +type1 = ["xattr ; sys_platform == \"darwin\""] ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=15.1.0)"] -woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +unicode = ["unicodedata2 (>=15.1.0) ; python_version <= \"3.12\""] +woff = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "zopfli (>=0.1.4)"] [[package]] name = "fqdn" @@ -1340,7 +1297,6 @@ description = "Validates fully-qualified domain names against RFC 1123, so that optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, @@ -1353,7 +1309,6 @@ description = "A list-like structure which implements collections.abc.MutableSeq optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, @@ -1456,7 +1411,6 @@ description = "File-system specification" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "fsspec-2025.2.0-py3-none-any.whl", hash = "sha256:9de2ad9ce1f85e1931858535bc882543171d197001a0a5eb2ddc04f1781ab95b"}, {file = "fsspec-2025.2.0.tar.gz", hash = "sha256:1c24b16eaa0a1798afa0337aa0db9b256718ab2a89c425371f5628d22c3b6afd"}, @@ -1500,7 +1454,6 @@ description = "The geodesic routines from GeographicLib" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "geographiclib-2.0-py3-none-any.whl", hash = "sha256:6b7225248e45ff7edcee32becc4e0a1504c606ac5ee163a5656d482e0cd38734"}, {file = "geographiclib-2.0.tar.gz", hash = "sha256:f7f41c85dc3e1c2d3d935ec86660dc3b2c848c83e17f9a9e51ba9d5146a15859"}, @@ -1513,7 +1466,6 @@ description = "Python Geocoding Toolbox" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "geopy-2.4.1-py3-none-any.whl", hash = "sha256:ae8b4bc5c1131820f4d75fce9d4aaaca0c85189b3aa5d64c3dcaf5e3b7b882a7"}, {file = "geopy-2.4.1.tar.gz", hash = "sha256:50283d8e7ad07d89be5cb027338c6365a32044df3ae2556ad3f52f4840b3d0d1"}, @@ -1538,7 +1490,6 @@ description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, @@ -1551,7 +1502,6 @@ description = "Healpix tools package for Python" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "healpy-1.19.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:36f85568670f36f928aba0eb73299ed70a06e58dc32360f13d0f9a443781c7bb"}, {file = "healpy-1.19.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8ec4744f16f1590fe47a685258ba119c0fa49dff74fa6f970b7a16c712302b0d"}, @@ -1607,7 +1557,6 @@ description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, @@ -1630,7 +1579,6 @@ description = "The next generation HTTP client." optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, @@ -1643,7 +1591,7 @@ httpcore = "==1.*" idna = "*" [package.extras] -brotli = ["brotli", "brotlicffi"] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] @@ -1656,7 +1604,6 @@ description = "Client library to download and publish models, datasets and other optional = false python-versions = ">=3.8.0" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "huggingface_hub-0.28.1-py3-none-any.whl", hash = "sha256:aa6b9a3ffdae939b72c464dbb0d7f99f56e649b55c3d52406f49e0a5a620c0a7"}, {file = "huggingface_hub-0.28.1.tar.gz", hash = "sha256:893471090c98e3b6efbdfdacafe4052b20b84d59866fb6f54c33d9af18c303ae"}, @@ -1692,7 +1639,6 @@ description = "File identification library for Python" optional = false python-versions = ">=3.9" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "identify-2.6.7-py2.py3-none-any.whl", hash = "sha256:155931cb617a401807b09ecec6635d6c692d180090a1cedca8ef7d58ba5b6aa0"}, {file = "identify-2.6.7.tar.gz", hash = "sha256:3fa266b42eba321ee0b2bb0936a6a6b9e36a1351cbb69055b3082f4193035684"}, @@ -1708,7 +1654,6 @@ description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -1724,7 +1669,6 @@ description = "Read metadata from Python packages" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, @@ -1734,12 +1678,12 @@ files = [ zipp = ">=3.20" [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] -test = ["flufl.flake8", "importlib_resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] type = ["pytest-mypy"] [[package]] @@ -1749,7 +1693,6 @@ description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -1762,7 +1705,6 @@ description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, @@ -1797,7 +1739,6 @@ description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "ipython-8.32.0-py3-none-any.whl", hash = "sha256:cae85b0c61eff1fc48b0a8002de5958b6528fa9c8defb1894da63f42613708aa"}, {file = "ipython-8.32.0.tar.gz", hash = "sha256:be2c91895b0b9ea7ba49d33b23e2040c352b33eb6a519cca7ce6e0c743444251"}, @@ -1819,7 +1760,7 @@ typing_extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} [package.extras] all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] black = ["black"] -doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli", "typing_extensions"] +doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli ; python_version < \"3.11\"", "typing_extensions"] kernel = ["ipykernel"] matplotlib = ["matplotlib"] nbconvert = ["nbconvert"] @@ -1837,7 +1778,6 @@ description = "Vestigial utilities from IPython" optional = false python-versions = "*" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, @@ -1850,7 +1790,6 @@ description = "Jupyter interactive widgets" optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "ipywidgets-8.1.5-py3-none-any.whl", hash = "sha256:3290f526f87ae6e77655555baba4f36681c555b8bdbbff430b70e52c34c86245"}, {file = "ipywidgets-8.1.5.tar.gz", hash = "sha256:870e43b1a35656a80c18c9503bbf2d16802db1cb487eec6fab27d683381dde17"}, @@ -1873,7 +1812,6 @@ description = "Operations with ISO 8601 durations" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, @@ -1889,7 +1827,6 @@ description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.9.0" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "isort-6.0.0-py3-none-any.whl", hash = "sha256:567954102bb47bb12e0fae62606570faacddd441e45683968c8d1734fb1af892"}, {file = "isort-6.0.0.tar.gz", hash = "sha256:75d9d8a1438a9432a7d7b54f2d3b45cad9a4a0fdba43617d9873379704a8bdf1"}, @@ -1899,6 +1836,126 @@ files = [ colors = ["colorama"] plugins = ["setuptools"] +[[package]] +name = "jax" +version = "0.4.29" +description = "Differentiate, compile, and transform Numpy code." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "jax-0.4.29-py3-none-any.whl", hash = "sha256:cfdc594d133d7dfba2ec19bc10742ffaa0e8827ead29be00d3ec4215a3f7892e"}, + {file = "jax-0.4.29.tar.gz", hash = "sha256:12904571eaefddcdc8c3b8d4936482b783d5a216e99ef5adcd3522fdfb4fc186"}, +] + +[package.dependencies] +ml-dtypes = ">=0.4.0" +numpy = [ + {version = ">=1.22"}, + {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, +] +opt-einsum = "*" +scipy = ">=1.9" + +[package.extras] +ci = ["jaxlib (==0.4.28)"] +cpu = ["jaxlib (==0.4.29)"] +cuda = ["jaxlib (==0.4.29+cuda12.cudnn91)"] +cuda12 = ["jax-cuda12-plugin (==0.4.29)", "jaxlib (==0.4.29)", "nvidia-cublas-cu12 (>=12.1.3.1)", "nvidia-cuda-cupti-cu12 (>=12.1.105)", "nvidia-cuda-nvcc-cu12 (>=12.1.105)", "nvidia-cuda-runtime-cu12 (>=12.1.105)", "nvidia-cudnn-cu12 (>=9.0,<10.0)", "nvidia-cufft-cu12 (>=11.0.2.54)", "nvidia-cusolver-cu12 (>=11.4.5.107)", "nvidia-cusparse-cu12 (>=12.1.0.106)", "nvidia-nccl-cu12 (>=2.18.1)", "nvidia-nvjitlink-cu12 (>=12.1.105)"] +cuda12-cudnn91 = ["jaxlib (==0.4.29+cuda12.cudnn91)"] +cuda12-local = ["jaxlib (==0.4.29+cuda12.cudnn91)"] +cuda12-pip = ["jaxlib (==0.4.29+cuda12.cudnn91)", "nvidia-cublas-cu12 (>=12.1.3.1)", "nvidia-cuda-cupti-cu12 (>=12.1.105)", "nvidia-cuda-nvcc-cu12 (>=12.1.105)", "nvidia-cuda-runtime-cu12 (>=12.1.105)", "nvidia-cudnn-cu12 (>=9.0,<10.0)", "nvidia-cufft-cu12 (>=11.0.2.54)", "nvidia-cusolver-cu12 (>=11.4.5.107)", "nvidia-cusparse-cu12 (>=12.1.0.106)", "nvidia-nccl-cu12 (>=2.18.1)", "nvidia-nvjitlink-cu12 (>=12.1.105)"] +minimum-jaxlib = ["jaxlib (==0.4.27)"] +tpu = ["jaxlib (==0.4.29)", "libtpu-nightly (==0.1.dev20240609)", "requests"] + +[[package]] +name = "jax2torch" +version = "0.0.7" +description = "Jax 2 Torch" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "jax2torch-0.0.7-py3-none-any.whl", hash = "sha256:e1992b334f04ddb6a1a5c3768f11a3d070cac8c782aa24fba069f1ee1d9be3ac"}, + {file = "jax2torch-0.0.7.tar.gz", hash = "sha256:aa4b499ecf356ae293324a98b5350188d0418c98d0ae60958b7174455ab0b5bb"}, +] + +[package.dependencies] +jax = ">=0.2.20" +torch = ">=1.6" + +[[package]] +name = "jaxlib" +version = "0.6.2" +description = "XLA library for JAX" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version == \"3.10\"" +files = [ + {file = "jaxlib-0.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4601b2b5dc8c23d6afb293eacfb9aec4e1d1871cb2f29c5a151d103e73b0f8"}, + {file = "jaxlib-0.6.2-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:4205d098ce8efb5f7fe2fe5098bae6036094dc8d8829f5e0e0d7a9b155326336"}, + {file = "jaxlib-0.6.2-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:c087a0eb6fb7f6f8f54d56f4730328dfde5040dd3b5ddfa810e7c28ea7102b42"}, + {file = "jaxlib-0.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:153eaa51f778b60851720729d4f461a91edd9ba3932f6f3bc598d4413870038b"}, + {file = "jaxlib-0.6.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a208ff61c58128d306bb4e5ad0858bd2b0960f2c1c10ad42c548f74a60c0020e"}, + {file = "jaxlib-0.6.2-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:11eae7e05bc5a79875da36324afb9eddd4baeaef2a0386caf6d4f3720b9aef28"}, + {file = "jaxlib-0.6.2-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:335d7e3515ce78b52a410136f46aa4a7ea14d0e7d640f34e1e137409554ad0ac"}, + {file = "jaxlib-0.6.2-cp311-cp311-win_amd64.whl", hash = "sha256:c6815509997d6b05e5c9daa7994b9ad473ce3e8c8a17bdbbcacc3c744f76f7a0"}, + {file = "jaxlib-0.6.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:34d8a684a8be949dd87dd4acc97101b4106a0dc9ad151ec891da072319a57b99"}, + {file = "jaxlib-0.6.2-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:87ec2dc9c3ed9ab936eec8535160c5fbd2c849948559f1c5daa75f63fabe5942"}, + {file = "jaxlib-0.6.2-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:f1dd09b481a93c1d4c750013f467f74194493ba7bd29fcd4d1cec16e3a214f65"}, + {file = "jaxlib-0.6.2-cp312-cp312-win_amd64.whl", hash = "sha256:921dbd4db214eba19a29ba9f2450d880e08b2b2c7b968f28cc89da3e62366af4"}, + {file = "jaxlib-0.6.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bff67b188133ce1f0111c7b163ac321fd646b59ed221ea489063e2e0f85cb967"}, + {file = "jaxlib-0.6.2-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:70498837caf538bd458ff6858c8bfd404db82015aba8f663670197fa9900ff02"}, + {file = "jaxlib-0.6.2-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:f94163f14c8fd3ba93ae14b631abacf14cb031bba0b59138869984b4d10375f8"}, + {file = "jaxlib-0.6.2-cp313-cp313-win_amd64.whl", hash = "sha256:b977604cd36c74b174d25ed685017379468138eb747d865f75e466cb273c801d"}, + {file = "jaxlib-0.6.2-cp313-cp313t-manylinux2014_aarch64.whl", hash = "sha256:39cf9555f85ae1ce2e2c1a59fc71f2eca4f9867a7cb934fef881ba56b11371d1"}, + {file = "jaxlib-0.6.2-cp313-cp313t-manylinux2014_x86_64.whl", hash = "sha256:3abd536e44b05fb1657507e3ff1fc3691f99613bae3921ecab9e82f27255f784"}, +] + +[package.dependencies] +ml_dtypes = ">=0.5.0" +numpy = ">=1.26" +scipy = ">=1.12" + +[[package]] +name = "jaxlib" +version = "0.9.2" +description = "XLA library for JAX" +optional = false +python-versions = ">=3.11" +groups = ["main"] +markers = "python_version == \"3.11\"" +files = [ + {file = "jaxlib-0.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:785f177c3eb78cb7dc797c55ed5c4b6312141845c9a686957e484bacbfce5e88"}, + {file = "jaxlib-0.9.2-cp311-cp311-manylinux_2_27_aarch64.whl", hash = "sha256:306de54a1de7386c806c723e356ce332d923ef748f8a72d674fefb748121d4dc"}, + {file = "jaxlib-0.9.2-cp311-cp311-manylinux_2_27_x86_64.whl", hash = "sha256:9ac995b4ba1aaeedae0d69f319987d515dcaecd4505b642b6312f9e15439351f"}, + {file = "jaxlib-0.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:501df74472437ffc11aa3bd8f7fc8b1da274f80bd176d33012cf0d604093667d"}, + {file = "jaxlib-0.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:97c2fbe58cbee4a27d94ca735d709d231b299ab6ed8b3b1075f52d864dfd32c1"}, + {file = "jaxlib-0.9.2-cp312-cp312-manylinux_2_27_aarch64.whl", hash = "sha256:fef02d846863b726e72452993883a8596eac325f22a2ec7ea921da0fbc5509b4"}, + {file = "jaxlib-0.9.2-cp312-cp312-manylinux_2_27_x86_64.whl", hash = "sha256:88b276a71f4f2071b1fd2e922abfd67c87c6977a551a1036febcea78d5ef7e22"}, + {file = "jaxlib-0.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:c2f0837cc0788746301e68ae9eda468e6a8a7734dc4d529f26a2cb60fb56c657"}, + {file = "jaxlib-0.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:52a0032508f8cf5791c7a7bee142531ee706c3c05518117fb0b6ee8d5e17fde7"}, + {file = "jaxlib-0.9.2-cp313-cp313-manylinux_2_27_aarch64.whl", hash = "sha256:bef61eef36ed38cec1069ea973f88af9e03335e884f6501ec3fe7f6222a1555b"}, + {file = "jaxlib-0.9.2-cp313-cp313-manylinux_2_27_x86_64.whl", hash = "sha256:b6d5003e3add5c346a34ae9edc47058cbc2db60c8ed5c50096522176daf01c9f"}, + {file = "jaxlib-0.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:2d445dab57debd8c26b416c8bc91a4704ba6d7169788a961e4b15419bc3f4254"}, + {file = "jaxlib-0.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:6ffb22eccf07bfc8c9760bfbcdaa268df9b3745739e8397bfce5daee5d79cb51"}, + {file = "jaxlib-0.9.2-cp313-cp313t-manylinux_2_27_aarch64.whl", hash = "sha256:6949d7ecd869c117e7ea8361866e60cf229c3cd9d6afdc37425a43cf83fc89e9"}, + {file = "jaxlib-0.9.2-cp313-cp313t-manylinux_2_27_x86_64.whl", hash = "sha256:e8e8165f0f647933f0ff9e1e4d9937d541841d3672a20db73f5ccb5e842b0edc"}, + {file = "jaxlib-0.9.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab168d25555464461bd077323484f690c471e69ce8b0c39a39fb81b3e3a8bf0"}, + {file = "jaxlib-0.9.2-cp314-cp314-manylinux_2_27_aarch64.whl", hash = "sha256:be4627c42d44add7fe17d284ef579ff8d159e3cb6947f6437758f34177e878e6"}, + {file = "jaxlib-0.9.2-cp314-cp314-manylinux_2_27_x86_64.whl", hash = "sha256:3d7151140a4936f3218b2d1b1343dd237bd2865cf51442884b6d82fe884a3de7"}, + {file = "jaxlib-0.9.2-cp314-cp314-win_amd64.whl", hash = "sha256:87bd42c9f18c9cc9a45371d02ecdbdb574ea1e2277149601a92e14a24c4bbc86"}, + {file = "jaxlib-0.9.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b8998f9fa6e67bf956044c310023f6a7bbfaa0d8955f11d928404c8f6eb02fcf"}, + {file = "jaxlib-0.9.2-cp314-cp314t-manylinux_2_27_aarch64.whl", hash = "sha256:35b473df72dbc2cfda0cb1b3de7521a2150a0aa5ef57ed7583eeceb012dc17c0"}, + {file = "jaxlib-0.9.2-cp314-cp314t-manylinux_2_27_x86_64.whl", hash = "sha256:bbe59bdef668ff5fd998c6d88e8df9a32ab95bec0dea3d2b5f7a11b86a9a6788"}, +] + +[package.dependencies] +ml_dtypes = ">=0.5.0" +numpy = ">=2.0" +scipy = ">=1.13" + [[package]] name = "jedi" version = "0.19.2" @@ -1906,7 +1963,6 @@ description = "An autocompletion tool for Python that can be used for text edito optional = false python-versions = ">=3.6" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, @@ -1927,7 +1983,6 @@ description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, @@ -1946,7 +2001,6 @@ description = "Lightweight pipelining with Python functions" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, @@ -1959,7 +2013,6 @@ description = "A Python implementation of the JSON5 data format." optional = false python-versions = ">=3.8.0" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "json5-0.10.0-py3-none-any.whl", hash = "sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa"}, {file = "json5-0.10.0.tar.gz", hash = "sha256:e66941c8f0a02026943c52c2eb34ebeb2a6f819a0be05920a6f5243cd30fd559"}, @@ -1975,7 +2028,6 @@ description = "Identify specific nodes in a JSON document (RFC 6901)" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, @@ -1988,7 +2040,6 @@ description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, @@ -2000,7 +2051,7 @@ fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} -jsonschema-specifications = ">=2023.03.6" +jsonschema-specifications = ">=2023.3.6" referencing = ">=0.28.4" rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} @@ -2019,7 +2070,6 @@ description = "The JSON Schema meta-schemas and vocabularies, exposed as a Regis optional = false python-versions = ">=3.9" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, @@ -2035,7 +2085,6 @@ description = "Jupyter metapackage. Install all the Jupyter components in one go optional = false python-versions = "*" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83"}, {file = "jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a"}, @@ -2056,7 +2105,6 @@ description = "Jupyter protocol implementation and client libraries" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, @@ -2071,7 +2119,7 @@ traitlets = ">=5.3" [package.extras] docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko ; sys_platform == \"win32\"", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] [[package]] name = "jupyter-console" @@ -2080,7 +2128,6 @@ description = "Jupyter terminal console" optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, @@ -2106,7 +2153,6 @@ description = "Common utilities for jupyter-contrib projects." optional = false python-versions = "*" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyter_contrib_core-0.4.2.tar.gz", hash = "sha256:1887212f3ca9d4487d624c0705c20dfdf03d5a0b9ea2557d3aaeeb4c38bdcabb"}, ] @@ -2119,7 +2165,7 @@ tornado = "*" traitlets = "*" [package.extras] -testing-utils = ["mock", "nose"] +testing-utils = ["mock ; python_version == \"2.7\"", "nose"] [[package]] name = "jupyter-contrib-nbextensions" @@ -2128,7 +2174,6 @@ description = "A collection of Jupyter nbextensions." optional = false python-versions = "*" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyter_contrib_nbextensions-0.7.0.tar.gz", hash = "sha256:06e33f005885eb92f89cbe82711e921278201298d08ab0d886d1ba09e8c3e9ca"}, ] @@ -2146,7 +2191,7 @@ tornado = "*" traitlets = ">=4.1" [package.extras] -test = ["mock", "nbformat", "nose", "pip", "requests"] +test = ["mock ; python_version == \"3.8\"", "nbformat", "nose", "pip", "requests"] [[package]] name = "jupyter-core" @@ -2155,7 +2200,6 @@ description = "Jupyter core package. A base package on which Jupyter projects re optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, @@ -2177,7 +2221,6 @@ description = "Jupyter Event System library" optional = false python-versions = ">=3.9" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb"}, {file = "jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b"}, @@ -2205,7 +2248,6 @@ description = "Jupyter notebook extension that enables highlighting every instan optional = false python-versions = "*" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyter_highlight_selected_word-0.2.0-py2.py3-none-any.whl", hash = "sha256:9545dfa9cb057eebe3a5795604dcd3a5294ea18637e553f61a0b67c1b5903c58"}, {file = "jupyter_highlight_selected_word-0.2.0.tar.gz", hash = "sha256:9fa740424859a807950ca08d2bfd28a35154cd32dd6d50ac4e0950022adc0e7b"}, @@ -2218,7 +2260,6 @@ description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab se optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"}, {file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"}, @@ -2234,7 +2275,6 @@ description = "jupyter serverextension providing configuration interfaces for nb optional = false python-versions = "*" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyter_nbextensions_configurator-0.6.4-py2.py3-none-any.whl", hash = "sha256:fe7a7b0805b5926449692fb077e0e659bab8b27563bc68cba26854532fdf99c7"}, ] @@ -2249,7 +2289,7 @@ tornado = "*" traitlets = "*" [package.extras] -test = ["jupyter-contrib-core[testing-utils]", "mock", "nose", "requests", "selenium"] +test = ["jupyter-contrib-core[testing-utils]", "mock ; python_version == \"3.9\"", "nose", "requests", "selenium"] [[package]] name = "jupyter-server" @@ -2258,7 +2298,6 @@ description = "The backend—i.e. core services, APIs, and REST endpoints—to J optional = false python-versions = ">=3.9" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyter_server-2.15.0-py3-none-any.whl", hash = "sha256:872d989becf83517012ee669f09604aa4a28097c0bd90b2f424310156c2cdae3"}, {file = "jupyter_server-2.15.0.tar.gz", hash = "sha256:9d446b8697b4f7337a1b7cdcac40778babdd93ba614b6d68ab1c0c918f1c4084"}, @@ -2296,7 +2335,6 @@ description = "A Jupyter Server Extension Providing Terminals." optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, @@ -2317,7 +2355,6 @@ description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyterlab-4.3.5-py3-none-any.whl", hash = "sha256:571bbdee20e4c5321ab5195bc41cf92a75a5cff886be5e57ce78dfa37a5e9fdb"}, {file = "jupyterlab-4.3.5.tar.gz", hash = "sha256:c779bf72ced007d7d29d5bcef128e7fdda96ea69299e19b04a43635a7d641f9d"}, @@ -2353,7 +2390,6 @@ description = "Pygments theme using JupyterLab CSS variables" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, @@ -2366,7 +2402,6 @@ description = "A set of server components for JupyterLab and JupyterLab like app optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"}, {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"}, @@ -2393,7 +2428,6 @@ description = "Jupyter interactive widgets for JupyterLab" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "jupyterlab_widgets-3.0.13-py3-none-any.whl", hash = "sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54"}, {file = "jupyterlab_widgets-3.0.13.tar.gz", hash = "sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed"}, @@ -2406,7 +2440,6 @@ description = "A fast implementation of the Cassowary constraint solver" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db"}, {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b"}, @@ -2497,7 +2530,6 @@ description = "Lightning toolbox for across the our ecosystem." optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "lightning_utilities-0.12.0-py3-none-any.whl", hash = "sha256:b827f5768607e81ccc7b2ada1f50628168d1cc9f839509c7e87c04b59079e66c"}, {file = "lightning_utilities-0.12.0.tar.gz", hash = "sha256:95b5f22a0b69eb27ca0929c6c1d510592a70080e1733a055bf154903c0343b60"}, @@ -2520,7 +2552,6 @@ description = "File-based locks for Python on Linux and Windows" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3"}, {file = "locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632"}, @@ -2533,7 +2564,6 @@ description = "Powerful and Pythonic XML processing library combining libxml2/li optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "lxml-5.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a4058f16cee694577f7e4dd410263cd0ef75644b43802a689c2b3c2a7e69453b"}, {file = "lxml-5.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:364de8f57d6eda0c16dcfb999af902da31396949efa0e583e12675d09709881b"}, @@ -2689,7 +2719,6 @@ description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, @@ -2761,7 +2790,6 @@ description = "Python plotting package" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "matplotlib-3.8.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:abc9d838f93583650c35eca41cfcec65b2e7cb50fd486da6f0c49b5e1ed23014"}, {file = "matplotlib-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f65c9f002d281a6e904976007b2d46a1ee2bcea3a68a8c12dda24709ddc9106"}, @@ -2811,7 +2839,6 @@ description = "Inline Matplotlib backend for Jupyter" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, @@ -2827,7 +2854,6 @@ description = "McCabe checker, plugin for flake8" optional = false python-versions = ">=3.6" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, @@ -2840,7 +2866,6 @@ description = "A sane and fast Markdown parser with useful plugins and renderers optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "mistune-3.1.2-py3-none-any.whl", hash = "sha256:4b47731332315cdca99e0ded46fc0004001c1299ff773dfb48fbe1fd226de319"}, {file = "mistune-3.1.2.tar.gz", hash = "sha256:733bf018ba007e8b5f2d3a9eb624034f6ee26c4ea769a98ec533ee111d504dff"}, @@ -2849,6 +2874,64 @@ files = [ [package.dependencies] typing-extensions = {version = "*", markers = "python_version < \"3.11\""} +[[package]] +name = "ml-dtypes" +version = "0.5.4" +description = "ml_dtypes is a stand-alone implementation of several NumPy dtype extensions used in machine learning." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "ml_dtypes-0.5.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b95e97e470fe60ed493fd9ae3911d8da4ebac16bd21f87ffa2b7c588bf22ea2c"}, + {file = "ml_dtypes-0.5.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4b801ebe0b477be666696bda493a9be8356f1f0057a57f1e35cd26928823e5a"}, + {file = "ml_dtypes-0.5.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:388d399a2152dd79a3f0456a952284a99ee5c93d3e2f8dfe25977511e0515270"}, + {file = "ml_dtypes-0.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:4ff7f3e7ca2972e7de850e7b8fcbb355304271e2933dd90814c1cb847414d6e2"}, + {file = "ml_dtypes-0.5.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6c7ecb74c4bd71db68a6bea1edf8da8c34f3d9fe218f038814fd1d310ac76c90"}, + {file = "ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc11d7e8c44a65115d05e2ab9989d1e045125d7be8e05a071a48bc76eb6d6040"}, + {file = "ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:19b9a53598f21e453ea2fbda8aa783c20faff8e1eeb0d7ab899309a0053f1483"}, + {file = "ml_dtypes-0.5.4-cp311-cp311-win_amd64.whl", hash = "sha256:7c23c54a00ae43edf48d44066a7ec31e05fdc2eee0be2b8b50dd1903a1db94bb"}, + {file = "ml_dtypes-0.5.4-cp311-cp311-win_arm64.whl", hash = "sha256:557a31a390b7e9439056644cb80ed0735a6e3e3bb09d67fd5687e4b04238d1de"}, + {file = "ml_dtypes-0.5.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a174837a64f5b16cab6f368171a1a03a27936b31699d167684073ff1c4237dac"}, + {file = "ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7f7c643e8b1320fd958bf098aa7ecf70623a42ec5154e3be3be673f4c34d900"}, + {file = "ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ad459e99793fa6e13bd5b7e6792c8f9190b4e5a1b45c63aba14a4d0a7f1d5ff"}, + {file = "ml_dtypes-0.5.4-cp312-cp312-win_amd64.whl", hash = "sha256:c1a953995cccb9e25a4ae19e34316671e4e2edaebe4cf538229b1fc7109087b7"}, + {file = "ml_dtypes-0.5.4-cp312-cp312-win_arm64.whl", hash = "sha256:9bad06436568442575beb2d03389aa7456c690a5b05892c471215bfd8cf39460"}, + {file = "ml_dtypes-0.5.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c760d85a2f82e2bed75867079188c9d18dae2ee77c25a54d60e9cc79be1bc48"}, + {file = "ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce756d3a10d0c4067172804c9cc276ba9cc0ff47af9078ad439b075d1abdc29b"}, + {file = "ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:533ce891ba774eabf607172254f2e7260ba5f57bdd64030c9a4fcfbd99815d0d"}, + {file = "ml_dtypes-0.5.4-cp313-cp313-win_amd64.whl", hash = "sha256:f21c9219ef48ca5ee78402d5cc831bd58ea27ce89beda894428bc67a52da5328"}, + {file = "ml_dtypes-0.5.4-cp313-cp313-win_arm64.whl", hash = "sha256:35f29491a3e478407f7047b8a4834e4640a77d2737e0b294d049746507af5175"}, + {file = "ml_dtypes-0.5.4-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:304ad47faa395415b9ccbcc06a0350800bc50eda70f0e45326796e27c62f18b6"}, + {file = "ml_dtypes-0.5.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6a0df4223b514d799b8a1629c65ddc351b3efa833ccf7f8ea0cf654a61d1e35d"}, + {file = "ml_dtypes-0.5.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:531eff30e4d368cb6255bc2328d070e35836aa4f282a0fb5f3a0cd7260257298"}, + {file = "ml_dtypes-0.5.4-cp313-cp313t-win_amd64.whl", hash = "sha256:cb73dccfc991691c444acc8c0012bee8f2470da826a92e3a20bb333b1a7894e6"}, + {file = "ml_dtypes-0.5.4-cp313-cp313t-win_arm64.whl", hash = "sha256:3bbbe120b915090d9dd1375e4684dd17a20a2491ef25d640a908281da85e73f1"}, + {file = "ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2b857d3af6ac0d39db1de7c706e69c7f9791627209c3d6dedbfca8c7e5faec22"}, + {file = "ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:805cef3a38f4eafae3a5bf9ebdcdb741d0bcfd9e1bd90eb54abd24f928cd2465"}, + {file = "ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14a4fd3228af936461db66faccef6e4f41c1d82fcc30e9f8d58a08916b1d811f"}, + {file = "ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl", hash = "sha256:8c6a2dcebd6f3903e05d51960a8058d6e131fe69f952a5397e5dbabc841b6d56"}, + {file = "ml_dtypes-0.5.4-cp314-cp314-win_arm64.whl", hash = "sha256:5a0f68ca8fd8d16583dfa7793973feb86f2fbb56ce3966daf9c9f748f52a2049"}, + {file = "ml_dtypes-0.5.4-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:bfc534409c5d4b0bf945af29e5d0ab075eae9eecbb549ff8a29280db822f34f9"}, + {file = "ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2314892cdc3fcf05e373d76d72aaa15fda9fb98625effa73c1d646f331fcecb7"}, + {file = "ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d2ffd05a2575b1519dc928c0b93c06339eb67173ff53acb00724502cda231cf"}, + {file = "ml_dtypes-0.5.4-cp314-cp314t-win_amd64.whl", hash = "sha256:4381fe2f2452a2d7589689693d3162e876b3ddb0a832cde7a414f8e1adf7eab1"}, + {file = "ml_dtypes-0.5.4-cp314-cp314t-win_arm64.whl", hash = "sha256:11942cbf2cf92157db91e5022633c0d9474d4dfd813a909383bd23ce828a4b7d"}, + {file = "ml_dtypes-0.5.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d81fdb088defa30eb37bf390bb7dde35d3a83ec112ac8e33d75ab28cc29dd8b0"}, + {file = "ml_dtypes-0.5.4-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:88c982aac7cb1cbe8cbb4e7f253072b1df872701fcaf48d84ffbb433b6568f24"}, + {file = "ml_dtypes-0.5.4-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9b61c19040397970d18d7737375cffd83b1f36a11dd4ad19f83a016f736c3ef"}, + {file = "ml_dtypes-0.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:3d277bf3637f2a62176f4575512e9ff9ef51d00e39626d9fe4a161992f355af2"}, + {file = "ml_dtypes-0.5.4.tar.gz", hash = "sha256:8ab06a50fb9bf9666dd0fe5dfb4676fa2b0ac0f31ecff72a6c3af8e22c063453"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.21.2", markers = "python_version >= \"3.10\""}, + {version = ">=1.23.3", markers = "python_version >= \"3.11\""}, +] + +[package.extras] +dev = ["absl-py", "pyink", "pylint (>=2.6.0)", "pytest", "pytest-xdist"] + [[package]] name = "mpmath" version = "1.3.0" @@ -2856,7 +2939,6 @@ description = "Python library for arbitrary-precision floating-point arithmetic" optional = false python-versions = "*" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, @@ -2865,7 +2947,7 @@ files = [ [package.extras] develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] docs = ["sphinx"] -gmpy = ["gmpy2 (>=2.1.0a4)"] +gmpy = ["gmpy2 (>=2.1.0a4) ; platform_python_implementation != \"PyPy\""] tests = ["pytest (>=4.6)"] [[package]] @@ -2875,7 +2957,6 @@ description = "multidict implementation" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, @@ -2981,7 +3062,6 @@ description = "A client library for executing notebooks. Formerly nbconvert's Ex optional = false python-versions = ">=3.9.0" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"}, {file = "nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193"}, @@ -3005,7 +3085,6 @@ description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Ou optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b"}, {file = "nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582"}, @@ -3043,7 +3122,6 @@ description = "The Jupyter Notebook format" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, @@ -3066,7 +3144,6 @@ description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, @@ -3079,7 +3156,6 @@ description = "Python package for creating and manipulating graphs and networks" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"}, {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"}, @@ -3100,7 +3176,6 @@ description = "Node.js virtual environment builder" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, @@ -3113,7 +3188,6 @@ description = "Jupyter Notebook - A web-based notebook environment for interacti optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "notebook-7.3.2-py3-none-any.whl", hash = "sha256:e5f85fc59b69d3618d73cf27544418193ff8e8058d5bf61d315ce4f473556288"}, {file = "notebook-7.3.2.tar.gz", hash = "sha256:705e83a1785f45b383bf3ee13cb76680b92d24f56fb0c7d2136fe1d850cd3ca8"}, @@ -3129,7 +3203,7 @@ tornado = ">=6.2.0" [package.extras] dev = ["hatch", "pre-commit"] docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] +test = ["importlib-resources (>=5.0) ; python_version < \"3.10\"", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] [[package]] name = "notebook-shim" @@ -3138,7 +3212,6 @@ description = "A shim layer for notebook traits and config" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, @@ -3157,7 +3230,7 @@ description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" +markers = "python_version == \"3.10\"" files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -3197,6 +3270,89 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] +[[package]] +name = "numpy" +version = "2.4.3" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.11" +groups = ["main"] +markers = "python_version == \"3.11\"" +files = [ + {file = "numpy-2.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:33b3bf58ee84b172c067f56aeadc7ee9ab6de69c5e800ab5b10295d54c581adb"}, + {file = "numpy-2.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8ba7b51e71c05aa1f9bc3641463cd82308eab40ce0d5c7e1fd4038cbf9938147"}, + {file = "numpy-2.4.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a1988292870c7cb9d0ebb4cc96b4d447513a9644801de54606dc7aabf2b7d920"}, + {file = "numpy-2.4.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:23b46bb6d8ecb68b58c09944483c135ae5f0e9b8d8858ece5e4ead783771d2a9"}, + {file = "numpy-2.4.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a016db5c5dba78fa8fe9f5d80d6708f9c42ab087a739803c0ac83a43d686a470"}, + {file = "numpy-2.4.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:715de7f82e192e8cae5a507a347d97ad17598f8e026152ca97233e3666daaa71"}, + {file = "numpy-2.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2ddb7919366ee468342b91dea2352824c25b55814a987847b6c52003a7c97f15"}, + {file = "numpy-2.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a315e5234d88067f2d97e1f2ef670a7569df445d55400f1e33d117418d008d52"}, + {file = "numpy-2.4.3-cp311-cp311-win32.whl", hash = "sha256:2b3f8d2c4589b1a2028d2a770b0fc4d1f332fb5e01521f4de3199a896d158ddd"}, + {file = "numpy-2.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:77e76d932c49a75617c6d13464e41203cd410956614d0a0e999b25e9e8d27eec"}, + {file = "numpy-2.4.3-cp311-cp311-win_arm64.whl", hash = "sha256:eb610595dd91560905c132c709412b512135a60f1851ccbd2c959e136431ff67"}, + {file = "numpy-2.4.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:61b0cbabbb6126c8df63b9a3a0c4b1f44ebca5e12ff6997b80fcf267fb3150ef"}, + {file = "numpy-2.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7395e69ff32526710748f92cd8c9849b361830968ea3e24a676f272653e8983e"}, + {file = "numpy-2.4.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:abdce0f71dcb4a00e4e77f3faf05e4616ceccfe72ccaa07f47ee79cda3b7b0f4"}, + {file = "numpy-2.4.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:48da3a4ee1336454b07497ff7ec83903efa5505792c4e6d9bf83d99dc07a1e18"}, + {file = "numpy-2.4.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:32e3bef222ad6b052280311d1d60db8e259e4947052c3ae7dd6817451fc8a4c5"}, + {file = "numpy-2.4.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e7dd01a46700b1967487141a66ac1a3cf0dd8ebf1f08db37d46389401512ca97"}, + {file = "numpy-2.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:76f0f283506c28b12bba319c0fab98217e9f9b54e6160e9c79e9f7348ba32e9c"}, + {file = "numpy-2.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:737f630a337364665aba3b5a77e56a68cc42d350edd010c345d65a3efa3addcc"}, + {file = "numpy-2.4.3-cp312-cp312-win32.whl", hash = "sha256:26952e18d82a1dbbc2f008d402021baa8d6fc8e84347a2072a25e08b46d698b9"}, + {file = "numpy-2.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:65f3c2455188f09678355f5cae1f959a06b778bc66d535da07bf2ef20cd319d5"}, + {file = "numpy-2.4.3-cp312-cp312-win_arm64.whl", hash = "sha256:2abad5c7fef172b3377502bde47892439bae394a71bc329f31df0fd829b41a9e"}, + {file = "numpy-2.4.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b346845443716c8e542d54112966383b448f4a3ba5c66409771b8c0889485dd3"}, + {file = "numpy-2.4.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2629289168f4897a3c4e23dc98d6f1731f0fc0fe52fb9db19f974041e4cc12b9"}, + {file = "numpy-2.4.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:bb2e3cf95854233799013779216c57e153c1ee67a0bf92138acca0e429aefaee"}, + {file = "numpy-2.4.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:7f3408ff897f8ab07a07fbe2823d7aee6ff644c097cc1f90382511fe982f647f"}, + {file = "numpy-2.4.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:decb0eb8a53c3b009b0962378065589685d66b23467ef5dac16cbe818afde27f"}, + {file = "numpy-2.4.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5f51900414fc9204a0e0da158ba2ac52b75656e7dce7e77fb9f84bfa343b4cc"}, + {file = "numpy-2.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6bd06731541f89cdc01b261ba2c9e037f1543df7472517836b78dfb15bd6e476"}, + {file = "numpy-2.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:22654fe6be0e5206f553a9250762c653d3698e46686eee53b399ab90da59bd92"}, + {file = "numpy-2.4.3-cp313-cp313-win32.whl", hash = "sha256:d71e379452a2f670ccb689ec801b1218cd3983e253105d6e83780967e899d687"}, + {file = "numpy-2.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:0a60e17a14d640f49146cb38e3f105f571318db7826d9b6fef7e4dce758faecd"}, + {file = "numpy-2.4.3-cp313-cp313-win_arm64.whl", hash = "sha256:c9619741e9da2059cd9c3f206110b97583c7152c1dc9f8aafd4beb450ac1c89d"}, + {file = "numpy-2.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7aa4e54f6469300ebca1d9eb80acd5253cdfa36f2c03d79a35883687da430875"}, + {file = "numpy-2.4.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d1b90d840b25874cf5cd20c219af10bac3667db3876d9a495609273ebe679070"}, + {file = "numpy-2.4.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a749547700de0a20a6718293396ec237bb38218049cfce788e08fcb716e8cf73"}, + {file = "numpy-2.4.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94f3c4a151a2e529adf49c1d54f0f57ff8f9b233ee4d44af623a81553ab86368"}, + {file = "numpy-2.4.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22c31dc07025123aedf7f2db9e91783df13f1776dc52c6b22c620870dc0fab22"}, + {file = "numpy-2.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:148d59127ac95979d6f07e4d460f934ebdd6eed641db9c0db6c73026f2b2101a"}, + {file = "numpy-2.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a97cbf7e905c435865c2d939af3d93f99d18eaaa3cabe4256f4304fb51604349"}, + {file = "numpy-2.4.3-cp313-cp313t-win32.whl", hash = "sha256:be3b8487d725a77acccc9924f65fd8bce9af7fac8c9820df1049424a2115af6c"}, + {file = "numpy-2.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1ec84fd7c8e652b0f4aaaf2e6e9cc8eaa9b1b80a537e06b2e3a2fb176eedcb26"}, + {file = "numpy-2.4.3-cp313-cp313t-win_arm64.whl", hash = "sha256:120df8c0a81ebbf5b9020c91439fccd85f5e018a927a39f624845be194a2be02"}, + {file = "numpy-2.4.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:5884ce5c7acfae1e4e1b6fde43797d10aa506074d25b531b4f54bde33c0c31d4"}, + {file = "numpy-2.4.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:297837823f5bc572c5f9379b0c9f3a3365f08492cbdc33bcc3af174372ebb168"}, + {file = "numpy-2.4.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:a111698b4a3f8dcbe54c64a7708f049355abd603e619013c346553c1fd4ca90b"}, + {file = "numpy-2.4.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:4bd4741a6a676770e0e97fe9ab2e51de01183df3dcbcec591d26d331a40de950"}, + {file = "numpy-2.4.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:54f29b877279d51e210e0c80709ee14ccbbad647810e8f3d375561c45ef613dd"}, + {file = "numpy-2.4.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:679f2a834bae9020f81534671c56fd0cc76dd7e5182f57131478e23d0dc59e24"}, + {file = "numpy-2.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d84f0f881cb2225c2dfd7f78a10a5645d487a496c6668d6cc39f0f114164f3d0"}, + {file = "numpy-2.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d213c7e6e8d211888cc359bab7199670a00f5b82c0978b9d1c75baf1eddbeac0"}, + {file = "numpy-2.4.3-cp314-cp314-win32.whl", hash = "sha256:52077feedeff7c76ed7c9f1a0428558e50825347b7545bbb8523da2cd55c547a"}, + {file = "numpy-2.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:0448e7f9caefb34b4b7dd2b77f21e8906e5d6f0365ad525f9f4f530b13df2afc"}, + {file = "numpy-2.4.3-cp314-cp314-win_arm64.whl", hash = "sha256:b44fd60341c4d9783039598efadd03617fa28d041fc37d22b62d08f2027fa0e7"}, + {file = "numpy-2.4.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0a195f4216be9305a73c0e91c9b026a35f2161237cf1c6de9b681637772ea657"}, + {file = "numpy-2.4.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:cd32fbacb9fd1bf041bf8e89e4576b6f00b895f06d00914820ae06a616bdfef7"}, + {file = "numpy-2.4.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:2e03c05abaee1f672e9d67bc858f300b5ccba1c21397211e8d77d98350972093"}, + {file = "numpy-2.4.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7d1ce23cce91fcea443320a9d0ece9b9305d4368875bab09538f7a5b4131938a"}, + {file = "numpy-2.4.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c59020932feb24ed49ffd03704fbab89f22aa9c0d4b180ff45542fe8918f5611"}, + {file = "numpy-2.4.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9684823a78a6cd6ad7511fc5e25b07947d1d5b5e2812c93fe99d7d4195130720"}, + {file = "numpy-2.4.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0200b25c687033316fb39f0ff4e3e690e8957a2c3c8d22499891ec58c37a3eb5"}, + {file = "numpy-2.4.3-cp314-cp314t-win32.whl", hash = "sha256:5e10da9e93247e554bb1d22f8edc51847ddd7dde52d85ce31024c1b4312bfba0"}, + {file = "numpy-2.4.3-cp314-cp314t-win_amd64.whl", hash = "sha256:45f003dbdffb997a03da2d1d0cb41fbd24a87507fb41605c0420a3db5bd4667b"}, + {file = "numpy-2.4.3-cp314-cp314t-win_arm64.whl", hash = "sha256:4d382735cecd7bcf090172489a525cd7d4087bc331f7df9f60ddc9a296cf208e"}, + {file = "numpy-2.4.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c6b124bfcafb9e8d3ed09130dbee44848c20b3e758b6bbf006e641778927c028"}, + {file = "numpy-2.4.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:76dbb9d4e43c16cf9aa711fcd8de1e2eeb27539dcefb60a1d5e9f12fae1d1ed8"}, + {file = "numpy-2.4.3-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:29363fbfa6f8ee855d7569c96ce524845e3d726d6c19b29eceec7dd555dab152"}, + {file = "numpy-2.4.3-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:bc71942c789ef415a37f0d4eab90341425a00d538cd0642445d30b41023d3395"}, + {file = "numpy-2.4.3-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7e58765ad74dcebd3ef0208a5078fba32dc8ec3578fe84a604432950cd043d79"}, + {file = "numpy-2.4.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e236dbda4e1d319d681afcbb136c0c4a8e0f1a5c58ceec2adebb547357fe857"}, + {file = "numpy-2.4.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:4b42639cdde6d24e732ff823a3fa5b701d8acad89c4142bc1d0bd6dc85200ba5"}, + {file = "numpy-2.4.3.tar.gz", hash = "sha256:483a201202b73495f00dbc83796c6ae63137a9bdade074f7648b3e32613412dd"}, +] + [[package]] name = "nvidia-cublas-cu12" version = "12.4.5.8" @@ -3204,7 +3360,7 @@ description = "CUBLAS native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version <= \"3.11\"" +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0f8aa1706812e00b9f19dfe0cdb3999b092ccb8ca168c0db5b8ea712456fd9b3"}, {file = "nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl", hash = "sha256:2fc8da60df463fdefa81e323eef2e36489e1c94335b5358bcb38360adf75ac9b"}, @@ -3218,7 +3374,7 @@ description = "CUDA profiling tools runtime libs." optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version <= \"3.11\"" +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:79279b35cf6f91da114182a5ce1864997fd52294a87a16179ce275773799458a"}, {file = "nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:9dec60f5ac126f7bb551c055072b69d85392b13311fcc1bcda2202d172df30fb"}, @@ -3232,7 +3388,7 @@ description = "NVRTC native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version <= \"3.11\"" +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0eedf14185e04b76aa05b1fea04133e59f465b6f960c0cbf4e37c3cb6b0ea198"}, {file = "nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a178759ebb095827bd30ef56598ec182b85547f1508941a3d560eb7ea1fbf338"}, @@ -3246,7 +3402,7 @@ description = "CUDA Runtime native Libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version <= \"3.11\"" +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:961fe0e2e716a2a1d967aab7caee97512f71767f852f67432d572e36cb3a11f3"}, {file = "nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:64403288fa2136ee8e467cdc9c9427e0434110899d07c779f25b5c068934faa5"}, @@ -3260,7 +3416,7 @@ description = "cuDNN runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version <= \"3.11\"" +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl", hash = "sha256:165764f44ef8c61fcdfdfdbe769d687e06374059fbb388b6c89ecb0e28793a6f"}, {file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-win_amd64.whl", hash = "sha256:6278562929433d68365a07a4a1546c237ba2849852c0d4b2262a486e805b977a"}, @@ -3276,7 +3432,7 @@ description = "CUFFT native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version <= \"3.11\"" +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_aarch64.whl", hash = "sha256:5dad8008fc7f92f5ddfa2101430917ce2ffacd86824914c82e28990ad7f00399"}, {file = "nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f083fc24912aa410be21fa16d157fed2055dab1cc4b6934a0e03cba69eb242b9"}, @@ -3293,7 +3449,7 @@ description = "CURAND native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version <= \"3.11\"" +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1f173f09e3e3c76ab084aba0de819c49e56614feae5c12f69883f4ae9bb5fad9"}, {file = "nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a88f583d4e0bb643c49743469964103aa59f7f708d862c3ddb0fc07f851e3b8b"}, @@ -3307,7 +3463,7 @@ description = "CUDA solver native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version <= \"3.11\"" +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d338f155f174f90724bbde3758b7ac375a70ce8e706d70b018dd3375545fc84e"}, {file = "nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:19e33fa442bcfd085b3086c4ebf7e8debc07cfe01e11513cc6d332fd918ac260"}, @@ -3326,7 +3482,7 @@ description = "CUSPARSE native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version <= \"3.11\"" +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_aarch64.whl", hash = "sha256:9d32f62896231ebe0480efd8a7f702e143c98cfaa0e8a76df3386c1ba2b54df3"}, {file = "nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ea4f11a2904e2a8dc4b1833cc1b5181cde564edd0d5cd33e3c168eff2d1863f1"}, @@ -3343,7 +3499,7 @@ description = "NVIDIA Collective Communication Library (NCCL) Runtime" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version <= \"3.11\"" +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:8579076d30a8c24988834445f8d633c697d42397e92ffc3f63fa26766d25e0a0"}, ] @@ -3355,7 +3511,7 @@ description = "Nvidia JIT LTO Library" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version <= \"3.11\"" +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4abe7fef64914ccfa909bc2ba39739670ecc9e820c83ccc7a6ed414122599b83"}, {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57"}, @@ -3369,7 +3525,7 @@ description = "NVIDIA Tools Extension" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version <= \"3.11\"" +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7959ad635db13edf4fc65c06a6e9f9e55fc2f92596db928d169c0bb031e88ef3"}, {file = "nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:781e950d9b9f60d8241ccea575b32f5105a5baf4c2351cab5256a24869f12a1a"}, @@ -3383,7 +3539,6 @@ description = "A flexible configuration library" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "omegaconf-2.3.0-py3-none-any.whl", hash = "sha256:7b4df175cdb08ba400f45cae3bdcae7ba8365db4d165fc65fd04b050ab63b46b"}, {file = "omegaconf-2.3.0.tar.gz", hash = "sha256:d5d4b6d29955cc50ad50c46dc269bcd92c6e00f5f90d23ab5fee7bfca4ba4cc7"}, @@ -3400,7 +3555,6 @@ description = "Wrapper package for OpenCV python bindings." optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "opencv-python-4.11.0.86.tar.gz", hash = "sha256:03d60ccae62304860d232272e4a4fda93c39d595780cb40b161b310244b736a4"}, {file = "opencv_python-4.11.0.86-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:432f67c223f1dc2824f5e73cdfcd9db0efc8710647d4e813012195dc9122a52a"}, @@ -3413,11 +3567,23 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\" and python_version < \"3.11\""}, - {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\""}, + {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\""}, {version = ">=1.23.5", markers = "python_version >= \"3.11\""}, ] +[[package]] +name = "opt-einsum" +version = "3.4.0" +description = "Path optimization of einsum functions." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "opt_einsum-3.4.0-py3-none-any.whl", hash = "sha256:69bb92469f86a1565195ece4ac0323943e83477171b91d24c35afe028a90d7cd"}, + {file = "opt_einsum-3.4.0.tar.gz", hash = "sha256:96ca72f1b886d148241348783498194c577fa30a8faac108586b14f1ba4473ac"}, +] + [[package]] name = "overrides" version = "7.7.0" @@ -3425,7 +3591,6 @@ description = "A decorator to automatically detect mismatch when overriding a me optional = false python-versions = ">=3.6" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, @@ -3438,7 +3603,6 @@ description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, @@ -3451,7 +3615,6 @@ description = "Powerful data structures for data analysis, time series, and stat optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, @@ -3538,7 +3701,6 @@ description = "Utilities for writing pandoc filters in python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, @@ -3551,7 +3713,6 @@ description = "A Python Parser" optional = false python-versions = ">=3.6" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, @@ -3568,7 +3729,6 @@ description = "Appendable key-value storage" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f"}, {file = "partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c"}, @@ -3588,7 +3748,7 @@ description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" groups = ["main", "dev"] -markers = "python_version <= \"3.11\" and (sys_platform != \"win32\" and sys_platform != \"emscripten\")" +markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, @@ -3604,7 +3764,6 @@ description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8"}, {file = "pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192"}, @@ -3684,7 +3843,7 @@ docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline fpx = ["olefile"] mic = ["olefile"] tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"] -typing = ["typing-extensions"] +typing = ["typing-extensions ; python_version < \"3.10\""] xmp = ["defusedxml"] [[package]] @@ -3694,7 +3853,6 @@ description = "A small Python package for determining appropriate platform-speci optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -3712,7 +3870,6 @@ description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -3729,7 +3886,6 @@ description = "A framework for managing and maintaining multi-language pre-commi optional = false python-versions = ">=3.9" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "pre_commit-3.8.0-py2.py3-none-any.whl", hash = "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f"}, {file = "pre_commit-3.8.0.tar.gz", hash = "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af"}, @@ -3749,7 +3905,6 @@ description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "prometheus_client-0.21.1-py3-none-any.whl", hash = "sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301"}, {file = "prometheus_client-0.21.1.tar.gz", hash = "sha256:252505a722ac04b0456be05c05f75f45d760c2911ffc45f2a06bcaed9f3ae3fb"}, @@ -3765,7 +3920,6 @@ description = "Library for building powerful interactive command lines in Python optional = false python-versions = ">=3.8.0" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"}, {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"}, @@ -3781,7 +3935,6 @@ description = "Accelerated property cache" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6"}, {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2"}, @@ -3874,7 +4027,6 @@ description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "psutil-6.1.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:9ccc4316f24409159897799b83004cb1e24f9819b0dcf9c0b68bdcb6cefee6a8"}, {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ca9609c77ea3b8481ab005da74ed894035936223422dc591d6772b147421f777"}, @@ -3906,7 +4058,7 @@ description = "Run a subprocess in a pseudo terminal" optional = false python-versions = "*" groups = ["main", "dev"] -markers = "(os_name != \"nt\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version <= \"3.11\"" +markers = "os_name != \"nt\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, @@ -3919,7 +4071,6 @@ description = "Safely evaluate AST nodes without side effects" optional = false python-versions = "*" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, @@ -3935,7 +4086,6 @@ description = "Python style guide checker" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "pycodestyle-2.12.1-py2.py3-none-any.whl", hash = "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3"}, {file = "pycodestyle-2.12.1.tar.gz", hash = "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"}, @@ -3948,7 +4098,6 @@ description = "C parser in Python" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, @@ -3961,7 +4110,6 @@ description = "Python bindings for ERFA" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "pyerfa-2.0.1.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b282d7c60c4c47cf629c484c17ac504fcb04abd7b3f4dfcf53ee042afc3a5944"}, {file = "pyerfa-2.0.1.5-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:be1aeb70390dd03a34faf96749d5cabc58437410b4aab7213c512323932427df"}, @@ -3990,7 +4138,6 @@ description = "passive checker of Python programs" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, @@ -4003,7 +4150,6 @@ description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, @@ -4019,14 +4165,13 @@ description = "python code static checker" optional = false python-versions = ">=3.9.0" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "pylint-3.3.4-py3-none-any.whl", hash = "sha256:289e6a1eb27b453b08436478391a48cd53bb0efb824873f949e709350f3de018"}, {file = "pylint-3.3.4.tar.gz", hash = "sha256:74ae7a38b177e69a9b525d0794bd8183820bfa7eb68cc1bee6e8ed22a42be4ce"}, ] [package.dependencies] -astroid = ">=3.3.8,<=3.4.0-dev0" +astroid = ">=3.3.8,<=3.4.0.dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, @@ -4049,7 +4194,6 @@ description = "pyparsing module - Classes and methods to define and execute pars optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"}, {file = "pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"}, @@ -4065,7 +4209,6 @@ description = "Python interface to PROJ (cartographic projections and coordinate optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "pyproj-3.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ab7aa4d9ff3c3acf60d4b285ccec134167a948df02347585fdd934ebad8811b4"}, {file = "pyproj-3.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4bc0472302919e59114aa140fd7213c2370d848a7249d09704f10f5b062031fe"}, @@ -4106,7 +4249,6 @@ description = "Pure Python read/write support for ESRI Shapefile format" optional = false python-versions = ">=2.7" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "pyshp-2.3.1-py2.py3-none-any.whl", hash = "sha256:67024c0ccdc352ba5db777c4e968483782dfa78f8e200672a90d2d30fd8b7b49"}, {file = "pyshp-2.3.1.tar.gz", hash = "sha256:4caec82fd8dd096feba8217858068bacb2a3b5950f43c048c6dc32a3489d5af1"}, @@ -4119,7 +4261,6 @@ description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"}, {file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"}, @@ -4143,7 +4284,6 @@ description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -4159,14 +4299,13 @@ description = "JSON Log Formatter for the Python Logging Package" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "python_json_logger-3.2.1-py3-none-any.whl", hash = "sha256:cdc17047eb5374bd311e748b42f99d71223f3b0e186f4206cc5d52aefe85b090"}, {file = "python_json_logger-3.2.1.tar.gz", hash = "sha256:8eb0554ea17cb75b05d2848bc14fb02fbdbd9d6972120781b974380bfa162008"}, ] [package.extras] -dev = ["backports.zoneinfo", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec", "msgspec-python313-pre", "mypy", "orjson", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec ; implementation_name != \"pypy\" and python_version < \"3.13\"", "msgspec-python313-pre ; implementation_name != \"pypy\" and python_version == \"3.13\"", "mypy", "orjson ; implementation_name != \"pypy\"", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] [[package]] name = "pytorch-lightning" @@ -4175,7 +4314,6 @@ description = "PyTorch Lightning is the lightweight PyTorch wrapper for ML resea optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "pytorch_lightning-2.5.0.post0-py3-none-any.whl", hash = "sha256:c86bf4fded58b386f312f75337696a9b2d57077b858b3b9524400a03a0179b3a"}, {file = "pytorch_lightning-2.5.0.post0.tar.gz", hash = "sha256:347235bf8573b4ebcf507a0dd755fcb9ce58c420c77220a9756a6edca0418532"}, @@ -4192,12 +4330,12 @@ tqdm = ">=4.57.0" typing-extensions = ">=4.4.0" [package.extras] -all = ["bitsandbytes (>=0.42.0)", "bitsandbytes (>=0.44.0)", "deepspeed (>=0.8.2,<=0.9.3)", "hydra-core (>=1.2.0)", "ipython[all] (<8.15.0)", "jsonargparse[signatures] (>=4.27.7)", "lightning-utilities (>=0.8.0)", "matplotlib (>3.1)", "omegaconf (>=2.2.3)", "requests (<2.32.0)", "rich (>=12.3.0)", "tensorboardX (>=2.2)", "torchmetrics (>=0.10.0)", "torchvision (>=0.16.0)"] -deepspeed = ["deepspeed (>=0.8.2,<=0.9.3)"] -dev = ["bitsandbytes (>=0.42.0)", "bitsandbytes (>=0.44.0)", "cloudpickle (>=1.3)", "coverage (==7.3.1)", "deepspeed (>=0.8.2,<=0.9.3)", "fastapi", "hydra-core (>=1.2.0)", "ipython[all] (<8.15.0)", "jsonargparse[signatures] (>=4.27.7)", "lightning-utilities (>=0.8.0)", "matplotlib (>3.1)", "numpy (>=1.17.2)", "omegaconf (>=2.2.3)", "onnx (>=1.12.0)", "onnxruntime (>=1.12.0)", "pandas (>1.0)", "psutil (<5.9.6)", "pytest (==7.4.0)", "pytest-cov (==4.1.0)", "pytest-random-order (==1.1.0)", "pytest-rerunfailures (==12.0)", "pytest-timeout (==2.1.0)", "requests (<2.32.0)", "rich (>=12.3.0)", "scikit-learn (>0.22.1)", "tensorboard (>=2.9.1)", "tensorboardX (>=2.2)", "torchmetrics (>=0.10.0)", "torchvision (>=0.16.0)", "uvicorn"] +all = ["bitsandbytes (>=0.42.0) ; sys_platform == \"darwin\"", "bitsandbytes (>=0.44.0) ; sys_platform == \"linux\" or sys_platform == \"win32\"", "deepspeed (>=0.8.2,<=0.9.3) ; platform_system != \"Windows\" and platform_system != \"Darwin\"", "hydra-core (>=1.2.0)", "ipython[all] (<8.15.0)", "jsonargparse[signatures] (>=4.27.7)", "lightning-utilities (>=0.8.0)", "matplotlib (>3.1)", "omegaconf (>=2.2.3)", "requests (<2.32.0)", "rich (>=12.3.0)", "tensorboardX (>=2.2)", "torchmetrics (>=0.10.0)", "torchvision (>=0.16.0)"] +deepspeed = ["deepspeed (>=0.8.2,<=0.9.3) ; platform_system != \"Windows\" and platform_system != \"Darwin\""] +dev = ["bitsandbytes (>=0.42.0) ; sys_platform == \"darwin\"", "bitsandbytes (>=0.44.0) ; sys_platform == \"linux\" or sys_platform == \"win32\"", "cloudpickle (>=1.3)", "coverage (==7.3.1)", "deepspeed (>=0.8.2,<=0.9.3) ; platform_system != \"Windows\" and platform_system != \"Darwin\"", "fastapi", "hydra-core (>=1.2.0)", "ipython[all] (<8.15.0)", "jsonargparse[signatures] (>=4.27.7)", "lightning-utilities (>=0.8.0)", "matplotlib (>3.1)", "numpy (>=1.17.2)", "omegaconf (>=2.2.3)", "onnx (>=1.12.0)", "onnxruntime (>=1.12.0)", "pandas (>1.0)", "psutil (<5.9.6)", "pytest (==7.4.0)", "pytest-cov (==4.1.0)", "pytest-random-order (==1.1.0)", "pytest-rerunfailures (==12.0)", "pytest-timeout (==2.1.0)", "requests (<2.32.0)", "rich (>=12.3.0)", "scikit-learn (>0.22.1)", "tensorboard (>=2.9.1)", "tensorboardX (>=2.2)", "torchmetrics (>=0.10.0)", "torchvision (>=0.16.0)", "uvicorn"] examples = ["ipython[all] (<8.15.0)", "lightning-utilities (>=0.8.0)", "requests (<2.32.0)", "torchmetrics (>=0.10.0)", "torchvision (>=0.16.0)"] -extra = ["bitsandbytes (>=0.42.0)", "bitsandbytes (>=0.44.0)", "hydra-core (>=1.2.0)", "jsonargparse[signatures] (>=4.27.7)", "matplotlib (>3.1)", "omegaconf (>=2.2.3)", "rich (>=12.3.0)", "tensorboardX (>=2.2)"] -strategies = ["deepspeed (>=0.8.2,<=0.9.3)"] +extra = ["bitsandbytes (>=0.42.0) ; sys_platform == \"darwin\"", "bitsandbytes (>=0.44.0) ; sys_platform == \"linux\" or sys_platform == \"win32\"", "hydra-core (>=1.2.0)", "jsonargparse[signatures] (>=4.27.7)", "matplotlib (>3.1)", "omegaconf (>=2.2.3)", "rich (>=12.3.0)", "tensorboardX (>=2.2)"] +strategies = ["deepspeed (>=0.8.2,<=0.9.3) ; platform_system != \"Windows\" and platform_system != \"Darwin\""] test = ["cloudpickle (>=1.3)", "coverage (==7.3.1)", "fastapi", "numpy (>=1.17.2)", "onnx (>=1.12.0)", "onnxruntime (>=1.12.0)", "pandas (>1.0)", "psutil (<5.9.6)", "pytest (==7.4.0)", "pytest-cov (==4.1.0)", "pytest-random-order (==1.1.0)", "pytest-rerunfailures (==12.0)", "pytest-timeout (==2.1.0)", "scikit-learn (>0.22.1)", "tensorboard (>=2.9.1)", "uvicorn"] [[package]] @@ -4207,7 +4345,6 @@ description = "World timezone definitions, modern and historical" optional = false python-versions = "*" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57"}, {file = "pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"}, @@ -4220,7 +4357,7 @@ description = "Python for Window Extensions" optional = false python-versions = "*" groups = ["main", "dev"] -markers = "platform_python_implementation != \"PyPy\" and sys_platform == \"win32\" and python_version <= \"3.11\"" +markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\"" files = [ {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, @@ -4249,7 +4386,7 @@ description = "Pseudo terminal support for Windows from Python." optional = false python-versions = ">=3.9" groups = ["main", "dev"] -markers = "python_version <= \"3.11\" and os_name == \"nt\"" +markers = "os_name == \"nt\"" files = [ {file = "pywinpty-2.0.15-cp310-cp310-win_amd64.whl", hash = "sha256:8e7f5de756a615a38b96cd86fa3cd65f901ce54ce147a3179c45907fa11b4c4e"}, {file = "pywinpty-2.0.15-cp311-cp311-win_amd64.whl", hash = "sha256:9a6bcec2df2707aaa9d08b86071970ee32c5026e10bcc3cc5f6f391d85baf7ca"}, @@ -4267,7 +4404,6 @@ description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -4331,7 +4467,6 @@ description = "Python bindings for 0MQ" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "pyzmq-26.2.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:f39d1227e8256d19899d953e6e19ed2ccb689102e6d85e024da5acf410f301eb"}, {file = "pyzmq-26.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a23948554c692df95daed595fdd3b76b420a4939d7a8a28d6d7dea9711878641"}, @@ -4454,7 +4589,6 @@ description = "JSON Referencing + Python" optional = false python-versions = ">=3.9" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"}, {file = "referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa"}, @@ -4472,7 +4606,6 @@ description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, @@ -4495,7 +4628,6 @@ description = "A pure python RFC3339 validator" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, @@ -4511,7 +4643,6 @@ description = "Pure python rfc3986 validator" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, @@ -4524,7 +4655,6 @@ description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "rpds_py-0.23.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2a54027554ce9b129fc3d633c92fa33b30de9f08bc61b32c053dc9b537266fed"}, {file = "rpds_py-0.23.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b5ef909a37e9738d146519657a1aab4584018746a18f71c692f2f22168ece40c"}, @@ -4631,6 +4761,61 @@ files = [ {file = "rpds_py-0.23.1.tar.gz", hash = "sha256:7f3240dcfa14d198dba24b8b9cb3b108c06b68d45b7babd9eefc1038fdf7e707"}, ] +[[package]] +name = "s2fft" +version = "1.3.0" +description = "Differentiable and accelerated spherical transforms with JAX" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "s2fft-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b2eb897069974d4da775df5d77100cb80115fd61d0eb1eb2bd7c5e53e0efefc7"}, + {file = "s2fft-1.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2c99638b32c8cb4356a173c3302cc5f0b5acede555b4add567ecd0d2febb1fb"}, + {file = "s2fft-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd293180fa8ccdc42bbaa4313f85b899155621ea51449fff943691b5fc3c08b9"}, + {file = "s2fft-1.3.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:24ae923a345c3b0a8a956130b2e48b7dc379c634a78e0e998420e0ede4491131"}, + {file = "s2fft-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c586896a13d64157c6296a1bc859c5608d59b1be06878cb4997aa7d712e54e85"}, + {file = "s2fft-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:13b09974eeb70c83d062833d01d7e4be0e0e5a9f8f815aa60e895ad4c9d359a7"}, + {file = "s2fft-1.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32aa4368327038c0e05796fcb7d5ab9712b1e0c08c4629b4b55b59725830f437"}, + {file = "s2fft-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24addc8e7b774234dbd68fa56e73aa5e6110d3c938c537b0843219a4ecb6e1b"}, + {file = "s2fft-1.3.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9f9dd430fff84ddc602d5e8257ce5be9d297b5624f7b2f7852dde3cc26374fd3"}, + {file = "s2fft-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b97e98ed9569db5b000ed14e98231746dea83ffa6771909da00627a8de66a96"}, + {file = "s2fft-1.3.0-cp312-abi3-macosx_11_0_arm64.whl", hash = "sha256:7f5678d46883e7b9d4df6b0ab2842e80da16d526e45d0502fb82ce2740201587"}, + {file = "s2fft-1.3.0-cp312-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9636c3ff9e484ad7b54123eaf0ed1804581a550362e151eac6a7c61bb9c76ff2"}, + {file = "s2fft-1.3.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e11fe8bb6d64ded3cf5b7bea1431f30def62053ed7654893ae7867c000de263"}, + {file = "s2fft-1.3.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:c76863762e899b80e3a870f7eb26fa992e34381aa5c306eeaed8d36bc38114f2"}, + {file = "s2fft-1.3.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:c4a288f3c26348dcf0df6a0ad2a8797f6fd72e76a9b2026d1e0c5bfb6b6b9179"}, + {file = "s2fft-1.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:95cfaacd80836b2fb07ba9b6de6844f7f32bf368ac0c0838aab95623c15ff9d3"}, + {file = "s2fft-1.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97a70bceea620924292da112120cc5e650949289fdd0bcfe460fb01d8b48783f"}, + {file = "s2fft-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c905e1b4ef09d8771193b4a4246e2e5fe9e2be9a74dc3c187aa213fdc173e6a"}, + {file = "s2fft-1.3.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5c523f6c4ff1826b7e6e750423c77c10d474e5debb32f00a97a0a1fff584cb09"}, + {file = "s2fft-1.3.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:42484b66cd1c19d8c54e998e88cd8c7716c604f65955cbf8ac4f17b56af4abbc"}, + {file = "s2fft-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6bd1c31d5d85162135671c9e2b44b84c0172016850faa24b27f5a62beb9241c7"}, + {file = "s2fft-1.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e3cbe372d65cd3bfdb99b6f8884400e734bd392c4fed836b77f275f6838ea73"}, + {file = "s2fft-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7ed91c0aeb484c24490e29b76d38f66c31622dae97093634631c2fea1c3c565"}, + {file = "s2fft-1.3.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:126deacecea44f3d856915088b9f4646c5734246edf033638ca8627a06f1d077"}, + {file = "s2fft-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:70ec758b84206aef7bf7909bad7c25e89175ae137c0df198fb338672e64c84ed"}, + {file = "s2fft-1.3.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e362575185ed51ce42572a26c041478a0202fb836a274056d7efb424c10b29d"}, + {file = "s2fft-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d70eb15562e1a1ae48a7ba0edadc7fe33379b178c906974e8a5686b53f14c31"}, + {file = "s2fft-1.3.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b89d217fadbf8955012aa1eca0170a53aafa2d9785113b7206622135c769e83"}, + {file = "s2fft-1.3.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:376e6dacc57850714c1b288f40719eb95bdb18ae78e39d1e1403f6c7fb93d810"}, + {file = "s2fft-1.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54c337c6837366dcc2a3bab678df8a7b409985e0dde45e542393c415db0594f1"}, + {file = "s2fft-1.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f73d3779e15dc33c0deb4875509b0b2e236b204e5922443970bba9607ae9fd6a"}, + {file = "s2fft-1.3.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe0e89310773e1e2977e131b5e1ab786146d88aeb5ef93e4e7dce50140bf48e1"}, + {file = "s2fft-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f098f0be87a0023fff47fe2e621095a86594081833645787d3711acdd5a2e87"}, + {file = "s2fft-1.3.0.tar.gz", hash = "sha256:a174595a79f7a5e2e0186d16d43f39e1d40c09012ad37568a6284245869fb205"}, +] + +[package.dependencies] +jax = ">=0.3.13,<0.6.0" +jaxlib = "*" +numpy = ">=1.20" + +[package.extras] +docs = ["ipython (>=7.16.1)", "jupyter (>=1.0.0)", "nbsphinx-link (>=1.3.0)", "pydata-sphinx-theme (>=0.12.0)", "sphinx (>=5.0.0)", "sphinx-copybutton", "sphinx-git (>=11.0.0)", "sphinx-tabs (>=3.2.0)", "sphinx_mdinclude", "sphinx_rtd_theme", "sphinx_toolbox (>=2.15.0)", "sphinxcontrib-bibtex (>=2.4.1)", "sphinxcontrib-texfigure (>=0.1.3)", "sphinxemoji"] +plotting = ["ipykernel", "ipywidgets", "pyvista", "trame"] +tests = ["ducc0", "healpy", "numpy (<2)", "pyssht", "pytest", "pytest-cov", "so3", "torch"] +torch = ["torch"] + [[package]] name = "safetensors" version = "0.5.2" @@ -4638,7 +4823,6 @@ description = "" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "safetensors-0.5.2-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:45b6092997ceb8aa3801693781a71a99909ab9cc776fbc3fa9322d29b1d3bef2"}, {file = "safetensors-0.5.2-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6d0d6a8ee2215a440e1296b843edf44fd377b055ba350eaba74655a2fe2c4bae"}, @@ -4677,7 +4861,6 @@ description = "A set of python modules for machine learning and data mining" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "scikit_learn-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d056391530ccd1e501056160e3c9673b4da4805eb67eb2bdf4e983e1f9c9204e"}, {file = "scikit_learn-1.6.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0c8d036eb937dbb568c6242fa598d551d88fb4399c0344d95c001980ec1c7d36"}, @@ -4733,7 +4916,6 @@ description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "scipy-1.15.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:c64ded12dcab08afff9e805a67ff4480f5e69993310e093434b10e85dc9d43e1"}, {file = "scipy-1.15.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5b190b935e7db569960b48840e5bef71dc513314cc4e79a1b7d14664f57fd4ff"}, @@ -4783,7 +4965,7 @@ numpy = ">=1.23.5,<2.5" [package.extras] dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.16.5)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] -test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja ; sys_platform != \"emscripten\"", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "seaborn" @@ -4792,7 +4974,6 @@ description = "Statistical data visualization" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987"}, {file = "seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7"}, @@ -4815,16 +4996,15 @@ description = "Send file to trash natively under Mac OS X, Windows and Linux" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, ] [package.extras] -nativelib = ["pyobjc-framework-Cocoa", "pywin32"] -objc = ["pyobjc-framework-Cocoa"] -win32 = ["pywin32"] +nativelib = ["pyobjc-framework-Cocoa ; sys_platform == \"darwin\"", "pywin32 ; sys_platform == \"win32\""] +objc = ["pyobjc-framework-Cocoa ; sys_platform == \"darwin\""] +win32 = ["pywin32 ; sys_platform == \"win32\""] [[package]] name = "setuptools" @@ -4833,20 +5013,19 @@ description = "Easily download, build, install, upgrade, and uninstall Python pa optional = false python-versions = ">=3.9" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3"}, {file = "setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] -core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] [[package]] name = "shapely" @@ -4855,7 +5034,6 @@ description = "Manipulation and analysis of geometric objects" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "shapely-2.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:33fb10e50b16113714ae40adccf7670379e9ccf5b7a41d0002046ba2b8f0f691"}, {file = "shapely-2.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f44eda8bd7a4bccb0f281264b34bf3518d8c4c9a8ffe69a1a05dabf6e8461147"}, @@ -4915,7 +5093,6 @@ description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -4928,7 +5105,6 @@ description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -4941,7 +5117,6 @@ description = "A modern CSS selector implementation for Beautiful Soup." optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, @@ -4954,7 +5129,6 @@ description = "Extract data from python stack frames and tracebacks for informat optional = false python-versions = "*" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, @@ -4975,7 +5149,6 @@ description = "Computer algebra system (CAS) in Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "sympy-1.13.1-py3-none-any.whl", hash = "sha256:db36cdc64bf61b9b24578b6f7bab1ecdd2452cf008f34faa33776680c26d66f8"}, {file = "sympy-1.13.1.tar.gz", hash = "sha256:9cebf7e04ff162015ce31c9c6c9144daa34a93bd082f54fd8f12deca4f47515f"}, @@ -4994,7 +5167,6 @@ description = "Tornado websocket backend for the Xterm.js Javascript terminal em optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, @@ -5017,7 +5189,6 @@ description = "threadpoolctl" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"}, {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"}, @@ -5030,7 +5201,6 @@ description = "Tigramite causal inference for time series" optional = false python-versions = "*" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "tigramite-5.2.7.0-py3-none-any.whl", hash = "sha256:2f32f60b5ad2ec55573f6e4426cd29ac2b91b6e019c077f26795669d513afb1e"}, {file = "tigramite-5.2.7.0.tar.gz", hash = "sha256:4a2ca8067f2319ebe886affa2241d19bc58c5e4568e63933c8208b8de6a03289"}, @@ -5053,7 +5223,6 @@ description = "A tiny CSS parser" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, @@ -5073,7 +5242,7 @@ description = "A lil' TOML parser" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version < \"3.11\"" +markers = "python_version == \"3.10\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, @@ -5116,7 +5285,6 @@ description = "Style preserving TOML library" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, @@ -5129,7 +5297,6 @@ description = "List processing tools and functional utilities" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "toolz-1.0.0-py3-none-any.whl", hash = "sha256:292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236"}, {file = "toolz-1.0.0.tar.gz", hash = "sha256:2c86e3d9a04798ac556793bced838816296a2f085017664e4995cb40a1047a02"}, @@ -5142,7 +5309,6 @@ description = "Tensors and Dynamic neural networks in Python with strong GPU acc optional = false python-versions = ">=3.8.0" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "torch-2.5.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:71328e1bbe39d213b8721678f9dcac30dfc452a46d586f1d514a6aa0a99d4744"}, {file = "torch-2.5.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:34bfa1a852e5714cbfa17f27c49d8ce35e1b7af5608c4bc6e81392c352dbc601"}, @@ -5195,7 +5361,6 @@ description = "PyTorch native Metrics" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "torchmetrics-1.6.1-py3-none-any.whl", hash = "sha256:c3090aa2341129e994c0a659abb6d4140ae75169a6ebf45bffc16c5cb553b38e"}, {file = "torchmetrics-1.6.1.tar.gz", hash = "sha256:a5dc236694b392180949fdd0a0fcf2b57135c8b600e557c725e077eb41e53e64"}, @@ -5211,7 +5376,7 @@ torch = ">=2.0.0" all = ["SciencePlots (>=2.0.0)", "gammatone (>=1.0.0)", "ipadic (>=1.0.0)", "librosa (>=0.10.0)", "matplotlib (>=3.6.0)", "mecab-python3 (>=1.0.6)", "mypy (==1.14.0)", "nltk (>3.8.1)", "numpy (<2.0)", "onnxruntime (>=1.12.0)", "pesq (>=0.0.4)", "piq (<=0.8.0)", "pycocotools (>2.0.0)", "pystoi (>=0.4.0)", "regex (>=2021.9.24)", "requests (>=2.19.0)", "scipy (>1.0.0)", "sentencepiece (>=0.2.0)", "torch (==2.5.1)", "torch-fidelity (<=0.4.0)", "torchaudio (>=2.0.1)", "torchvision (>=0.15.1)", "torchvision (>=0.15.1)", "tqdm (<4.68.0)", "transformers (>4.4.0)", "transformers (>=4.42.3)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] audio = ["gammatone (>=1.0.0)", "librosa (>=0.10.0)", "numpy (<2.0)", "onnxruntime (>=1.12.0)", "pesq (>=0.0.4)", "pystoi (>=0.4.0)", "requests (>=2.19.0)", "torchaudio (>=2.0.1)"] detection = ["pycocotools (>2.0.0)", "torchvision (>=0.15.1)"] -dev = ["PyTDC (==0.4.1)", "SciencePlots (>=2.0.0)", "bert_score (==0.3.13)", "dython (==0.7.6)", "dython (>=0.7.8,<0.8.0)", "fairlearn", "fast-bss-eval (>=0.1.0)", "faster-coco-eval (>=1.6.3)", "gammatone (>=1.0.0)", "huggingface-hub (<0.28)", "ipadic (>=1.0.0)", "jiwer (>=2.3.0)", "kornia (>=0.6.7)", "librosa (>=0.10.0)", "lpips (<=0.1.4)", "matplotlib (>=3.6.0)", "mecab-ko (>=1.0.0,<1.1.0)", "mecab-ko-dic (>=1.0.0)", "mecab-python3 (>=1.0.6)", "mir-eval (>=0.6)", "monai (==1.3.2)", "monai (==1.4.0)", "mypy (==1.14.0)", "netcal (>1.0.0)", "nltk (>3.8.1)", "numpy (<2.0)", "numpy (<2.3.0)", "onnxruntime (>=1.12.0)", "pandas (>1.4.0)", "permetrics (==2.0.0)", "pesq (>=0.0.4)", "piq (<=0.8.0)", "pycocotools (>2.0.0)", "pystoi (>=0.4.0)", "pytorch-msssim (==1.0.0)", "regex (>=2021.9.24)", "requests (>=2.19.0)", "rouge-score (>0.1.0)", "sacrebleu (>=2.3.0)", "scikit-image (>=0.19.0)", "scipy (>1.0.0)", "scipy (>1.0.0)", "sentencepiece (>=0.2.0)", "sewar (>=0.4.4)", "statsmodels (>0.13.5)", "torch (==2.5.1)", "torch-fidelity (<=0.4.0)", "torch_complex (<0.5.0)", "torchaudio (>=2.0.1)", "torchvision (>=0.15.1)", "torchvision (>=0.15.1)", "tqdm (<4.68.0)", "transformers (>4.4.0)", "transformers (>=4.42.3)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] +dev = ["PyTDC (==0.4.1) ; python_version < \"3.12\"", "SciencePlots (>=2.0.0)", "bert_score (==0.3.13)", "dython (==0.7.6) ; python_version < \"3.9\"", "dython (>=0.7.8,<0.8.0) ; python_version > \"3.8\"", "fairlearn", "fast-bss-eval (>=0.1.0)", "faster-coco-eval (>=1.6.3)", "gammatone (>=1.0.0)", "huggingface-hub (<0.28)", "ipadic (>=1.0.0)", "jiwer (>=2.3.0)", "kornia (>=0.6.7)", "librosa (>=0.10.0)", "lpips (<=0.1.4)", "matplotlib (>=3.6.0)", "mecab-ko (>=1.0.0,<1.1.0) ; python_version < \"3.12\"", "mecab-ko-dic (>=1.0.0) ; python_version < \"3.12\"", "mecab-python3 (>=1.0.6)", "mir-eval (>=0.6)", "monai (==1.3.2) ; python_version < \"3.9\"", "monai (==1.4.0) ; python_version > \"3.8\"", "mypy (==1.14.0)", "netcal (>1.0.0)", "nltk (>3.8.1)", "numpy (<2.0)", "numpy (<2.3.0)", "onnxruntime (>=1.12.0)", "pandas (>1.4.0)", "permetrics (==2.0.0)", "pesq (>=0.0.4)", "piq (<=0.8.0)", "pycocotools (>2.0.0)", "pystoi (>=0.4.0)", "pytorch-msssim (==1.0.0)", "regex (>=2021.9.24)", "requests (>=2.19.0)", "rouge-score (>0.1.0)", "sacrebleu (>=2.3.0)", "scikit-image (>=0.19.0)", "scipy (>1.0.0)", "scipy (>1.0.0)", "sentencepiece (>=0.2.0)", "sewar (>=0.4.4)", "statsmodels (>0.13.5)", "torch (==2.5.1)", "torch-fidelity (<=0.4.0)", "torch_complex (<0.5.0)", "torchaudio (>=2.0.1)", "torchvision (>=0.15.1)", "torchvision (>=0.15.1)", "tqdm (<4.68.0)", "transformers (>4.4.0)", "transformers (>=4.42.3)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] image = ["scipy (>1.0.0)", "torch-fidelity (<=0.4.0)", "torchvision (>=0.15.1)"] multimodal = ["piq (<=0.8.0)", "transformers (>=4.42.3)"] text = ["ipadic (>=1.0.0)", "mecab-python3 (>=1.0.6)", "nltk (>3.8.1)", "regex (>=2021.9.24)", "sentencepiece (>=0.2.0)", "tqdm (<4.68.0)", "transformers (>4.4.0)"] @@ -5225,7 +5390,6 @@ description = "Tornado is a Python web framework and asynchronous networking lib optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1"}, {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803"}, @@ -5247,7 +5411,6 @@ description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, @@ -5270,7 +5433,6 @@ description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, @@ -5287,7 +5449,7 @@ description = "A language and compiler for custom Deep Learning operations" optional = false python-versions = "*" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version <= \"3.11\"" +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "triton-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b0dd10a925263abbe9fa37dcde67a5e9b2383fc269fdf59f5657cac38c5d1d8"}, {file = "triton-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f34f6e7885d1bf0eaaf7ba875a5f0ce6f3c13ba98f9503651c1e6dc6757ed5c"}, @@ -5311,7 +5473,6 @@ description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, @@ -5324,7 +5485,6 @@ description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, @@ -5337,7 +5497,6 @@ description = "Provider of IANA time zone data" optional = false python-versions = ">=2" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639"}, {file = "tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694"}, @@ -5350,7 +5509,6 @@ description = "RFC 6570 URI Template Processor" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, @@ -5366,14 +5524,13 @@ description = "HTTP library with thread-safe connection pooling, file post, and optional = false python-versions = ">=3.9" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -5385,7 +5542,6 @@ description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "virtualenv-20.29.2-py3-none-any.whl", hash = "sha256:febddfc3d1ea571bdb1dc0f98d7b45d24def7428214d4fb73cc486c9568cce6a"}, {file = "virtualenv-20.29.2.tar.gz", hash = "sha256:fdaabebf6d03b5ba83ae0a02cfe96f48a716f4fae556461d180825866f75b728"}, @@ -5398,7 +5554,7 @@ platformdirs = ">=3.9.1,<5" [package.extras] docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] [[package]] name = "wcwidth" @@ -5407,7 +5563,6 @@ description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, @@ -5420,7 +5575,6 @@ description = "A library for working with the color formats defined by HTML and optional = false python-versions = ">=3.9" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, @@ -5433,7 +5587,6 @@ description = "Character encoding aliases for legacy web content" optional = false python-versions = "*" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, @@ -5446,7 +5599,6 @@ description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, @@ -5464,7 +5616,6 @@ description = "Jupyter interactive widgets for Jupyter Notebook" optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "widgetsnbextension-4.0.13-py3-none-any.whl", hash = "sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71"}, {file = "widgetsnbextension-4.0.13.tar.gz", hash = "sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6"}, @@ -5477,7 +5628,6 @@ description = "N-D labeled arrays and datasets in Python" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "xarray-2025.1.2-py3-none-any.whl", hash = "sha256:a7ad6a36c6e0becd67f8aff6a7808d20e4bdcd344debb5205f0a34b1a4a7f8d6"}, {file = "xarray-2025.1.2.tar.gz", hash = "sha256:e7675c79ac69d274dd3b3c5450ce57176928d2792947576251ed1c7df1783224"}, @@ -5493,7 +5643,7 @@ accel = ["bottleneck", "flox", "numba (>=0.54)", "numbagg", "opt_einsum", "scipy complete = ["xarray[accel,etc,io,parallel,viz]"] dev = ["hypothesis", "jinja2", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-env", "pytest-timeout", "pytest-xdist", "ruff (>=0.8.0)", "sphinx", "sphinx_autosummary_accessors", "xarray[complete]"] etc = ["sparse"] -io = ["cftime", "fsspec", "h5netcdf", "netCDF4", "pooch", "pydap", "scipy", "zarr"] +io = ["cftime", "fsspec", "h5netcdf", "netCDF4", "pooch", "pydap ; python_version < \"3.10\"", "scipy", "zarr"] parallel = ["dask[complete]"] viz = ["cartopy", "matplotlib", "nc-time-axis", "seaborn"] @@ -5504,7 +5654,6 @@ description = "Yet another URL library" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"}, {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"}, @@ -5602,21 +5751,20 @@ description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" files = [ {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.12" -content-hash = "6ed7da60935958024b402007a6534a7f77cf53fe58e6a3989e26dd61d3266de4" +content-hash = "cf79d2e0ed50686987f3612de8dac8edada437a6e55f0e8bb3b3080d46615db9" diff --git a/pyproject.toml b/pyproject.toml index a0e8bee..d0d4690 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,6 +49,9 @@ jupyter-contrib-nbextensions = "^0.7.0" notebook = "^7.3.2" jupyterlab-widgets = "^3.0.13" healpy = "^1.19.0" +s2fft = "1.3.0" +jax = "0.4.29" +jax2torch = "^0.0.7" [tool.poetry.group.dev.dependencies] # Optional dependencies that need to be installed with poetry diff --git a/scripts/main_picabu.py b/scripts/main_picabu.py index 85dddd7..540741d 100755 --- a/scripts/main_picabu.py +++ b/scripts/main_picabu.py @@ -197,12 +197,8 @@ def main( name = f"savar_{savar_params.linearity}_{savar_params.is_forced}_{savar_params.difficulty}_{savar_params.n_per_col**2}_nlinmix_{model_params.nonlinear_mixing}_nlindyn_{model_params.nonlinear_dynamics}" else: name = f"{start_name}_{second_name_name}_{train_params.valid_freq}_var_{data_var_ids_str}_nlinmix_{model_params.nonlinear_mixing}_nlindyn_{model_params.nonlinear_dynamics}_tau_{experiment_params.tau}_z_{experiment_params.d_z}_lr_{train_params.lr}_bs_{data_params.batch_size}" - - exp_path = exp_path / name - - if exp_path.exists(): - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - exp_path = exp_path.parent / f"{exp_path.name}_{timestamp}" + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + exp_path = exp_path / f"{name}_{timestamp}" os.makedirs(exp_path, exist_ok=False) print(f"The experiment name is {exp_path}") @@ -458,4 +454,5 @@ def assert_args( ) main(experiment_params, data_params, train_params, model_params, optim_params, plot_params, savar_params, rollout_params) - + timestamp_end = datetime.now().strftime("%Y%m%d_%H%M%S") + print(f"the run finished at {timestamp_end}") diff --git a/scripts/run_rollout_bf.sh b/scripts/run_rollout_bf.sh index 170ad0c..0a5ad8a 100644 --- a/scripts/run_rollout_bf.sh +++ b/scripts/run_rollout_bf.sh @@ -16,7 +16,7 @@ module purge # 1. Load the required modules module --quiet load python/3.10 - +module load cuda/12.4.1 # 2. Load your environment assuming environment is called "env_climatem" in $HOME/env/ (standardized) source $HOME/envs/env_emulator_climatem/bin/activate @@ -30,7 +30,7 @@ export TORCH_DISTRIBUTED_DEBUG=INFO export TORCH_CPP_LOG_LEVEL=INFO echo "=== calling accelerate" -exp_ids=("test_debug_small/FALSE_AUG_200_var_ts_nlinmix_True_nlindyn_True_tau_5_z_90_lr_0.0001_bs_128_20260313_080329") +exp_ids=("test_debug_small/FALSE_AUG_200_var_ts_nlinmix_True_nlindyn_True_tau_5_z_90_lr_0.0001_bs_128_20260325_094703") for exp_id in "${exp_ids[@]}" do diff --git a/scripts/run_single_jsonfile.sh b/scripts/run_single_jsonfile.sh index 92d5360..3f75ee7 100755 --- a/scripts/run_single_jsonfile.sh +++ b/scripts/run_single_jsonfile.sh @@ -16,7 +16,7 @@ module purge # 1. Load the required modules module --quiet load python/3.10 - +module load cuda/12.4.1 # 2. Load your environment assuming environment is called "env_climatem" in $HOME/env/ (standardized) source $HOME/envs/env_emulator_climatem/bin/activate # 3. Enable expandable allocator to avoid fragmentation @@ -29,6 +29,7 @@ export MASTER_ADDR="127.0.0.1" export TORCH_DISTRIBUTED_DEBUG=INFO export TORCH_CPP_LOG_LEVEL=INFO +export JAX_ENABLE_X64=0 echo "=== calling accelerate" From 58332e45733655eeb1fa4dc6531f1c5fd9eec839 Mon Sep 17 00:00:00 2001 From: Shan Zhao Date: Mon, 30 Mar 2026 10:42:16 -0400 Subject: [PATCH 14/16] mask 1e-6, use 2*nside --- climatem/model/train_model.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/climatem/model/train_model.py b/climatem/model/train_model.py index f8a1838..c95339c 100644 --- a/climatem/model/train_model.py +++ b/climatem/model/train_model.py @@ -247,7 +247,7 @@ def __init__( self.sparsity_normalization = self.tau * self.d_z * self.d_z nside = hp.npix2nside(self.d_x) - lmax = 3 * nside - 1 + lmax = 2 * nside - 1 # default: 3 L = lmax + 1 self.spherical_weights = (2 * torch.arange(L) + 1).unsqueeze(0) # unsqueeze the batch dimension batched_sht = jax.vmap(lambda f: s2fft.forward(f, L=L, nside=nside, sampling="healpix", method="jax")) @@ -1538,11 +1538,13 @@ def get_spatial_spectral_loss(self, y_true, y_pred, take_log=True, take_spherica # print("first 3 psd pred: ",alm_pred[0,0,:3], "gt:", alm_true[0,0,:3]) # print("last 3 psd pred: ",alm_pred[0,0,-3:], "gt:",alm_true[0,0,-3:]) if take_log: - idx_pos = torch.logical_or(torch.abs(alm_pred) < 1e-4, torch.abs(alm_true) < 1e-4) - alm_true = torch.where(idx_pos, 0.0, alm_true) # uc - alm_pred = torch.where(idx_pos, 0.0, alm_pred) # uc - alm_true = torch.log(torch.abs(alm_true) + 1e-4) # uc - alm_pred = torch.log(torch.abs(alm_pred) + 1e-4) # uc + idx_pos = torch.logical_or(torch.abs(alm_pred) < 1e-6, torch.abs(alm_true) < 1e-6) + # idx_pos = torch.abs(alm_true) < 1e-6 + alm_true = torch.where(idx_pos, 0.0, alm_true) + alm_pred = torch.where(idx_pos, 0.0, alm_pred) + alm_true = torch.log(torch.abs(alm_true) + 1e-6) + alm_pred = torch.log(torch.abs(alm_pred) + 1e-6) + # element-wise difference, sum over the harmonic order dimension, weighted by harmonic degree, the batch dim is kept and no time dim spectral_loss = ( torch.sum(torch.abs(alm_pred - alm_true), dim=-1) / self.spherical_weights @@ -1576,6 +1578,9 @@ def get_spatial_spectral_loss(self, y_true, y_pred, take_log=True, take_spherica spectral_loss = spectral_loss[ :, : round(self.optim_params.fraction_lowest_wavenumbers * spectral_loss.shape[1]) ] + if self.iteration % self.plot_params.print_freq == 0: + print("Mean spectral_loss:", torch.mean(spectral_loss)) + return torch.mean(spectral_loss) def get_temporal_spectral_loss(self, x, y_true, y_pred): From 4b8f0a2c7ebaf2a81dfb37887cd986ce928309c0 Mon Sep 17 00:00:00 2001 From: Shan Zhao Date: Tue, 31 Mar 2026 05:53:32 -0400 Subject: [PATCH 15/16] use only gt for mask --- climatem/model/train_model.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/climatem/model/train_model.py b/climatem/model/train_model.py index c95339c..063fd6f 100644 --- a/climatem/model/train_model.py +++ b/climatem/model/train_model.py @@ -1538,8 +1538,8 @@ def get_spatial_spectral_loss(self, y_true, y_pred, take_log=True, take_spherica # print("first 3 psd pred: ",alm_pred[0,0,:3], "gt:", alm_true[0,0,:3]) # print("last 3 psd pred: ",alm_pred[0,0,-3:], "gt:",alm_true[0,0,-3:]) if take_log: - idx_pos = torch.logical_or(torch.abs(alm_pred) < 1e-6, torch.abs(alm_true) < 1e-6) - # idx_pos = torch.abs(alm_true) < 1e-6 + # idx_pos = torch.logical_or(torch.abs(alm_pred) < 1e-6, torch.abs(alm_true) < 1e-6) + idx_pos = torch.abs(alm_true) < 1e-6 alm_true = torch.where(idx_pos, 0.0, alm_true) alm_pred = torch.where(idx_pos, 0.0, alm_pred) alm_true = torch.log(torch.abs(alm_true) + 1e-6) From b16f300226e074c2e81e28e669ea00702b760afb Mon Sep 17 00:00:00 2001 From: Shan Zhao Date: Wed, 1 Apr 2026 11:28:25 -0400 Subject: [PATCH 16/16] add spherical harmonics option for rollout --- climatem/model/train_model.py | 8 +- climatem/rollouts/bayesian_filter.py | 125 ++++++++++++++++++++++++++- scripts/rollout_bf.py | 10 ++- 3 files changed, 135 insertions(+), 8 deletions(-) diff --git a/climatem/model/train_model.py b/climatem/model/train_model.py index 063fd6f..d76b790 100644 --- a/climatem/model/train_model.py +++ b/climatem/model/train_model.py @@ -1539,11 +1539,11 @@ def get_spatial_spectral_loss(self, y_true, y_pred, take_log=True, take_spherica # print("last 3 psd pred: ",alm_pred[0,0,-3:], "gt:",alm_true[0,0,-3:]) if take_log: # idx_pos = torch.logical_or(torch.abs(alm_pred) < 1e-6, torch.abs(alm_true) < 1e-6) - idx_pos = torch.abs(alm_true) < 1e-6 + idx_pos = torch.abs(alm_true) < 1e-8 alm_true = torch.where(idx_pos, 0.0, alm_true) alm_pred = torch.where(idx_pos, 0.0, alm_pred) - alm_true = torch.log(torch.abs(alm_true) + 1e-6) - alm_pred = torch.log(torch.abs(alm_pred) + 1e-6) + alm_true = torch.log(torch.abs(alm_true) + 1e-8) + alm_pred = torch.log(torch.abs(alm_pred) + 1e-8) # element-wise difference, sum over the harmonic order dimension, weighted by harmonic degree, the batch dim is kept and no time dim spectral_loss = ( @@ -1596,6 +1596,8 @@ def get_temporal_spectral_loss(self, x, y_true, y_pred): # concatenate x and y_true along the time axis obs = torch.cat((x, y_true), dim=1) pred = torch.cat((x, y_pred), dim=1) + # obs = torch.mean(obs, dim=-1, keepdim=True) + # pred = torch.mean(pred, dim=-1, keepdim=True) # Calculate the power spectrum # compute the distance between the losses... temporal_spectral_loss = torch.nan_to_num( diff --git a/climatem/rollouts/bayesian_filter.py b/climatem/rollouts/bayesian_filter.py index 39786ec..866477e 100644 --- a/climatem/rollouts/bayesian_filter.py +++ b/climatem/rollouts/bayesian_filter.py @@ -1,6 +1,11 @@ import numpy as np import torch from tqdm import trange +from jax2torch import jax2torch +import jax +import s2fft +import healpy as hp + def calculate_fft_mean_std_across_all_noresm(datamodule, accelerator): @@ -28,6 +33,41 @@ def calculate_fft_mean_std_across_all_noresm(datamodule, accelerator): +def calculate_shm_mean_std_across_all_noresm(datamodule, accelerator): + # Start again at the beginning of the dataloader. + train_dataloader = iter(datamodule.train_dataloader(accelerator)) + + # iterate through the data and append all the y values together + y_all = [] + for i in range(len(train_dataloader)): + _, y_whole_dataloader = next(train_dataloader) + y_all.append(y_whole_dataloader[:, 0]) + y_all = torch.cat(y_all, dim=0) + y_all = torch.nan_to_num(y_all) #(torch.Size([4608, 1, 3072]) + n, t = y_all.shape[0], y_all.shape[1] + + # make sure we reset the dataloader + train_dataloader = iter(datamodule.train_dataloader(accelerator)) + + nside = hp.npix2nside(y_all.shape[2]) + lmax = 2 * nside - 1 # default: 3 * nside - 1 + L = lmax + 1 + + spherical_weights = (2 * torch.arange(L) + 1).unsqueeze(0) # unsqueeze the batch dimension + batched_sht = jax.vmap(lambda f: s2fft.forward(f, L=L, nside=nside, sampling="healpix", method="jax")) + torch_sht = jax2torch(batched_sht) + y_all = y_all.view(-1, y_all.shape[-1]) + + alm_true = torch_sht(y_all) + y_true_flm_data = torch.sum(torch.abs(alm_true)**2, dim=-1)/spherical_weights + y_true_flm_data = y_true_flm_data.reshape(n, t, y_true_flm_data.shape[-1]) + + # calculate the mean and std of the fft of the true data across all the data + y_true_flm_mean = y_true_flm_data.mean(dim=0) + y_true_flm_std = y_true_flm_data.std(dim=0) + + return y_true_flm_mean, y_true_flm_std + def logscore_the_samples_for_spatial_spectra_bayesian( y_true_fft_mean, y_true_fft_std, @@ -79,6 +119,66 @@ def logscore_the_samples_for_spatial_spectra_bayesian( # score = ... return spatial_spectra_score +def logscore_the_samples_for_spherical_spatial_spectra_bayesian( + y_true_fft_mean, + y_true_fft_std, + y_pred_samples, + coords: np.ndarray, + sigma: float = 1.0, + num_particles: int = 100, + batch_size: int = 64, + distribution_spatial_spectra: str = "laplace", + tempering: bool = False, +): + """ + Calculate the spatial spectra of the true values and the predicted values, and then calculate a score between them. + This is a measure of how well the model is predicting the spatial spectra of the true values. + + Args: + true_values: torch.Tensor, observed values in a batch + y_pred: torch.Tensor, a selection of predicted values + num_particles: int, the number of samples that have been taken from the model + """ + # print("y_pred_samples",y_pred_samples.shape) #500, 8, 1, 3072 + nside = hp.npix2nside(y_pred_samples.shape[3]) + b, n, t = y_pred_samples.shape[0], y_pred_samples.shape[1], y_pred_samples.shape[2] + lmax = 2 * nside - 1 + L = lmax + 1 + spherical_weights = (2 * torch.arange(L) + 1).unsqueeze(0) # unsqueeze the batch dimension + batched_sht = jax.vmap(lambda f: s2fft.forward(f, L=L, nside=nside, sampling="healpix", method="jax")) + torch_sht = jax2torch(batched_sht) + y_pred_samples = y_pred_samples.reshape(-1, y_pred_samples.shape[-1]) + alm_pred = torch_sht(y_pred_samples) + fft_pred = torch.sum(torch.abs(alm_pred)**2, dim=-1) / spherical_weights + fft_pred = fft_pred.reshape(b,n,t, fft_pred.shape[-1]) + + # extend fft_true so it is the same value but extended to the same shape as fft_pred + fft_true = y_true_fft_mean.repeat(num_particles, batch_size, 1, 1) + fft_true_std = y_true_fft_std.repeat(num_particles, batch_size, 1, 1) + + if fft_pred.dim() == fft_true.dim() + 1: +# print("I am flattening the preds here.") + fft_pred = torch.flatten(fft_pred, start_dim=0, end_dim=1) + + assert fft_true.shape == fft_pred.shape + assert fft_true_std.shape == fft_pred.shape + + if distribution_spatial_spectra == "laplace": + spatial_spectra_score = torch.abs((fft_pred - fft_true) / (fft_true_std)) + elif distribution_spatial_spectra == "gaussian": + spatial_spectra_score = ((fft_pred - fft_true) ** 2) / (2 * fft_true_std**2) + +# print("Spatial spectra score shape before summing:", spatial_spectra_score.shape) + + spatial_spectra_score = -torch.sum(spatial_spectra_score, dim=(2, 3)) + if tempering: +# spatial_spectra_score /= y_true_fft_mean.shape[1] + # print(f"shape of FFT mean is {y_true_fft_mean.shape} and dim 1 is {y_true_fft_mean.shape[1]}") + spatial_spectra_score /= np.sqrt(y_true_fft_mean.shape[1]) + +# print("The spatial spectra score shape should be (num_particles, num_batch_size):", spatial_spectra_score.shape) + # score = ... + return spatial_spectra_score def particle_filter_weighting_bayesian( model, @@ -91,6 +191,7 @@ def particle_filter_weighting_bayesian( num_particles_per_particle: int = 10, timesteps: int = 120, score: str = "variance", + spherics: bool = False, save_dir: str = None, save_name: str = None, batch_size: int = 16, @@ -243,7 +344,16 @@ def particle_filter_weighting_bayesian( # Update the weights, where we want the weights to increase as the score improves if score == "spatial_spectra": - new_weights = score_the_samples_for_spatial_spectra( + if spherics: + new_weights = score_the_samples_for_spherical_spatial_spectra( + y, + samples_from_zs, + coords=coordinates, + num_particles=num_particles * num_particles_per_particle, + mid_latitudes=True, + ) + else: + new_weights = score_the_samples_for_spatial_spectra( y, samples_from_zs, coords=coordinates, @@ -264,7 +374,18 @@ def particle_filter_weighting_bayesian( # print(f"y_true_fft_mean shape {y_true_fft_mean.shape}") # This is [K*L, batch size, 1, 6250]--> Is this expected? # Then fft_true shape after repeating: torch.Size([K*L, batch size, 1, 3126] - scores_spatial_spectra = logscore_the_samples_for_spatial_spectra_bayesian( + if spherics: + scores_spatial_spectra = logscore_the_samples_for_spherical_spatial_spectra_bayesian( + y_true_fft_mean, + y_true_fft_std, + samples_from_zs, + coords=coordinates, + num_particles=num_particles * num_particles_per_particle, + batch_size=batch_size, + tempering=tempering, + ) + else: + scores_spatial_spectra = logscore_the_samples_for_spatial_spectra_bayesian( y_true_fft_mean, y_true_fft_std, samples_from_zs, diff --git a/scripts/rollout_bf.py b/scripts/rollout_bf.py index 75180f0..8d6f79e 100644 --- a/scripts/rollout_bf.py +++ b/scripts/rollout_bf.py @@ -14,7 +14,7 @@ from climatem.data_loader.causal_datamodule import CausalClimateDataModule from climatem.model.tsdcd_latent import LatentTSDCD -from climatem.rollouts.bayesian_filter import calculate_fft_mean_std_across_all_noresm, logscore_the_samples_for_spatial_spectra_bayesian, particle_filter_weighting_bayesian +from climatem.rollouts.bayesian_filter import calculate_fft_mean_std_across_all_noresm, calculate_shm_mean_std_across_all_noresm, logscore_the_samples_for_spatial_spectra_bayesian, particle_filter_weighting_bayesian from climatem.config import * from climatem.utils import parse_args, update_config_withparse @@ -187,14 +187,17 @@ def main( os.makedirs(save_path, exist_ok=True) # seed = 1 - save_path = save_path / f"bs_{rollout_params.batch_size}_np_{rollout_params.num_particles}_npp_{rollout_params.num_particles_per_particle}_t_{rollout_params.num_timesteps}_sc_{rollout_params.score}_temp_{rollout_params.tempering}_iter{iter_id}" + save_path = save_path / f"bs_{rollout_params.batch_size}_np_{rollout_params.num_particles}_npp_{rollout_params.num_particles_per_particle}_t_{rollout_params.num_timesteps}_sc_{rollout_params.score}_temp_{rollout_params.tempering}_iter{iter_id}_spherical{str(optim_params.take_spherical_harmonics)}" os.makedirs(save_path, exist_ok=True) model_path = exp_path #/ "training_results" - y_true_fft_mean, y_true_fft_std = calculate_fft_mean_std_across_all_noresm(datamodule, accelerator) + if optim_params.take_spherical_harmonics: + y_true_fft_mean, y_true_fft_std = calculate_shm_mean_std_across_all_noresm(datamodule, accelerator) + else: + y_true_fft_mean, y_true_fft_std = calculate_fft_mean_std_across_all_noresm(datamodule, accelerator) print("y_true_fft_mean shape:", y_true_fft_mean.shape) print("y_true_fft_std shape:", y_true_fft_std.shape) @@ -253,6 +256,7 @@ def main( num_particles_per_particle=rollout_params.num_particles_per_particle, timesteps=rollout_params.num_timesteps, score=rollout_params.score, + spherics=optim_params.take_spherical_harmonics, save_dir=save_path, save_name=f"trajectory_iteration", batch_size=rollout_params.batch_size,