From 5d55c046b3c318bc8a4413d3490edfd0f45cefc2 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Mon, 4 May 2026 07:20:18 -0400 Subject: [PATCH 01/32] Updating gpu port attempt --- .../RIFT/integrators/MonteCarloEnsemble.py | 221 ++++++++---------- 1 file changed, 98 insertions(+), 123 deletions(-) mode change 100644 => 100755 MonteCarloMarginalizeCode/Code/RIFT/integrators/MonteCarloEnsemble.py diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/MonteCarloEnsemble.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/MonteCarloEnsemble.py old mode 100644 new mode 100755 index d86227d54..38593cedb --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/MonteCarloEnsemble.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/MonteCarloEnsemble.py @@ -11,6 +11,21 @@ import time from scipy.special import logsumexp +try: + import cupy + import cupyx + xpy_default = cupy + xpy_special_default = cupyx.scipy.special + identity_convert = cupy.asnumpy + identity_convert_togpu = cupy.asarray + cupy_ok = True +except ImportError: + xpy_default = np + xpy_special_default = None + identity_convert = lambda x: x + identity_convert_togpu = lambda x: x + cupy_ok = False + regularize_log_scale = 1e-64 # before taking np.log, add this, so we don't propagate infinities try: @@ -75,6 +90,11 @@ def __init__(self, d, bounds, gmm_dict, n_comp, n=None, prior=None, self.proc_count = proc_count self.use_lnL = use_lnL self.return_lnI = return_lnI + + self.xpy = xpy_default + self.identity_convert = identity_convert + self.identity_convert_togpu = identity_convert_togpu + # constants self.t = 0.02 # percent estimated error threshold if n is None: @@ -107,10 +127,10 @@ def __init__(self, d, bounds, gmm_dict, n_comp, n=None, prior=None, self.total_value = None self.n_max = float('inf') # saved values - self.cumulative_samples = np.empty((0, d)) - self.cumulative_values = np.empty(0) - self.cumulative_p = np.empty(0) - self.cumulative_p_s = np.empty(0) + self.cumulative_samples = self.xpy.empty((0, d)) + self.cumulative_values = self.xpy.empty(0) + self.cumulative_p = self.xpy.empty(0) + self.cumulative_p_s = self.xpy.empty(0) self.tempering_exp=tempering_exp self.temper_log=temper_log if L_cutoff is None: @@ -120,73 +140,63 @@ def __init__(self, d, bounds, gmm_dict, n_comp, n=None, prior=None, def _calculate_prior(self): if self.prior is None: - self.prior_array = np.ones(self.n) + self.prior_array = self.xpy.ones(self.n) else: self.prior_array = self.prior(self.sample_array).flatten() def _sample(self): - self.sampling_prior_array = np.ones(self.n) - self.sample_array = np.empty((self.n, self.d)) + self.sampling_prior_array = self.xpy.ones(self.n) + self.sample_array = self.xpy.empty((self.n, self.d)) for dim_group in self.gmm_dict: # iterate over grouped dimensions # create a matrix of the left and right limits for this set of dimensions - new_bounds = np.empty((len(dim_group), 2)) + new_bounds = self.xpy.empty((len(dim_group), 2)) new_bounds = self.bounds[dim_group] if len(new_bounds.shape) < 2: - new_bounds = np.array([new_bounds]) - # index = 0 - # for dim in dim_group: - # new_bounds[index] = self.bounds[dim] - # index += 1 + new_bounds = self.xpy.array([new_bounds]) model = self.gmm_dict[dim_group] if model is None: # sample uniformly for this group of dimensions llim = new_bounds[:,0] rlim = new_bounds[:,1] - temp_samples = np.random.uniform(llim, rlim, (self.n, len(dim_group))) + temp_samples = self.xpy.random.uniform(llim, rlim, (self.n, len(dim_group))) # update responsibilities - vol = np.prod(rlim - llim) + vol = self.xpy.prod(rlim - llim) self.sampling_prior_array *= 1.0 / vol else: # sample from the gmm - temp_samples = model.sample(self.n)#, new_bounds) + temp_samples = model.sample(self.n) # update responsibilities - self.sampling_prior_array *= model.score(temp_samples)#, new_bounds) + self.sampling_prior_array *= model.score(temp_samples) index = 0 for dim in dim_group: - # put columns of temp_samples in final places in sample_array self.sample_array[:,dim] = temp_samples[:,index] index += 1 def _train(self): - sample_array, value_array, sampling_prior_array = np.copy(self.sample_array), np.copy(self.value_array), np.copy(self.sampling_prior_array) + sample_array, value_array, sampling_prior_array = self.xpy.copy(self.sample_array), self.xpy.copy(self.value_array), self.xpy.copy(self.sampling_prior_array) if self.use_lnL: lnL = value_array else: - lnL = np.log(value_array+regularize_log_scale) # note we can get negative infinity here - log_weights = self.tempering_exp*lnL + np.log(self.prior_array) - sampling_prior_array + lnL = self.xpy.log(value_array+regularize_log_scale) + + log_weights = self.tempering_exp*lnL + self.xpy.log(self.prior_array) - sampling_prior_array if self.temper_log: - log_weights =np.log(np.maximum(lnL,1e-5)) # simplest to do it this way + log_weights = self.xpy.log(self.xpy.maximum(lnL,1e-5)) + for dim_group in self.gmm_dict: # iterate over grouped dimensions if self.gmm_adapt: if (dim_group in self.gmm_adapt): - if not(self.gmm_adapt[dim_group]): # disabling adaptation requires user *specifically request* not to use that dimension set; all other choices lead to adaptation + if not(self.gmm_adapt[dim_group]): continue - # create a matrix of the left and right limits for this set of dimensions - new_bounds = np.empty((len(dim_group), 2)) + new_bounds = self.xpy.empty((len(dim_group), 2)) new_bounds = self.bounds[dim_group] -# index = 0 -# for dim in dim_group: -# new_bounds[index] = self.bounds[dim] -# index += 1 - model = self.gmm_dict[dim_group] # get model for this set of dimensions - temp_samples = np.empty((self.n, len(dim_group))) + model = self.gmm_dict[dim_group] + temp_samples = self.xpy.empty((self.n, len(dim_group))) index = 0 for dim in dim_group: - # get samples corresponding to the current model temp_samples[:,index] = sample_array[:,dim] index += 1 if model is None: - # model doesn't exist yet if isinstance(self.n_comp, int) and self.n_comp != 0: model = GMM.gmm(self.n_comp, new_bounds,epsilon=self.gmm_epsilon) model.fit(temp_samples, log_sample_weights=log_weights) @@ -196,7 +206,6 @@ def _train(self): else: model.update(temp_samples, log_sample_weights=log_weights) try: - # Verify model can evaluated! Quick and dirty test to confirm not singular model.score(temp_samples[:5]) self.gmm_dict[dim_group] = model except: @@ -205,125 +214,91 @@ def _train(self): def _calculate_results(self): if self.use_lnL: - lnL = np.copy(self.value_array) # changing the naming convention, just for this function, now that I know better + lnL = self.xpy.copy(self.value_array) else: - lnL = np.log(self.value_array+regularize_log_scale) - # strip off any samples with likelihoods less than our cutoff - mask = np.ones(lnL.shape,dtype=bool) - if not(self.L_cutoff is None): # if not none - if not(np.isinf(self.L_cutoff)): # and not infinite, then apply the cutoff - mask = lnL > (np.log(self.L_cutoff) if self.L_cutoff > 0 else -np.inf) -# print(mask, self.L_cutoff, lnL) + lnL = self.xpy.log(self.value_array+regularize_log_scale) + mask = self.xpy.ones(lnL.shape,dtype=bool) + if not(self.L_cutoff is None): + if not(self.xpy.isinf(self.L_cutoff)): + mask = lnL > (self.xpy.log(self.L_cutoff) if self.L_cutoff > 0 else -self.xpy.inf) lnL = lnL[mask] prior = self.prior_array[mask] sampling_prior = self.sampling_prior_array[mask] - # append to the cumulative arrays - self.cumulative_samples = np.append(self.cumulative_samples, self.sample_array[mask], axis=0) - self.cumulative_values = np.append(self.cumulative_values, lnL, axis=0) - self.cumulative_p = np.append(self.cumulative_p, prior, axis=0) - self.cumulative_p_s = np.append(self.cumulative_p_s, sampling_prior, axis=0) + self.cumulative_samples = self.xpy.append(self.cumulative_samples, self.sample_array[mask], axis=0) + self.cumulative_values = self.xpy.append(self.cumulative_values, lnL, axis=0) + self.cumulative_p = self.xpy.append(self.cumulative_p, prior, axis=0) + self.cumulative_p_s = self.xpy.append(self.cumulative_p_s, sampling_prior, axis=0) - # compute the log sample weights - log_weights = lnL + np.log(prior) - np.log(sampling_prior) - if np.any(np.isnan(log_weights)): + log_weights = lnL + self.xpy.log(prior) - self.xpy.log(sampling_prior) + if self.xpy.any(self.xpy.isnan(log_weights)): print(" NAN weight ") raise ValueError if self.terrible_lnw_threshold: - if np.max(log_weights) = n_adapt: adapting=False -# print('Iteration:', self.iterations) if err_count >= max_err: print('Exiting due to errors...') break @@ -354,11 +328,13 @@ def integrate(self, func, min_iter=10, max_iter=20, var_thresh=0.0, max_err=10, continue t1 = time.time() if self.proc_count is None: - self.value_array = func(np.copy(self.sample_array)).flatten() + # Ensure input to func is numpy for CPU-based user functions if needed, + # but the user is encouraged to support xpy. + self.value_array = func(self.xpy.copy(self.sample_array)).flatten() else: - split_samples = np.array_split(self.sample_array, self.proc_count) + split_samples = self.xpy.array_split(self.sample_array, self.proc_count) p = Pool(self.proc_count) - self.value_array = np.concatenate(p.map(func, split_samples), axis=0) + self.value_array = self.xpy.concatenate(p.map(func, split_samples), axis=0) p.close() cumulative_eval_time += time.time() - t1 self._calculate_prior() @@ -375,10 +351,10 @@ def integrate(self, func, min_iter=10, max_iter=20, var_thresh=0.0, max_err=10, continue self.iterations += 1 self.ntotal += self.n - testval =self.scaled_error_squared + testval = self.scaled_error_squared if not(self.return_lnI): - testval = np.log(self.scaled_error_squared) + self.log_error_scale_factor - if self.iterations >= min_iter and testval < np.log(var_thresh): + testval = self.xpy.log(self.scaled_error_squared) + self.log_error_scale_factor + if self.iterations >= min_iter and testval < self.xpy.log(var_thresh): break try: if adapting: @@ -400,10 +376,9 @@ def integrate(self, func, min_iter=10, max_iter=20, var_thresh=0.0, max_err=10, if epoch is not None and self.iterations % epoch == 0: self._reset() if verbose: - # Standard mcsampler message, to monitor convergence if not(self.return_lnI): - print(" : {} {} {} {} {} ".format((self.iterations-1)*self.n, self.eff_samp, np.sqrt(2*np.max(self.cumulative_values)), np.sqrt(2*(np.log(self.integral))), np.sqrt(self.scaled_error_squared )/self.integral/np.sqrt(self.iterations ) ) ) + print(" : {} {} {} {} {} ".format((self.iterations-1)*self.n, self.eff_samp, self.xpy.sqrt(2*self.xpy.max(self.cumulative_values)), self.xpy.sqrt(2*(self.xpy.log(self.integral))), self.xpy.sqrt(self.scaled_error_squared )/self.integral/self.xpy.sqrt(self.iterations ) ) ) else: - print(" : {} {} {} {} {} ".format((self.iterations-1)*self.n, self.eff_samp, np.sqrt(2*np.max(self.cumulative_values)), np.sqrt(2*self.integral), np.exp(0.5*(self.scaled_error_squared - self.integral*2) )/np.sqrt(self.iterations))) + print(" : {} {} {} {} {} ".format((self.iterations-1)*self.n, self.eff_samp, self.xpy.sqrt(2*self.xpy.max(self.cumulative_values)), self.xpy.sqrt(2*self.integral), self.xpy.exp(0.5*(self.scaled_error_squared - self.integral*2) )/self.xpy.sqrt(self.iterations))) print('cumulative eval time: ', cumulative_eval_time) print('integrator iterations: ', self.iterations) From 9dd7188ada82f5740ac10796add80aedb8adb879 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Mon, 4 May 2026 07:21:15 -0400 Subject: [PATCH 02/32] Updating more gpu module --- .../integrators/gaussian_mixture_model.py | 432 +++++++++--------- 1 file changed, 224 insertions(+), 208 deletions(-) mode change 100644 => 100755 MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py old mode 100644 new mode 100755 index 98fd8c256..6e52a2098 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py @@ -14,6 +14,20 @@ import numpy as np from scipy.stats import multivariate_normal,norm +try: + import cupy + import cupyx + xpy_default = cupy + xpy_special_default = cupyx.scipy.special + identity_convert = cupy.asnumpy + identity_convert_togpu = cupy.asarray + cupy_ok = True +except ImportError: + xpy_default = np + xpy_special_default = None # scipy.special is used via scipy if needed + identity_convert = lambda x: x + identity_convert_togpu = lambda x: x + cupy_ok = False # 1. Try to find the legacy mvnun in known locations try: @@ -49,16 +63,40 @@ def mvnun(lower, upper, mean, cov, maxpts=None, abseps=1e-5, releps=1e-5): return p, 0 -#from scipy.misc import logsumexp from scipy.special import logsumexp from . import multivariate_truncnorm as truncnorm import itertools -# Equation references are from Numerical Recipes for general GMM and -# https://www.cs.nmsu.edu/~joemsong/publications/Song-SPIE2005-updated.pdf for -# online updating features - +def gpu_logpdf(x, mean, cov, xpy): + """ + GPU-compatible multivariate normal log-pdf. + x: (n, d) array + mean: (d,) array + cov: (d, d) array + """ + d = mean.shape[0] + diff = x - mean + # Use cholesky for efficiency and stability + try: + L = xpy.linalg.cholesky(cov) + except xpy.linalg.LinAlgError: + # Fallback to adding small epsilon to diagonal + eps = 1e-6 * xpy.eye(d) + L = xpy.linalg.cholesky(cov + eps) + + # Solve L*y = diff^T => y = L^-1 * diff^T + # diff is (n, d), so diff.T is (d, n) + y = xpy.linalg.solve_triangular(L, diff.T, lower=True) + + # quad_form = sum(y^2, axis=0) + quad_form = xpy.sum(y**2, axis=0) + + # log_det = 2 * sum(log(diag(L))) + log_det = 2.0 * xpy.sum(xpy.log(xpy.diag(L))) + + log_prob = -0.5 * (d * xpy.log(2 * xpy.pi) + log_det + quad_form) + return log_prob class estimator: ''' @@ -87,14 +125,17 @@ def __init__(self, k, max_iters=100, tempering_coeff=1e-8,adapt=None): self.cov_avg_ratio = 0.05 self.epsilon = 1e-4 self.tempering_coeff = tempering_coeff + self.xpy = xpy_default + self.identity_convert = identity_convert + self.identity_convert_togpu = identity_convert_togpu def _initialize(self, n, sample_array, log_sample_weights=None): - p_weights = np.exp(log_sample_weights - np.max(log_sample_weights)).flatten() - p_weights[np.isnan(p_weights)] = 0 # zero out the nan weights - p_weights /= np.sum(p_weights) - self.means = sample_array[np.random.choice(n, self.k, p=p_weights.astype(sample_array.dtype)), :] - self.covariances = [np.identity(self.d)] * self.k - self.weights = np.ones(self.k) / self.k + p_weights = self.xpy.exp(log_sample_weights - self.xpy.max(log_sample_weights)).flatten() + p_weights[self.xpy.isnan(p_weights)] = 0 # zero out the nan weights + p_weights /= self.xpy.sum(p_weights) + self.means = sample_array[self.xpy.random.choice(n, self.k, p=p_weights.astype(sample_array.dtype)), :] + self.covariances = [self.xpy.identity(self.d)] * self.k + self.weights = self.xpy.ones(self.k) / self.k self.adapt = [True] * self.k def _e_step(self, n, sample_array, log_sample_weights=None): @@ -102,49 +143,61 @@ def _e_step(self, n, sample_array, log_sample_weights=None): Expectation step ''' if log_sample_weights is None: - log_sample_weights = np.zeros(n) - p_nk = np.empty((n, self.k)) + log_sample_weights = self.xpy.zeros(n) + p_nk = self.xpy.empty((n, self.k)) for index in range(self.k): mean = self.means[index] cov = self.covariances[index] - log_p = np.log(self.weights[index]) - log_pdf = multivariate_normal.logpdf(x=sample_array, mean=mean, cov=cov, allow_singular=True) # (16.1.4) - # note that allow_singular=True in the above line is probably really dumb and - # terrible, but it seems to occasionally keep the whole thing from blowing up - # so it stays for now + log_p = self.xpy.log(self.weights[index]) + + if cupy_ok: + log_pdf = gpu_logpdf(sample_array, mean, cov, self.xpy) + else: + log_pdf = multivariate_normal.logpdf(x=sample_array, mean=mean, cov=cov, allow_singular=True) + p_nk[:,index] = log_pdf + log_p # (16.1.5) - p_xn = logsumexp(p_nk, axis=1)#, keepdims=True) # (16.1.3) - self.p_nk = p_nk - p_xn[:,np.newaxis] # (16.1.5) + + # Use cupy or scipy for logsumexp + if cupy_ok: + p_xn = cupyx.scipy.special.logsumexp(p_nk, axis=1) + else: + p_xn = logsumexp(p_nk, axis=1) + + self.p_nk = p_nk - p_xn[:,self.xpy.newaxis] # (16.1.5) # normalize log sample weights as well, before modifying things with them - self.p_nk += log_sample_weights[:,np.newaxis] - logsumexp(log_sample_weights) - self.log_prob = np.sum(p_xn + log_sample_weights) # (16.1.2) + if cupy_ok: + ls_sum = cupyx.scipy.special.logsumexp(log_sample_weights) + else: + ls_sum = logsumexp(log_sample_weights) + + self.p_nk += log_sample_weights[:,self.xpy.newaxis] - ls_sum + + if cupy_ok: + self.log_prob = self.xpy.sum(p_xn + log_sample_weights) + else: + self.log_prob = np.sum(p_xn + log_sample_weights) def _m_step(self, n, sample_array): ''' Maximization step ''' - p_nk = np.exp(self.p_nk) - weights = np.sum(p_nk, axis=0) # weight of a single component + p_nk = self.xpy.exp(self.p_nk) + weights = self.xpy.sum(p_nk, axis=0) # weight of a single component for index in range(self.k): if self.adapt[index]: # (16.1.6) w = weights[index] # should be 1 for a single component, note p_k = p_nk[:,index] - mean = np.sum(np.multiply(sample_array, p_k[:,np.newaxis]), axis=0) + mean = self.xpy.sum(self.xpy.multiply(sample_array, p_k[:,self.xpy.newaxis]), axis=0) mean /= w self.means[index] = mean # (16.1.6) diff = sample_array - mean - cov = np.dot((p_k[:,np.newaxis] * diff).T, diff) / w -# cov = np.cov(diff.T, aweights=p_k)/w # don't reinvent the wheel -# if len(mean)<2: -# cov =np.array([[cov]]) - # attempt to fix non-positive-semidefinite covariances + cov = self.xpy.dot((p_k[:,self.xpy.newaxis] * diff).T, diff) / w self.covariances[index] = self._near_psd(cov) # (16.17) - weights /= np.sum(p_nk[:,self.adapt]) - # if we are not adapting some of the gaussians, we need to renormalize again. Note the weight of the fixed item remains fixed! - weights /= np.sum(weights) + weights /= self.xpy.sum(p_nk[:,self.adapt]) + weights /= self.xpy.sum(weights) self.weights = weights @@ -158,34 +211,31 @@ def _tol(self, n): def _near_psd(self, x): ''' Calculates the nearest postive semi-definite matrix for a correlation/covariance matrix - - Code from here: - https://stackoverflow.com/questions/10939213/how-can-i-calculate-the-nearest-positive-semi-definite-matrix ''' n = x.shape[0] - var_list = np.array([np.sqrt(x[i,i]) for i in range(n)]) - y = np.array([[x[i, j]/(var_list[i]*var_list[j]) for i in range(n)] for j in range(n)]) + var_list = self.xpy.array([self.xpy.sqrt(x[i,i]) for i in range(n)]) + # Use broadcasting for y instead of nested list comprehension + y = x / (var_list[:, None] * var_list[None, :]) while True: epsilon = self.epsilon - if min(np.linalg.eigvals(y)) > epsilon: + if self.xpy.min(self.xpy.linalg.eigvals(y)) > epsilon: return x - # Removing scaling factor of covariance matrix - var_list = np.array([np.sqrt(x[i,i]) for i in range(n)]) - y = np.array([[x[i, j]/(var_list[i]*var_list[j]) for i in range(n)] for j in range(n)]) - - # getting the nearest correlation matrix - eigval, eigvec = np.linalg.eig(y) - val = np.matrix(np.maximum(eigval, epsilon)) - vec = np.matrix(eigvec) - T = 1/(np.multiply(vec, vec) * val.T) - T = np.matrix(np.sqrt(np.diag(np.array(T).reshape((n)) ))) - B = T * vec * np.diag(np.array(np.sqrt(val)).reshape((n))) - near_corr = B*B.T - - # returning the scaling factors - near_cov = np.array([[near_corr[i, j]*(var_list[i]*var_list[j]) for i in range(n)] for j in range(n)]) - if np.isreal(near_cov).all(): + var_list = self.xpy.array([self.xpy.sqrt(x[i,i]) for i in range(n)]) + y = x / (var_list[:, None] * var_list[None, :]) + + eigval, eigvec = self.xpy.linalg.eig(y) + val = self.xpy.maximum(eigval, epsilon) + vec = eigvec + + # Standard PSD projection: + val_psd = self.xpy.maximum(eigval, epsilon) + near_corr = vec @ self.xpy.diag(val_psd) @ vec.T + + # Re-scale back to covariance + near_cov = near_corr * (var_list[:, None] * var_list[None, :]) + + if self.xpy.isreal(near_cov).all(): break else: x = near_cov.real @@ -194,13 +244,6 @@ def _near_psd(self, x): def fit(self, sample_array, log_sample_weights): ''' Fit the model to data - - Parameters - ---------- - sample_array : np.ndarray - Array of samples to fit - log_sample_weights : np.ndarray - Weights for samples ''' n, self.d = sample_array.shape self._initialize(n, sample_array, log_sample_weights) @@ -214,21 +257,24 @@ def fit(self, sample_array, log_sample_weights): count += 1 for index in range(self.k): cov = self.covariances[index] - # temper - # - note this introduces a PREFERRED LENGTH SCALE into the problem, which is dangerous - cov = (cov + self.tempering_coeff * np.eye(self.d)) / (1 + self.tempering_coeff) + cov = (cov + self.tempering_coeff * self.xpy.eye(self.d)) / (1 + self.tempering_coeff) self.covariances[index] = cov def print_params(self): ''' Prints the model's parameters in an easily-readable format ''' + # Convert to numpy for printing + means_np = [self.identity_convert(m) for m in self.means] + covs_np = [self.identity_convert(c) for c in self.covariances] + weights_np = self.identity_convert(self.weights) + if self.d ==1: print("GMM: component wt mean std ") for i in range(self.k): - mean = self.means[i] - cov = self.covariances[i] - weight = self.weights[i] + mean = means_np[i] + cov = covs_np[i] + weight = weights_np[i] if self.d >1: print('________________________________________\n') print('Component', i) @@ -245,22 +291,11 @@ def print_params(self): class gmm: ''' More sophisticated implementation built on top of estimator class - - Includes functionality to update with new data rather than re-fit, as well - as sampling and scoring of samples. - - Parameters - ---------- - k : int - Number of Gaussian components - max_iters : int - Maximum number of Expectation-Maximization iterations ''' def __init__(self, k, bounds, max_iters=1000,epsilon=None,tempering_coeff=1e-8): self.k = k self.bounds = bounds - #self.tol = tol self.max_iters = max_iters self.means = [None] * k self.covariances =[None] * k @@ -272,14 +307,17 @@ def __init__(self, k, bounds, max_iters=1000,epsilon=None,tempering_coeff=1e-8): self.N = 0 self.epsilon =epsilon if self.epsilon is None: - self.epsilon = 1e-6 # allow very strong correlations + self.epsilon = 1e-6 else: self.epsilon=epsilon self.tempering_coeff = tempering_coeff + self.xpy = xpy_default + self.identity_convert = identity_convert + self.identity_convert_togpu = identity_convert_togpu def _normalize(self, samples): n, d = samples.shape - out = np.empty((n, d)) + out = self.xpy.empty((n, d)) for i in range(d): [llim, rlim] = self.bounds[i] out[:,i] = (2.0 * samples[:,i] - (rlim + llim)) / (rlim - llim) @@ -287,7 +325,7 @@ def _normalize(self, samples): def _unnormalize(self, samples): n, d = samples.shape - out = np.empty((n, d)) + out = self.xpy.empty((n, d)) for i in range(d): [llim, rlim] = self.bounds[i] out[:,i] = 0.5 * ((rlim - llim) * samples[:,i] + (llim + rlim)) @@ -296,18 +334,11 @@ def _unnormalize(self, samples): def fit(self, sample_array, log_sample_weights=None): ''' Fit the model to data - - Parameters - ---------- - sample_array : np.ndarray - Array of samples to fit - sample_weights : np.ndarray - Weights for samples ''' self.N, self.d = sample_array.shape if log_sample_weights is None: - log_sample_weights = np.zeros(self.N) - # just use base estimator + log_sample_weights = self.xpy.zeros(self.N) + model = estimator(self.k, tempering_coeff=self.tempering_coeff,adapt=self.adapt) model.fit(self._normalize(sample_array), log_sample_weights) self.means = model.means @@ -328,84 +359,71 @@ def _match_components(self, new_model): dist = 0 i = 0 for j in order: - # get Mahalanobis distance between current pair of components - diff = new_model.means[j] - self.means[i] - cov_inv = np.linalg.inv(self.covariances[i]) - temp_cov_inv = np.linalg.inv(new_model.covariances[j]) + # These are likely small vectors, stay on CPU + diff = self.identity_convert(new_model.means[j]) - self.identity_convert(self.means[i]) + cov_inv = np.linalg.inv(self.identity_convert(self.covariances[i])) + temp_cov_inv = np.linalg.inv(self.identity_convert(new_model.covariances[j])) dist += np.sqrt(np.dot(np.dot(diff, cov_inv), diff)) dist += np.sqrt(np.dot(np.dot(diff, temp_cov_inv), diff)) i += 1 distances[index] = dist index += 1 - return orders[np.argmin(distances)] # returns order which gives minimum net Mahalanobis distance + return orders[np.argmin(distances)] def _merge(self, new_model, M): ''' Merge corresponding components of new model and old model - - Refer to paper linked at the top of this file - - M is the number of samples that the new model was fit using ''' order = self._match_components(new_model) for i in range(self.k): - j = order[i] # get corresponding component + j = order[i] old_mean = self.means[i] temp_mean = new_model.means[j] old_cov = self.covariances[i] temp_cov = new_model.covariances[j] old_weight = self.weights[i] temp_weight = new_model.weights[j] - denominator = (self.N * old_weight) + (M * temp_weight) # this shows up a lot so just compute it once - # start equation (6) + denominator = (self.N * old_weight) + (M * temp_weight) + mean = (self.N * old_weight * old_mean) + (M * temp_weight * temp_mean) mean /= denominator - # start equation (7) + cov1 = (self.N * old_weight * old_cov) + (M * temp_weight * temp_cov) cov1 /= denominator - cov2 = (self.N * old_weight * old_mean * old_mean.T) + (M * temp_weight * temp_mean * temp_mean.T) + + # outer product for means + cov2 = (self.N * old_weight * self.xpy.outer(old_mean, old_mean)) + (M * temp_weight * self.xpy.outer(temp_mean, temp_mean)) cov2 /= denominator - cov = cov1 + cov2 - mean * mean.T - # check for positive-semidefinite + + cov = cov1 + cov2 - self.xpy.outer(mean, mean) cov = self._near_psd(cov) - # start equation (8) + weight = denominator / (self.N + M) - # update everything + self.means[i] = mean self.covariances[i] = cov self.weights[i] = weight def _near_psd(self, x): ''' - Calculates the nearest postive semi-definite matrix for a correlation/covariance matrix - - Code from here: - https://stackoverflow.com/questions/10939213/how-can-i-calculate-the-nearest-positive-semi-definite-matrix + Calculates the nearest postive semi-definite matrix for a correlation/covariance matrix ''' n = x.shape[0] - var_list = np.array([np.sqrt(x[i,i]) for i in range(n)]) - y = np.array([[x[i, j]/(var_list[i]*var_list[j]) for i in range(n)] for j in range(n)]) + var_list = self.xpy.array([self.xpy.sqrt(x[i,i]) for i in range(n)]) + y = x / (var_list[:, None] * var_list[None, :]) while True: epsilon = self.epsilon - if min(np.linalg.eigvals(y)) > epsilon: + if self.xpy.min(self.xpy.linalg.eigvals(y)) > epsilon: return x - # Removing scaling factor of covariance matrix - var_list = np.array([np.sqrt(x[i,i]) for i in range(n)]) - y = np.array([[x[i, j]/(var_list[i]*var_list[j]) for i in range(n)] for j in range(n)]) - - # getting the nearest correlation matrix - eigval, eigvec = np.linalg.eig(y) - val = np.matrix(np.maximum(eigval, epsilon)) - vec = np.matrix(eigvec) - T = 1/(np.multiply(vec, vec) * val.T) - T = np.matrix(np.sqrt(np.diag(np.array(T).reshape((n)) ))) - B = T * vec * np.diag(np.array(np.sqrt(val)).reshape((n))) - near_corr = B*B.T - - # returning the scaling factors - near_cov = np.array([[near_corr[i, j]*(var_list[i]*var_list[j]) for i in range(n)] for j in range(n)]) - if np.isreal(near_cov).all(): + var_list = self.xpy.array([self.xpy.sqrt(x[i,i]) for i in range(n)]) + y = x / (var_list[:, None] * var_list[None, :]) + + eigval, eigvec = self.xpy.linalg.eig(y) + val_psd = self.xpy.maximum(eigval, epsilon) + near_corr = eigvec @ self.xpy.diag(val_psd) @ eigvec.T + near_cov = near_corr * (var_list[:, None] * var_list[None, :]) + if self.xpy.isreal(near_cov).all(): break else: x = near_cov.real @@ -414,130 +432,128 @@ def _near_psd(self, x): def update(self, sample_array, log_sample_weights=None): ''' Updates the model with new data without doing a full retraining. - - Parameters - ---------- - sample_array : np.ndarray - Array of samples to fit - sample_weights : np.ndarray - Weights for samples ''' self.tempering_coeff /= 2 new_model = estimator(self.k, self.max_iters, self.tempering_coeff) - # Strip non-finite training data - indx_ok = np.isfinite(log_sample_weights) - new_model.fit(self._normalize(sample_array[indx_ok]), log_sample_weights[indx_ok]) + + # Filter non-finite + if log_sample_weights is not None: + indx_ok = self.xpy.isfinite(log_sample_weights) + s_filtered = sample_array[indx_ok] + w_filtered = log_sample_weights[indx_ok] + else: + s_filtered = sample_array + w_filtered = None + + new_model.fit(self._normalize(s_filtered), w_filtered) M, _ = sample_array.shape self._merge(new_model, M) self.N += M def score(self, sample_array,assume_normalized=True): ''' - Score samples (i.e. calculate likelihood of each sample) under the current - model. - - Note the bounds are stored *not* normalized, and we need to compensate for that. - Note the normalized bounds are always -1,1 ... but we won't hardcode that, in case normalization changes - - Parameters - ---------- - sample_array : np.ndarray - Array of samples to fit - bounds : np.ndarray - Bounds for samples, used for renormalizing scores + Score samples under the current model. ''' n, d = sample_array.shape - scores = np.zeros(n) - sample_array = self._normalize(sample_array) - bounds_normalized = np.zeros(self.bounds.shape) - bounds_normalized= self._normalize(self.bounds.T).T + scores = self.xpy.zeros(n) + sample_array_norm = self._normalize(sample_array) + + # bounds_normalized + bounds_norm = self._normalize(self.bounds.T).T normalization_constant = 0. + for i in range(self.k): w = self.weights[i] mean = self.means[i] cov = self.covariances[i] - if(len(mean)>1): - scores += multivariate_normal.pdf(x=sample_array, mean=mean, cov=cov, allow_singular=True) * w - normalization_constant += w*mvnun(bounds_normalized[:,0], bounds_normalized[:,1], mean, cov)[0] # this function is very fast at integrating multivariate normal distributions + + if self.d > 1: + if cupy_ok: + # Use gpu_logpdf and exponentiate + log_pdf = gpu_logpdf(sample_array_norm, mean, cov, self.xpy) + pdf = self.xpy.exp(log_pdf) + else: + pdf = multivariate_normal.pdf(x=sample_array_norm, mean=mean, cov=cov, allow_singular=True) + + scores += pdf * w + # mvnun is CPU only + mean_cpu = self.identity_convert(mean) + cov_cpu = self.identity_convert(cov) + bounds_norm_cpu = self.identity_convert(bounds_norm) + normalization_constant += w * mvnun(bounds_norm_cpu[:,0], bounds_norm_cpu[:,1], mean_cpu, cov_cpu)[0] else: sigma2 = cov[0,0] - val = 1./np.sqrt(2*np.pi*sigma2) * np.exp( - 0.5*( sample_array[:,0] - mean[0])**2/sigma2) + val = 1./self.xpy.sqrt(2*self.xpy.pi*sigma2) * self.xpy.exp( - 0.5*( sample_array_norm[:,0] - mean[0])**2/sigma2) scores += val * w - my_cdf = norm(loc=mean[0],scale=np.sqrt(sigma2)).cdf - normalization_constant += w*(my_cdf( bounds_normalized[0,1]) - my_cdf( bounds_normalized[0,0])) - # note that allow_singular=True in the above line is probably really dumb and - # terrible, but it seems to occasionally keep the whole thing from blowing up - # so it stays for now - # we need to renormalize the PDF - # to do this we sample from a full distribution (i.e. without truncation) and use the - # fraction of samples that fall inside the bounds to renormalize - #full_sample_array = self.sample(n, use_bounds=False) - #llim = np.rot90(self.bounds[:,[0]]) - #rlim = np.rot90(self.bounds[:,[1]]) - #n1 = np.greater(full_sample_array, llim).all(axis=1) - #n2 = np.less(full_sample_array, rlim).all(axis=1) - #normalize = np.array(np.logical_and(n1, n2)).flatten() - #m = float(np.sum(normalize)) / n - #scores /= m + + mean_cpu = self.identity_convert(mean)[0] + sigma_cpu = self.identity_convert(np.sqrt(sigma2)) + bounds_norm_cpu = self.identity_convert(bounds_norm[0]) + my_cdf = norm(loc=mean_cpu, scale=sigma_cpu).cdf + normalization_constant += w * (my_cdf(bounds_norm_cpu[1]) - my_cdf(bounds_norm_cpu[0])) + scores /= normalization_constant - vol = np.prod(self.bounds[:,1] - self.bounds[:,0]) - scores *= 2.0**d / vol # account for renormalization of dimensions + vol = self.xpy.prod(self.bounds[:,1] - self.bounds[:,0]) + scores *= (2.0**self.d) / vol return scores def sample(self, n, use_bounds=True): ''' - Draw samples from the current model, either with or without bounds - - Parameters - ---------- - n : int - Number of samples to draw - bounds : np.ndarray - Bounds for samples + Draw samples from the current model. ''' - sample_array = np.empty((n, self.d)) + # Sampling is kept on CPU for stability (truncnorm) + # Convert model params to numpy + means_np = [self.identity_convert(m) for m in self.means] + covs_np = [self.identity_convert(c) for c in self.covariances] + weights_np = self.identity_convert(self.weights) + bounds_np = self.identity_convert(self.bounds) + + sample_array_np = np.empty((n, self.d)) start = 0 - bounds = np.empty(self.bounds.shape) - bounds[:,0] = -1.0 - bounds[:,1] = 1.0 for component in range(self.k): - w = self.weights[component] - mean = self.means[component] - cov = self.covariances[component] - num_samples = int(n * w) # NOT a poisson draw, note : we draw exactly the expected number from each one (since we have a fixed number to fill) + w = weights_np[component] + mean = means_np[component] + cov = covs_np[component] + num_samples = int(n * w) if component == self.k - 1: end = n else: end = start + num_samples try: if not use_bounds: - sample_array[start:end] = np.random.multivariate_normal(mean, cov, end - start) + sample_array_np[start:end] = np.random.multivariate_normal(mean, cov, end - start) else: - sample_array[start:end] = truncnorm.sample(mean, cov, bounds, end - start) + sample_array_np[start:end] = truncnorm.sample(mean, cov, bounds_np, end - start) start = end - except: - print('Exiting due to non-positive-semidefinite') - raise Exception("gmm covariance not positive-semidefinite") - return self._unnormalize(sample_array) + except Exception as e: + print('Exiting due to non-positive-semidefinite', e) + raise Exception(\"gmm covariance not positive-semidefinite\") + + # Return as xpy array + return self.identity_convert_togpu(sample_array_np) def print_params(self): ''' Prints the model's parameters in an easily-readable format ''' + means_np = [self.identity_convert(m) for m in self.means] + covs_np = [self.identity_convert(c) for c in self.covariances] + weights_np = self.identity_convert(self.weights) + if self.d ==1: - print("GMM: component wt mean_correct mean_normed std_normed ") + print(\"GMM: component wt mean_correct mean_normed std_normed \") for i in range(self.k): - mean = self.means[i] - cov = self.covariances[i] - weight = self.weights[i] + mean = means_np[i] + cov = covs_np[i] + weight = weights_np[i] if self.d >1: - print('________________________________________\n') + print('________________________________________\\n') print('Component', i) print('Mean (scaled and unscaled)') print(mean, self._unnormalize(np.array([mean]))) print('Covariance') print(cov) print('Weight') - print(weight, '\n') + print(weight, '\\n') else: print(i, weight, self._unnormalize(np.array([mean]))[0,0], mean[0], np.sqrt(cov[0,0])) From 9cb21050eaa649d0a76b89f34e1427dad1bae065 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Mon, 4 May 2026 07:21:28 -0400 Subject: [PATCH 03/32] more gpu --- .../RIFT/integrators/mcsamplerEnsemble.py | 416 ++++-------------- 1 file changed, 92 insertions(+), 324 deletions(-) mode change 100644 => 100755 MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerEnsemble.py diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerEnsemble.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerEnsemble.py old mode 100644 new mode 100755 index a9a22c069..192f80ed0 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerEnsemble.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerEnsemble.py @@ -1,4 +1,3 @@ - import sys import math import bisect @@ -6,6 +5,21 @@ import numpy as np +try: + import cupy + import cupyx + xpy_default = cupy + xpy_special_default = cupyx.scipy.special + identity_convert = cupy.asnumpy + identity_convert_togpu = cupy.asarray + cupy_ok = True +except ImportError: + xpy_default = np + xpy_special_default = None + identity_convert = lambda x: x + identity_convert_togpu = lambda x: x + cupy_ok = False + import itertools import functools @@ -38,27 +52,10 @@ class MCSampler(object): @staticmethod def match_params_from_args(args, params): - """ - Given two unordered sets of parameters, one a set of all "basic" elements - (strings) possible, and one a set of elements both "basic" strings and - "combined" (basic strings in tuples), determine whether the sets are equivalent - if no basic element is repeated. - - e.g. set A ?= set B - - ("a", "b", "c") ?= ("a", "b", "c") ==> True - (("a", "b", "c")) ?= ("a", "b", "c") ==> True - (("a", "b"), "d")) ?= ("a", "b", "c") ==> False # basic element 'd' not in set B - (("a", "b"), "d")) ?= ("a", "b", "d", "c") ==> False # not all elements in set B - represented in set A - """ not_common = set(args) ^ set(params) if len(not_common) == 0: - # All params match return True if all([not isinstance(i, tuple) for i in not_common]): - # The only way this is possible is if there are - # no extraneous params in args return False to_match = [i for i in not_common if not isinstance(i, tuple)] @@ -72,52 +69,31 @@ def match_params_from_args(args, params): def __init__(self): - # Total number of samples drawn self.ntotal = 0 - # Samples per iteration self.n = 0 - # Parameter names self.params = set() - self.params_ordered = [] # keep them in order. Important to break likelihood function need for names - # parameter -> pdf function object + self.params_ordered = [] self.pdf = {} - # If the pdfs aren't normalized, this will hold the normalization - # constant self._pdf_norm = defaultdict(lambda: 1) - # Cache for the sampling points self._rvs = {} - # parameter -> cdf^{-1} function object self.cdf = {} self.cdf_inv = {} - # params for left and right limits self.llim, self.rlim = {}, {} - # Keep track of the adaptive parameters self.adaptive = [] - - # Keep track of the adaptive parameter 1-D marginalizations self._hist = {} - - # MEASURES (=priors): ROS needs these at the sampler level, to clearly separate their effects - # ASSUMES the user insures they are normalized self.prior_pdf = {} - self.func = None self.sample_format = None self.curr_args = None + self.gmm_dict ={} + self.integrator = None - self.gmm_dict ={} # state variable - self.integrator = None # state variable - - # portfolio interfacing/GPU compatible cross-sampler operations - self.xpy = np - self.identity_convert = lambda x: x # if needed, convert to numpy format (e.g, cupy.asnumpy) - self.identity_convert_togpu = lambda x: x + self.xpy = xpy_default + self.identity_convert = identity_convert + self.identity_convert_togpu = identity_convert_togpu def clear(self): - """ - Clear out the parameters and their settings, as well as clear the sample cache. - """ self.params = set() self.params_ordered = [] self.pdf = {} @@ -133,17 +109,7 @@ def clear(self): def add_parameter(self, params, pdf=None, cdf_inv=None, left_limit=None, right_limit=None, prior_pdf=None, adaptive_sampling=False): - """ - Add one (or more) parameters to sample dimensions. params is either a string - describing the parameter, or a tuple of strings. The tuple will indicate to - the sampler that these parameters must be sampled together. left_limit and - right_limit are on the infinite interval by default, but can and probably should - be specified. If several params are given, left_limit, and right_limit must be a - set of tuples with corresponding length. Sampling PDF is required, and if not - provided, the cdf inverse function will be determined numerically from the - sampling PDF. - """ - self.params.add(params) # does NOT preserve order in which parameters are provided + self.params.add(params) self.params_ordered.append(params) if rosDebugMessages: print(" mcsampler: Adding parameter ", params, " with limits ", [left_limit, right_limit]) @@ -174,40 +140,24 @@ def add_parameter(self, params, pdf=None, cdf_inv=None, left_limit=None, right_ self.prior_pdf[params] = prior_pdf def evaluate(self, samples): - ''' - Interfaces between monte_carlo_integrator sample format (1 (n x d) array) - and likelihood function sample format (d 1D arrays in a list) - ''' - # integrand expects a list of 1D rows temp = [] for index in range(len(self.curr_args)): temp.append(samples[:,index]) temp_ret = self.func(*temp) - return np.rot90([temp_ret], -1) # monte_carlo_integrator expects a column + return self.xpy.rot90([temp_ret], -1) def calc_pdf(self, samples): - ''' - Similar to evaluate(), interfaces between sample formats. Must also handle - possibility of no prior for one of more dimensions - ''' n, _ = samples.shape temp_ret = self.xpy.ones((n, 1)) - # pdf functions expect 1D rows for index in range(len(self.curr_args)): if self.curr_args[index] in self.prior_pdf: pdf_func = self.prior_pdf[self.curr_args[index]] temp_samples = samples[:,index] - # monte carlo integrator expects a column - temp_ret *= pdf_func(temp_samples).reshape( temp_ret.shape) #self.xpy.rot90([pdf_func(temp_samples)], -1) + temp_ret *= pdf_func(temp_samples).reshape( temp_ret.shape) return temp_ret def setup(self,n_comp=None,**kwargs): - """ - setup - - Call after add_parameter - """ integrator_func = kwargs['integrator_func'] if "integrator_func" in kwargs else None mcsamp_func = kwargs['mcsamp_func'] if "mcsamp_func" in kwargs else None proc_count = kwargs['proc_count'] if "proc_count" in kwargs else None @@ -224,102 +174,82 @@ def setup(self,n_comp=None,**kwargs): lnw_failure_cut = kwargs["lnw_failure_cut"] if "lnw_failure_cut" in kwargs else None nmax = kwargs["nmax"] if "nmax" in kwargs else 1e6 neff = kwargs["neff"] if "neff" in kwargs else 1000 - n = kwargs["n"] if "n" in kwargs else min(1000, nmax) # chunk size + n = kwargs["n"] if "n" in kwargs else min(1000, nmax) - self.n = n # this needs to be set - self.curr_args = self.params_ordered # assume we integrate over all. State variable used in a few places + self.n = n + self.curr_args = self.params_ordered if 'gmm_dict' in list(kwargs.keys()): - gmm_dict = kwargs['gmm_dict'] # required + gmm_dict = kwargs['gmm_dict'] else: gmm_dict = None dim = len(self.params_ordered) bounds=[] for param in self.params_ordered: bounds.append([self.llim[param], self.rlim[param]]) - raw_bounds = np.array(bounds) + raw_bounds = self.xpy.array(bounds) if gmm_dict is None: bounds = {} - for indx in np.arange(len(raw_bounds)): + for indx in self.xpy.arange(len(raw_bounds)): bounds[(indx,)] = raw_bounds[indx] bounds=raw_bounds if correlate_all_dims: gmm_dict = {tuple(range(dim)):None} - bounds = {tuple(np.arange(len(bounds))): raw_bounds} + bounds = {tuple(self.xpy.arange(len(bounds))): raw_bounds} else: gmm_dict = {} for i in range(dim): gmm_dict[(i,)] = None else: - # create bounds that depend on the dimension specifiers in the gmm integrator bounds ={} for dims in gmm_dict: n_dims = len(dims) - bounds_here = np.empty((n_dims,2)) - for indx in np.arange(n_dims): - bounds_here[indx] = raw_bounds[dims[indx]] # pull out bounds index + bounds_here = self.xpy.empty((n_dims,2)) + for indx in self.xpy.arange(n_dims): + bounds_here[indx] = raw_bounds[dims[indx]] bounds[dims]=bounds_here - - # instantiate an integrator object, as that is front end to all the things we need. - # we will need some dummy things self.integrator = monte_carlo.integrator(dim, bounds, gmm_dict, n_comp, n=self.n, prior=self.calc_pdf, - user_func=integrator_func, proc_count=proc_count,L_cutoff=L_cutoff,gmm_adapt=gmm_adapt,gmm_epsilon=gmm_epsilon,tempering_exp=tempering_exp) # reflect=reflect, + user_func=integrator_func, proc_count=proc_count,L_cutoff=L_cutoff,gmm_adapt=gmm_adapt,gmm_epsilon=gmm_epsilon,tempering_exp=tempering_exp) def update_sampling_prior(self,ln_weights, n_history,tempering_exp=1,log_scale_weights=True,floor_integrated_probability=0,external_rvs=None,**kwargs): - """ - update_sampling_prior - - Attempt to duplicate code inside 'integrate' to update sampling prior based on information potentially including externally-obtained samples - """ rvs_here = self._rvs if external_rvs: rvs_here = external_rvs - xpy_here = np # force np internal, because we don't have GMM implemented - - # apply tempering exponent (structurally slightly different than in low-level code - not just to likelihood) - ln_weights = np.array(self.identity_convert(ln_weights)) # force copy + ln_weights = self.xpy.array(self.identity_convert(ln_weights)) ln_weights *= tempering_exp - gmm_dict = self.integrator.gmm_dict # direct acess + gmm_dict = self.integrator.gmm_dict - n_history_to_use = np.min([n_history, len(ln_weights), len(rvs_here[self.params_ordered[0]])] ) + n_history_to_use = self.xpy.min([n_history, len(ln_weights), len(rvs_here[self.params_ordered[0]])] ) - # Create appropriate history array - # keep in GPU form, because we don't need it all ! Only adapt in SOME dimensions, reduce bandwidth! sample_array = self.xpy.empty( (len(self.params_ordered), n_history_to_use)) for indx, p in enumerate(self.params_ordered): sample_array[indx] = rvs_here[p][-n_history_to_use:] sample_array = sample_array.T - - for dim_group in gmm_dict: # iterate over grouped dimensions + for dim_group in gmm_dict: if self.integrator.gmm_adapt: if (dim_group in self.integrator.gmm_adapt): - if not(self.integrator.gmm_adapt[dim_group]): # disabling adaptation requires user *specifically request* not to use that dimension set; all other choices lead to adaptation + if not(self.integrator.gmm_adapt[dim_group]): continue - # create a matrix of the left and right limits for this set of dimensions - new_bounds = np.empty((len(dim_group), 2)) + new_bounds = self.xpy.empty((len(dim_group), 2)) new_bounds = self.integrator.bounds[dim_group] - model = self.integrator.gmm_dict[dim_group] # get model for this set of dimensions - temp_samples = np.empty((n_history_to_use, len(dim_group))) + model = self.integrator.gmm_dict[dim_group] + temp_samples = self.xpy.empty((n_history_to_use, len(dim_group))) index = 0 for dim in dim_group: - # get samples corresponding to the current model - # send from GPU as needed temp_samples[:,index] = self.identity_convert(sample_array[:,dim]) index += 1 - # don't train with nan! - if any(np.isnan(ln_weights)): - ok_indx = ~np.isnan(ln_weights) + if self.xpy.any(self.xpy.isnan(ln_weights)): + ok_indx = ~self.xpy.isnan(ln_weights) temp_samples = temp_samples[ok_indx] ln_weights = ln_weights[ok_indx] if model is None: - # model doesn't exist yet if isinstance(self.integrator.n_comp, int) and self.integrator.n_comp != 0: model = GMM.gmm(self.integrator.n_comp, new_bounds,epsilon=self.integrator.gmm_epsilon) model.fit(temp_samples, log_sample_weights=ln_weights) @@ -332,11 +262,8 @@ def update_sampling_prior(self,ln_weights, n_history,tempering_exp=1,log_scale_w def draw_simplified(self,n,*args,**kwargs): - """ - Draw a set of random variates for parameter(s) args. Left and right limits are handed to the function. If args is None, then draw *all* parameters. 'rdict' parameter is a boolean. If true, returns a dict matched to param name rather than list. rvs must be either a list of uniform random variates to transform for sampling, or an integer number of samples to draw. - """ n_samples = int(n) - self.integrator.n = n # need to override this, so we sample with correct size + self.integrator.n = n if len(args) == 0: args = self.params @@ -346,8 +273,6 @@ def draw_simplified(self,n,*args,**kwargs): if 'save_no_samples' in list(kwargs.keys()): save_no_samples = kwargs['save_no_samples'] - - # Allocate memory. rv = self.xpy.empty((n_params, n_samples), dtype=np.float64) joint_p_s = self.xpy.ones(n_samples, dtype=np.float64) joint_p_prior = self.xpy.ones(n_samples, dtype=np.float64) @@ -365,14 +290,6 @@ def draw_simplified(self,n,*args,**kwargs): def integrate_log(self, func, *args,**kwargs): - ''' - Integrate the specified function over the specified parameters. - - func: function to integrate - - Simple wrapper to standardize interface - - ''' args_passed = {} args_passed.update(kwargs) args_passed['use_lnL']=True @@ -380,56 +297,12 @@ def integrate_log(self, func, *args,**kwargs): return integrate(func, *args, args_passed) def integrate(self, func, *args,**kwargs): - ''' - Integrate the specified function over the specified parameters. - - func: function to integrate - - args: list of parameters to integrate over - - direct_eval (bool): whether func can be evaluated directly with monte_carlo_integrator - format or not - - n_comp: number of gaussian components for model - - n: number of samples per iteration - - nmax: maximum number of samples for all iterations - - write_to_file (bool): write data to file - - gmm_dict: dictionary of dimensions and mixture models (see monte_carlo_integrator - documentation for more) - - var_thresh: result variance threshold for termination - - min_iter: minimum number of integrator iterations - - max_iter: maximum number of integrator iterations - - neff: eff_samp cutoff for termination - - reflect (bool): whether or not to reflect samples over boundaries (you should - basically never use this, it's really slow) - - mcsamp_func: function to be executed before mcsampler_new terminates (for example, - to print results or debugging info) - - integrator_func: function to be executed each iteration of the integrator (for - example, to print intermediate results) - - proc_count: size of multiprocessing pool. set to None to not use multiprocessing - tempering_exp -- Exponent to raise the weights of the 1-D marginalized histograms for adaptive sampling prior generation, by default it is 0 which will turn off adaptive sampling regardless of other settings - temper_log -- Adapt in min(ln L, 10^(-5))^tempering_exp - - max_err : Maximum number of errors allowed for GMM sampler - ''' nmax = kwargs["nmax"] if "nmax" in kwargs else 1e6 neff = kwargs["neff"] if "neff" in kwargs else 1000 - n = kwargs["n"] if "n" in kwargs else min(1000, nmax) # chunk size + n = kwargs["n"] if "n" in kwargs else min(1000, nmax) n_comp = kwargs["n_comp"] if "n_comp" in kwargs else 1 if 'gmm_dict' in list(kwargs.keys()): - gmm_dict = kwargs['gmm_dict'] # required + gmm_dict = kwargs['gmm_dict'] else: gmm_dict = None reflect = kwargs['reflect'] if "reflect" in kwargs else False @@ -447,16 +320,15 @@ def integrate(self, func, *args,**kwargs): L_cutoff = kwargs["L_cutoff"] if "L_cutoff" in kwargs else None tempering_exp = kwargs["tempering_exp"] if "tempering_exp" in kwargs else 1.0 lnw_failure_cut = kwargs["lnw_failure_cut"] if "lnw_failure_cut" in kwargs else None -# tempering_exp = kwargs["adapt_weight_exponent"] if "adapt_weight_exponent" in kwargs else 1.0 - max_err = kwargs["max_err"] if "max_err" in kwargs else 10 # default + max_err = kwargs["max_err"] if "max_err" in kwargs else 10 - verbose = kwargs["verbose"] if "verbose" in kwargs else False # default - super_verbose = kwargs["super_verbose"] if "super_verbose" in kwargs else False # default - dict_return_q = kwargs["dict_return"] if "dict_return" in kwargs else False # default. Method for passing back rich data structures for debugging + verbose = kwargs["verbose"] if "verbose" in kwargs else False + super_verbose = kwargs["super_verbose"] if "super_verbose" in kwargs else False + dict_return_q = kwargs["dict_return"] if "dict_return" in kwargs else False - tripwire_fraction = kwargs["tripwire_fraction"] if "tripwire_fraction" in kwargs else 2 # make it impossible to trigger - tripwire_epsilon = kwargs["tripwire_epsilon"] if "tripwire_epsilon" in kwargs else 0.001 # if we are not reasonably far away from unity, fail! + tripwire_fraction = kwargs["tripwire_fraction"] if "tripwire_fraction" in kwargs else 2 + tripwire_epsilon = kwargs["tripwire_epsilon"] if "tripwire_epsilon" in kwargs else 0.001 use_lnL = kwargs["use_lnL"] if "use_lnL" in kwargs else False return_lnI = kwargs["return_lnI"] if "return_lnI" in kwargs else False @@ -464,7 +336,6 @@ def integrate(self, func, *args,**kwargs): bFairdraw = kwargs["igrand_fairdraw_samples"] if "igrand_fairdraw_samples" in kwargs else False n_extr = kwargs["igrand_fairdraw_samples_max"] if "igrand_fairdraw_samples_max" in kwargs else None - # set up a lot of preliminary stuff self.func = func self.curr_args = args if n_comp is None: @@ -474,36 +345,32 @@ def integrate(self, func, *args,**kwargs): bounds=[] for param in args: bounds.append([self.llim[param], self.rlim[param]]) - raw_bounds = np.array(bounds) + raw_bounds = self.xpy.array(bounds) bounds=None - # generate default gmm_dict if not specified if gmm_dict is None: bounds = {} - for indx in np.arange(len(raw_bounds)): + for indx in self.xpy.arange(len(raw_bounds)): bounds[(indx,)] = raw_bounds[indx] bounds=raw_bounds if correlate_all_dims: gmm_dict = {tuple(range(dim)):None} - bounds = {tuple(np.arange(len(bounds))): raw_bounds} + bounds = {tuple(self.xpy.arange(len(bounds))): raw_bounds} else: gmm_dict = {} for i in range(dim): gmm_dict[(i,)] = None else: - # create bounds that depend on the dimension specifiers in the gmm integrator bounds ={} for dims in gmm_dict: n_dims = len(dims) - bounds_here = np.empty((n_dims,2)) - for indx in np.arange(n_dims): - bounds_here[indx] = raw_bounds[dims[indx]] # pull out bounds index + bounds_here = self.xpy.empty((n_dims,2)) + for indx in self.xpy.arange(n_dims): + bounds_here[indx] = raw_bounds[dims[indx]] bounds[dims]=bounds_here -# bounds = np.array(bounds) - # do the integral integrator = monte_carlo.integrator(dim, bounds, gmm_dict, n_comp, n=n, prior=self.calc_pdf, - user_func=integrator_func, proc_count=proc_count,L_cutoff=L_cutoff,gmm_adapt=gmm_adapt,gmm_epsilon=gmm_epsilon,tempering_exp=tempering_exp) # reflect=reflect, + user_func=integrator_func, proc_count=proc_count,L_cutoff=L_cutoff,gmm_adapt=gmm_adapt,gmm_epsilon=gmm_epsilon,tempering_exp=tempering_exp) if not direct_eval: func = self.evaluate if use_lnL: @@ -512,31 +379,26 @@ def integrate(self, func, *args,**kwargs): print(" ==> internal calculations and return values are lnI ") integrator.integrate(func, min_iter=min_iter, max_iter=max_iter, var_thresh=var_thresh, neff=neff, nmax=nmax,max_err=max_err,verbose=verbose,progress=super_verbose,tripwire_fraction=tripwire_fraction,tripwire_epsion=tripwire_epsilon,use_lnL=use_lnL,return_lnI=return_lnI,lnw_failure_cut=lnw_failure_cut) - # get results - self.n = int(integrator.n) self.ntotal = int(integrator.ntotal) integral = integrator.integral print("Result ",integrator.scaled_error_squared, integrator.integral) if not(return_lnI): - error_squared = integrator.scaled_error_squared * np.exp(integrator.log_error_scale_factor)/ (self.ntotal/self.n) + error_squared = integrator.scaled_error_squared * self.xpy.exp(integrator.log_error_scale_factor)/ (self.ntotal/self.n) else: - error_squared = integrator.scaled_error_squared - np.log(self.ntotal/self.n) + error_squared = integrator.scaled_error_squared - self.xpy.log(self.ntotal/self.n) eff_samp = integrator.eff_samp sample_array = integrator.cumulative_samples if not(return_lnI): - value_array = np.exp(integrator.cumulative_values) # stored as ln(integrand) ! + value_array = self.xpy.exp(integrator.cumulative_values) else: value_array = integrator.cumulative_values p_array = integrator.cumulative_p_s prior_array = integrator.cumulative_p - # user-defined function if mcsamp_func is not None: mcsamp_func(self, integrator) - # populate dictionary - index = 0 for param in args: self._rvs[param] = sample_array[:,index] @@ -545,35 +407,31 @@ def integrate(self, func, *args,**kwargs): self._rvs['joint_s_prior'] = p_array self._rvs['integrand'] = value_array - # Do a fair draw of points, if option is set. CAST POINTS BACK TO NUMPY, IDEALLY if bFairdraw and not(n_extr is None): - n_extr = int(np.min([n_extr,1.5*eff_samp,1.5*neff])) + n_extr = int(self.xpy.min([n_extr,1.5*eff_samp,1.5*neff])) print(" Fairdraw size : ", n_extr) if return_lnI: ln_wt = integrator.cumulative_values else: - ln_wt = np.log(value_array) - ln_wt += np.log(prior_array/p_array) - ln_wt += - scipy.special.logsumexp(ln_wt) - wt = np.exp(ln_wt) + ln_wt = self.xpy.log(value_array) + ln_wt += self.xpy.log(prior_array/p_array) + ln_wt += - scipy.special.logsumexp(self.identity_convert(ln_wt)) + wt = self.xpy.exp(ln_wt) if n_extr < len(value_array): - indx_list = np.random.choice(np.arange(len(wt)), size=n_extr,replace=True,p=wt) # fair draw - # FIXME: See previous FIXME + indx_list = self.xpy.random.choice(self.xpy.arange(len(wt)), size=n_extr,replace=True,p=wt) for key in list(self._rvs.keys()): if isinstance(key, tuple): self._rvs[key] = self._rvs[key][:,indx_list] else: self._rvs[key] = self._rvs[key][indx_list] - # if special return structure, fill it dict_return = {} if dict_return_q: dict_return["integrator"] = integrator - # write data to file if write_to_file: - dat_out = np.c_[sample_array, value_array, p_array] - np.savetxt('mcsampler_data.txt', dat_out, + dat_out = self.xpy.c_[sample_array, value_array, p_array] + np.savetxt('mcsampler_data.txt', self.identity_convert(dat_out), header=" ".join(['sample_array', 'value_array', 'p_array'])) return integral, error_squared, eff_samp, dict_return @@ -588,46 +446,37 @@ def gauss_samp(mu, std, x): def gauss_samp_withfloor(mu, std, myfloor, x): return 1.0/np.sqrt(2*np.pi*std**2)*np.exp(-(x-mu)**2/2/std**2) + myfloor -#gauss_samp_withfloor_vector = np.vectorize(gauss_samp_withfloor,excluded=['mu','std','myfloor'],otypes=[np.float64]) gauss_samp_withfloor_vector = np.vectorize(gauss_samp_withfloor,otypes=[np.float64]) -# Mass ratio. PDF propto 1/(1+q)^2. Defined so mass ratio is < 1 -# expr = Integrate[1/(1 + q)^2, q] -# scale = (expr /. q -> qmax ) - (expr /. q -> qmin) -# (expr - (expr /. q -> qmin))/scale == x // Simplify -# q /. Solve[%, q][[1]] // Simplify -# % // CForm def q_samp_vector(qmin,qmax,x): scale = 1./(1+qmin) - 1./(1+qmax) return 1/np.power((1+x),2)/scale def q_cdf_inv_vector(qmin,qmax,x): return np.array((qmin + qmax*qmin + qmax*x - qmin*x)/(1 + qmax - qmax*x + qmin*x),dtype=np.float128) -# total mass. Assumed used with q. 2M/Mmax^2-Mmin^2 def M_samp_vector(Mmin,Mmax,x): scale = 2./(Mmax**2 - Mmin**2) return x*scale def cos_samp(x): - return np.sin(x)/2 # x from 0, pi + return np.sin(x)/2 def dec_samp(x): - return np.sin(x+np.pi/2)/2 # x from 0, pi + return np.sin(x+np.pi/2)/2 cos_samp_vector = np.vectorize(cos_samp,otypes=[np.float64]) dec_samp_vector = np.vectorize(dec_samp,otypes=[np.float64]) def cos_samp_cdf_inv_vector(p): - return np.arccos( 2*p-1) # returns from 0 to pi + return np.arccos( 2*p-1) def dec_samp_cdf_inv_vector(p): - return np.arccos(2*p-1) - np.pi/2 # target from -pi/2 to pi/2 + return np.arccos(2*p-1) - np.pi/2 def pseudo_dist_samp(r0,r): - return r*r*np.exp( - (r0/r)*(r0/r)/2. + r0/r)+0.01 # put a floor on probability, so we converge. Note this floor only cuts out NEARBY distances + return r*r*np.exp( - (r0/r)*(r0/r)/2. + r0/r)+0.01 -#pseudo_dist_samp_vector = np.vectorize(pseudo_dist_samp,excluded=['r0'],otypes=[np.float64]) pseudo_dist_samp_vector = np.vectorize(pseudo_dist_samp,otypes=[np.float64]) def delta_func_pdf(x_0, x): @@ -641,36 +490,12 @@ def delta_func_samp(x_0, x): delta_func_samp_vector = np.vectorize(delta_func_samp, otypes=[np.float64]) class HealPixSampler(object): - """ - Class to sample the sky using a FITS healpix map. Equivalent to a joint 2-D pdf in RA and dec. - """ - @staticmethod def thph2decra(th, ph): - """ - theta/phi to RA/dec - theta (north to south) (0, pi) - phi (east to west) (0, 2*pi) - declination: north pole = pi/2, south pole = -pi/2 - right ascension: (0, 2*pi) - - dec = pi/2 - theta - ra = phi - """ return np.pi/2-th, ph @staticmethod def decra2thph(dec, ra): - """ - theta/phi to RA/dec - theta (north to south) (0, pi) - phi (east to west) (0, 2*pi) - declination: north pole = pi/2, south pole = -pi/2 - right ascension: (0, 2*pi) - - theta = pi/2 - dec - ra = phi - """ return np.pi/2-dec, ra def __init__(self, skymap, massp=1.0): @@ -689,43 +514,31 @@ def massp(self, value): norm = self.renormalize() def renormalize(self): - """ - Identify the points contributing to the overall cumulative probability distribution, and set the proper normalization. - """ res = healpy.npix2nside(len(self.skymap)) self.pdf_sorted = sorted([(p, i) for i, p in enumerate(self.skymap)], reverse=True) self.valid_points_decra = [] - cdf, np = 0, 0 + cdf, np_count = 0, 0 for p, i in self.pdf_sorted: if p == 0: - continue # Can't have a zero prior + continue self.valid_points_decra.append(HealPixSampler.thph2decra(*healpy.pix2ang(res, i))) cdf += p if cdf > self._massp: break self._renorm = cdf - # reset to indicate we'd need to recalculate this self.valid_points_hist = None return self._renorm def __expand_valid(self, min_p=1e-7): - # - # Determine what the 'quanta' of probabilty is - # if self._massp == 1.0: - # This is to ensure we don't blow away everything because the map - # is very spread out min_p = min(min_p, max(self.skymap)) else: - # NOTE: Only valid if CDF descending order is kept min_p = self.pseudo_pdf(*self.valid_points_decra[-1]) self.valid_points_hist = [] ns = healpy.npix2nside(len(self.skymap)) - # Renormalize first so that the vector histogram is properly normalized self._renorm = 0 - # Account for probability lost due to cut off for i, v in enumerate(self.skymap >= min_p): self._renorm += self.skymap[i] if v else 0 @@ -738,32 +551,21 @@ def __expand_valid(self, min_p=1e-7): self.valid_points_hist = np.array(self.valid_points_hist).T def pseudo_pdf(self, dec_in, ra_in): - """ - Return pixel probability for a given dec_in and ra_in. Note, uses healpy functions to identify correct pixel. - """ th, ph = HealPixSampler.decra2thph(dec_in, ra_in) res = healpy.npix2nside(len(self.skymap)) return self.skymap[healpy.ang2pix(res, th, ph)]/self._renorm def pseudo_cdf_inverse(self, dec_in=None, ra_in=None, ndraws=1, stype='vecthist'): - """ - Select points from the skymap with a distribution following its corresponding pixel probability. If dec_in, ra_in are suupplied, they are ignored except that their shape is reproduced. If ndraws is supplied, that will set the shape. Will return a 2xN np array of the (dec, ra) values. - stype controls the type of sampling done to retrieve points. Valid choices are - 'rejsamp': Rejection sampling: accurate but slow - 'vecthist': Expands a set of points into a larger vector with the multiplicity of the points in the vector corresponding roughly to the probability of drawing that point. Because this is not an exact representation of the proability, some points may not be represented at all (less than quantum of minimum probability) or inaccurately (a significant fraction of the fundamental quantum). - """ - if ra_in is not None: ndraws = len(ra_in) if ra_in is None: ra_in, dec_in = np.zeros((2, ndraws)) if stype == 'rejsamp': - # FIXME: This is only valid under descending ordered CDF summation ceiling = max(self.skymap) - i, np = 0, len(self.valid_points_decra) + i, np_count = 0, len(self.valid_points_decra) while i < len(ra_in): - rnd_n = np.random.randint(0, np) + rnd_n = np.random.randint(0, np_count) trial = np.random.uniform(0, ceiling) if trial <= self.pseudo_pdf(*self.valid_points_decra[rnd_n]): dec_in[i], ra_in[i] = self.valid_points_decra[rnd_n] @@ -772,77 +574,43 @@ def pseudo_cdf_inverse(self, dec_in=None, ra_in=None, ndraws=1, stype='vecthist' elif stype == 'vecthist': if self.valid_points_hist is None: self.__expand_valid() - np = self.valid_points_hist.shape[1] - rnd_n = np.random.randint(0, np, len(ra_in)) + np_count = self.valid_points_hist.shape[1] + rnd_n = np.random.randint(0, np_count, len(ra_in)) dec_in, ra_in = self.valid_points_hist[:,rnd_n] return np.array([dec_in, ra_in]) else: raise ValueError("%s is not a recgonized sampling type" % stype) -#pseudo_dist_samp_vector = np.vectorize(pseudo_dist_samp,excluded=['r0'],otypes=[np.float64]) pseudo_dist_samp_vector = np.vectorize(pseudo_dist_samp,otypes=[np.float64]) def sanityCheckSamplerIntegrateUnity(sampler,*args,**kwargs): return sampler.integrate(lambda *args: 1,*args,**kwargs) -### -### CONVERGENCE TESTS -### - - -# neff by another name: -# - value: tests for 'smooth' 1-d cumulative distributions -# - require require the most significant-weighted point be less than p of all cumulative probability -# - this test is *equivalent* to neff > 1/p -# - provided to illustrate the interface def convergence_test_MostSignificantPoint(pcut, rvs, params): - weights = rvs["weights"] #rvs["integrand"]* rvs["joint_prior"]/rvs["joint_s_prior"] + weights = rvs["weights"] indxmax = np.argmax(weights) wtSum = np.sum(weights) return weights[indxmax]/wtSum < pcut - -# normality test: is the MC integral normally distributed, with a small standard deviation? -# - value: tests for converged integral -# - arguments: -# - ncopies: # of sub-integrals -# - pcutNormalTest Threshold p-value for normality test -# - sigmaCutErrorThreshold Threshold relative error in the integral -# - implement normality test on **log(integral)** since the log should also be normally distributed if well converged -# - this helps us handle large orders-of-magnitude differences -# - compatible with a *relative* error threshold on integral -# - only works for *positive-definite* integrands -# - other python normality tests: -# scipy.stats.shapiro -# scipy.stats.anderson -# WARNING: -# - this test assumes *unsorted* past history: the 'ncopies' segments are assumed independent. -import scipy.stats as stats def convergence_test_NormalSubIntegrals(ncopies, pcutNormalTest, sigmaCutRelativeErrorThreshold, rvs, params): - weights = rvs["integrand"]* rvs["joint_prior"]/rvs["joint_s_prior"] # rvs["weights"] # rvs["weights"] is *sorted* (side effect?), breaking test. Recalculated weights are not. Use explicitly calculated weights until sorting effect identified -# weights = weights /np.sum(weights) # Keep original normalization, so the integral values printed to stdout have meaning relative to the overall integral value. No change in code logic : this factor scales out (from the log, below) + weights = rvs["integrand"]* rvs["joint_prior"]/rvs["joint_s_prior"] igrandValues = np.zeros(ncopies) - len_part = np.int(len(weights)/ncopies) # deprecated: np.floor->np.int + len_part = int(len(weights)/ncopies) for indx in np.arange(ncopies): - igrandValues[indx] = np.log(np.mean(weights[indx*len_part:(indx+1)*len_part])) # change to mean rather than sum, so sub-integrals have meaning - igrandValues= np.sort(igrandValues)#[2:] # Sort. Useful in reports - valTest = stats.normaltest(igrandValues)[1] # small value is implausible - igrandSigma = (np.std(igrandValues))/np.sqrt(ncopies) # variance in *overall* integral, estimated from variance of sub-integrals + igrandValues[indx] = np.log(np.mean(weights[indx*len_part:(indx+1)*len_part])) + igrandValues= np.sort(igrandValues) + valTest = stats.normaltest(igrandValues)[1] + igrandSigma = (np.std(igrandValues))/np.sqrt(ncopies) print(" Test values on distribution of log evidence: (gaussianity p-value; standard deviation of ln evidence) ", valTest, igrandSigma) print(" Ln(evidence) sub-integral values, as used in tests : ", igrandValues) - return valTest> pcutNormalTest and igrandSigma < sigmaCutRelativeErrorThreshold # Test on left returns a small value if implausible. Hence pcut ->0 becomes increasingly difficult (and requires statistical accidents). Test on right requires relative error in integral also to be small when pcut is small. FIXME: Give these variables two different names - - + return valTest> pcutNormalTest and igrandSigma < sigmaCutRelativeErrorThreshold from . import gaussian_mixture_model as GMM def create_wide_single_component_prior(bounds, epsilon=None): - """ - create_wide_single_component_prior(bounds) : returns a gmm dictionary which is very wide - """ model = GMM.gmm(1, bounds, epsilon=epsilon) widths = np.array([ bounds[k][1] - bounds[k][0] for k in np.arange(len(bounds))]) - model.means = [np.array([np.mean(bounds[k]) for k in np.arange(len(bounds))]) ] # single component + model.means = [np.array([np.mean(bounds[k]) for k in np.arange(len(bounds))]) ] model.covariances = [np.diag( widths**2)] model.weights = [1] model.adapt = [False] From 4b7ea9fff190d348554745ae36098f25e3d63230 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Mon, 4 May 2026 10:43:01 -0400 Subject: [PATCH 04/32] typos --- .../Code/RIFT/integrators/MonteCarloEnsemble.py | 1 + .../Code/RIFT/integrators/gaussian_mixture_model.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/MonteCarloEnsemble.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/MonteCarloEnsemble.py index 38593cedb..163a76ca0 100755 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/MonteCarloEnsemble.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/MonteCarloEnsemble.py @@ -376,6 +376,7 @@ def integrate(self, func, min_iter=10, max_iter=20, var_thresh=0.0, max_err=10, if epoch is not None and self.iterations % epoch == 0: self._reset() if verbose: + print(self.scaled_error_squared) if not(self.return_lnI): print(" : {} {} {} {} {} ".format((self.iterations-1)*self.n, self.eff_samp, self.xpy.sqrt(2*self.xpy.max(self.cumulative_values)), self.xpy.sqrt(2*(self.xpy.log(self.integral))), self.xpy.sqrt(self.scaled_error_squared )/self.integral/self.xpy.sqrt(self.iterations ) ) ) else: diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py index 6e52a2098..00fa8a270 100755 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py @@ -527,7 +527,7 @@ def sample(self, n, use_bounds=True): start = end except Exception as e: print('Exiting due to non-positive-semidefinite', e) - raise Exception(\"gmm covariance not positive-semidefinite\") + raise Exception("gmm covariance not positive-semidefinite") # Return as xpy array return self.identity_convert_togpu(sample_array_np) @@ -541,7 +541,7 @@ def print_params(self): weights_np = self.identity_convert(self.weights) if self.d ==1: - print(\"GMM: component wt mean_correct mean_normed std_normed \") + print("GMM: component wt mean_correct mean_normed std_normed ") for i in range(self.k): mean = means_np[i] cov = covs_np[i] From 43e88a68146c4eb4d21aca90829c850a56f704a8 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Mon, 4 May 2026 15:44:28 -0400 Subject: [PATCH 05/32] debugging with cld --- .../integrators/gaussian_mixture_model.py | 47 +++++++++++++------ 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py index 00fa8a270..51113cda3 100755 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py @@ -74,6 +74,11 @@ def gpu_logpdf(x, mean, cov, xpy): x: (n, d) array mean: (d,) array cov: (d, d) array + + Uses Cholesky + a generic linear solve (xpy.linalg.solve) so the same + code path works for both numpy and cupy. Note: solve_triangular is + NOT in numpy.linalg or cupy.linalg (only in scipy.linalg / + cupyx.scipy.linalg), so we deliberately use the generic solver here. """ d = mean.shape[0] diff = x - mean @@ -84,17 +89,17 @@ def gpu_logpdf(x, mean, cov, xpy): # Fallback to adding small epsilon to diagonal eps = 1e-6 * xpy.eye(d) L = xpy.linalg.cholesky(cov + eps) - + # Solve L*y = diff^T => y = L^-1 * diff^T # diff is (n, d), so diff.T is (d, n) - y = xpy.linalg.solve_triangular(L, diff.T, lower=True) - + y = xpy.linalg.solve(L, diff.T) + # quad_form = sum(y^2, axis=0) quad_form = xpy.sum(y**2, axis=0) - + # log_det = 2 * sum(log(diag(L))) log_det = 2.0 * xpy.sum(xpy.log(xpy.diag(L))) - + log_prob = -0.5 * (d * xpy.log(2 * xpy.pi) + log_det + quad_form) return log_prob @@ -500,14 +505,24 @@ def score(self, sample_array,assume_normalized=True): def sample(self, n, use_bounds=True): ''' Draw samples from the current model. + + Note the model's means/covariances are stored in *normalized* coordinates + (the [-1, 1] image of self.bounds under self._normalize). Samples are + therefore drawn in normalized coordinates and then unnormalized back to + the original coordinate frame before being returned, matching the + pre-port behavior expected by MonteCarloEnsemble._sample(). ''' - # Sampling is kept on CPU for stability (truncnorm) - # Convert model params to numpy + # Sampling is kept on CPU for stability (truncnorm is CPU-only) means_np = [self.identity_convert(m) for m in self.means] covs_np = [self.identity_convert(c) for c in self.covariances] weights_np = self.identity_convert(self.weights) - bounds_np = self.identity_convert(self.bounds) - + + # truncnorm bounds must match the coordinate frame of the model + # parameters (mean/cov), which is normalized [-1, 1]. + bounds_normalized = np.empty((self.d, 2)) + bounds_normalized[:, 0] = -1.0 + bounds_normalized[:, 1] = 1.0 + sample_array_np = np.empty((n, self.d)) start = 0 for component in range(self.k): @@ -523,14 +538,16 @@ def sample(self, n, use_bounds=True): if not use_bounds: sample_array_np[start:end] = np.random.multivariate_normal(mean, cov, end - start) else: - sample_array_np[start:end] = truncnorm.sample(mean, cov, bounds_np, end - start) + sample_array_np[start:end] = truncnorm.sample(mean, cov, bounds_normalized, end - start) start = end except Exception as e: print('Exiting due to non-positive-semidefinite', e) raise Exception("gmm covariance not positive-semidefinite") - - # Return as xpy array - return self.identity_convert_togpu(sample_array_np) + + # Move to xpy and unnormalize back to original [llim, rlim] coordinates, + # so callers receive samples in the same frame as self.bounds. + sample_array_xpy = self.identity_convert_togpu(sample_array_np) + return self._unnormalize(sample_array_xpy) def print_params(self): ''' @@ -547,13 +564,13 @@ def print_params(self): cov = covs_np[i] weight = weights_np[i] if self.d >1: - print('________________________________________\\n') + print('________________________________________\n') print('Component', i) print('Mean (scaled and unscaled)') print(mean, self._unnormalize(np.array([mean]))) print('Covariance') print(cov) print('Weight') - print(weight, '\\n') + print(weight, '\n') else: print(i, weight, self._unnormalize(np.array([mean]))[0,0], mean[0], np.sqrt(cov[0,0])) From bb790cd28efc35f9f500cdbf153b167e42a1aed0 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Mon, 4 May 2026 16:04:11 -0400 Subject: [PATCH 06/32] integrators, precision, CI: portable RiftFloat + py3.12/numpy2.x lane Add RIFT.precision and route all extended-precision dtype use through it. * RIFT.precision (new): RiftFloat resolves to numpy.longdouble whenever the platform's long double has itemsize > 8 (e.g. Linux x86_64), and otherwise falls back to numpy.float64. Also exports RIFT_FLOAT_HIGH_PRECISION and RIFT_FLOAT_NAME. Eliminates the import-time AttributeError when numpy.float128 is absent (macOS arm64, Windows MSVC, non-x86 Linux, future numpy 2.x platforms). * Integrator package: replace every numpy.float128 / np.float128 in mcsampler.py, mcsamplerEnsemble.py, mcsamplerGPU.py, mcsamplerAdaptiveVolume.py, mcsamplerNFlow.py, mcsamplerPortfolio.py, statutils.py with RiftFloat. The dtype-equality guards in mcsamplerGPU and mcsamplerNFlow ("if weights_alt.dtype == numpy.float128: cast to float64") degrade gracefully when RiftFloat == float64 (the conditional astype becomes a no-op). * likelihood/factored_likelihood.py and interpolators/BayesianLeastSquares.py: same RiftFloat swap, so they also import cleanly on platforms without np.float128. * CI (.github/workflows/ci.yml): add rift_O4d_gmm_gpu to the trigger branches; expand the install matrix to 3.9-3.13; convert import-check and test-run into a two-lane matrix: - legacy : python 3.9 + numpy==1.24.4 (historical green build) - modern : python 3.12 + numpy>=2.0,<3.0 (forward-looking gate) Numpy is pinned after requirements.txt, so the unpinned 'numpy' line in requirements.txt is preserved. Test-log artifacts are named per-lane so failures from each can be uploaded independently. No behavioral change on the existing legacy CI lane: RiftFloat is numpy.longdouble there, which is the exact 16-byte type previously spelled numpy.float128. The modern CI lane is the new gate. --- .github/workflows/ci.yml | 61 +++++++++++-- .../Code/RIFT/integrators/mcsampler.py | 11 +-- .../integrators/mcsamplerAdaptiveVolume.py | 3 +- .../RIFT/integrators/mcsamplerEnsemble.py | 3 +- .../Code/RIFT/integrators/mcsamplerGPU.py | 17 ++-- .../Code/RIFT/integrators/mcsamplerNFlow.py | 5 +- .../RIFT/integrators/mcsamplerPortfolio.py | 3 +- .../Code/RIFT/integrators/statutils.py | 5 +- .../interpolators/BayesianLeastSquares.py | 9 +- .../RIFT/likelihood/factored_likelihood.py | 11 +-- .../Code/RIFT/precision.py | 88 +++++++++++++++++++ 11 files changed, 181 insertions(+), 35 deletions(-) create mode 100644 MonteCarloMarginalizeCode/Code/RIFT/precision.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ba24c8a24..95c167bf6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,9 +2,9 @@ name: CI on: push: - branches: [rift_O4d, rift_O4d_junior] + branches: [rift_O4d, rift_O4d_junior, rift_O4d_gmm_gpu] pull_request: - branches: [rift_O4d, rift_O4d_junior] + branches: [rift_O4d, rift_O4d_junior, rift_O4d_gmm_gpu] workflow_dispatch: concurrency: @@ -17,7 +17,10 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.10', '3.11', '3.12', '3.13'] + # Smoke-test that the package resolves and installs across the supported + # Python range, including the legacy py3.9 lane (paired with the pinned + # numpy==1.24.4 used by the integrator gate below). + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 @@ -60,11 +63,27 @@ jobs: import-check: needs: install runs-on: ubuntu-latest + # Verify every declared module imports cleanly under both the pinned + # legacy lane (py3.9 + numpy 1.24.4) and the modern lane (py3.12 + + # numpy 2.x). Catches platform-portability regressions like the + # np.float128 import-time crash on numpy 2.x systems without an + # extended-precision long double. + strategy: + fail-fast: false + matrix: + include: + - lane: legacy + python-version: '3.9' + numpy-pin: 'numpy==1.24.4' + - lane: modern + python-version: '3.12' + numpy-pin: 'numpy>=2.0,<3.0' + name: import-check (${{ matrix.lane }} py${{ matrix.python-version }}) steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: - python-version: '3.10' + python-version: ${{ matrix.python-version }} cache: 'pip' cache-dependency-path: requirements.txt - name: Enable symlink @@ -73,8 +92,14 @@ jobs: run: | python -m pip install --upgrade pip --break-system-packages python -m pip install -r requirements.txt --break-system-packages + # Pin numpy AFTER requirements.txt so it overrides the unpinned + # 'numpy' line in requirements.txt without changing the file. + python -m pip install '${{ matrix.numpy-pin }}' --break-system-packages python -m pip install coverage pytest --break-system-packages python -m pip install --editable . --break-system-packages + - name: Show resolved versions + run: | + python -c "import sys, numpy, scipy; print('python', sys.version); print('numpy', numpy.__version__); print('scipy', scipy.__version__)" - name: Run import check run: python .travis/test-all-mod.py @@ -108,11 +133,29 @@ jobs: test-run: needs: install runs-on: ubuntu-latest + # Integrator + posterior gate. We run this in two CI lanes: + # - legacy : py3.9 + numpy 1.24.4 -- the historically known-good + # configuration on Linux x86_64 where np.float128 is real. + # - modern : py3.12 + numpy 2.x -- the forward-looking target. Catches + # numpy 2.x removals (np.product, np.cumproduct, np.in1d, + # np.alltrue, np.float_) and scipy >= 1.16 mvnun removal. + # Both lanes must pass test-integrate.sh's GMM/AC/AV consistency check. + strategy: + fail-fast: false + matrix: + include: + - lane: legacy + python-version: '3.9' + numpy-pin: 'numpy==1.24.4' + - lane: modern + python-version: '3.12' + numpy-pin: 'numpy>=2.0,<3.0' + name: test-run (${{ matrix.lane }} py${{ matrix.python-version }}) steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: - python-version: '3.10' + python-version: ${{ matrix.python-version }} cache: 'pip' cache-dependency-path: requirements.txt - name: Enable symlink @@ -121,8 +164,14 @@ jobs: run: | python -m pip install --upgrade pip --break-system-packages python -m pip install -r requirements.txt --break-system-packages + # Pin numpy AFTER requirements.txt so it overrides the unpinned + # 'numpy' line in requirements.txt without changing the file. + python -m pip install '${{ matrix.numpy-pin }}' --break-system-packages python -m pip install coverage pytest pytest-cov --break-system-packages python -m pip install --editable . --break-system-packages + - name: Show resolved versions + run: | + python -c "import sys, numpy, scipy; print('python', sys.version); print('numpy', numpy.__version__); print('scipy', scipy.__version__)" - name: Run test scripts run: | . .travis/test-coord.sh @@ -135,7 +184,7 @@ jobs: if: failure() uses: actions/upload-artifact@v4 with: - name: test-logs + name: test-logs-${{ matrix.lane }}-py${{ matrix.python-version }} path: | **/*.log **/test-results/*.xml diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsampler.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsampler.py index e02fbaa52..822605d7b 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsampler.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsampler.py @@ -6,6 +6,7 @@ from collections import defaultdict import numpy +from RIFT.precision import RiftFloat # platform-portable replacement for np.float128 from scipy import integrate, interpolate from ..integrators.statutils import cumvar, welford, update, finalize import itertools @@ -411,7 +412,7 @@ def integrate(self, func, *args, **kwargs): # Determine stopping conditions # nmax = int(kwargs["nmax"]) if "nmax" in kwargs else float("inf") - neff = kwargs["neff"] if "neff" in kwargs else numpy.float128("inf") + neff = kwargs["neff"] if "neff" in kwargs else RiftFloat("inf") n = int(kwargs["n"]) if "n" in kwargs else min(1000, nmax) convergence_tests = kwargs["convergence_tests"] if "convergence_tests" in kwargs else None @@ -463,12 +464,12 @@ def integrate(self, func, *args, **kwargs): print(" Initiating multiprocessor pool : ", nProcesses) p = Pool(nProcesses) - int_val1 = numpy.float128(0) + int_val1 = RiftFloat(0) self.ntotal = 0 maxval = -float("Inf") maxlnL = -float("Inf") eff_samp = 0 - mean, var = None, numpy.float128(0) # to prevent infinite variance due to overflow + mean, var = None, RiftFloat(0) # to prevent infinite variance due to overflow if bShowEvaluationLog: print("iteration Neff sqrt(2*lnLmax) sqrt(2*lnLmarg) ln(Z/Lmax) int_var") @@ -501,7 +502,7 @@ def integrate(self, func, *args, **kwargs): # Calculate the overall p_s assuming each pdf is independent joint_p_s = numpy.prod(p_s, axis=0) joint_p_prior = numpy.prod(p_prior, axis=0) - joint_p_prior = numpy.array(joint_p_prior,dtype=numpy.float128) # Force type. Some type issues have arisen (dtype=object returns by accident) + joint_p_prior = numpy.array(joint_p_prior,dtype=RiftFloat) # Force type. Some type issues have arisen (dtype=object returns by accident) # print "Joint prior ", type(joint_p_prior), joint_p_prior.dtype, joint_p_prior # print "Joint sampling prior ", type(joint_p_s), joint_p_s.dtype @@ -850,7 +851,7 @@ def q_samp_vector(qmin,qmax,x): scale = 1./(1+qmin) - 1./(1+qmax) return 1/numpy.power((1+x),2)/scale def q_cdf_inv_vector(qmin,qmax,x): - return numpy.array((qmin + qmax*qmin + qmax*x - qmin*x)/(1 + qmax - qmax*x + qmin*x),dtype=np.float128) + return numpy.array((qmin + qmax*qmin + qmax*x - qmin*x)/(1 + qmax - qmax*x + qmin*x),dtype=RiftFloat) # total mass. Assumed used with q. 2M/Mmax^2-Mmin^2 def M_samp_vector(Mmin,Mmax,x): diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerAdaptiveVolume.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerAdaptiveVolume.py index b19687ceb..82c28b912 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerAdaptiveVolume.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerAdaptiveVolume.py @@ -11,6 +11,7 @@ import numpy np=numpy #import numpy as np +from RIFT.precision import RiftFloat # platform-portable replacement for np.float128 from scipy import integrate, interpolate, special import itertools import functools @@ -469,7 +470,7 @@ def integrate_log(self, lnF, *args, xpy=xpy_default,**kwargs): # Determine stopping conditions # nmax = kwargs["nmax"] if "nmax" in kwargs else float("inf") - neff = kwargs["neff"] if "neff" in kwargs else numpy.float128("inf") + neff = kwargs["neff"] if "neff" in kwargs else RiftFloat("inf") n = int(kwargs["n"] if "n" in kwargs else min(100000, nmax)) convergence_tests = kwargs["convergence_tests"] if "convergence_tests" in kwargs else None save_no_samples = kwargs["save_no_samples"] if "save_no_samples" in kwargs else None diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerEnsemble.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerEnsemble.py index 192f80ed0..f1aaa7982 100755 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerEnsemble.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerEnsemble.py @@ -4,6 +4,7 @@ from collections import defaultdict import numpy as np +from RIFT.precision import RiftFloat # platform-portable replacement for np.float128 try: import cupy @@ -453,7 +454,7 @@ def q_samp_vector(qmin,qmax,x): scale = 1./(1+qmin) - 1./(1+qmax) return 1/np.power((1+x),2)/scale def q_cdf_inv_vector(qmin,qmax,x): - return np.array((qmin + qmax*qmin + qmax*x - qmin*x)/(1 + qmax - qmax*x + qmin*x),dtype=np.float128) + return np.array((qmin + qmax*qmin + qmax*x - qmin*x)/(1 + qmax - qmax*x + qmin*x),dtype=RiftFloat) def M_samp_vector(Mmin,Mmax,x): scale = 2./(Mmax**2 - Mmin**2) diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerGPU.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerGPU.py index 86241f966..2f1724352 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerGPU.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerGPU.py @@ -11,6 +11,7 @@ import numpy np=numpy #import numpy as np +from RIFT.precision import RiftFloat # platform-portable replacement for np.float128 from scipy import integrate, interpolate, special import itertools import functools @@ -546,7 +547,7 @@ def update_sampling_prior(self,ln_weights, n_history,tempering_exp=1,log_scale_w weights_alt = self.xpy.maximum(weights_alt, 1e-5) # prevent negative weights, in case integrating function with lnL < 0 # now treat as sum weights_alt = weights_alt/(weights_alt.sum()) - if weights_alt.dtype == numpy.float128: + if weights_alt.dtype == RiftFloat: weights_alt = weights_alt.astype(numpy.float64,copy=False) def function_wrapper(f, p): @@ -621,7 +622,7 @@ def integrate_log(self, lnF, *args, xpy=xpy_default,**kwargs): # Determine stopping conditions # nmax = kwargs["nmax"] if "nmax" in kwargs else float("inf") - neff = kwargs["neff"] if "neff" in kwargs else numpy.float128("inf") + neff = kwargs["neff"] if "neff" in kwargs else RiftFloat("inf") n = int(kwargs["n"] if "n" in kwargs else min(1000, nmax)) convergence_tests = kwargs["convergence_tests"] if "convergence_tests" in kwargs else None save_no_samples = kwargs["save_no_samples"] if "save_no_samples" in kwargs else None @@ -808,7 +809,7 @@ def inner(arg): weights_alt = self._rvs["log_integrand"][-n_history:]+np.max([maxlnL, 200]) # try to make sure we have some dynamic range here weights_alt = self.xpy.maximum(weights_alt, 1e-5) # prevent negative weights. NOTE THIS IS IMPORTANT: if you are integrating a function with lnL<0, use an offset! weights_alt = weights_alt/(weights_alt.sum()) - if weights_alt.dtype == numpy.float128: + if weights_alt.dtype == RiftFloat: weights_alt = weights_alt.astype(numpy.float64,copy=False) for itr, p in enumerate(self.params_ordered): @@ -980,7 +981,7 @@ def integrate(self, func, *args, **kwargs): # Determine stopping conditions # nmax = kwargs["nmax"] if "nmax" in kwargs else float("inf") - neff = kwargs["neff"] if "neff" in kwargs else numpy.float128("inf") + neff = kwargs["neff"] if "neff" in kwargs else RiftFloat("inf") n = int(kwargs["n"] if "n" in kwargs else min(1000, nmax)) convergence_tests = kwargs["convergence_tests"] if "convergence_tests" in kwargs else None save_no_samples = kwargs["save_no_samples"] if "save_no_samples" in kwargs else None @@ -1023,12 +1024,12 @@ def integrate(self, func, *args, **kwargs): if bShowEvaluationLog: print(" .... mcsampler : providing verbose output ..... ") - int_val1 = numpy.float128(0) + int_val1 = RiftFloat(0) self.ntotal = 0 maxval = -float("Inf") maxlnL = -float("Inf") eff_samp = 0 - mean, var = None, numpy.float128(0) # to prevent infinite variance due to overflow + mean, var = None, RiftFloat(0) # to prevent infinite variance due to overflow if cupy_ok: var = xpy_default.float64(0) # cupy doesn't have float128 @@ -1228,7 +1229,7 @@ def inner(arg): weights_alt = weights_alt/(weights_alt.sum()) # Type convert as needed: if weights are float128, convert to float64; otherwise we hit a typing error later with bincount - if weights_alt.dtype == numpy.float128: + if weights_alt.dtype == RiftFloat: weights_alt = weights_alt.astype(numpy.float64,copy=False) # weights_alt = floor_integrated_probability*xpy_default.ones(len(weights_alt))/len(weights_alt) + (1-floor_integrated_probability)*weights_alt @@ -1412,7 +1413,7 @@ def q_samp_vector(qmin,qmax,x): scale = 1./(1+qmin) - 1./(1+qmax) return 1/numpy.power((1+x),2)/scale def q_cdf_inv_vector(qmin,qmax,x,xpy=xpy_default): - return np.array((qmin + qmax*qmin + qmax*x - qmin*x)/(1 + qmax - qmax*x + qmin*x),dtype=np.float128) + return np.array((qmin + qmax*qmin + qmax*x - qmin*x)/(1 + qmax - qmax*x + qmin*x),dtype=RiftFloat) # total mass. Assumed used with q. 2M/Mmax^2-Mmin^2 def M_samp_vector(Mmin,Mmax,x): diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerNFlow.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerNFlow.py index 965f7b27c..758097e98 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerNFlow.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerNFlow.py @@ -13,6 +13,7 @@ import numpy np=numpy #import numpy as np +from RIFT.precision import RiftFloat # platform-portable replacement for np.float128 from scipy import integrate, interpolate, special import itertools import functools @@ -642,7 +643,7 @@ def update_sampling_prior(self, lnw, *args, xpy=xpy_default,no_protect_names=Tru # weights_alt = self.xpy.maximum(weights_alt, 1e-5) # prevent negative weights, in case integrating function with lnL < 0 # now treat as sum weights_alt = weights_alt/(weights_alt.sum()) - if weights_alt.dtype == numpy.float128: + if weights_alt.dtype == RiftFloat: weights_alt = weights_alt.astype(numpy.float64,copy=False) @@ -726,7 +727,7 @@ def integrate_log(self, lnF, *args, xpy=xpy_default,**kwargs): # Determine stopping conditions # nmax = kwargs["nmax"] if "nmax" in kwargs else float("inf") - neff = kwargs["neff"] if "neff" in kwargs else numpy.float128("inf") + neff = kwargs["neff"] if "neff" in kwargs else RiftFloat("inf") n = int(kwargs["n"] if "n" in kwargs else min(100000, nmax)) convergence_tests = kwargs["convergence_tests"] if "convergence_tests" in kwargs else None save_no_samples = kwargs["save_no_samples"] if "save_no_samples" in kwargs else None diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerPortfolio.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerPortfolio.py index 07fb1b2b8..e34235bde 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerPortfolio.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerPortfolio.py @@ -6,6 +6,7 @@ import numpy np=numpy #import numpy as np +from RIFT.precision import RiftFloat # platform-portable replacement for np.float128 from scipy import integrate, interpolate, special import itertools import functools @@ -322,7 +323,7 @@ def integrate_log(self, lnF, *args, xpy=xpy_default,**kwargs): # Determine stopping conditions # nmax = kwargs["nmax"] if "nmax" in kwargs else float("inf") - neff = kwargs["neff"] if "neff" in kwargs else numpy.float128("inf") + neff = kwargs["neff"] if "neff" in kwargs else RiftFloat("inf") n = int(kwargs["n"] if "n" in kwargs else min(100000, nmax)) convergence_tests = kwargs["convergence_tests"] if "convergence_tests" in kwargs else None save_no_samples = kwargs["save_no_samples"] if "save_no_samples" in kwargs else None diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/statutils.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/statutils.py index 69d1986af..166d84562 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/statutils.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/statutils.py @@ -1,4 +1,5 @@ import numpy +from RIFT.precision import RiftFloat # platform-portable replacement for np.float128 import scipy.special __author__ = "Chris Pankow , R. O'Shaughnessy" @@ -38,12 +39,12 @@ def cumvar(arr, mean=None, var=None, n=0): for algorithm details. """ if mean and var: - m, s = numpy.zeros(len(arr)+1), numpy.zeros(len(arr)+1,dtype=numpy.float128) + m, s = numpy.zeros(len(arr)+1), numpy.zeros(len(arr)+1,dtype=RiftFloat) m[0] = mean s[0] = var*(n-1) buf = numpy.array([0]) else: - m, s = numpy.zeros(arr.shape), numpy.zeros(arr.shape,dtype=numpy.float128) + m, s = numpy.zeros(arr.shape), numpy.zeros(arr.shape,dtype=RiftFloat) m[0] = arr[0] buf = numpy.array([]) diff --git a/MonteCarloMarginalizeCode/Code/RIFT/interpolators/BayesianLeastSquares.py b/MonteCarloMarginalizeCode/Code/RIFT/interpolators/BayesianLeastSquares.py index fa736f0ee..fc89b3706 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/interpolators/BayesianLeastSquares.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/interpolators/BayesianLeastSquares.py @@ -7,6 +7,7 @@ import scipy.linalg as linalg import numpy as np +from RIFT.precision import RiftFloat # platform-portable replacement for np.float128 def fit_quadratic(x,y,x0=None,variable_symmetry_list=None,gamma_x=None,prior_x_gamma=None,prior_quadratic_gamma=None,verbose=False,n_digits=None,hard_regularize_negative=False,hard_regularize_scale=1): @@ -38,7 +39,7 @@ def fit_quadratic(x,y,x0=None,variable_symmetry_list=None,gamma_x=None,prior_x_g # Constant, linear, quadratic functions. # Beware of lambda: f_list = [(lambda x: k) for k in range(5)] does not work, but this does # f_list = [(lambda x,k=k: k) for k in range(5)] - f0 = [lambda z: np.ones(len(z),dtype=np.float128)] + f0 = [lambda z: np.ones(len(z),dtype=RiftFloat)] # indx_lookup_linear = {} # protect against packing errors # indx_here = len(f0) # f_linear = [] @@ -73,11 +74,11 @@ def fit_quadratic(x,y,x0=None,variable_symmetry_list=None,gamma_x=None,prior_x_g # print " Grid test " , pair, fn_now(np.array([1,0])), fn_now(np.array([0,1])), fn_now(np.array([1,1])) ,fn_now(np.array([1,-1])) - F = np.matrix(np.zeros((len(x), n_params_model),dtype=np.float128)) + F = np.matrix(np.zeros((len(x), n_params_model),dtype=RiftFloat)) for q in np.arange(n_params_model): - fval = f_list[q](np.array(x,dtype=np.float128)) + fval = f_list[q](np.array(x,dtype=RiftFloat)) F[:,q] = np.reshape(fval, (len(x),1)) - gamma = np.matrix( np.diag(np.ones(npts,dtype=np.float128))) + gamma = np.matrix( np.diag(np.ones(npts,dtype=RiftFloat))) if not(gamma_x is None): gamma = np.matrix(gamma_x) Gamma = F.T * gamma * F # Fisher matrix for the fit diff --git a/MonteCarloMarginalizeCode/Code/RIFT/likelihood/factored_likelihood.py b/MonteCarloMarginalizeCode/Code/RIFT/likelihood/factored_likelihood.py index d319ce535..165ae8084 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/likelihood/factored_likelihood.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/likelihood/factored_likelihood.py @@ -32,6 +32,7 @@ import RIFT.lalsimutils as lsu # problem of relative comprehensive import - dangerous due to package name log_loud = lsu.log_loud import numpy as np +from RIFT.precision import RiftFloat # platform-portable replacement for np.float128 try: import cupy from . import optimized_gpu_tools @@ -670,7 +671,7 @@ def FactoredLogLikelihoodTimeMarginalized(tvals, extr_params, rholms_intp, rholm Ylms = ComputeYlms(Lmax, incl, -phiref, selected_modes=rholms_intp[list(rholms.keys())[0]].keys()) # lnL = 0. - lnL = np.zeros(len(tvals),dtype=np.float128) + lnL = np.zeros(len(tvals),dtype=RiftFloat) for det in detectors: CT = crossTerms[det] CTV = crossTermsV[det] @@ -1570,7 +1571,7 @@ def DiscreteFactoredLogLikelihoodViaArray(tvals, P, lookupNKDict, rholmsArrayDi deltaT = P.deltaT - lnL = np.zeros(npts,dtype=np.float128) + lnL = np.zeros(npts,dtype=RiftFloat) for det in detectors: @@ -1648,10 +1649,10 @@ def DiscreteFactoredLogLikelihoodViaArrayVector(tvals, P_vec, lookupNKDict, rho deltaT = P_vec.deltaT # this is stored as a scalar # Array to use for work - lnL = np.zeros(npts,dtype=np.float128) - lnL_array = np.zeros((npts_extrinsic,npts),dtype=np.float128) + lnL = np.zeros(npts,dtype=RiftFloat) + lnL_array = np.zeros((npts_extrinsic,npts),dtype=RiftFloat) # Array to use for output - lnLmargOut = np.zeros(npts_extrinsic,dtype=np.float128) + lnLmargOut = np.zeros(npts_extrinsic,dtype=RiftFloat) # term1 = np.zeros(npts, dtype=complex) # workspace for det in detectors: # strings right now - need to change to make ufunc-able diff --git a/MonteCarloMarginalizeCode/Code/RIFT/precision.py b/MonteCarloMarginalizeCode/Code/RIFT/precision.py new file mode 100644 index 000000000..2f6976be6 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/RIFT/precision.py @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- +""" +RIFT.precision +============== + +Centralized high-precision floating-point dtype for RIFT. + +RIFT historically used ``numpy.float128`` directly throughout the integrators +to suppress overflow when accumulating very large or very small probability +weights. ``numpy.float128`` is, however, a *platform-dependent* alias: + +* On x86_64 Linux it is ``numpy.longdouble`` with 80-bit extended precision + stored in 16 bytes, and exposes the alias ``numpy.float128``. +* On macOS arm64 (Apple Silicon), Windows MSVC, and many embedded / non-x86 + Linux builds, ``numpy.longdouble`` has the same width as ``numpy.float64`` + (8 bytes), and ``numpy.float128`` does not exist. +* In NumPy 2.x the ``numpy.float128`` alias was further narrowed and is now + only present where the platform actually has a wider long double type. + +Hardcoding ``numpy.float128`` therefore breaks imports on any platform that +lacks an extended-precision long double. This module provides: + +* ``RiftFloat`` -- the dtype to use for high-precision accumulators. Equals + ``numpy.longdouble`` whenever the platform really gives extra precision + (``itemsize > 8``), otherwise falls back to ``numpy.float64``. +* ``RIFT_FLOAT_HIGH_PRECISION`` -- ``True`` iff ``RiftFloat`` is wider than + ``numpy.float64``. Use this if a code path needs to know whether the + extra precision is actually available (e.g. to skip a downcast that is + only meaningful when float128 is real). + +Recommended usage +----------------- + +Replace :: + + import numpy + neff = numpy.float128("inf") + arr = numpy.array(values, dtype=numpy.float128) + if weights.dtype == numpy.float128: + weights = weights.astype(numpy.float64) + +with :: + + from RIFT.precision import RiftFloat + neff = RiftFloat("inf") + arr = numpy.array(values, dtype=RiftFloat) + if weights.dtype == RiftFloat: + weights = weights.astype(numpy.float64) + +When ``RiftFloat`` is ``numpy.float64`` the type-equality guards become +self-consistent (the ``astype(float64)`` is a no-op) and no platform-specific +branching is required at the call site. +""" + +import numpy as _np + +__all__ = [ + "RiftFloat", + "RIFT_FLOAT_HIGH_PRECISION", + "RIFT_FLOAT_NAME", +] + + +def _select_high_precision_dtype(): + """Pick the widest available real-floating dtype, falling back to float64. + + Prefers ``numpy.longdouble`` (always defined) whenever the platform + actually gives more than 8-byte storage; otherwise returns + ``numpy.float64`` so that consumers can use the result as a drop-in + replacement for ``numpy.float128`` without raising on platforms that + do not expose it. + """ + longdouble_itemsize = _np.dtype(_np.longdouble).itemsize + if longdouble_itemsize > 8: + return _np.longdouble, True + # Some NumPy 1.x builds expose float128 even when longdouble is 8 bytes + # (older alias kept for ABI stability). Treat that as high-precision. + if hasattr(_np, "float128"): + try: + if _np.dtype(_np.float128).itemsize > 8: + return _np.float128, True + except TypeError: + pass + return _np.float64, False + + +RiftFloat, RIFT_FLOAT_HIGH_PRECISION = _select_high_precision_dtype() +RIFT_FLOAT_NAME = _np.dtype(RiftFloat).name From 003579803cdf933e24f4b30ef38d76285accc1f7 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Tue, 26 May 2026 10:45:22 -0400 Subject: [PATCH 07/32] Add distance-grid likelihood export demo Implement a reusable distance-grid export helper for ILE, thread the export flag through pseudo_pipe, and add focused reconstruction tests. Add a zero-spin fake-data demo that builds a DAG with distance-grid export enabled, plus a small lalsimutils XML compatibility fix for current LAL bindings. --- .../Code/RIFT/lalsimutils.py | 2 +- .../Code/RIFT/misc/distance_grid.py | 118 ++++++++++++++++++ .../integrate_likelihood_extrinsic_batchmode | 80 +++++------- .../Code/bin/util_RIFT_pseudo_pipe.py | 9 ++ .../demo/rift/add_distance_grids/Makefile | 74 +++++++++++ .../demo/rift/add_distance_grids/README.md | 54 ++++++++ .../add_distance_grids/add_distance_grids.ini | 83 ++++++++++++ .../Code/test/test_distance_grid.py | 57 +++++++++ 8 files changed, 424 insertions(+), 53 deletions(-) create mode 100644 MonteCarloMarginalizeCode/Code/RIFT/misc/distance_grid.py create mode 100644 MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/Makefile create mode 100644 MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/README.md create mode 100644 MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/add_distance_grids.ini create mode 100644 MonteCarloMarginalizeCode/Code/test/test_distance_grid.py diff --git a/MonteCarloMarginalizeCode/Code/RIFT/lalsimutils.py b/MonteCarloMarginalizeCode/Code/RIFT/lalsimutils.py index c48fc1d4e..3066e2c5f 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/lalsimutils.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/lalsimutils.py @@ -1869,7 +1869,7 @@ def copy_lsctables_sim_inspiral(self, row): setattr( swigrow, simattr, str(getattr(row, simattr)) ) elif not(lalmetaio_old_style) and ('end_time_ns' in simattr ): basename = simattr.replace('_ns', '') - val = float(getattr(swigrow, basename)) + val = float(getattr(row, basename)) dt = float(getattr(row, simattr)) setattr( swigrow, basename, (val+1e-9*dt)) else: diff --git a/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_grid.py b/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_grid.py new file mode 100644 index 000000000..7739e6dc9 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_grid.py @@ -0,0 +1,118 @@ +import numpy as np + + +DISTANCE_GRID_FIELDS = ( + "lnL", + "sigmaL", + "m1", + "m2", + "s1x", + "s1y", + "s1z", + "s2x", + "s2y", + "s2z", + "lambda1", + "lambda2", + "eccentricity", + "meanPerAno", + "eos_index", + "dist", + "dist_weight", +) + + +def _logsumexp(vals): + vals = np.asarray(vals, dtype=float) + vmax = np.max(vals) + if not np.isfinite(vmax): + return vmax + return vmax + np.log(np.sum(np.exp(vals - vmax))) + + +def _as_positive_integer(value, default): + if value is None: + return default + value = int(value) + if value < 1: + raise ValueError("distance grid size must be positive") + return value + + +def _weighted_blocks(distance, probability, n_grid): + order = np.argsort(distance) + distance = np.asarray(distance, dtype=float)[order] + probability = np.asarray(probability, dtype=float)[order] + + finite = np.isfinite(distance) & np.isfinite(probability) & (probability > 0) + distance = distance[finite] + probability = probability[finite] + if len(distance) == 0: + raise ValueError("no finite positive-weight distance samples to export") + + n_grid = min(_as_positive_integer(n_grid, len(distance)), len(distance)) + blocks = np.array_split(np.arange(len(distance)), n_grid) + grid_dist = np.empty(len(blocks)) + grid_mass = np.empty(len(blocks)) + for i, block in enumerate(blocks): + weights = probability[block] + grid_mass[i] = np.sum(weights) + grid_dist[i] = np.sum(distance[block] * weights) / grid_mass[i] + + if len(grid_dist) == 1: + width = np.array([max(np.ptp(distance), np.finfo(float).eps)]) + else: + edges = np.empty(len(grid_dist) + 1) + edges[1:-1] = 0.5 * (grid_dist[1:] + grid_dist[:-1]) + edges[0] = min(distance[0], grid_dist[0] - (edges[1] - grid_dist[0])) + edges[-1] = max(distance[-1], grid_dist[-1] + (grid_dist[-1] - edges[-2])) + width = np.diff(edges) + width = np.maximum(width, np.finfo(float).eps) + + return grid_dist, grid_mass, width + + +def build_distance_grid(distance, ln_weights, lnL_marginal, sigmaL, params, n_grid=None): + """Build a distance-extended likelihood grid from weighted ILE samples. + + The exported ``lnL`` is a density in luminosity distance. Therefore + ``sum(exp(lnL) * dist_weight)`` reconstructs the original marginalized + likelihood for this intrinsic point. + """ + ln_weights = np.asarray(ln_weights, dtype=float) + ln_norm = _logsumexp(ln_weights) + probability = np.exp(ln_weights - ln_norm) + grid_dist, grid_mass, grid_width = _weighted_blocks(distance, probability, n_grid) + + dtype = [(name, float) for name in DISTANCE_GRID_FIELDS] + grid = np.zeros(len(grid_dist), dtype=dtype) + grid["lnL"] = lnL_marginal + np.log(grid_mass) - np.log(grid_width) + grid["sigmaL"] = sigmaL + grid["dist"] = grid_dist + grid["dist_weight"] = grid_width + + for name in DISTANCE_GRID_FIELDS: + if name in {"lnL", "sigmaL", "dist", "dist_weight"}: + continue + grid[name] = float(params.get(name, 0.0)) + return grid + + +def save_distance_grid(fname, grid): + header = " ".join(grid.dtype.names) + np.savetxt(fname, np.column_stack([grid[name] for name in grid.dtype.names]), header=header) + + +def load_distance_grid(fname): + return np.genfromtxt(fname, names=True) + + +def reconstruct_marginal_lnL(grid): + if "dist_weight" in grid.dtype.names: + return _logsumexp(grid["lnL"] + np.log(grid["dist_weight"])) + order = np.argsort(grid["dist"]) + if hasattr(np, "trapezoid"): + integral = np.trapezoid(np.exp(grid["lnL"][order]), grid["dist"][order]) + else: + integral = np.trapz(np.exp(grid["lnL"][order]), grid["dist"][order]) + return np.log(integral) diff --git a/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode b/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode index 88c7c1740..15227d153 100755 --- a/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode +++ b/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode @@ -2013,12 +2013,12 @@ def analyze_event(P_list, indx_event, data_dict, psd_dict, fmax, opts,inv_spec_t else: numpy.savetxt(fname_output_txt, numpy.array([[event_id, m1, m2, P.s1x, P.s1y, P.s1z, P.s2x, P.s2y, P.s2z, P.lambda1, P.lambda2, P.eos_table_index, log_res+manual_avoid_overflow_logarithm, sqrt_var_over_res,sampler.ntotal, neff ]])) #dict_return["convergence_test_results"]["normal_integral]" - # Distance marginal grid. Only if NOT marginalize distance AND use lnL + # Distance marginal grid. Only if NOT marginalize distance AND use lnL. + # The exported likelihood is a density in dL; integrating it over the + # exported dist_weight column reconstructs the ordinary marginalized lnL. if opts.output_file and opts.export_marginal_distance_grid and not(opts.distance_marginalization) and opts.internal_use_lnL: + from RIFT.misc.distance_grid import build_distance_grid, save_distance_grid fname_output_dgrid = opts.output_file +"_"+str(indx_event)+"_" + ".dgrid" - npts_dgrid_out = opts.n_eff # target samples - # compute CDF in distance and its inverse - # copy d grid and weights, make CDF dL = np.array(sampler._rvs["distance"] ) if 'log_weights' in sampler._rvs: ln_wts = np.array(sampler._rvs['log_weights']) # assume present @@ -2026,54 +2026,30 @@ def analyze_event(P_list, indx_event, data_dict, psd_dict, fmax, opts,inv_spec_t ln_wts = np.array(sampler._rvs["log_integrand"] + sampler._rvs["log_joint_prior"] - sampler._rvs["log_joint_s_prior"]) else: raise Exception(" distance grid export: missing type") - indx_sort = np.argsort(dL); dL=dL[indx_sort]; ln_wts = ln_wts[indx_sort]; - from scipy.special import logsumexp - ln_wts += -logsumexp(ln_wts) # normalize - ln_sums = np.log(np.cumsum(np.exp(ln_wts))) #CDF log. - # Some summary statistics, to help later - ln_dL_av = np.average(np.log(dL), weights=np.exp(ln_wts)) - ln_dL_std = np.sqrt(np.average( (np.log(dL) - ln_dL_av)**2, weights=np.exp(ln_wts))) - # problem of CDF sometimes having zero derivative! Fix with small admixture of uniform probability - npts_grid = len(ln_sums) - eps_uniform = 1e-3 - # Check if gradient too small -# ln_sums = np.logaddexp(np.log(1-eps_uniform)+ ln_sums, np.log(eps_uniform) + (ln_sums[--1] + np.log( np.arange(npts_grid) /npts_grid) ) ) - # downselect grid, reduce to reasonalbe size of points points, chosen uniformly more or less - npts_target = opts.n_eff*10 - p_random = np.arange(npts_target)/(npts_target+1) - p_random.sort() - indx_downselect = np.array( list(set( [ np.sum( np.exp(ln_sums) < p ) for p in p_random] )) ) # can include duplicates! Remove! - indx_downselect.sort() - dL = dL[indx_downselect] # Selected d values for grid - ln_sums = ln_sums[indx_downselect] - # Interpolate CDF, then PDF - from scipy.interpolate import PchipInterpolator - intp_cdf = PchipInterpolator(dL, np.exp(ln_sums)) # not necessarily most stable ... - intp_pdf = intp_cdf.derivative() - # dL values to EXPORT can be anything. We don't have to use the same. - dL_new = np.exp( np.random.normal(loc=ln_dL_av, scale=ln_dL_std, size=opts.n_eff ) ) # cover target range, use logarithmic scaling - dL_new = np.minimum( dL_new, np.max(dL)) - dL_new = np.maximum( dL_new, np.min(dL)) - dL = dL_new - pdf_vals = intp_pdf(dL) - indx_ok = pdf_vals > 0; dL=dL[indx_ok]; pdf_vals = pdf_vals[indx_ok] # reject zero probabiliity points. - # compute revised lnL values. Note it is a constant - lnL_export=log_res + manual_avoid_overflow_logarithm + np.log(pdf_vals) - sigmaL = sqrt_var_over_res - # use labelled field names for export. Provide all by default - header = "lnL sigmaL m1 m2 s1x s1y s2z s2x s2y s2z lambda1 lambda2 eccentricity meanPerAno eos_index dist" - header_fields = header.split()[2:-2] # drop first two and last one (unit conversion) - dat = np.zeros( (len(dL), len(header.split()) ) ) - dat[:,0] = lnL_export - dat[:,1] = sigmaL - dat[:,-1] = dL # units are in Mpc by default, or should be - for indx, name in enumerate(header_fields): - fac_here = 1 - if name in ['m1', 'm2']: - fac_here = lal.MSUN_SI - dat[:,2+indx] = getattr(P, name)/fac_here - # Save field - np.savetxt(fname_output_dgrid, dat, header=header) + params_out = { + "m1": P.m1/lal.MSUN_SI, + "m2": P.m2/lal.MSUN_SI, + "s1x": P.s1x, + "s1y": P.s1y, + "s1z": P.s1z, + "s2x": P.s2x, + "s2y": P.s2y, + "s2z": P.s2z, + "lambda1": P.lambda1, + "lambda2": P.lambda2, + "eccentricity": P.eccentricity, + "meanPerAno": P.meanPerAno, + "eos_index": getattr(P, "eos_table_index", 0), + } + dgrid = build_distance_grid( + dL, + ln_wts, + log_res + manual_avoid_overflow_logarithm, + sqrt_var_over_res, + params_out, + n_grid=opts.n_eff, + ) + save_distance_grid(fname_output_dgrid, dgrid) # Comprehensive output (not yet provided) # Convert declination, inclination parameters in sampler if needed diff --git a/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py b/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py index 01556f7c1..488a15294 100755 --- a/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py +++ b/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py @@ -294,6 +294,7 @@ def unsafe_parse_arg_string_dict(my_argstr): parser.add_argument("--internal-ile-adapt-log",action='store_true',help="Passthrough to ILE ") parser.add_argument("--internal-ile-auto-logarithm-offset",action='store_true',help="Passthrough to ILE") parser.add_argument("--internal-ile-use-lnL",action='store_true',help="Passthrough to ILE via helper. Will DISABLE auto-logarithm-offset and manual-logarithm-offset for ILE") +parser.add_argument("--export-marginal-distance-grid",action='store_true',help="Ask ILE workers to export per-intrinsic likelihood density grids in luminosity distance. Requires ILE lnL mode and non-marginalized distance.") parser.add_argument("--ile-additional-files-to-transfer",default=None,help="Comma-separated list of filenames. To append to the transfer file list for ILE jobs (only). Intended for surrogates in LAL_DATA_PATH for wide-ranging use") parser.add_argument("--internal-cip-use-lnL",action='store_true') parser.add_argument("--manual-initial-grid",default=None,type=str,help="Filename (full path) to initial grid. Copied into proposed-grid.xml.gz, overwriting any grid assignment done here") @@ -740,6 +741,10 @@ def unsafe_parse_arg_string_dict(my_argstr): if opts.internal_ile_use_lnL: cmd+= " --internal-ile-use-lnL " +if opts.export_marginal_distance_grid: + opts.internal_ile_use_lnL = True + if "--internal-ile-use-lnL" not in cmd: + cmd += " --internal-ile-use-lnL " if opts.internal_cip_use_lnL: cmd += " --internal-cip-use-lnL " if opts.internal_ile_data_tukey_window_time: @@ -969,6 +974,10 @@ def unsafe_parse_arg_string_dict(my_argstr): line = line.replace('--declination-cosine-sampler', '') if opts.internal_ile_force_adapt_all: line += " --force-adapt-all " +if opts.export_marginal_distance_grid: + if "--distance-marginalization" in line: + raise Exception("--export-marginal-distance-grid requires ILE runs without distance marginalization") + line += " --export-marginal-distance-grid --internal-use-lnL " if not(opts.ile_sampler_method is None): line += " --sampler-method {} ".format(opts.ile_sampler_method) if opts.internal_ile_sky_network_coordinates: diff --git a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/Makefile b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/Makefile new file mode 100644 index 000000000..8a42ea2b0 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/Makefile @@ -0,0 +1,74 @@ +RIFT_CODE_ROOT := $(abspath ../../..) +REPO_ROOT := $(abspath ../../../../..) +CI_DEMO := $(REPO_ROOT)/.travis/ILE-GPU-Paper/demos + +CONDA_ENV ?= my_rift +INI ?= $(CURDIR)/add_distance_grids.ini +COINC ?= $(REPO_ROOT)/.travis/ref_ini/coinc.xml +CACHE ?= $(CI_DEMO)/zero_noise.cache +PSD ?= $(CI_DEMO)/HLV-ILIGO_PSD.xml.gz +INITIAL_GRID ?= $(CI_DEMO)/overlap-grid.xml.gz +RUN_DIR ?= $(CURDIR)/rundir + +ENV = GW_SURROGATE='' PYTHONPATH=$(RIFT_CODE_ROOT):$${PYTHONPATH:-} PATH=$(RIFT_CODE_ROOT)/bin:$${PATH} +CONDA_RUN = conda run -n $(CONDA_ENV) + +.PHONY: help inputs dag submit clean validate-args + +help: + @echo "Targets:" + @echo " make inputs - verify CI fake-data inputs are available" + @echo " make dag - build the RIFT DAG/run directory with distance-grid export enabled" + @echo " make submit - submit the generated DAG with condor_submit_dag" + @echo " make validate-args - confirm generated ILE args contain the distance-grid flags" + @echo " make clean - remove the generated run directory" + +inputs: + @test -s "$(INI)" + @test -s "$(COINC)" + @test -s "$(CACHE)" + @test -s "$(PSD)" + @test -s "$(INITIAL_GRID)" + @echo "Using INI: $(INI)" + @echo "Using coinc: $(COINC)" + @echo "Using fake cache: $(CACHE)" + @echo "Using PSD: $(PSD)" + @echo "Using initial grid: $(INITIAL_GRID)" + +dag: inputs + rm -rf "$(RUN_DIR)" + mkdir -p "$(RUN_DIR)" + cp "$(INITIAL_GRID)" "$(RUN_DIR)/overlap-grid.xml.gz" + printf '%s\n' 'X --mc-range [23,35] --eta-range [0.20,0.24999] --parameter mc --parameter-implied eta --parameter-nofit delta_mc --fit-method gp --verbose --lnL-offset 120 --cap-points 12000 --n-output-samples 1000 --no-plots --n-eff 1000' > "$(RUN_DIR)/args_cip.txt" + printf '%s\n' 'X --always-succeed --method lame --parameter m1' > "$(RUN_DIR)/args_test.txt" + printf '%s\n' 'X --parameter m1 --parameter m2' > "$(RUN_DIR)/args_plot.txt" + printf '%s\n' 'X --n-chunk 10000 --time-marginalization --sim-xml overlap-grid.xml.gz --reference-freq 100.0 --adapt-weight-exponent 0.1 --event-time 1000000014.236547946 --save-P 0.1 --cache-file $(CACHE) --fmin-template 10 --n-max 50000 --fmax 1700.0 --save-deltalnL inf --l-max 2 --n-eff 50 --approximant SEOBNRv4 --adapt-floor-level 0.1 --force-xpy --d-max 1000 --psd-file H1=$(PSD) --psd-file L1=$(PSD) --channel-name H1=FAKE-STRAIN --channel-name L1=FAKE-STRAIN --inclination-cosine-sampler --declination-cosine-sampler --data-start-time 1000000008 --data-end-time 1000000016 --inv-spec-trunc-time 0 --no-adapt-after-first --no-adapt-distance --srate 4096 --sampler-method GMM --internal-use-lnL --export-marginal-distance-grid' > "$(RUN_DIR)/args_ile.txt" + cd "$(RUN_DIR)" && $(ENV) $(CONDA_RUN) create_event_parameter_pipeline_BasicIteration \ + --ile-n-events-to-analyze 20 \ + --input-grid "$(INITIAL_GRID)" \ + --ile-exe "$(RIFT_CODE_ROOT)/bin/integrate_likelihood_extrinsic_batchmode" \ + --ile-args args_ile.txt \ + --cip-args args_cip.txt \ + --test-args args_test.txt \ + --plot-args args_plot.txt \ + --request-memory-CIP 4096 \ + --request-memory-ILE 4096 \ + --n-samples-per-job 20 \ + --working-directory "$(RUN_DIR)" \ + --n-iterations 1 \ + --ile-retries 1 \ + --general-retries 1 + $(MAKE) validate-args + +validate-args: + @test -s "$(RUN_DIR)/args_ile.txt" + @grep -q -- "--export-marginal-distance-grid" "$(RUN_DIR)/args_ile.txt" + @grep -q -- "--internal-use-lnL" "$(RUN_DIR)/args_ile.txt" + @! grep -q -- "--distance-marginalization" "$(RUN_DIR)/args_ile.txt" + @echo "Distance-grid ILE args are present in $(RUN_DIR)/args_ile.txt" + +submit: validate-args + cd "$(RUN_DIR)" && condor_submit_dag marginalize_intrinsic_parameters_BasicIterationWorkflow.dag + +clean: + rm -rf "$(RUN_DIR)" diff --git a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/README.md b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/README.md new file mode 100644 index 000000000..06bd4f008 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/README.md @@ -0,0 +1,54 @@ +# RIFT Distance-Grid Export Demo + +This demo builds a small zero-spin RIFT workflow with +`--export-marginal-distance-grid` enabled for ILE jobs. It reuses the fake +zero-noise frames, PSD, cache, and initial target grid from the CI assets in +`../../../../../.travis/ILE-GPU-Paper/demos`. + +`add_distance_grids.ini` records the corresponding zero-spin/fake-data +configuration. The Makefile builds the runnable DAG through the same +`create_event_parameter_pipeline_BasicIteration` path used by the CI demo, +because the higher-level pseudo-pipe ini path currently trips over an XML +compatibility issue when rereading its temporary target file in this +Python/lalsuite environment. + +Run: + +```bash +make dag +``` + +This creates `rundir/`, writes the normal RIFT DAG files, and verifies that +`rundir/args_ile.txt` contains: + +- `--export-marginal-distance-grid` +- `--internal-use-lnL` + +The demo intentionally does not submit automatically. To queue the generated +workflow: + +```bash +make submit +``` + +## Environment Note + +If the run prints messages like: + +```text +swig/python detected a memory leak of type 'struct tagLIGOTimeGPS *', no destructor found. +``` + +that is an environment compatibility warning from the LALSuite Python bindings, +not a distance-grid failure. It has been observed with the local `my_rift` +environment (`python 3.12.4`, `lal 7.7.0`, `lalsimulation 6.2.0`, +`lalmetaio 4.0.6`, `lalsuite 7.26`). Prefer a known-good RIFT/LALSuite +environment whose LAL packages were built with pre-SWIG-4.4 bindings. Pinning +`swig<4.4` only helps when rebuilding the LAL packages; installing an older SWIG +binary next to already-built LAL Python wheels/conda packages will not change +the generated wrapper code. + +After ILE jobs complete, each evaluated intrinsic point should have a companion +`*.dgrid` file. The grid is a likelihood density in luminosity distance; use +`RIFT.misc.distance_grid.reconstruct_marginal_lnL()` to check that integrating +the distance grid reconstructs the ordinary marginalized likelihood. diff --git a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/add_distance_grids.ini b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/add_distance_grids.ini new file mode 100644 index 000000000..0f85ce167 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/add_distance_grids.ini @@ -0,0 +1,83 @@ +[analysis] +ifos=['H1','L1'] +singularity=False +osg=False + +[paths] + +[input] +max-psd-length=10000 + +[condor] +accounting_group=ligo.sim.o4.cbc.pe.rift +accounting_group_user=oshaughn + +[datafind] +url-type=file +types = {'H1': 'FAKE', 'L1': 'FAKE'} + +[data] +channels = {'H1': 'H1:FAKE-STRAIN', 'L1': 'L1:FAKE-STRAIN'} + +[lalinference] +flow = {'H1': 20, 'L1': 20} +fhigh = {'H1': 1700, 'L1': 1700} + +[engine] +fref=100 +approx=SEOBNRv4 +amporder = -1 +seglen = 8 +srate = 4096 + +chirpmass-min = 23 +chirpmass-max = 35 +comp-min = 1 +comp-max = 1000 +distance-max = 1000 + +[rift-pseudo-pipe] +approx="SEOBNRv4" +assume-nospin=True +assume-nonprecessing=False +assume-precessing=False + +l-max=2 +fmin-template=10 +event-time=1000000014.236547946 +manual-postfix="_distance_grids" + +force-mc-range="[23,35]" +force-eta-range="[0.20,0.24999]" +force-initial-grid-size=100 +internal-force-iterations=2 +internal-n-iterations-subdag-max=2 +internal-truncate-cip-arg-list=1 + +ile-n-eff=50 +ile-jobs-per-worker=20 +ile-jobs-per-worker-first=20 +ile-copies=1 +ile-no-gpu=True +ile-sampler-method="GMM" +internal-ile-use-lnL=True +internal-ile-reset-adapt=True +internal-ile-inv-spec-trunc-time=0 +manual-extra-ile-args=" --data-start-time 1000000008 --data-end-time 1000000016 --no-adapt-after-first --no-adapt-distance --srate 4096 " + +export-marginal-distance-grid=True + +cip-fit-method="gp" +cip-sampler-method="GMM" +cip-explode-jobs=1 +cip-explode-jobs-last=1 +internal-cip-request-memory=4096 +n-output-samples=1000 +n-output-samples-last=2000 + +use_osg=False +use_osg_file_transfer=False +use_osg_cip=False +ile-retries=1 +general-retries=1 +skip-reproducibility=True diff --git a/MonteCarloMarginalizeCode/Code/test/test_distance_grid.py b/MonteCarloMarginalizeCode/Code/test/test_distance_grid.py new file mode 100644 index 000000000..a21f0cdc4 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/test/test_distance_grid.py @@ -0,0 +1,57 @@ +import numpy as np + +from RIFT.misc.distance_grid import ( + DISTANCE_GRID_FIELDS, + build_distance_grid, + load_distance_grid, + reconstruct_marginal_lnL, + save_distance_grid, +) + + +def test_distance_grid_reconstructs_marginal_lnL(): + rng = np.random.default_rng(1234) + distance = rng.lognormal(mean=np.log(450.0), sigma=0.22, size=200) + ln_weights = -0.5 * ((distance - 430.0) / 35.0) ** 2 + lnL_marginal = 37.25 + + grid = build_distance_grid( + distance, + ln_weights, + lnL_marginal, + sigmaL=0.012, + params={"m1": 35.0, "m2": 28.0, "s1z": 0.1, "s2z": -0.2}, + n_grid=40, + ) + + assert grid.dtype.names == DISTANCE_GRID_FIELDS + assert np.all(np.diff(grid["dist"]) >= 0) + assert np.all(grid["dist_weight"] > 0) + assert np.isclose(reconstruct_marginal_lnL(grid), lnL_marginal) + assert np.all(grid["m1"] == 35.0) + assert np.all(grid["m2"] == 28.0) + assert np.all(grid["s1z"] == 0.1) + assert np.all(grid["s2z"] == -0.2) + + +def test_distance_grid_roundtrip_preserves_reconstruction(tmp_path): + distance = np.linspace(100.0, 900.0, 21) + ln_weights = -0.5 * ((distance - 500.0) / 120.0) ** 2 + lnL_marginal = -12.5 + grid = build_distance_grid(distance, ln_weights, lnL_marginal, 0.2, {}, n_grid=10) + + fname = tmp_path / "event_0_.dgrid" + save_distance_grid(fname, grid) + loaded = load_distance_grid(fname) + + assert loaded.dtype.names == DISTANCE_GRID_FIELDS + assert np.isclose(reconstruct_marginal_lnL(loaded), lnL_marginal) + + +def test_legacy_distance_grid_without_weights_uses_trapezoid(): + dtype = [("lnL", float), ("dist", float)] + grid = np.zeros(5, dtype=dtype) + grid["dist"] = np.linspace(0.0, 1.0, 5) + grid["lnL"] = 0.0 + + assert np.isclose(reconstruct_marginal_lnL(grid), 0.0) From a703d5cd18b82b5bcfed55eda56b554ce4087d4f Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Tue, 26 May 2026 12:07:37 -0400 Subject: [PATCH 08/32] lalsimutils: revert change (breaks; note this is the point where swig 4.4.0 causes breaking changes) --- MonteCarloMarginalizeCode/Code/RIFT/lalsimutils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MonteCarloMarginalizeCode/Code/RIFT/lalsimutils.py b/MonteCarloMarginalizeCode/Code/RIFT/lalsimutils.py index 3066e2c5f..c48fc1d4e 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/lalsimutils.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/lalsimutils.py @@ -1869,7 +1869,7 @@ def copy_lsctables_sim_inspiral(self, row): setattr( swigrow, simattr, str(getattr(row, simattr)) ) elif not(lalmetaio_old_style) and ('end_time_ns' in simattr ): basename = simattr.replace('_ns', '') - val = float(getattr(row, basename)) + val = float(getattr(swigrow, basename)) dt = float(getattr(row, simattr)) setattr( swigrow, basename, (val+1e-9*dt)) else: From f40951e1644fb3864ef47a0609bfe4a27d01a0fb Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Tue, 26 May 2026 12:19:44 -0400 Subject: [PATCH 09/32] clean up incomplete work by codex - sigh --- .../Code/bin/create_event_parameter_pipeline_BasicIteration | 3 +++ MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration index af774bd33..1e1b3f6dc 100644 --- a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration +++ b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration @@ -246,6 +246,7 @@ parser.add_argument("--last-iteration-extrinsic-samples-per-ile",default=5,type= parser.add_argument("--last-iteration-extrinsic-samples-per-ile-internal",default=10,type=int,help="Draw this many samples from each ILE job") parser.add_argument("--last-iteration-extrinsic-batched-convert",action='store_true',help="Used batched converter for output of extrinsic samples") parser.add_argument("--last-iteration-extrinsic-time-resampling",action='store_true',help="Last iterations use time resampling (+ the fairdraw is done inside ILE itself), so different code path for final stages") +parser.add_argument("--last-iteration-export-marginal-distance-grid", action='store_true', help="Add argument to ILE_extr") parser.add_argument("--ile-args",default=None,help="filename of args_ile.txt file which holds ILE arguments. Should NOT conflict with arguments auto-set by this DAG ... in particular, i/o arguments will be modified") parser.add_argument("--ile-exe",default=None,help="filename of ILE or equivalent executable. Will default to `which integrate_likelihood_extrinsic` in low-level code") parser.add_argument("--ile-retries",default=0,type=int,help="Number of retry attempts for ILE jobs. (These can fail)") @@ -772,6 +773,8 @@ if (opts.last_iteration_extrinsic): ile_args_extr = ile_args + " --save-P 0.01 --save-samples --n-eff " +str(n_eff_last) # modify convergence criteria so output of reasonable size/matching needs of extrinsic output # - note we *disable* --no-adapt-after-first (if present), so each point is independent (e.g., in sky location) ile_args_extr = ile_args_extr.replace('--no-adapt-after-first','') + if opts.last_iteration_export_marginal_distance_grid: + ile_args_extr += " --export-marginal-distance-grid " if opts.last_iteration_extrinsic_time_resampling: ile_args_extr += " --resample-time-marginalization --fairdraw-extrinsic-output --fairdraw-extrinsic-output-n-max {} ".format(n_points_per_ILE) print(" Time resampling in extraction iteration: **DISABLING** distance marginalization if present ") diff --git a/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py b/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py index 488a15294..9fc4bed82 100755 --- a/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py +++ b/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py @@ -977,7 +977,7 @@ def unsafe_parse_arg_string_dict(my_argstr): if opts.export_marginal_distance_grid: if "--distance-marginalization" in line: raise Exception("--export-marginal-distance-grid requires ILE runs without distance marginalization") - line += " --export-marginal-distance-grid --internal-use-lnL " + line += " --last-iteration-export-marginal-distance-grid --internal-use-lnL " if not(opts.ile_sampler_method is None): line += " --sampler-method {} ".format(opts.ile_sampler_method) if opts.internal_ile_sky_network_coordinates: From d752b98fe2db13843ad24bce69bfecebd34561d5 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Tue, 26 May 2026 12:34:13 -0400 Subject: [PATCH 10/32] more backfill of dumb codex --- .../bin/create_event_parameter_pipeline_BasicIteration | 1 + .../Code/demo/rift/add_distance_grids/Makefile | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration index 1e1b3f6dc..f3026afce 100644 --- a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration +++ b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration @@ -775,6 +775,7 @@ if (opts.last_iteration_extrinsic): ile_args_extr = ile_args_extr.replace('--no-adapt-after-first','') if opts.last_iteration_export_marginal_distance_grid: ile_args_extr += " --export-marginal-distance-grid " + ile_args_extr = ile_args_extr.replace("--distance-marginalization ", ' ') # *currently* cannot use distance marginalization in the last step if we want distance grid output if opts.last_iteration_extrinsic_time_resampling: ile_args_extr += " --resample-time-marginalization --fairdraw-extrinsic-output --fairdraw-extrinsic-output-n-max {} ".format(n_points_per_ILE) print(" Time resampling in extraction iteration: **DISABLING** distance marginalization if present ") diff --git a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/Makefile b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/Makefile index 8a42ea2b0..a19e9cf2e 100644 --- a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/Makefile +++ b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/Makefile @@ -2,7 +2,6 @@ RIFT_CODE_ROOT := $(abspath ../../..) REPO_ROOT := $(abspath ../../../../..) CI_DEMO := $(REPO_ROOT)/.travis/ILE-GPU-Paper/demos -CONDA_ENV ?= my_rift INI ?= $(CURDIR)/add_distance_grids.ini COINC ?= $(REPO_ROOT)/.travis/ref_ini/coinc.xml CACHE ?= $(CI_DEMO)/zero_noise.cache @@ -11,7 +10,6 @@ INITIAL_GRID ?= $(CI_DEMO)/overlap-grid.xml.gz RUN_DIR ?= $(CURDIR)/rundir ENV = GW_SURROGATE='' PYTHONPATH=$(RIFT_CODE_ROOT):$${PYTHONPATH:-} PATH=$(RIFT_CODE_ROOT)/bin:$${PATH} -CONDA_RUN = conda run -n $(CONDA_ENV) .PHONY: help inputs dag submit clean validate-args @@ -42,12 +40,13 @@ dag: inputs printf '%s\n' 'X --mc-range [23,35] --eta-range [0.20,0.24999] --parameter mc --parameter-implied eta --parameter-nofit delta_mc --fit-method gp --verbose --lnL-offset 120 --cap-points 12000 --n-output-samples 1000 --no-plots --n-eff 1000' > "$(RUN_DIR)/args_cip.txt" printf '%s\n' 'X --always-succeed --method lame --parameter m1' > "$(RUN_DIR)/args_test.txt" printf '%s\n' 'X --parameter m1 --parameter m2' > "$(RUN_DIR)/args_plot.txt" - printf '%s\n' 'X --n-chunk 10000 --time-marginalization --sim-xml overlap-grid.xml.gz --reference-freq 100.0 --adapt-weight-exponent 0.1 --event-time 1000000014.236547946 --save-P 0.1 --cache-file $(CACHE) --fmin-template 10 --n-max 50000 --fmax 1700.0 --save-deltalnL inf --l-max 2 --n-eff 50 --approximant SEOBNRv4 --adapt-floor-level 0.1 --force-xpy --d-max 1000 --psd-file H1=$(PSD) --psd-file L1=$(PSD) --channel-name H1=FAKE-STRAIN --channel-name L1=FAKE-STRAIN --inclination-cosine-sampler --declination-cosine-sampler --data-start-time 1000000008 --data-end-time 1000000016 --inv-spec-trunc-time 0 --no-adapt-after-first --no-adapt-distance --srate 4096 --sampler-method GMM --internal-use-lnL --export-marginal-distance-grid' > "$(RUN_DIR)/args_ile.txt" - cd "$(RUN_DIR)" && $(ENV) $(CONDA_RUN) create_event_parameter_pipeline_BasicIteration \ + printf '%s\n' 'X --n-chunk 10000 --time-marginalization --sim-xml overlap-grid.xml.gz --reference-freq 100.0 --adapt-weight-exponent 0.1 --event-time 1000000014.236547946 --save-P 0.1 --cache-file $(CACHE) --fmin-template 10 --n-max 50000 --fmax 1700.0 --save-deltalnL inf --l-max 2 --n-eff 50 --approximant SEOBNRv4 --adapt-floor-level 0.1 --force-xpy --d-max 1000 --psd-file H1=$(PSD) --psd-file L1=$(PSD) --channel-name H1=FAKE-STRAIN --channel-name L1=FAKE-STRAIN --inclination-cosine-sampler --declination-cosine-sampler --data-start-time 1000000008 --data-end-time 1000000016 --inv-spec-trunc-time 0 --no-adapt-after-first --no-adapt-distance --srate 4096 --sampler-method GMM --internal-use-lnL ' > "$(RUN_DIR)/args_ile.txt" + cd "$(RUN_DIR)" && create_event_parameter_pipeline_BasicIteration \ --ile-n-events-to-analyze 20 \ --input-grid "$(INITIAL_GRID)" \ --ile-exe "$(RIFT_CODE_ROOT)/bin/integrate_likelihood_extrinsic_batchmode" \ --ile-args args_ile.txt \ + --last-iteration-export-marginal-distance-grid \ --cip-args args_cip.txt \ --test-args args_test.txt \ --plot-args args_plot.txt \ From 2908b1e53b871b363014b560fe81d769068cabe8 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Tue, 26 May 2026 13:08:40 -0400 Subject: [PATCH 11/32] Add pixi SWIG compatibility environments Provide a root pixi workspace that defaults local development to SWIG <4.4.0 while also defining a SWIG >=4.4.0 comparison environment. Add GitLab CI jobs for both pixi environments so deployment stability can be checked across the hidden SWIG binding change. --- .gitlab-ci.yml | 33 + README.md | 22 + pixi.lock | 19553 +++++++++++++++++++++++++++++++++++++++++++++++ pixi.toml | 89 + 4 files changed, 19697 insertions(+) create mode 100644 pixi.lock create mode 100644 pixi.toml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1dbe43917..b519cb6c0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,6 +16,29 @@ stages: # - docker image # - deploy +.pixi_template: + stage: system tests + before_script: [] + variables: + PIXI_HOME: "$CI_PROJECT_DIR/.pixi" + PIXI_CACHE_DIR: "$CI_PROJECT_DIR/.pixi-cache" + XDG_CACHE_HOME: "$CI_PROJECT_DIR/.pixi-cache/xdg" + PATH: "$CI_PROJECT_DIR/.pixi/bin:$PATH" + cache: + key: pixi-$CI_JOB_NAME + paths: + - .pixi/ + - .pixi-cache/ + - .pixi/envs/ + script: + - apt-get update --assume-yes && apt-get install --assume-yes ca-certificates curl git + - curl -fsSL https://pixi.sh/install.sh | bash + - export PATH="$PIXI_HOME/bin:$PATH" + - pixi --version + - pixi run -e "$PIXI_ENV" swig-version + - pixi run -e "$PIXI_ENV" install-rift + - pixi run -e "$PIXI_ENV" import-check + .install_docker_dependencies: before_script: - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY @@ -66,6 +89,16 @@ test_run: - bash .travis/test-run-alts.sh - bash .travis/test-build.sh +pixi_swig_pre44: + extends: .pixi_template + variables: + PIXI_ENV: swig-pre44 + +pixi_swig_post44: + extends: .pixi_template + variables: + PIXI_ENV: swig-post44 + # build:test: # image: docker:latest # stage: docker image diff --git a/README.md b/README.md index 7e9e46709..62af2336c 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,28 @@ Repository for the rapid_PE / RIFT code, developed at RIT (forked long ago from Please see INSTALL.md +### Pixi development environments + +The root `pixi.toml` provides reproducible local-development environments for +the RIFT science stack. The default environment intentionally keeps `swig` +below 4.4.0 so local installs do not accidentally pick up the SWIG 4.4.x +binding-generation behavior tracked in issue #136: + +```bash +pixi install +pixi run install-rift +pixi run import-check +``` + +CI also resolves a comparison environment with `swig >=4.4.0`: + +```bash +pixi run -e swig-pre44 swig-version +pixi run -e swig-post44 swig-version +pixi run -e swig-pre44 import-check +pixi run -e swig-post44 import-check +``` + ## Science If you are using this code for a production analysis, please contact us to make sure you follow the instructions included here! diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 000000000..a0ebeba77 --- /dev/null +++ b/pixi.lock @@ -0,0 +1,19553 @@ +version: 7 +platforms: +- name: linux-64 +- name: osx-64 +- name: osx-arm64 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/astropy-base-7.2.0-py312h4f23490_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/astropy-healpix-1.1.3-py312h4f23490_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.6-hb9c0fe4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.13-h2c9d079_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-h8b1a151_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.9-h841be55_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.10-hf621c6d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.1-hc87160b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.14.0-ha25ca29_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.11.5-h9b5df67_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h8b1a151_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.37.3-hb153662_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.747-h133b1ee_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.16.2-h206d751_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.13.3-hed0cdb0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.16.0-hf824e48_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.13.0-ha7a2c86_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.14.0-h539c000_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.5.0-py312h90b7ffd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bcrypt-5.0.0-py312h868fb18_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py312hdb49522_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-hd1e3526_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-3.0.3-hc31b594_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.6.3-ha0b56bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.3-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/chealpix-3.31.0-h001b3b8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.14.0-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-48.0.0-py312ha4b625e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.1.0-py312h4c3975b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.3.1-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.11-nompi_h3b011a4_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.0-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.63.0-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h480dda7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/google-crc32c-1.8.0-py312h03f33d3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha4f8f14_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.2.0-h15599e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_106.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/healpy-1.19.0-py312hb99e9eb_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-24.12.4-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-classads-24.12.4-hf1419ba_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-cli-24.12.4-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-utils-24.12.4-h4a68bad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htgettoken-2.6-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/igwn-ligolw-2.1.1-py312h53c857e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/igwn-segments-2.1.1-py312h53c857e_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2026.5.10-py312he34094b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.8.1-h73b1eb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py312h0a2e395_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lal-7.7.0-fftw_py312h3c92f15_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalapps-10.1.0-py312h8a05548_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalburst-2.0.7-py312h4c3975b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalframe-3.0.7-py312h4c3975b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-4.1.9-nompi_py312h1d0e7ed_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-data-4.1.9-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinspiral-5.0.3-py312h4c3975b_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalmetaio-4.0.6-py312h4c3975b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-7.1.1-py312h14108ff_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-data-7.1.1-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-6.2.0-py312hd1ec2bb_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-data-6.2.0-ha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ldas-tools-al-2.7.0-hd827ec0_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ldas-tools-framecpp-2.9.3-he85ded8_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-23.0.1-hf605819_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-23.0.1-h635bf11_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-compute-23.0.1-h53684a4_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-23.0.1-h635bf11_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-23.0.1-hb4dd7c2_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.4.1-hcfa2d63_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-7_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libboost-1.88.0-hed09d94_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libboost-python-1.88.0-py312hf890105_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-7_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.6-default_h746c552_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcondor_utils-24.12.4-he8e5dd1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.127-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libframel-8.48.5-ha02e5fa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.2-h32235b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.39.0-h9d11ab5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.39.0-hdbdcf42_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.78.1-h1d1128b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h10be129_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-h174a0a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblal-7.7.0-fftw_h0eb8034_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalburst-2.0.7-h43c0734_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalframe-3.0.7-hbf9efdd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinference-4.1.9-h3773ae6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinspiral-5.0.3-h43c0734_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalmetaio-4.0.6-hb03c661_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalpulsar-7.1.1-h3c7535d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalsimulation-6.2.0-py312hd1ec2bb_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.6-hf7376ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmetaio-8.5.1-h0b0be96_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.21.0-h9692893_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.21.0-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-23.0.1-h7376487_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.1-h5c52fec_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.11.05-h0dc7533_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.1-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.22.0-h7d032f7_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.11.3-hfe17d71_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.1-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-ha9997c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h26afc86_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/ligo-segments-1.4.0-py312h66e93f0_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ligo.skymap-2.5.3-np2h4e6c70c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.47.0-py312h7424e68_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.4.5-py312h3d67a73_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.9-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.9-py312he3d6523_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py312hd9148b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/munge-0.5.16-h63a00c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.65.1-py312hd1dde6f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.5-py312hf79963d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py312h33ff503_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjph-0.27.3-h8d634f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.3.0-h21090e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-3.0.3-py312h8ecdadd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.46-h1321c63_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py312h50c33e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-23.0.1-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-23.0.1-py312h2054cf2_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyerfa-2.0.1.5-py310h32771cd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.6.2-py312hf34ed73_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.10.1-py312h9da60e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.11.1-py312h7cea900_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-htcondor-24.12.4-py312h1e35698_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lal-7.7.0-fftw_py312h26d0d96_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalburst-2.0.7-py312h71fd7f1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalframe-3.0.7-py312h4f23490_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinference-4.1.9-py312hc0a28a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinspiral-5.0.3-py312h4f23490_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalmetaio-4.0.6-py312h4f23490_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalpulsar-7.1.1-py312h4f23490_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalsimulation-6.2.0-py312h71fd7f1_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.1-hca0d9c9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.8.1-h1fbca29_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2025.11.05-h5301d42_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2026.5.9-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/reproject-0.19.0-py312h4f23490_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.1-h1cbb8d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.8.0-np2py312h3226591_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scitokens-cpp-1.4.0-h096d96b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.2-py312h383787d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.0.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/swig-4.3.1-hf1419ba_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.2.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h909a3a2_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-image-2025.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dqsegdb2-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwdatafind-2.1.1-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/igwn-auth-utils-1.4.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-3.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/lscsoft-glue-4.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/omegaconf-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/paramiko-5.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/safe-netrc-1.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/scitokens-1.9.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/slicerator-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzlocal-5.3.1-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - pypi: https://files.pythonhosted.org/packages/00/e2/1cb7cfb88fd3866062977a484bc0dda4e165361e949cc8e270302d05b007/spinsfast-2022.4.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/07/40/4058220b3d60890b62e0a2e8212e2546695827cf85e6186405ecf8ef33f1/numpy_quaternion-2024.0.13-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/09/c9/a9271d39c86d28d8bfacec831e416e42eb6d154f03605429631c4c08138b/pygsl_lite-0.1.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/96/92119e6b279a88547a51eb99726ecae1ada839bf4fbcc2856503e2558e80/blosc2-4.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/27/ae/defd665dbbeb2fffa077491365ed160acaec49274ce8d4b979f55db71f18/ndindex-1.10.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/c2/b602d2a5bbaaf9db1cff035ee6ddea76938c0b25ac1e6ac8ca288a073b47/otter_report-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/75/505cd72dfde3a1d7e719f840a2aa656a8c6b4c7b1b8c604a2d587cb1fc52/precession-2.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/f3/77f85bfac22ee84b231ee8b147cdd948f679edf7d5a622acf9169d2a9b63/juliacall-0.9.34-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/66/8f/2515bd2f110f6316f39568e25943577effffa5283b6376969e8277ba330d/sxs-2025.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/92/8e7104d2cf40ba2f88528c01e8a063aba7b223a21c0310fcf043b441f5da/sxscatalog-3.0.28-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/a3/e2d6b17b02b5c52ce6c68fce7f2f190e796c2c1c5419e675f6a947fdb78c/qnm-0.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/33/81570e825bdb2c0d7fa705087b704007bb7898c7dbb7a64f868da59252b3/pyseobnr-0.3.6.tar.gz + - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/4a/75aadc3b17430d4d9f3ad7bf0332a22b7ef78312e2b5b70774d2a301b9ec/spherical-1.0.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/68/dddd76117df2ef14c943c6bbb6618be5c9401280046f4ddfc9fb4596a1b8/statsmodels-0.14.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/29/c2dc674ea70fa9a4819417289a9c0d3e4780835beeed573eb66964cfb763/tables-3.11.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ad/28/9f3700cb784c0f0475de7074ed489702d5c6fb63a3df56b4cb4333b055fc/liquidpy-0.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/8a/eafc962e29c7fe800c702b4ae09cc358f1cbe40089e7a8cdac4f5b4c8c7a/requests_scitokens-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/43/560e9ba23c02c904b5934496486d061bcb14cd3ebba2e3cf0e2dccb6c22b/numexpr-2.14.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/b1/3e3144c3ada2ae1a60a378396629064ef14e425e356c8e7c1db3a50ef351/python_gitlab-8.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/47/a8d68aed3f6cb55bae90f504cd5ea3698a923c5fb6e9690726359e28eb1c/asimov_gwdata-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/70/ba4b949bdc0490ab78d545459acd7702b211dfccf7eb89bbc1060f52818d/patsy-1.0.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl + osx-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-image-2025.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dqsegdb2-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwdatafind-2.1.1-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/igwn-auth-utils-1.4.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-3.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/lscsoft-glue-4.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/omegaconf-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/paramiko-5.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/safe-netrc-1.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/scitokens-1.9.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/slicerator-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzlocal-5.3.1-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aom-3.9.1-hf036a51_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/astropy-base-7.2.0-py312h391ab28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/astropy-healpix-1.1.3-py312h8ab2c85_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.9.6-hbd79662_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.9.13-hea39f9f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.12.6-h8616949_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.3.2-hb9ea233_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.5.9-h8efd969_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.10.10-h8f73dec_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.26.1-hc95b61d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.14.0-h2b5127a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.11.5-hafc236b_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.2.4-h901532c_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.2.10-h31279ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.37.3-h4bfe737_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.747-h5d703ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-core-cpp-1.16.2-h87f1c7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-identity-cpp-1.13.3-h1135191_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-blobs-cpp-12.16.0-hefc3566_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-common-cpp-12.13.0-h74781cd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-files-datalake-cpp-12.14.0-h2303994_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/backports.zstd-1.5.0-py312h5f4ecc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/bcrypt-5.0.0-py312h8a6388b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/blosc-1.21.6-hd145fbb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-1.2.0-hf139dec_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-bin-1.2.0-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.2.0-py312h4b46afd_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/brunsli-0.1-ha00ef93_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/c-blosc2-3.0.3-h32e32c0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cffi-2.0.0-py312he90777b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.6.3-hf728c8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/charls-2.4.3-hcc62823_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/chealpix-3.31.0-h1535d2a_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/contourpy-1.3.3-py312hb0c38da_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.14.0-py312heb39f77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cryptography-48.0.0-py312h1af399d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cytoolz-1.1.0-py312h1a1c95f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/dav1d-1.2.1-h0dc2134_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/fftw-3.3.11-nompi_h54214ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/fonttools-4.63.0-py312heb39f77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/freetype-2.14.3-h694c41f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/geos-3.14.1-he483b9e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.1-h2790a97_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/google-crc32c-1.8.0-py312hb9001e9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gsl-2.7-h93259b0_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.16.0-nompi_py312h53b4df1_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.6-nompi_hf563b80_106.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/healpy-1.19.0-py312h5272b37_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-24.12.4-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-classads-24.12.4-hf470585_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-cli-24.12.4-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-utils-24.12.4-h1cc2291_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/htgettoken-2.6-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/igwn-ligolw-2.1.1-py312h0b9663a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/igwn-segments-2.1.1-py312h0b9663a_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/imagecodecs-2026.5.10-py312hc8b613d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/jq-1.8.1-h2287256_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/jxrlib-1.1-h10d778d_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/kiwisolver-1.5.0-py312hb1dc2e7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lal-7.7.0-fftw_py312hf555030_101.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalapps-10.1.0-py312h1f55956_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalburst-2.0.7-py312h933eb07_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalframe-3.0.7-py312h933eb07_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-4.1.9-nompi_py312h2269b78_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-data-4.1.9-h694c41f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinspiral-5.0.3-py312h933eb07_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalmetaio-4.0.6-py312h933eb07_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-7.1.1-py312hc6fbf67_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-data-7.1.1-h694c41f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-6.2.0-py312hd5a5ae5_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-data-6.2.0-h694c41f_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.19.1-h5ea7634_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ldas-tools-al-2.7.0-hb7f9d93_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ldas-tools-framecpp-2.9.3-hf716561_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lerc-4.1.0-h35c7297_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20260107.1-cxx17_h7ed6875_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.5-he7c3a48_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-23.0.1-h47227bc_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-acero-23.0.1-hc9ab1f6_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-compute-23.0.1-h3b2c5b4_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-dataset-23.0.1-hc9ab1f6_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-23.0.1-h613493e_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libavif16-1.4.1-h9d3eb37_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.11.0-7_he492b99_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-1.88.0-h5950822_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-python-1.88.0-py312h3a26c12_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.11.0-7_h9b27e0a_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcondor_utils-24.12.4-h2da22b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9348e2b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.6-h19cb2f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.25-h517ebb2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libevent-2.1.12-ha90c15b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.1-hcc62823_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libframel-8.48.5-hbd657fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libfreetype-2.14.3-h694c41f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libfreetype6-2.14.3-h58fbd8d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgcc-15.2.0-h08519bb_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-hd16e46c_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.39.0-h11ac9da_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-storage-2.39.0-hea209c6_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.78.1-h147dede_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libhwy-1.4.0-hca42a69_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.1.4.1-ha1e9b39_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.11.2-h473410d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblal-7.7.0-fftw_h11bfb9b_101.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalburst-2.0.7-h0e85ab8_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalframe-3.0.7-hdadb070_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinference-4.1.9-h4325a54_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinspiral-5.0.3-h0e85ab8_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalmetaio-4.0.6-ha1e9b39_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalpulsar-7.1.1-hde9e502_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalsimulation-6.2.0-py312hf591029_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.11.0-7_h859234e_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libmetaio-8.5.1-h97fe558_1003.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.68.1-h70048d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.33-openmp_h9e49c7b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopentelemetry-cpp-1.21.0-h7a0a166_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopentelemetry-cpp-headers-1.21.0-h694c41f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libparquet-23.0.1-hb3ef814_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.58-he930e7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-6.33.5-h29d92e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libre2-11-2025.11.05-h6e8c311_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.22-ha3d0635_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.1-h8f8c405_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.22.0-hebea4ca_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.7.1-ha0a348c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.11.3-hc282952_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.6.0-hb807250_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.17.0-hf1f96e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.3-h7a90416_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.3-h953d39d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzopfli-1.0.3-h046ec9c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/ligo.skymap-2.5.3-np2hce383ba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-22.1.6-h0d3cbff_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvmlite-0.47.0-py312ha5a82fe_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-4.4.5-py312ha706d14_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.10.0-h240833e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-3.0.3-py312heb39f77_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/matplotlib-3.10.9-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/matplotlib-base-3.10.9-py312h7609456_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.1.2-py312hd099df3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/nlohmann_json-3.12.0-h06076ce_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numba-0.65.1-py312h704f9c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numcodecs-0.16.5-py312h86abcb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.4.6-py312h746d82c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/oniguruma-6.9.10-h6e16a3a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.4-h52bb76a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openjph-0.27.3-h2c0e27e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.2-hc881268_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/orc-2.3.0-hb9b210e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pandas-3.0.3-py312h8e27051_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pcre2-10.46-ha3e7e28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pillow-12.2.0-py312he84af14_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/prometheus-cpp-1.3.0-h7802330_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-7.2.2-py312hf7082af_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-h00291cd_1002.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-23.0.1-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-core-23.0.1-py312h3987635_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyerfa-2.0.1.5-py310hcbffc5d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pynacl-1.6.2-py312h3bc9c61_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.13-ha9537fe_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-gssapi-1.11.1-py312h972ca57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-htcondor-24.12.4-py312h564a4e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lal-7.7.0-fftw_py312haa2233f_101.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalburst-2.0.7-py312ha71206d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalframe-3.0.7-py312h469e4ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinference-4.1.9-py312h469e4ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinspiral-5.0.3-py312h469e4ad_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalmetaio-4.0.6-py312h469e4ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalpulsar-7.1.1-py312h469e4ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalsimulation-6.2.0-py312hc642aa9_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.3-py312h51361c1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/qhull-2020.2-h3c5361c_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/rav1e-0.8.1-h618d828_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/re2-2025.11.05-h77e0585_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/regex-2026.5.9-py312h933eb07_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/reproject-0.19.0-py312h391ab28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.8.0-np2py312h47bbdc5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.17.1-py312h6309490_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/scitokens-cpp-1.4.0-h1c2ca81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/shapely-2.1.2-py312hd8edc82_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.2.2-h01f5ddf_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/svt-av1-4.0.1-h991f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/swig-4.3.1-hf470585_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tornado-6.5.5-py312h933eb07_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/unicodedata2-17.0.1-py312h1a1c95f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/wrapt-2.2.1-py312h933eb07_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.12-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.5-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zfp-1.0.1-h1b13a81_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.2-hbb4bfdb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.3.3-h8bce59a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda + - pypi: https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/09/c9/a9271d39c86d28d8bfacec831e416e42eb6d154f03605429631c4c08138b/pygsl_lite-0.1.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/cb/d31459da1f482479512c642c8463347b828004ecfa5bcd0a26ab57317add/spinsfast-2022.4.10-cp312-cp312-macosx_13_0_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/ce/308e5e5da57515dd7cab3ec37ea2d5b8ff50bef1fcc8e6d31456f9fae08e/statsmodels-0.14.6-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/36/e1/84f6ede106afadc0e2c6a43d35b96ed6909149023f9a6a929175ad13a503/blosc2-4.3.3-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/c2/b602d2a5bbaaf9db1cff035ee6ddea76938c0b25ac1e6ac8ca288a073b47/otter_report-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/75/505cd72dfde3a1d7e719f840a2aa656a8c6b4c7b1b8c604a2d587cb1fc52/precession-2.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/f3/77f85bfac22ee84b231ee8b147cdd948f679edf7d5a622acf9169d2a9b63/juliacall-0.9.34-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/90/774ddd08b2a1b41faa56da111f0fbfeb4f17ee537214c938ef41d61af949/ndindex-1.10.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/66/8f/2515bd2f110f6316f39568e25943577effffa5283b6376969e8277ba330d/sxs-2025.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/92/8e7104d2cf40ba2f88528c01e8a063aba7b223a21c0310fcf043b441f5da/sxscatalog-3.0.28-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/a3/e2d6b17b02b5c52ce6c68fce7f2f190e796c2c1c5419e675f6a947fdb78c/qnm-0.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/33/81570e825bdb2c0d7fa705087b704007bb7898c7dbb7a64f868da59252b3/pyseobnr-0.3.6.tar.gz + - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/4a/75aadc3b17430d4d9f3ad7bf0332a22b7ef78312e2b5b70774d2a301b9ec/spherical-1.0.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/20/c473fc04a371f5e2f8c5749e04505c13e7a8ede27c09e9f099b2ad6f43d6/numexpr-2.14.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ad/28/9f3700cb784c0f0475de7074ed489702d5c6fb63a3df56b4cb4333b055fc/liquidpy-0.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/8a/eafc962e29c7fe800c702b4ae09cc358f1cbe40089e7a8cdac4f5b4c8c7a/requests_scitokens-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/b2/138065f2c50fd66b89623a5ee45d43d2341cfede4d7e0f7292075953ff12/numpy_quaternion-2024.0.13-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/b1/3e3144c3ada2ae1a60a378396629064ef14e425e356c8e7c1db3a50ef351/python_gitlab-8.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/47/a8d68aed3f6cb55bae90f504cd5ea3698a923c5fb6e9690726359e28eb1c/asimov_gwdata-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/70/ba4b949bdc0490ab78d545459acd7702b211dfccf7eb89bbc1060f52818d/patsy-1.0.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/bb/4a9cde6628563388db26fa86c64adb0f2475a757e72af0ec185fd520b72f/tables-3.11.1-cp311-abi3-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-image-2025.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dqsegdb2-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwdatafind-2.1.1-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/igwn-auth-utils-1.4.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-3.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/lscsoft-glue-4.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/omegaconf-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/paramiko-5.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/safe-netrc-1.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/scitokens-1.9.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/slicerator-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzlocal-5.3.1-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/astropy-base-7.2.0-py312ha11c99a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/astropy-healpix-1.1.3-py312hf57c059_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.9.6-ha02d361_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.13-h6ee9776_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.12.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.2-h3e7f9b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.5.9-hd533cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.10.10-ha1850f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.26.1-h4137820_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.14.0-h5721393_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.11.5-h7d214dc_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.4-h16f91aa_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.10-h3e7f9b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.37.3-hcfbc53e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.747-h35a1687_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.16.2-he5ae378_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.13.3-h810541e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.16.0-h5446563_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.13.0-he467506_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.14.0-hdc9d693_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/backports.zstd-1.5.0-py312h87c4bb7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bcrypt-5.0.0-py312h6ef9ec0_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py312h0dfefe5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brunsli-0.1-he0dfb12_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-3.0.3-hf9886e1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py312h1b4d9a2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.6.3-hb409788_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.3-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/chealpix-3.31.0-h6fab0b2_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py312h3093aea_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.14.0-py312h04c11ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cryptography-48.0.0-py312h1238841_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cytoolz-1.1.0-py312h2bbb03f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fftw-3.3.11-nompi_haf1500d_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.63.0-py312h04c11ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.3-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.14.1-h5afe852_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/google-crc32c-1.8.0-py312h090f823_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gsl-2.7-h6e638da_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py312hdd01ddf_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.6-nompi_had3affe_106.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/healpy-1.19.0-py312h372f765_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-24.12.4-py312h1f38498_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-classads-24.12.4-h0c2a548_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-cli-24.12.4-py312h81bd7bf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-utils-24.12.4-h9e88eaa_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htgettoken-2.6-py312h81bd7bf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/igwn-ligolw-2.1.1-py312h8d938ae_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/igwn-segments-2.1.1-py312h8d938ae_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2026.5.10-py312ha5a633e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.8.1-hbc156a2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py312h3093aea_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lal-7.7.0-fftw_py312h0b98bce_101.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalapps-10.1.0-py312hf84635f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalburst-2.0.7-py312h76b007c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalframe-3.0.7-py312h76b007c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-4.1.9-nompi_py312h594389e_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-data-4.1.9-hce30654_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinspiral-5.0.3-py312h76b007c_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalmetaio-4.0.6-py312h76b007c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-7.1.1-py312h57a7920_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-data-7.1.1-hce30654_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-6.2.0-py312h1ab2389_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-data-6.2.0-hce30654_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ldas-tools-al-2.7.0-he7ec6a4_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ldas-tools-framecpp-2.9.3-ha7f91e6_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20260107.1-cxx17_h2062a1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.5-h8664d51_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-23.0.1-h5390cfe_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-23.0.1-hbf36091_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-compute-23.0.1-h4dbefc3_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-23.0.1-hbf36091_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-23.0.1-h05be00f_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.4.1-hfce71f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-7_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-1.88.0-h0419b56_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-python-1.88.0-py312hdeff4eb_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-7_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcondor_utils-24.12.4-h4785e8b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.18.0-he38603e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.6-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libframel-8.48.5-h2f1a0bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-hdfa99f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.39.0-h2f60c08_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.39.0-ha114238_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.78.1-h3e3f78d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwy-1.4.0-ha332bbd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.2-h934fa54_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblal-7.7.0-fftw_hebea562_101.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalburst-2.0.7-h957e360_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalframe-3.0.7-h304a64b_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinference-4.1.9-ha9a36a6_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinspiral-5.0.3-h957e360_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalmetaio-4.0.6-h84a0fba_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalpulsar-7.1.1-h43f389f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalsimulation-6.2.0-py312h593d7fe_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-7_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmetaio-8.5.1-h57f5043_1003.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.33-openmp_he657e61_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-1.21.0-h08d5cc3_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-headers-1.21.0-hce30654_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-23.0.1-h7a13205_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.58-h132b30e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-6.33.5-h4a5acfd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2025.11.05-h4c27e2a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.22-h1a92334_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.1-h1b79a29_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.22.0-h1fb9c8a_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.11.3-h2431656_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.3-h5ef1a60_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.3-h5654f7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzopfli-1.0.3-h9f76cd9_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo.skymap-2.5.3-np2h6a9d7bf_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.6-hc7d1edf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmlite-0.47.0-py312h7ca588d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.4.5-py312h2b25a0d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py312h04c11ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-3.10.9-py312h1f38498_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.9-py312hf3defc7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.2-py312h84eede6_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nlohmann_json-3.12.0-h784d473_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numba-0.65.1-py312h2d3d6e9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numcodecs-0.16.5-py312h5978115_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.6-py312ha003a3f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.10-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjph-0.27.3-h2a4d681_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.3.0-hd11884d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-3.0.3-py312h6510ced_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.46-h7125dd6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.2.0-py312h4e908a4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prometheus-cpp-1.3.0-h0967b3e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py312hb3ab3e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-23.0.1-py312h1f38498_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-23.0.1-py312h21b41d0_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyerfa-2.0.1.5-py310hbb12772_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pynacl-1.6.2-py312h8fd69cb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-gssapi-1.11.1-py312h72ca3cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-htcondor-24.12.4-py312hd1c112e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lal-7.7.0-fftw_py312he477bca_101.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalburst-2.0.7-py312hd9443c7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalframe-3.0.7-py312hf57c059_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinference-4.1.9-py312hf57c059_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinspiral-5.0.3-py312hf57c059_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalmetaio-4.0.6-py312hf57c059_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalpulsar-7.1.1-py312hf57c059_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalsimulation-6.2.0-py312h7cf3665_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py312h04c11ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.8.1-h8246384_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2025.11.05-ha480c28_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2026.5.9-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/reproject-0.19.0-py312ha11c99a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.8.0-np2py312he5ca3e3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.17.1-py312h0f234b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scitokens-cpp-1.4.0-h608d757_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.1.2-py312h35cd81b_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hada39a4_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-4.0.1-h0cb729a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/swig-4.3.1-h0c2a548_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.2.1-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-ha86207d_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/30/affbabf3c27fb501ec7b5808230c619d4d1a4525c07301074eb4bda92fa9/statsmodels-0.14.6-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/09/c9/a9271d39c86d28d8bfacec831e416e42eb6d154f03605429631c4c08138b/pygsl_lite-0.1.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/c2/b602d2a5bbaaf9db1cff035ee6ddea76938c0b25ac1e6ac8ca288a073b47/otter_report-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/93/b6760dd1904c2a498e5f43d1bb436f59383c3ddea3815f1461dfaa259373/numexpr-2.14.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/46/75/505cd72dfde3a1d7e719f840a2aa656a8c6b4c7b1b8c604a2d587cb1fc52/precession-2.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/f3/77f85bfac22ee84b231ee8b147cdd948f679edf7d5a622acf9169d2a9b63/juliacall-0.9.34-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/8f/2515bd2f110f6316f39568e25943577effffa5283b6376969e8277ba330d/sxs-2025.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/92/8e7104d2cf40ba2f88528c01e8a063aba7b223a21c0310fcf043b441f5da/sxscatalog-3.0.28-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/a3/e2d6b17b02b5c52ce6c68fce7f2f190e796c2c1c5419e675f6a947fdb78c/qnm-0.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/33/81570e825bdb2c0d7fa705087b704007bb7898c7dbb7a64f868da59252b3/pyseobnr-0.3.6.tar.gz + - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/74/6568c8d3aabf9982ab89fe3e378afbd7aad4894bde4570991a3246169ef4/tables-3.11.1-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/4a/75aadc3b17430d4d9f3ad7bf0332a22b7ef78312e2b5b70774d2a301b9ec/spherical-1.0.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/30/12c87de87d6a3b523996737b97ba2e75972afac3c804249e5e61036e03d7/spinsfast-2022.4.10.tar.gz + - pypi: https://files.pythonhosted.org/packages/ad/28/9f3700cb784c0f0475de7074ed489702d5c6fb63a3df56b4cb4333b055fc/liquidpy-0.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/8a/eafc962e29c7fe800c702b4ae09cc358f1cbe40089e7a8cdac4f5b4c8c7a/requests_scitokens-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/cc/ca6129956980fc6148d6b1983bc5dfc302f73bc734b376069eb560d170b6/blosc2-4.3.3-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9c/6a64269df4f032d883c5da72052850ef94fb79743b70606719c1ca579c79/numpy_quaternion-2024.0.13-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/b1/3e3144c3ada2ae1a60a378396629064ef14e425e356c8e7c1db3a50ef351/python_gitlab-8.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/47/a8d68aed3f6cb55bae90f504cd5ea3698a923c5fb6e9690726359e28eb1c/asimov_gwdata-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/ee/a423e857f5b45da3adc8ddbcfbfd4a0e9a047edce3915d3e3d6e189b6bd9/ndindex-1.10.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f1/70/ba4b949bdc0490ab78d545459acd7702b211dfccf7eb89bbc1060f52818d/patsy-1.0.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl + swig-post44: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/astropy-base-7.2.0-py312h4f23490_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/astropy-healpix-1.1.3-py312h4f23490_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.1-ha62d5e7_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.13-h2c9d079_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-h8b1a151_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.7.0-h9b893ba_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.13-h4bacb7b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-hb18f61d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.15.2-hc1936db_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.12.2-he6ee468_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h8b1a151_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.38.3-h745e52d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.747-h41c0014_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.16.2-h206d751_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.13.3-hed0cdb0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.16.0-hf824e48_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.13.0-ha7a2c86_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.14.0-h539c000_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.5.0-py312h90b7ffd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bcrypt-5.0.0-py312h868fb18_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py312hdb49522_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-hd1e3526_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-3.0.3-hc31b594_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.6.3-ha0b56bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.3-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/chealpix-3.31.0-h001b3b8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.14.0-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-48.0.0-py312ha4b625e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.1.0-py312h4c3975b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.11-nompi_h3b011a4_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.0-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.63.0-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h480dda7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/google-crc32c-1.8.0-py312h03f33d3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha829cd9_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.0-h6083320_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_h87a9417_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/healpy-1.19.0-py312hb99e9eb_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-25.10.1-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-classads-25.10.1-h793e66c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-cli-25.10.1-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-utils-25.10.1-h8d23d0f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htgettoken-2.6-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/igwn-ligolw-2.1.1-py312h53c857e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/igwn-segments-2.1.1-py312h53c857e_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2026.5.10-py312he34094b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.8.1-h73b1eb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py312h0a2e395_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lal-7.7.0-fftw_py312he4eb8fe_104.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalapps-10.1.0-py312h8a05548_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalburst-2.0.7-py312h4c3975b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalframe-3.0.7-py312h4c3975b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-4.1.9-nompi_py312h894bbbb_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-data-4.1.9-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinspiral-5.0.3-py312h4c3975b_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalmetaio-4.0.6-py312h4c3975b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-7.1.1-py312h14108ff_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-data-7.1.1-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-6.2.0-py312hd1ec2bb_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-data-6.2.0-ha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ldas-tools-al-2.7.0-hd827ec0_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ldas-tools-framecpp-2.9.3-he85ded8_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-24.0.0-h033f57b_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-24.0.0-h635bf11_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-compute-24.0.0-h53684a4_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-24.0.0-h635bf11_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-24.0.0-hb4dd7c2_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.4.1-hcfa2d63_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-7_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libboost-1.88.0-hd24cca6_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-7_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.6-default_h746c552_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcondor_utils-25.10.1-h4effbbe_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.20.0-hcf29cc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.127-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libframel-8.48.5-ha02e5fa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-3.5.0-h25dbb67_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-3.5.0-hdbdcf42_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.78.1-h1d1128b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h10be129_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-h174a0a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblal-7.7.0-fftw_h9f6c97b_104.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalburst-2.0.7-h43c0734_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalframe-3.0.7-hbf9efdd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinference-4.1.9-h43c0734_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinspiral-5.0.3-h43c0734_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalmetaio-4.0.6-hb03c661_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalpulsar-7.1.1-h3c7535d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalsimulation-6.2.0-py312hd1ec2bb_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.6-hf7376ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmetaio-8.5.1-h0b0be96_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.26.0-h9692893_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.26.0-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-24.0.0-h7376487_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.11.05-h0dc7533_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.1-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.22.0-h7d032f7_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.11.3-hfe17d71_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.1-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/ligo.skymap-2.5.3-np2h4e6c70c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.47.0-py312h7424e68_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.4.5-py312h3d67a73_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.9-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.9-py312he3d6523_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py312hd9148b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/munge-0.5.16-h63a00c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.65.1-py312hd1dde6f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.5-py312hf79963d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py312h33ff503_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjph-0.27.3-h8d634f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.3.0-h21090e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-3.0.3-py312h8ecdadd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py312h50c33e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-24.0.0-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-24.0.0-py312h2054cf2_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyerfa-2.0.1.5-py310h32771cd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.6.2-py312hf34ed73_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.1-py312h50ac2ff_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.11.1-py312hf9980d4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-htcondor-25.10.1-py312h40fa4ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lal-7.7.0-fftw_py312hb15a3d9_104.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalburst-2.0.7-py312h71fd7f1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalframe-3.0.7-py312h4f23490_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinference-4.1.9-py312h4f23490_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinspiral-5.0.3-py312h4f23490_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalmetaio-4.0.6-py312h4f23490_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalpulsar-7.1.1-py312h4f23490_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalsimulation-6.2.0-py312h71fd7f1_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.1-pl5321h16c4a6b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.8.1-h1fbca29_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2025.11.05-h5301d42_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2026.5.9-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/reproject-0.19.0-py312h4f23490_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.3-hc5a330e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.8.0-np2py312h3226591_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scitokens-cpp-1.4.0-h096d96b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.2-py312h383787d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.0.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/swig-4.4.1-h7a96c5f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.2.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h909a3a2_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-image-2025.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dqsegdb2-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwdatafind-2.1.1-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/igwn-auth-utils-1.4.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-3.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/lscsoft-glue-4.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/omegaconf-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/paramiko-5.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/safe-netrc-1.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/scitokens-1.9.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/slicerator-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzlocal-5.3.1-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - pypi: https://files.pythonhosted.org/packages/00/e2/1cb7cfb88fd3866062977a484bc0dda4e165361e949cc8e270302d05b007/spinsfast-2022.4.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/07/40/4058220b3d60890b62e0a2e8212e2546695827cf85e6186405ecf8ef33f1/numpy_quaternion-2024.0.13-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/09/c9/a9271d39c86d28d8bfacec831e416e42eb6d154f03605429631c4c08138b/pygsl_lite-0.1.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/96/92119e6b279a88547a51eb99726ecae1ada839bf4fbcc2856503e2558e80/blosc2-4.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/27/ae/defd665dbbeb2fffa077491365ed160acaec49274ce8d4b979f55db71f18/ndindex-1.10.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/c2/b602d2a5bbaaf9db1cff035ee6ddea76938c0b25ac1e6ac8ca288a073b47/otter_report-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/75/505cd72dfde3a1d7e719f840a2aa656a8c6b4c7b1b8c604a2d587cb1fc52/precession-2.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/f3/77f85bfac22ee84b231ee8b147cdd948f679edf7d5a622acf9169d2a9b63/juliacall-0.9.34-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/66/8f/2515bd2f110f6316f39568e25943577effffa5283b6376969e8277ba330d/sxs-2025.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/92/8e7104d2cf40ba2f88528c01e8a063aba7b223a21c0310fcf043b441f5da/sxscatalog-3.0.28-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/a3/e2d6b17b02b5c52ce6c68fce7f2f190e796c2c1c5419e675f6a947fdb78c/qnm-0.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/33/81570e825bdb2c0d7fa705087b704007bb7898c7dbb7a64f868da59252b3/pyseobnr-0.3.6.tar.gz + - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/4a/75aadc3b17430d4d9f3ad7bf0332a22b7ef78312e2b5b70774d2a301b9ec/spherical-1.0.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/68/dddd76117df2ef14c943c6bbb6618be5c9401280046f4ddfc9fb4596a1b8/statsmodels-0.14.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/29/c2dc674ea70fa9a4819417289a9c0d3e4780835beeed573eb66964cfb763/tables-3.11.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ad/28/9f3700cb784c0f0475de7074ed489702d5c6fb63a3df56b4cb4333b055fc/liquidpy-0.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/8a/eafc962e29c7fe800c702b4ae09cc358f1cbe40089e7a8cdac4f5b4c8c7a/requests_scitokens-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/43/560e9ba23c02c904b5934496486d061bcb14cd3ebba2e3cf0e2dccb6c22b/numexpr-2.14.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/b1/3e3144c3ada2ae1a60a378396629064ef14e425e356c8e7c1db3a50ef351/python_gitlab-8.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/47/a8d68aed3f6cb55bae90f504cd5ea3698a923c5fb6e9690726359e28eb1c/asimov_gwdata-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/70/ba4b949bdc0490ab78d545459acd7702b211dfccf7eb89bbc1060f52818d/patsy-1.0.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl + osx-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-image-2025.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dqsegdb2-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwdatafind-2.1.1-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/igwn-auth-utils-1.4.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-3.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/lscsoft-glue-4.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/omegaconf-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/paramiko-5.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/safe-netrc-1.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/scitokens-1.9.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/slicerator-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzlocal-5.3.1-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aom-3.9.1-hf036a51_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/astropy-base-7.2.0-py312h391ab28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/astropy-healpix-1.1.3-py312h8ab2c85_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.10.1-ha3f0692_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.9.13-hea39f9f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.12.6-h8616949_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.3.2-hb9ea233_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.7.0-ha9bd753_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.10.13-h1037d30_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.26.3-hc95b61d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.15.2-h377fd20_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.12.2-hfe16a33_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.2.4-h901532c_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.2.10-h31279ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.38.3-heb35453_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.747-h9890d28_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-core-cpp-1.16.2-h87f1c7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-identity-cpp-1.13.3-h1135191_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-blobs-cpp-12.16.0-hefc3566_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-common-cpp-12.13.0-h74781cd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-files-datalake-cpp-12.14.0-h2303994_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/backports.zstd-1.5.0-py312h5f4ecc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/bcrypt-5.0.0-py312h8a6388b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/blosc-1.21.6-hd145fbb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-1.2.0-hf139dec_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-bin-1.2.0-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.2.0-py312h4b46afd_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/brunsli-0.1-ha00ef93_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/c-blosc2-3.0.3-h32e32c0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cffi-2.0.0-py312he90777b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.6.4-hd57ea71_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/charls-2.4.3-hcc62823_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/chealpix-3.31.0-he134003_10.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/contourpy-1.3.3-py312hb0c38da_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.14.0-py312heb39f77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cryptography-48.0.0-py312h1af399d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cytoolz-1.1.0-py312h1a1c95f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/dav1d-1.2.1-h0dc2134_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/fftw-3.3.11-nompi_h54214ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/fonttools-4.63.0-py312heb39f77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/freetype-2.14.3-h694c41f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/geos-3.14.1-he483b9e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.1-h2790a97_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/google-crc32c-1.8.0-py312hb9001e9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gsl-2.7-h93259b0_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.16.0-nompi_py312h82c48cf_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-2.1.0-nompi_h650120f_105.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/healpy-1.19.0-py312h84047a7_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-25.10.1-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-classads-25.10.1-h4086b99_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-cli-25.10.1-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-utils-25.10.1-h712aeec_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/htgettoken-2.6-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/igwn-ligolw-2.1.1-py312h0b9663a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/igwn-segments-2.1.1-py312h0b9663a_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/imagecodecs-2026.5.10-py312hc8b613d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/jq-1.8.1-h2287256_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/jxrlib-1.1-h10d778d_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/kiwisolver-1.5.0-py312hb1dc2e7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h207b36a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lal-7.7.0-fftw_py312h3a6e924_104.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalapps-10.1.0-py312h69f915d_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalburst-2.0.7-py312h933eb07_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalframe-3.0.7-py312h933eb07_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-4.1.9-nompi_py312h2269b78_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-data-4.1.9-h694c41f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinspiral-5.0.3-py312h933eb07_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalmetaio-4.0.6-py312h933eb07_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-7.1.1-py312h0a4f85f_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-data-7.1.1-h694c41f_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-6.2.0-py312hd5a5ae5_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-data-6.2.0-h694c41f_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.19.1-h5ea7634_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ldas-tools-al-2.7.0-hb7f9d93_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ldas-tools-framecpp-2.9.3-hf716561_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lerc-4.1.0-h35c7297_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20260107.1-cxx17_h7ed6875_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.5-he7c3a48_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-24.0.0-h7252e1b_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-acero-24.0.0-h66151e4_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-compute-24.0.0-h5d4fa73_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-dataset-24.0.0-h66151e4_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-24.0.0-h613493e_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libavif16-1.4.1-h9d3eb37_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.11.0-7_he492b99_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-1.88.0-h5950822_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.11.0-7_h9b27e0a_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcondor_utils-25.10.1-hcd6a731_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.20.0-h8f0b9e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.6-h19cb2f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.25-h517ebb2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libevent-2.1.12-ha90c15b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.1-hcc62823_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libframel-8.48.5-hbd657fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libfreetype-2.14.3-h694c41f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libfreetype6-2.14.3-h58fbd8d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgcc-15.2.0-h08519bb_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-hd16e46c_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-3.5.0-h10ed7cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-storage-3.5.0-hea209c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.78.1-h147dede_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libhwy-1.4.0-hca42a69_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.1.4.1-ha1e9b39_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.11.2-h473410d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblal-7.7.0-fftw_he57ba51_104.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalburst-2.0.7-h0e85ab8_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalframe-3.0.7-hdadb070_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinference-4.1.9-h4325a54_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinspiral-5.0.3-h0e85ab8_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalmetaio-4.0.6-ha1e9b39_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalpulsar-7.1.1-ha4006bb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalsimulation-6.2.0-py312hf591029_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.11.0-7_h859234e_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libmetaio-8.5.1-h97fe558_1003.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.68.1-h70048d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.33-openmp_h9e49c7b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopentelemetry-cpp-1.26.0-h7a0a166_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopentelemetry-cpp-headers-1.26.0-h694c41f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libparquet-24.0.0-h527dc83_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.58-he930e7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-6.33.5-h29d92e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libre2-11-2025.11.05-h6e8c311_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.22-ha3d0635_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.1-h8f8c405_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.22.0-hebea4ca_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.7.1-ha0a348c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.11.3-hc282952_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.6.0-hb807250_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.17.0-hf1f96e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.3-h7a90416_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.3-h953d39d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzopfli-1.0.3-h046ec9c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/ligo.skymap-2.5.3-np2hce383ba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-22.1.6-h0d3cbff_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvmlite-0.47.0-py312ha5a82fe_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-4.4.5-py312ha706d14_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.10.0-h240833e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-3.0.3-py312heb39f77_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/matplotlib-3.10.9-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/matplotlib-base-3.10.9-py312h7609456_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.1.2-py312hd099df3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/nlohmann_json-3.12.0-h06076ce_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numba-0.65.1-py312h704f9c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numcodecs-0.16.5-py312h86abcb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.4.6-py312h746d82c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/oniguruma-6.9.10-h6e16a3a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.4-h52bb76a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openjph-0.27.3-h2c0e27e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.2-hc881268_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/orc-2.3.0-hb9b210e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pandas-3.0.3-py312h8e27051_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pcre2-10.47-h13923f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pillow-12.2.0-py312he84af14_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/prometheus-cpp-1.3.0-h7802330_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-7.2.2-py312hf7082af_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-h00291cd_1002.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-24.0.0-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-core-24.0.0-py312h3987635_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyerfa-2.0.1.5-py310hcbffc5d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pynacl-1.6.2-py312h3bc9c61_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.13-ha9537fe_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-gssapi-1.11.1-py312h479078b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-htcondor-25.10.1-py312haf40f37_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lal-7.7.0-fftw_py312h70f41d4_104.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalburst-2.0.7-py312ha71206d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalframe-3.0.7-py312h469e4ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinference-4.1.9-py312h469e4ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinspiral-5.0.3-py312h469e4ad_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalmetaio-4.0.6-py312h469e4ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalpulsar-7.1.1-py312h469e4ad_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalsimulation-6.2.0-py312hc642aa9_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.3-py312h51361c1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/qhull-2020.2-h3c5361c_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/rav1e-0.8.1-h618d828_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/re2-2025.11.05-h77e0585_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/regex-2026.5.9-py312h933eb07_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/reproject-0.19.0-py312h391ab28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.8.0-np2py312h47bbdc5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.17.1-py312h6309490_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/scitokens-cpp-1.4.0-h1c2ca81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/shapely-2.1.2-py312hd8edc82_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.2.2-h01f5ddf_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/svt-av1-4.0.1-h991f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/swig-4.4.1-hdac4ec2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tornado-6.5.5-py312h933eb07_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/unicodedata2-17.0.1-py312h1a1c95f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/wrapt-2.2.1-py312h933eb07_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.12-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.5-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zfp-1.0.1-h1b13a81_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.2-hbb4bfdb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.3.3-h8bce59a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda + - pypi: https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/09/c9/a9271d39c86d28d8bfacec831e416e42eb6d154f03605429631c4c08138b/pygsl_lite-0.1.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/cb/d31459da1f482479512c642c8463347b828004ecfa5bcd0a26ab57317add/spinsfast-2022.4.10-cp312-cp312-macosx_13_0_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/ce/308e5e5da57515dd7cab3ec37ea2d5b8ff50bef1fcc8e6d31456f9fae08e/statsmodels-0.14.6-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/36/e1/84f6ede106afadc0e2c6a43d35b96ed6909149023f9a6a929175ad13a503/blosc2-4.3.3-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/c2/b602d2a5bbaaf9db1cff035ee6ddea76938c0b25ac1e6ac8ca288a073b47/otter_report-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/75/505cd72dfde3a1d7e719f840a2aa656a8c6b4c7b1b8c604a2d587cb1fc52/precession-2.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/f3/77f85bfac22ee84b231ee8b147cdd948f679edf7d5a622acf9169d2a9b63/juliacall-0.9.34-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/90/774ddd08b2a1b41faa56da111f0fbfeb4f17ee537214c938ef41d61af949/ndindex-1.10.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/66/8f/2515bd2f110f6316f39568e25943577effffa5283b6376969e8277ba330d/sxs-2025.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/92/8e7104d2cf40ba2f88528c01e8a063aba7b223a21c0310fcf043b441f5da/sxscatalog-3.0.28-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/a3/e2d6b17b02b5c52ce6c68fce7f2f190e796c2c1c5419e675f6a947fdb78c/qnm-0.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/33/81570e825bdb2c0d7fa705087b704007bb7898c7dbb7a64f868da59252b3/pyseobnr-0.3.6.tar.gz + - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/4a/75aadc3b17430d4d9f3ad7bf0332a22b7ef78312e2b5b70774d2a301b9ec/spherical-1.0.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/20/c473fc04a371f5e2f8c5749e04505c13e7a8ede27c09e9f099b2ad6f43d6/numexpr-2.14.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ad/28/9f3700cb784c0f0475de7074ed489702d5c6fb63a3df56b4cb4333b055fc/liquidpy-0.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/8a/eafc962e29c7fe800c702b4ae09cc358f1cbe40089e7a8cdac4f5b4c8c7a/requests_scitokens-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/b2/138065f2c50fd66b89623a5ee45d43d2341cfede4d7e0f7292075953ff12/numpy_quaternion-2024.0.13-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/b1/3e3144c3ada2ae1a60a378396629064ef14e425e356c8e7c1db3a50ef351/python_gitlab-8.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/47/a8d68aed3f6cb55bae90f504cd5ea3698a923c5fb6e9690726359e28eb1c/asimov_gwdata-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/70/ba4b949bdc0490ab78d545459acd7702b211dfccf7eb89bbc1060f52818d/patsy-1.0.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/bb/4a9cde6628563388db26fa86c64adb0f2475a757e72af0ec185fd520b72f/tables-3.11.1-cp311-abi3-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-image-2025.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dqsegdb2-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwdatafind-2.1.1-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/igwn-auth-utils-1.4.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-3.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/lscsoft-glue-4.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/omegaconf-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/paramiko-5.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/safe-netrc-1.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/scitokens-1.9.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/slicerator-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzlocal-5.3.1-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/astropy-base-7.2.0-py312ha11c99a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/astropy-healpix-1.1.3-py312hf57c059_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.10.1-ha7d4cc1_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.13-h6ee9776_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.12.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.2-h3e7f9b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.7.0-h351c84d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.10.13-h95cdebe_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.26.3-h4137820_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.15.2-h8860bc9_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.12.2-h07b101a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.4-h16f91aa_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.10-h3e7f9b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.38.3-hba17502_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.747-h30a6df1_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.16.2-he5ae378_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.13.3-h810541e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.16.0-h5446563_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.13.0-he467506_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.14.0-hdc9d693_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/backports.zstd-1.5.0-py312h87c4bb7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bcrypt-5.0.0-py312h6ef9ec0_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py312h0dfefe5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brunsli-0.1-he0dfb12_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-3.0.3-hf9886e1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py312h1b4d9a2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.6.4-h29bb15e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.3-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/chealpix-3.31.0-h47a9372_10.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py312h3093aea_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.14.0-py312h04c11ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cryptography-48.0.0-py312h1238841_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cytoolz-1.1.0-py312h2bbb03f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fftw-3.3.11-nompi_haf1500d_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.63.0-py312h04c11ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.3-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.14.1-h5afe852_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/google-crc32c-1.8.0-py312h090f823_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gsl-2.7-h6e638da_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py312h585e8c8_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-2.1.0-nompi_he586413_105.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/healpy-1.19.0-py312hc7c58be_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-25.10.1-py312h1f38498_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-classads-25.10.1-h7a491f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-cli-25.10.1-py312h81bd7bf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-utils-25.10.1-h91f37e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htgettoken-2.6-py312h81bd7bf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/igwn-ligolw-2.1.1-py312h8d938ae_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/igwn-segments-2.1.1-py312h8d938ae_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2026.5.10-py312ha5a633e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.8.1-hbc156a2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py312h3093aea_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lal-7.7.0-fftw_py312h8aca948_104.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalapps-10.1.0-py312hb943a6c_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalburst-2.0.7-py312h76b007c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalframe-3.0.7-py312h76b007c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-4.1.9-nompi_py312h594389e_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-data-4.1.9-hce30654_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinspiral-5.0.3-py312h76b007c_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalmetaio-4.0.6-py312h76b007c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-7.1.1-py312h1915c05_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-data-7.1.1-hce30654_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-6.2.0-py312h1ab2389_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-data-6.2.0-hce30654_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ldas-tools-al-2.7.0-he7ec6a4_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ldas-tools-framecpp-2.9.3-ha7f91e6_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20260107.1-cxx17_h2062a1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.5-h8664d51_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-24.0.0-h4c70b79_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-24.0.0-hee8fe31_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-compute-24.0.0-h3b6a98a_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-24.0.0-hee8fe31_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-24.0.0-h05be00f_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.4.1-hfce71f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-7_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-1.88.0-h0419b56_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-7_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcondor_utils-25.10.1-h3669c8c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.20.0-hd5a2499_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.6-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libframel-8.48.5-h2f1a0bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-hdfa99f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-3.5.0-he41eb1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-3.5.0-ha114238_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.78.1-h3e3f78d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwy-1.4.0-ha332bbd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.2-h934fa54_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblal-7.7.0-fftw_h4b20030_104.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalburst-2.0.7-h957e360_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalframe-3.0.7-h304a64b_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinference-4.1.9-ha9a36a6_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinspiral-5.0.3-h957e360_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalmetaio-4.0.6-h84a0fba_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalpulsar-7.1.1-h169444b_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalsimulation-6.2.0-py312h593d7fe_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-7_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmetaio-8.5.1-h57f5043_1003.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.33-openmp_he657e61_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-1.26.0-h08d5cc3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-headers-1.26.0-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-24.0.0-h16c0493_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.58-h132b30e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-6.33.5-h4a5acfd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2025.11.05-h4c27e2a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.22-h1a92334_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.1-h1b79a29_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.22.0-h1fb9c8a_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.11.3-h2431656_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.3-h5ef1a60_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.3-h5654f7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzopfli-1.0.3-h9f76cd9_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo.skymap-2.5.3-np2h6a9d7bf_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.6-hc7d1edf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmlite-0.47.0-py312h7ca588d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.4.5-py312h2b25a0d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py312h04c11ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-3.10.9-py312h1f38498_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.9-py312hf3defc7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.2-py312h84eede6_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nlohmann_json-3.12.0-h784d473_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numba-0.65.1-py312h2d3d6e9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numcodecs-0.16.5-py312h5978115_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.6-py312ha003a3f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.10-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjph-0.27.3-h2a4d681_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.3.0-hd11884d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-3.0.3-py312h6510ced_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-h30297fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.2.0-py312h4e908a4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prometheus-cpp-1.3.0-h0967b3e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py312hb3ab3e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-24.0.0-py312h1f38498_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-24.0.0-py312h21b41d0_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyerfa-2.0.1.5-py310hbb12772_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pynacl-1.6.2-py312h8fd69cb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-gssapi-1.11.1-py312h858ef95_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-htcondor-25.10.1-py312hacc1691_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lal-7.7.0-fftw_py312h2cc9458_104.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalburst-2.0.7-py312hd9443c7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalframe-3.0.7-py312hf57c059_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinference-4.1.9-py312hf57c059_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinspiral-5.0.3-py312hf57c059_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalmetaio-4.0.6-py312hf57c059_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalpulsar-7.1.1-py312hf57c059_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalsimulation-6.2.0-py312h7cf3665_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py312h04c11ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.8.1-h8246384_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2025.11.05-ha480c28_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2026.5.9-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/reproject-0.19.0-py312ha11c99a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.8.0-np2py312he5ca3e3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.17.1-py312h0f234b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scitokens-cpp-1.4.0-h608d757_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.1.2-py312h35cd81b_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hada39a4_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-4.0.1-h0cb729a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/swig-4.4.1-h4366dc5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.2.1-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-ha86207d_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/30/affbabf3c27fb501ec7b5808230c619d4d1a4525c07301074eb4bda92fa9/statsmodels-0.14.6-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/09/c9/a9271d39c86d28d8bfacec831e416e42eb6d154f03605429631c4c08138b/pygsl_lite-0.1.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/c2/b602d2a5bbaaf9db1cff035ee6ddea76938c0b25ac1e6ac8ca288a073b47/otter_report-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/93/b6760dd1904c2a498e5f43d1bb436f59383c3ddea3815f1461dfaa259373/numexpr-2.14.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/46/75/505cd72dfde3a1d7e719f840a2aa656a8c6b4c7b1b8c604a2d587cb1fc52/precession-2.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/f3/77f85bfac22ee84b231ee8b147cdd948f679edf7d5a622acf9169d2a9b63/juliacall-0.9.34-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/8f/2515bd2f110f6316f39568e25943577effffa5283b6376969e8277ba330d/sxs-2025.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/92/8e7104d2cf40ba2f88528c01e8a063aba7b223a21c0310fcf043b441f5da/sxscatalog-3.0.28-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/a3/e2d6b17b02b5c52ce6c68fce7f2f190e796c2c1c5419e675f6a947fdb78c/qnm-0.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/33/81570e825bdb2c0d7fa705087b704007bb7898c7dbb7a64f868da59252b3/pyseobnr-0.3.6.tar.gz + - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/74/6568c8d3aabf9982ab89fe3e378afbd7aad4894bde4570991a3246169ef4/tables-3.11.1-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/4a/75aadc3b17430d4d9f3ad7bf0332a22b7ef78312e2b5b70774d2a301b9ec/spherical-1.0.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/30/12c87de87d6a3b523996737b97ba2e75972afac3c804249e5e61036e03d7/spinsfast-2022.4.10.tar.gz + - pypi: https://files.pythonhosted.org/packages/ad/28/9f3700cb784c0f0475de7074ed489702d5c6fb63a3df56b4cb4333b055fc/liquidpy-0.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/8a/eafc962e29c7fe800c702b4ae09cc358f1cbe40089e7a8cdac4f5b4c8c7a/requests_scitokens-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/cc/ca6129956980fc6148d6b1983bc5dfc302f73bc734b376069eb560d170b6/blosc2-4.3.3-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9c/6a64269df4f032d883c5da72052850ef94fb79743b70606719c1ca579c79/numpy_quaternion-2024.0.13-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/b1/3e3144c3ada2ae1a60a378396629064ef14e425e356c8e7c1db3a50ef351/python_gitlab-8.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/47/a8d68aed3f6cb55bae90f504cd5ea3698a923c5fb6e9690726359e28eb1c/asimov_gwdata-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/ee/a423e857f5b45da3adc8ddbcfbfd4a0e9a047edce3915d3e3d6e189b6bd9/ndindex-1.10.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f1/70/ba4b949bdc0490ab78d545459acd7702b211dfccf7eb89bbc1060f52818d/patsy-1.0.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl + swig-pre44: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/astropy-base-7.2.0-py312h4f23490_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/astropy-healpix-1.1.3-py312h4f23490_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.6-hb9c0fe4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.13-h2c9d079_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-h8b1a151_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.9-h841be55_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.10-hf621c6d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.1-hc87160b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.14.0-ha25ca29_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.11.5-h9b5df67_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h8b1a151_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.37.3-hb153662_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.747-h133b1ee_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.16.2-h206d751_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.13.3-hed0cdb0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.16.0-hf824e48_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.13.0-ha7a2c86_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.14.0-h539c000_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.5.0-py312h90b7ffd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bcrypt-5.0.0-py312h868fb18_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py312hdb49522_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-hd1e3526_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-3.0.3-hc31b594_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.6.3-ha0b56bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.3-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/chealpix-3.31.0-h001b3b8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.14.0-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-48.0.0-py312ha4b625e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.1.0-py312h4c3975b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.3.1-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.11-nompi_h3b011a4_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.0-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.63.0-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h480dda7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/google-crc32c-1.8.0-py312h03f33d3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha4f8f14_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.2.0-h15599e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_106.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/healpy-1.19.0-py312hb99e9eb_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-24.12.4-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-classads-24.12.4-hf1419ba_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-cli-24.12.4-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-utils-24.12.4-h4a68bad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htgettoken-2.6-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/igwn-ligolw-2.1.1-py312h53c857e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/igwn-segments-2.1.1-py312h53c857e_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2026.5.10-py312he34094b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.8.1-h73b1eb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py312h0a2e395_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lal-7.7.0-fftw_py312h3c92f15_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalapps-10.1.0-py312h8a05548_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalburst-2.0.7-py312h4c3975b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalframe-3.0.7-py312h4c3975b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-4.1.9-nompi_py312h1d0e7ed_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-data-4.1.9-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinspiral-5.0.3-py312h4c3975b_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalmetaio-4.0.6-py312h4c3975b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-7.1.1-py312h14108ff_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-data-7.1.1-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-6.2.0-py312hd1ec2bb_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-data-6.2.0-ha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ldas-tools-al-2.7.0-hd827ec0_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ldas-tools-framecpp-2.9.3-he85ded8_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-23.0.1-hf605819_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-23.0.1-h635bf11_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-compute-23.0.1-h53684a4_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-23.0.1-h635bf11_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-23.0.1-hb4dd7c2_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.4.1-hcfa2d63_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-7_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libboost-1.88.0-hed09d94_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libboost-python-1.88.0-py312hf890105_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-7_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.6-default_h746c552_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcondor_utils-24.12.4-he8e5dd1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.127-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libframel-8.48.5-ha02e5fa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.2-h32235b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.39.0-h9d11ab5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.39.0-hdbdcf42_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.78.1-h1d1128b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h10be129_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-h174a0a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblal-7.7.0-fftw_h0eb8034_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalburst-2.0.7-h43c0734_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalframe-3.0.7-hbf9efdd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinference-4.1.9-h3773ae6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinspiral-5.0.3-h43c0734_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalmetaio-4.0.6-hb03c661_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalpulsar-7.1.1-h3c7535d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalsimulation-6.2.0-py312hd1ec2bb_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.6-hf7376ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmetaio-8.5.1-h0b0be96_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.21.0-h9692893_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.21.0-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-23.0.1-h7376487_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.1-h5c52fec_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.11.05-h0dc7533_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.1-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.22.0-h7d032f7_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.11.3-hfe17d71_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.1-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-ha9997c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h26afc86_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/ligo-segments-1.4.0-py312h66e93f0_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ligo.skymap-2.5.3-np2h4e6c70c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.47.0-py312h7424e68_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.4.5-py312h3d67a73_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.9-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.9-py312he3d6523_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py312hd9148b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/munge-0.5.16-h63a00c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.65.1-py312hd1dde6f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.5-py312hf79963d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py312h33ff503_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjph-0.27.3-h8d634f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.3.0-h21090e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-3.0.3-py312h8ecdadd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.46-h1321c63_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py312h50c33e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-23.0.1-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-23.0.1-py312h2054cf2_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyerfa-2.0.1.5-py310h32771cd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.6.2-py312hf34ed73_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.10.1-py312h9da60e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.11.1-py312h7cea900_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-htcondor-24.12.4-py312h1e35698_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lal-7.7.0-fftw_py312h26d0d96_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalburst-2.0.7-py312h71fd7f1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalframe-3.0.7-py312h4f23490_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinference-4.1.9-py312hc0a28a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinspiral-5.0.3-py312h4f23490_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalmetaio-4.0.6-py312h4f23490_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalpulsar-7.1.1-py312h4f23490_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalsimulation-6.2.0-py312h71fd7f1_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.1-hca0d9c9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.8.1-h1fbca29_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2025.11.05-h5301d42_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2026.5.9-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/reproject-0.19.0-py312h4f23490_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.1-h1cbb8d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.8.0-np2py312h3226591_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scitokens-cpp-1.4.0-h096d96b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.2-py312h383787d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.0.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/swig-4.3.1-hf1419ba_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.2.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h909a3a2_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-image-2025.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dqsegdb2-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwdatafind-2.1.1-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/igwn-auth-utils-1.4.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-3.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/lscsoft-glue-4.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/omegaconf-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/paramiko-5.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/safe-netrc-1.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/scitokens-1.9.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/slicerator-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzlocal-5.3.1-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - pypi: https://files.pythonhosted.org/packages/00/e2/1cb7cfb88fd3866062977a484bc0dda4e165361e949cc8e270302d05b007/spinsfast-2022.4.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/07/40/4058220b3d60890b62e0a2e8212e2546695827cf85e6186405ecf8ef33f1/numpy_quaternion-2024.0.13-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/09/c9/a9271d39c86d28d8bfacec831e416e42eb6d154f03605429631c4c08138b/pygsl_lite-0.1.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/96/92119e6b279a88547a51eb99726ecae1ada839bf4fbcc2856503e2558e80/blosc2-4.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/27/ae/defd665dbbeb2fffa077491365ed160acaec49274ce8d4b979f55db71f18/ndindex-1.10.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/c2/b602d2a5bbaaf9db1cff035ee6ddea76938c0b25ac1e6ac8ca288a073b47/otter_report-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/75/505cd72dfde3a1d7e719f840a2aa656a8c6b4c7b1b8c604a2d587cb1fc52/precession-2.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/f3/77f85bfac22ee84b231ee8b147cdd948f679edf7d5a622acf9169d2a9b63/juliacall-0.9.34-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/66/8f/2515bd2f110f6316f39568e25943577effffa5283b6376969e8277ba330d/sxs-2025.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/92/8e7104d2cf40ba2f88528c01e8a063aba7b223a21c0310fcf043b441f5da/sxscatalog-3.0.28-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/a3/e2d6b17b02b5c52ce6c68fce7f2f190e796c2c1c5419e675f6a947fdb78c/qnm-0.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/33/81570e825bdb2c0d7fa705087b704007bb7898c7dbb7a64f868da59252b3/pyseobnr-0.3.6.tar.gz + - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/4a/75aadc3b17430d4d9f3ad7bf0332a22b7ef78312e2b5b70774d2a301b9ec/spherical-1.0.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/68/dddd76117df2ef14c943c6bbb6618be5c9401280046f4ddfc9fb4596a1b8/statsmodels-0.14.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/29/c2dc674ea70fa9a4819417289a9c0d3e4780835beeed573eb66964cfb763/tables-3.11.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ad/28/9f3700cb784c0f0475de7074ed489702d5c6fb63a3df56b4cb4333b055fc/liquidpy-0.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/8a/eafc962e29c7fe800c702b4ae09cc358f1cbe40089e7a8cdac4f5b4c8c7a/requests_scitokens-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/43/560e9ba23c02c904b5934496486d061bcb14cd3ebba2e3cf0e2dccb6c22b/numexpr-2.14.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/b1/3e3144c3ada2ae1a60a378396629064ef14e425e356c8e7c1db3a50ef351/python_gitlab-8.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/47/a8d68aed3f6cb55bae90f504cd5ea3698a923c5fb6e9690726359e28eb1c/asimov_gwdata-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/70/ba4b949bdc0490ab78d545459acd7702b211dfccf7eb89bbc1060f52818d/patsy-1.0.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl + osx-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-image-2025.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dqsegdb2-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwdatafind-2.1.1-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/igwn-auth-utils-1.4.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-3.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/lscsoft-glue-4.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/omegaconf-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/paramiko-5.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/safe-netrc-1.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/scitokens-1.9.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/slicerator-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzlocal-5.3.1-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aom-3.9.1-hf036a51_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/astropy-base-7.2.0-py312h391ab28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/astropy-healpix-1.1.3-py312h8ab2c85_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.9.6-hbd79662_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.9.13-hea39f9f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.12.6-h8616949_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.3.2-hb9ea233_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.5.9-h8efd969_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.10.10-h8f73dec_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.26.1-hc95b61d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.14.0-h2b5127a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.11.5-hafc236b_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.2.4-h901532c_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.2.10-h31279ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.37.3-h4bfe737_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.747-h5d703ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-core-cpp-1.16.2-h87f1c7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-identity-cpp-1.13.3-h1135191_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-blobs-cpp-12.16.0-hefc3566_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-common-cpp-12.13.0-h74781cd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-files-datalake-cpp-12.14.0-h2303994_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/backports.zstd-1.5.0-py312h5f4ecc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/bcrypt-5.0.0-py312h8a6388b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/blosc-1.21.6-hd145fbb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-1.2.0-hf139dec_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-bin-1.2.0-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.2.0-py312h4b46afd_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/brunsli-0.1-ha00ef93_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/c-blosc2-3.0.3-h32e32c0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cffi-2.0.0-py312he90777b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.6.3-hf728c8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/charls-2.4.3-hcc62823_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/chealpix-3.31.0-h1535d2a_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/contourpy-1.3.3-py312hb0c38da_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.14.0-py312heb39f77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cryptography-48.0.0-py312h1af399d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cytoolz-1.1.0-py312h1a1c95f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/dav1d-1.2.1-h0dc2134_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/fftw-3.3.11-nompi_h54214ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/fonttools-4.63.0-py312heb39f77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/freetype-2.14.3-h694c41f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/geos-3.14.1-he483b9e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.1-h2790a97_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/google-crc32c-1.8.0-py312hb9001e9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gsl-2.7-h93259b0_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.16.0-nompi_py312h53b4df1_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.6-nompi_hf563b80_106.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/healpy-1.19.0-py312h5272b37_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-24.12.4-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-classads-24.12.4-hf470585_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-cli-24.12.4-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-utils-24.12.4-h1cc2291_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/htgettoken-2.6-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/igwn-ligolw-2.1.1-py312h0b9663a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/igwn-segments-2.1.1-py312h0b9663a_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/imagecodecs-2026.5.10-py312hc8b613d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/jq-1.8.1-h2287256_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/jxrlib-1.1-h10d778d_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/kiwisolver-1.5.0-py312hb1dc2e7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lal-7.7.0-fftw_py312hf555030_101.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalapps-10.1.0-py312h1f55956_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalburst-2.0.7-py312h933eb07_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalframe-3.0.7-py312h933eb07_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-4.1.9-nompi_py312h2269b78_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-data-4.1.9-h694c41f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinspiral-5.0.3-py312h933eb07_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalmetaio-4.0.6-py312h933eb07_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-7.1.1-py312hc6fbf67_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-data-7.1.1-h694c41f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-6.2.0-py312hd5a5ae5_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-data-6.2.0-h694c41f_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.19.1-h5ea7634_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ldas-tools-al-2.7.0-hb7f9d93_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ldas-tools-framecpp-2.9.3-hf716561_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lerc-4.1.0-h35c7297_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20260107.1-cxx17_h7ed6875_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.5-he7c3a48_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-23.0.1-h47227bc_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-acero-23.0.1-hc9ab1f6_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-compute-23.0.1-h3b2c5b4_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-dataset-23.0.1-hc9ab1f6_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-23.0.1-h613493e_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libavif16-1.4.1-h9d3eb37_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.11.0-7_he492b99_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-1.88.0-h5950822_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-python-1.88.0-py312h3a26c12_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.11.0-7_h9b27e0a_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcondor_utils-24.12.4-h2da22b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9348e2b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.6-h19cb2f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.25-h517ebb2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libevent-2.1.12-ha90c15b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.1-hcc62823_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libframel-8.48.5-hbd657fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libfreetype-2.14.3-h694c41f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libfreetype6-2.14.3-h58fbd8d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgcc-15.2.0-h08519bb_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-hd16e46c_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.39.0-h11ac9da_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-storage-2.39.0-hea209c6_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.78.1-h147dede_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libhwy-1.4.0-hca42a69_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.1.4.1-ha1e9b39_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.11.2-h473410d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblal-7.7.0-fftw_h11bfb9b_101.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalburst-2.0.7-h0e85ab8_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalframe-3.0.7-hdadb070_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinference-4.1.9-h4325a54_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinspiral-5.0.3-h0e85ab8_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalmetaio-4.0.6-ha1e9b39_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalpulsar-7.1.1-hde9e502_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalsimulation-6.2.0-py312hf591029_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.11.0-7_h859234e_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libmetaio-8.5.1-h97fe558_1003.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.68.1-h70048d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.33-openmp_h9e49c7b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopentelemetry-cpp-1.21.0-h7a0a166_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopentelemetry-cpp-headers-1.21.0-h694c41f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libparquet-23.0.1-hb3ef814_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.58-he930e7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-6.33.5-h29d92e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libre2-11-2025.11.05-h6e8c311_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.22-ha3d0635_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.1-h8f8c405_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.22.0-hebea4ca_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.7.1-ha0a348c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.11.3-hc282952_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.6.0-hb807250_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.17.0-hf1f96e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.3-h7a90416_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.3-h953d39d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzopfli-1.0.3-h046ec9c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/ligo.skymap-2.5.3-np2hce383ba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-22.1.6-h0d3cbff_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvmlite-0.47.0-py312ha5a82fe_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-4.4.5-py312ha706d14_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.10.0-h240833e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-3.0.3-py312heb39f77_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/matplotlib-3.10.9-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/matplotlib-base-3.10.9-py312h7609456_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.1.2-py312hd099df3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/nlohmann_json-3.12.0-h06076ce_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numba-0.65.1-py312h704f9c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numcodecs-0.16.5-py312h86abcb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.4.6-py312h746d82c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/oniguruma-6.9.10-h6e16a3a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.4-h52bb76a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openjph-0.27.3-h2c0e27e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.2-hc881268_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/orc-2.3.0-hb9b210e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pandas-3.0.3-py312h8e27051_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pcre2-10.46-ha3e7e28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pillow-12.2.0-py312he84af14_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/prometheus-cpp-1.3.0-h7802330_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-7.2.2-py312hf7082af_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-h00291cd_1002.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-23.0.1-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-core-23.0.1-py312h3987635_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyerfa-2.0.1.5-py310hcbffc5d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pynacl-1.6.2-py312h3bc9c61_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.13-ha9537fe_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-gssapi-1.11.1-py312h972ca57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-htcondor-24.12.4-py312h564a4e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lal-7.7.0-fftw_py312haa2233f_101.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalburst-2.0.7-py312ha71206d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalframe-3.0.7-py312h469e4ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinference-4.1.9-py312h469e4ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinspiral-5.0.3-py312h469e4ad_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalmetaio-4.0.6-py312h469e4ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalpulsar-7.1.1-py312h469e4ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalsimulation-6.2.0-py312hc642aa9_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.3-py312h51361c1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/qhull-2020.2-h3c5361c_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/rav1e-0.8.1-h618d828_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/re2-2025.11.05-h77e0585_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/regex-2026.5.9-py312h933eb07_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/reproject-0.19.0-py312h391ab28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.8.0-np2py312h47bbdc5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.17.1-py312h6309490_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/scitokens-cpp-1.4.0-h1c2ca81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/shapely-2.1.2-py312hd8edc82_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.2.2-h01f5ddf_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/svt-av1-4.0.1-h991f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/swig-4.3.1-hf470585_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tornado-6.5.5-py312h933eb07_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/unicodedata2-17.0.1-py312h1a1c95f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/wrapt-2.2.1-py312h933eb07_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.12-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.5-h8616949_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zfp-1.0.1-h1b13a81_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.2-hbb4bfdb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.3.3-h8bce59a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda + - pypi: https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/09/c9/a9271d39c86d28d8bfacec831e416e42eb6d154f03605429631c4c08138b/pygsl_lite-0.1.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/cb/d31459da1f482479512c642c8463347b828004ecfa5bcd0a26ab57317add/spinsfast-2022.4.10-cp312-cp312-macosx_13_0_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/ce/308e5e5da57515dd7cab3ec37ea2d5b8ff50bef1fcc8e6d31456f9fae08e/statsmodels-0.14.6-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/36/e1/84f6ede106afadc0e2c6a43d35b96ed6909149023f9a6a929175ad13a503/blosc2-4.3.3-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/c2/b602d2a5bbaaf9db1cff035ee6ddea76938c0b25ac1e6ac8ca288a073b47/otter_report-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/75/505cd72dfde3a1d7e719f840a2aa656a8c6b4c7b1b8c604a2d587cb1fc52/precession-2.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/f3/77f85bfac22ee84b231ee8b147cdd948f679edf7d5a622acf9169d2a9b63/juliacall-0.9.34-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/90/774ddd08b2a1b41faa56da111f0fbfeb4f17ee537214c938ef41d61af949/ndindex-1.10.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/66/8f/2515bd2f110f6316f39568e25943577effffa5283b6376969e8277ba330d/sxs-2025.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/92/8e7104d2cf40ba2f88528c01e8a063aba7b223a21c0310fcf043b441f5da/sxscatalog-3.0.28-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/a3/e2d6b17b02b5c52ce6c68fce7f2f190e796c2c1c5419e675f6a947fdb78c/qnm-0.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/33/81570e825bdb2c0d7fa705087b704007bb7898c7dbb7a64f868da59252b3/pyseobnr-0.3.6.tar.gz + - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/4a/75aadc3b17430d4d9f3ad7bf0332a22b7ef78312e2b5b70774d2a301b9ec/spherical-1.0.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/20/c473fc04a371f5e2f8c5749e04505c13e7a8ede27c09e9f099b2ad6f43d6/numexpr-2.14.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ad/28/9f3700cb784c0f0475de7074ed489702d5c6fb63a3df56b4cb4333b055fc/liquidpy-0.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/8a/eafc962e29c7fe800c702b4ae09cc358f1cbe40089e7a8cdac4f5b4c8c7a/requests_scitokens-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/b2/138065f2c50fd66b89623a5ee45d43d2341cfede4d7e0f7292075953ff12/numpy_quaternion-2024.0.13-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/b1/3e3144c3ada2ae1a60a378396629064ef14e425e356c8e7c1db3a50ef351/python_gitlab-8.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/47/a8d68aed3f6cb55bae90f504cd5ea3698a923c5fb6e9690726359e28eb1c/asimov_gwdata-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/70/ba4b949bdc0490ab78d545459acd7702b211dfccf7eb89bbc1060f52818d/patsy-1.0.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/bb/4a9cde6628563388db26fa86c64adb0f2475a757e72af0ec185fd520b72f/tables-3.11.1-cp311-abi3-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dask-image-2025.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2026.3.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dqsegdb2-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwdatafind-2.1.1-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/igwn-auth-utils-1.4.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-3.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/lscsoft-glue-4.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/omegaconf-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/paramiko-5.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/safe-netrc-1.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/scitokens-1.9.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/slicerator-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzlocal-5.3.1-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/astropy-base-7.2.0-py312ha11c99a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/astropy-healpix-1.1.3-py312hf57c059_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.9.6-ha02d361_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.13-h6ee9776_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.12.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.2-h3e7f9b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.5.9-hd533cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.10.10-ha1850f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.26.1-h4137820_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.14.0-h5721393_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.11.5-h7d214dc_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.4-h16f91aa_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.10-h3e7f9b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.37.3-hcfbc53e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.747-h35a1687_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.16.2-he5ae378_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.13.3-h810541e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.16.0-h5446563_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.13.0-he467506_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.14.0-hdc9d693_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/backports.zstd-1.5.0-py312h87c4bb7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bcrypt-5.0.0-py312h6ef9ec0_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py312h0dfefe5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brunsli-0.1-he0dfb12_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-3.0.3-hf9886e1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py312h1b4d9a2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.6.3-hb409788_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.3-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/chealpix-3.31.0-h6fab0b2_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py312h3093aea_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.14.0-py312h04c11ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cryptography-48.0.0-py312h1238841_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cytoolz-1.1.0-py312h2bbb03f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fftw-3.3.11-nompi_haf1500d_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.63.0-py312h04c11ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.3-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.14.1-h5afe852_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/google-crc32c-1.8.0-py312h090f823_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gsl-2.7-h6e638da_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py312hdd01ddf_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.6-nompi_had3affe_106.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/healpy-1.19.0-py312h372f765_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-24.12.4-py312h1f38498_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-classads-24.12.4-h0c2a548_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-cli-24.12.4-py312h81bd7bf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-utils-24.12.4-h9e88eaa_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htgettoken-2.6-py312h81bd7bf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/igwn-ligolw-2.1.1-py312h8d938ae_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/igwn-segments-2.1.1-py312h8d938ae_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2026.5.10-py312ha5a633e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.8.1-hbc156a2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py312h3093aea_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lal-7.7.0-fftw_py312h0b98bce_101.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalapps-10.1.0-py312hf84635f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalburst-2.0.7-py312h76b007c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalframe-3.0.7-py312h76b007c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-4.1.9-nompi_py312h594389e_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-data-4.1.9-hce30654_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinspiral-5.0.3-py312h76b007c_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalmetaio-4.0.6-py312h76b007c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-7.1.1-py312h57a7920_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-data-7.1.1-hce30654_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-6.2.0-py312h1ab2389_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-data-6.2.0-hce30654_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ldas-tools-al-2.7.0-he7ec6a4_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ldas-tools-framecpp-2.9.3-ha7f91e6_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20260107.1-cxx17_h2062a1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.5-h8664d51_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-23.0.1-h5390cfe_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-23.0.1-hbf36091_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-compute-23.0.1-h4dbefc3_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-23.0.1-hbf36091_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-23.0.1-h05be00f_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.4.1-hfce71f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-7_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-1.88.0-h0419b56_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-python-1.88.0-py312hdeff4eb_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-7_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcondor_utils-24.12.4-h4785e8b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.18.0-he38603e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.6-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libframel-8.48.5-h2f1a0bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-hdfa99f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.39.0-h2f60c08_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.39.0-ha114238_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.78.1-h3e3f78d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwy-1.4.0-ha332bbd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.2-h934fa54_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblal-7.7.0-fftw_hebea562_101.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalburst-2.0.7-h957e360_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalframe-3.0.7-h304a64b_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinference-4.1.9-ha9a36a6_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinspiral-5.0.3-h957e360_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalmetaio-4.0.6-h84a0fba_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalpulsar-7.1.1-h43f389f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalsimulation-6.2.0-py312h593d7fe_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-7_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmetaio-8.5.1-h57f5043_1003.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.33-openmp_he657e61_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-1.21.0-h08d5cc3_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-headers-1.21.0-hce30654_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-23.0.1-h7a13205_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.58-h132b30e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-6.33.5-h4a5acfd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2025.11.05-h4c27e2a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.22-h1a92334_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.1-h1b79a29_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.22.0-h1fb9c8a_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.11.3-h2431656_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.3-h5ef1a60_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.3-h5654f7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzopfli-1.0.3-h9f76cd9_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo.skymap-2.5.3-np2h6a9d7bf_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.6-hc7d1edf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmlite-0.47.0-py312h7ca588d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.4.5-py312h2b25a0d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py312h04c11ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-3.10.9-py312h1f38498_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.9-py312hf3defc7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.2-py312h84eede6_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nlohmann_json-3.12.0-h784d473_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numba-0.65.1-py312h2d3d6e9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numcodecs-0.16.5-py312h5978115_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.6-py312ha003a3f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.10-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjph-0.27.3-h2a4d681_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.3.0-hd11884d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-3.0.3-py312h6510ced_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.46-h7125dd6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.2.0-py312h4e908a4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prometheus-cpp-1.3.0-h0967b3e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py312hb3ab3e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-23.0.1-py312h1f38498_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-23.0.1-py312h21b41d0_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyerfa-2.0.1.5-py310hbb12772_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pynacl-1.6.2-py312h8fd69cb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-gssapi-1.11.1-py312h72ca3cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-htcondor-24.12.4-py312hd1c112e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lal-7.7.0-fftw_py312he477bca_101.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalburst-2.0.7-py312hd9443c7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalframe-3.0.7-py312hf57c059_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinference-4.1.9-py312hf57c059_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinspiral-5.0.3-py312hf57c059_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalmetaio-4.0.6-py312hf57c059_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalpulsar-7.1.1-py312hf57c059_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalsimulation-6.2.0-py312h7cf3665_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py312h04c11ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.8.1-h8246384_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2025.11.05-ha480c28_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2026.5.9-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/reproject-0.19.0-py312ha11c99a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.8.0-np2py312he5ca3e3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.17.1-py312h0f234b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scitokens-cpp-1.4.0-h608d757_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.1.2-py312h35cd81b_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hada39a4_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-4.0.1-h0cb729a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/swig-4.3.1-h0c2a548_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.2.1-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-ha86207d_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/30/affbabf3c27fb501ec7b5808230c619d4d1a4525c07301074eb4bda92fa9/statsmodels-0.14.6-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/09/c9/a9271d39c86d28d8bfacec831e416e42eb6d154f03605429631c4c08138b/pygsl_lite-0.1.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/c2/b602d2a5bbaaf9db1cff035ee6ddea76938c0b25ac1e6ac8ca288a073b47/otter_report-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/93/b6760dd1904c2a498e5f43d1bb436f59383c3ddea3815f1461dfaa259373/numexpr-2.14.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/46/75/505cd72dfde3a1d7e719f840a2aa656a8c6b4c7b1b8c604a2d587cb1fc52/precession-2.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/f3/77f85bfac22ee84b231ee8b147cdd948f679edf7d5a622acf9169d2a9b63/juliacall-0.9.34-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/8f/2515bd2f110f6316f39568e25943577effffa5283b6376969e8277ba330d/sxs-2025.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/92/8e7104d2cf40ba2f88528c01e8a063aba7b223a21c0310fcf043b441f5da/sxscatalog-3.0.28-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/a3/e2d6b17b02b5c52ce6c68fce7f2f190e796c2c1c5419e675f6a947fdb78c/qnm-0.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/33/81570e825bdb2c0d7fa705087b704007bb7898c7dbb7a64f868da59252b3/pyseobnr-0.3.6.tar.gz + - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/74/6568c8d3aabf9982ab89fe3e378afbd7aad4894bde4570991a3246169ef4/tables-3.11.1-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/4a/75aadc3b17430d4d9f3ad7bf0332a22b7ef78312e2b5b70774d2a301b9ec/spherical-1.0.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/30/12c87de87d6a3b523996737b97ba2e75972afac3c804249e5e61036e03d7/spinsfast-2022.4.10.tar.gz + - pypi: https://files.pythonhosted.org/packages/ad/28/9f3700cb784c0f0475de7074ed489702d5c6fb63a3df56b4cb4333b055fc/liquidpy-0.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/8a/eafc962e29c7fe800c702b4ae09cc358f1cbe40089e7a8cdac4f5b4c8c7a/requests_scitokens-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/cc/ca6129956980fc6148d6b1983bc5dfc302f73bc734b376069eb560d170b6/blosc2-4.3.3-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9c/6a64269df4f032d883c5da72052850ef94fb79743b70606719c1ca579c79/numpy_quaternion-2024.0.13-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/b1/3e3144c3ada2ae1a60a378396629064ef14e425e356c8e7c1db3a50ef351/python_gitlab-8.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/47/a8d68aed3f6cb55bae90f504cd5ea3698a923c5fb6e9690726359e28eb1c/asimov_gwdata-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/ee/a423e857f5b45da3adc8ddbcfbfd4a0e9a047edce3915d3e3d6e189b6bd9/ndindex-1.10.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f1/70/ba4b949bdc0490ab78d545459acd7702b211dfccf7eb89bbc1060f52818d/patsy-1.0.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + build_number: 20 + sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 + md5: a9f577daf3de00bca7c3c76c0ecbd1de + depends: + - __glibc >=2.17,<3.0.a0 + - libgomp >=7.5.0 + constrains: + - openmp_impl <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28948 + timestamp: 1770939786096 +- conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda + sha256: d88aa7ae766cf584e180996e92fef2aa7d8e0a0a5ab1d4d49c32390c1b5fff31 + md5: dcdc58c15961dbf17a0621312b01f5cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-or-later + license_family: GPL + purls: [] + size: 584660 + timestamp: 1768327524772 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda + sha256: b08ef033817b5f9f76ce62dfcac7694e7b6b4006420372de22494503decac855 + md5: 346722a0be40f6edc53f12640d301338 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 2706396 + timestamp: 1718551242397 +- conda: https://conda.anaconda.org/conda-forge/linux-64/astropy-base-7.2.0-py312h4f23490_0.conda + sha256: e427fdcc692ac4c2c5be3d39886c5c86479ac924d07196a2375b66467d2f7ba7 + md5: a2826f4e9101450669fcfbe1b3b16820 + depends: + - __glibc >=2.17,<3.0.a0 + - astropy-iers-data >=0.2025.10.27.0.39.10 + - libgcc >=14 + - numpy >=1.23,<3 + - numpy >=1.24 + - packaging >=22.0.0 + - pyerfa >=2.0.1.1 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - pyyaml >=6.0.0 + constrains: + - astropy >=7.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/astropy?source=hash-mapping + size: 9530649 + timestamp: 1764120772709 +- conda: https://conda.anaconda.org/conda-forge/linux-64/astropy-healpix-1.1.3-py312h4f23490_0.conda + sha256: 382272564eba823850e8132c38fcfed7eecf3273d9c614822e7d29c3efa87423 + md5: c9280b8322e17ae119b457c7f39b222d + depends: + - __glibc >=2.17,<3.0.a0 + - astropy-base >=3 + - libgcc >=14 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/astropy-healpix?source=hash-mapping + size: 116115 + timestamp: 1768880212636 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.1-ha62d5e7_3.conda + sha256: ccbf2cc4bea4aab6e071d67ecc2743197759f6df855787e7a5f57f7973f913a2 + md5: 55eaf7066da1299d217ab32baedc7fa8 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-http >=0.10.13,<0.10.14.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 134427 + timestamp: 1777489423676 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.6-hb9c0fe4_1.conda + sha256: 84f9e2f83d9d93da551e0058c651015dd4bfd84256c6293db01130911c5e0f12 + md5: b1143a5b5a03ee174b3f3f7c49df3c09 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-http >=0.10.10,<0.10.11.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 133452 + timestamp: 1771494128397 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.13-h2c9d079_1.conda + sha256: f21d648349a318f4ae457ea5403d542ba6c0e0343b8642038523dd612b2a5064 + md5: 3c3d02681058c3d206b562b2e3bc337f + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - libgcc >=14 + - openssl >=3.5.4,<4.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 56230 + timestamp: 1764593147526 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.6-hb03c661_0.conda + sha256: 926a5b9de0a586e88669d81de717c8dd3218c51ce55658e8a16af7e7fe87c833 + md5: e36ad70a7e0b48f091ed6902f04c23b8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 239605 + timestamp: 1763585595898 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-h8b1a151_0.conda + sha256: 1838bdc077b77168416801f4715335b65e9223f83641a2c28644f8acd8f9db0e + md5: f16f498641c9e05b645fe65902df661a + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 22278 + timestamp: 1767790836624 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.9-h841be55_2.conda + sha256: 179610f3c76238ca5fc4578384381bfd297e0ae1b96f6be52220c51f66b38131 + md5: 7e1ea1a67435a32e04305fda877acd1e + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 58801 + timestamp: 1771380394434 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.7.0-h9b893ba_0.conda + sha256: 9692edaeaf90f7710b7ec49c7ca42961c59344dafa6fadbaec8c283b0606ca68 + md5: 60076118b1579967748f0c9a2912de7c + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 59054 + timestamp: 1774479894768 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.10-hf621c6d_0.conda + sha256: c61272aaff8aec10bb6a2afa62a7181e4ab00f4577350a8023431c74b9e91a72 + md5: 977e7d3cba1ef84fc088869b292672fe + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-compression >=0.3.2,<0.3.3.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 225671 + timestamp: 1771421336421 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.13-h4bacb7b_0.conda + sha256: 38cfc8894db6729770ac18f900296c3f7c20f349a5586a8d8e1a62571fce61d5 + md5: 77f70a9ab785a146dbf66fba00131403 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - aws-c-compression >=0.3.2,<0.3.3.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 225826 + timestamp: 1774488399486 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.1-hc87160b_2.conda + sha256: f224ba83bba90744cb8a85ce63075b2cd940cb8e232bc3e3f32d7aac833ab61c + md5: 3a7d90d34895728f0b69107602b6e189 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - s2n >=1.7.1,<1.7.2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 181558 + timestamp: 1773409398408 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-hb18f61d_2.conda + sha256: eee7f7aa2c5b9e0a31edba7b81482036fbe751c40bc6697fd057fbd2c656406b + md5: d1337309873c443bcc9f118b67eed84e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - s2n >=1.7.3,<1.7.4.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 181606 + timestamp: 1779133007375 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.14.0-ha25ca29_1.conda + sha256: 2e9f2fc6ca8aa993b4962dbae711df69e8091b6a691bdcef8c8398dc81f923d7 + md5: a827b063719f5aac504d06ac77cc3125 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-http >=0.10.10,<0.10.11.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 220029 + timestamp: 1771458032786 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.15.2-hc1936db_2.conda + sha256: 236ab4138ff4600f95903d2da94125df78577055f6687afa8806db0f6ed2e1a8 + md5: 9120bc47b6f837f3cea90928c3e9a8fa + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-http >=0.10.13,<0.10.14.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 221638 + timestamp: 1777488145895 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.11.5-h9b5df67_3.conda + sha256: 4ec226a26aa1971d739f8600310b98f6ce8c24b93d88f8acb8387e9de0f4361e + md5: 1f130ac4eb7f1dea1ae4b5f53683e3aa + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - openssl >=3.5.5,<4.0a0 + - aws-c-http >=0.10.10,<0.10.11.0a0 + - aws-c-auth >=0.9.6,<0.9.7.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 151354 + timestamp: 1771586299371 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.12.2-he6ee468_1.conda + sha256: 4cecb4d595b7cf558087c37b8131cae5204b2c64d75f6b951dc3731d3f872bb8 + md5: 50ae8372984b8b98e056ac8f6b70ab29 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - openssl >=3.5.6,<4.0a0 + - aws-c-http >=0.10.13,<0.10.14.0a0 + - aws-c-auth >=0.10.1,<0.10.2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 152657 + timestamp: 1777824812393 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda + sha256: 9d62c5029f6f8219368a8665f0a549da572dc777f52413b7d75609cacdbc02cc + md5: c7e3e08b7b1b285524ab9d74162ce40b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 59383 + timestamp: 1764610113765 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h8b1a151_0.conda + sha256: 09472dd5fa4473cffd44741ee4c1112f2c76d7168d1343de53c2ad283dc1efa6 + md5: f8e1bcc5c7d839c5882e94498791be08 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 101435 + timestamp: 1771063496927 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.37.3-hb153662_0.conda + sha256: 25897c312a2fb52a1c36083d810ce11a3bb69bae23c31cd572d9629857547a56 + md5: 9ce778ddbd927385bf145224e291e2a1 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + - aws-c-s3 >=0.11.5,<0.11.6.0a0 + - aws-c-event-stream >=0.5.9,<0.5.10.0a0 + - aws-c-auth >=0.9.6,<0.9.7.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-mqtt >=0.14.0,<0.14.1.0a0 + - aws-c-http >=0.10.10,<0.10.11.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 410093 + timestamp: 1771983327389 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.38.3-h745e52d_1.conda + sha256: 5616649034662ab7846b78b344891f49b895807cabd83918aebb3439aa9ca405 + md5: 6a65b3595a8933808c03ff065dfb7702 + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - aws-c-auth >=0.10.1,<0.10.2.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-s3 >=0.12.2,<0.12.3.0a0 + - aws-c-mqtt >=0.15.2,<0.15.3.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-event-stream >=0.7.0,<0.7.1.0a0 + - aws-c-http >=0.10.13,<0.10.14.0a0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 412541 + timestamp: 1778019077033 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.747-h133b1ee_1.conda + sha256: ac6090e6ab8cc2c927e7f62d90918de169cdd35e580fab8a95dc5d5ba8515fd0 + md5: 36afc05aac7c7f516749cdd3b5e978d9 + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-crt-cpp >=0.37.3,<0.37.4.0a0 + - libcurl >=8.18.0,<9.0a0 + - aws-c-event-stream >=0.5.9,<0.5.10.0a0 + - libzlib >=1.3.1,<2.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 3624539 + timestamp: 1772084530342 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.747-h41c0014_4.conda + sha256: f17585991350e00084614faaa704166a07fdcf58e80c76003e35111093c6e5e9 + md5: 169a79ea1127077d8dc36dc963ff55ac + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - libzlib >=1.3.2,<2.0a0 + - aws-crt-cpp >=0.38.3,<0.38.4.0a0 + - libcurl >=8.20.0,<9.0a0 + - aws-c-event-stream >=0.7.0,<0.7.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 3624409 + timestamp: 1778156208464 +- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.16.2-h206d751_0.conda + sha256: 321d1070905e467b6bc6f5067b97c1868d7345c272add82b82e08a0224e326f0 + md5: 5492abf806c45298ae642831c670bba0 + depends: + - __glibc >=2.17,<3.0.a0 + - libcurl >=8.18.0,<9.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.4,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 348729 + timestamp: 1768837519361 +- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.13.3-hed0cdb0_1.conda + sha256: 2beb6ae8406f946b8963a67e72fe74453e1411c5ae7e992978340de6c512d13c + md5: 68bfb556bdf56d56e9f38da696e752ca + depends: + - __glibc >=2.17,<3.0.a0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 250511 + timestamp: 1770344967948 +- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.16.0-hf824e48_2.conda + sha256: ec278ffc9785cffeed097f57483fd0bc32c9083f56d7e6d95de46e560e4b49d1 + md5: 315c1c09f02a1efeb1b4d3dbcd2aa26a + depends: + - __glibc >=2.17,<3.0.a0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - azure-storage-common-cpp >=12.13.0,<12.13.1.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 580752 + timestamp: 1778727162545 +- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.13.0-ha7a2c86_0.conda + sha256: 67fa6937bc2f6400f5ff19727f5d926fdc68d7fce3aaeab4016f49bb93d89cbb + md5: a7e8cca395e0a1616b389749580b7804 + depends: + - __glibc >=2.17,<3.0.a0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - openssl >=3.5.6,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 159140 + timestamp: 1778661935076 +- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.14.0-h539c000_2.conda + sha256: 7765e9082b544555f74473ec21e366d92bb7688635d42d200860798e8b792a25 + md5: 245b61f9baef23f8f6cf04ccda928521 + depends: + - __glibc >=2.17,<3.0.a0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0 + - azure-storage-common-cpp >=12.13.0,<12.13.1.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 302771 + timestamp: 1778763856084 +- conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.5.0-py312h90b7ffd_0.conda + sha256: a2b08a4e5e549b5f67c38edffd175437e2208547a7e67b5fa5373b67ef419e50 + md5: b31dba71fe091e7201826e57e0f7b261 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause AND MIT AND EPL-2.0 + purls: + - pkg:pypi/backports-zstd?source=hash-mapping + size: 239928 + timestamp: 1778594049826 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bcrypt-5.0.0-py312h868fb18_1.conda + sha256: 22020286e3d27eba7c9efef79c1020782885992aea0e7d28d7274c4405001521 + md5: 8fbbd949c452efde5a75b62b22a88938 + depends: + - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/bcrypt?source=hash-mapping + size: 292835 + timestamp: 1762497719397 +- conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda + sha256: e7af5d1183b06a206192ff440e08db1c4e8b2ca1f8376ee45fb2f3a85d4ee45d + md5: 2c2fae981fd2afd00812c92ac47d023d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - snappy >=1.2.1,<1.3.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 48427 + timestamp: 1733513201413 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + sha256: e511644d691f05eb12ebe1e971fd6dc3ae55a4df5c253b4e1788b789bdf2dfa6 + md5: 8ccf913aaba749a5496c17629d859ed1 + depends: + - __glibc >=2.17,<3.0.a0 + - brotli-bin 1.2.0 hb03c661_1 + - libbrotlidec 1.2.0 hb03c661_1 + - libbrotlienc 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 20103 + timestamp: 1764017231353 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + sha256: 64b137f30b83b1dd61db6c946ae7511657eead59fdf74e84ef0ded219605aa94 + md5: af39b9a8711d4a8d437b52c1d78eb6a1 + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlidec 1.2.0 hb03c661_1 + - libbrotlienc 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 21021 + timestamp: 1764017221344 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py312hdb49522_1.conda + sha256: 49df13a1bb5e388ca0e4e87022260f9501ed4192656d23dc9d9a1b4bf3787918 + md5: 64088dffd7413a2dd557ce837b4cbbdb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - libbrotlicommon 1.2.0 hb03c661_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 368300 + timestamp: 1764017300621 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-hd1e3526_2.conda + sha256: b4831ac06bb65561342cedf3d219cf9b096f20b8d62cda74f0177dffed79d4d5 + md5: 5948f4fead433c6e5c46444dbfb01162 + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 168501 + timestamp: 1761758949420 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 + md5: d2ffd7602c02f2b316fd921d39876885 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 260182 + timestamp: 1771350215188 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + sha256: cc9accf72fa028d31c2a038460787751127317dcfa991f8d1f1babf216bb454e + md5: 920bb03579f15389b9e512095ad995b7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 207882 + timestamp: 1765214722852 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-3.0.3-hc31b594_0.conda + sha256: f02a289837c31d43405915b6efbe64f925dfb23e4ca2949f604fa0ab8a9094cc + md5: 4393b048c1e819f5262c05ccffb47265 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - lz4-c >=1.10.0,<1.11.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 378858 + timestamp: 1778843534911 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda + sha256: 3bd6a391ad60e471de76c0e9db34986c4b5058587fbf2efa5a7f54645e28c2c7 + md5: 09262e66b19567aff4f592fb53b28760 + depends: + - __glibc >=2.17,<3.0.a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - freetype >=2.12.1,<3.0a0 + - icu >=75.1,<76.0a0 + - libexpat >=2.6.4,<3.0a0 + - libgcc >=13 + - libglib >=2.82.2,<3.0a0 + - libpng >=1.6.47,<1.7.0a0 + - libstdcxx >=13 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.44.2,<1.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.5,<2.0a0 + - xorg-libx11 >=1.8.11,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: LGPL-2.1-only or MPL-1.1 + purls: [] + size: 978114 + timestamp: 1741554591855 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + sha256: 06525fa0c4e4f56e771a3b986d0fdf0f0fc5a3270830ee47e127a5105bde1b9a + md5: bb6c4808bfa69d6f7f6b07e5846ced37 + depends: + - __glibc >=2.17,<3.0.a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.1,<79.0a0 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libglib >=2.86.3,<3.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.46.4,<1.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: LGPL-2.1-only or MPL-1.1 + purls: [] + size: 989514 + timestamp: 1766415934926 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda + sha256: 7dafe8173d5f94e46cf9cd597cc8ff476a8357fbbd4433a8b5697b2864845d9c + md5: 648ee28dcd4e07a1940a17da62eccd40 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 295716 + timestamp: 1761202958833 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.6.3-ha0b56bc_0.conda + sha256: 31beae4b063f5e39ade020d3ee1ade0fdc8d5556fafac4d004ebe74ffbad44dd + md5: 0fb449e4da07934a40db021c84773ed0 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.14.1,<9.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: LicenseRef-fitsio + purls: [] + size: 759758 + timestamp: 1759288114492 +- conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.3-hecca717_0.conda + sha256: 53504e965499b4845ca3dc63d5905d5a1e686fcb9ab17e83c018efa479e787d0 + md5: 937ca49a245fcf2b88d51b6b52959426 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 161768 + timestamp: 1772712510770 +- conda: https://conda.anaconda.org/conda-forge/linux-64/chealpix-3.31.0-h001b3b8_9.conda + sha256: 6510379f373f9838b66d6b178715aa2b3deaa38cee465ee83dfe1b3e76ec96a7 + md5: f343aa0bf5d5cb7ceac6229c8d4427ca + depends: + - __glibc >=2.17,<3.0.a0 + - cfitsio >=4.6.3,<4.6.4.0a0 + - libgcc >=14 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 40577 + timestamp: 1764670922898 +- conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda + sha256: 62447faf7e8eb691e407688c0b4b7c230de40d5ecf95bf301111b4d05c5be473 + md5: 43c2bc96af3ae5ed9e8a10ded942aa50 + depends: + - numpy >=1.25 + - python + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/contourpy?source=hash-mapping + size: 320386 + timestamp: 1769155979897 +- conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.14.0-py312h8a5da7c_0.conda + sha256: 6ed9b689e92c5e202d834d5a4eeba990ecbfda104ef40ac455f3d006d439a926 + md5: c78de13127e71cb1e581f473ac76f360 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tomli + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/coverage?source=hash-mapping + size: 390409 + timestamp: 1778444934285 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-48.0.0-py312ha4b625e_0.conda + sha256: 16d3d1e8df34a36430a28f423380fbd93abe5670ca7b52e9f4a64c091fd3ddd9 + md5: c5a8e173200adf567dc2818d8bf1325f + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=2.0 + - libgcc >=14 + - openssl >=3.5.6,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1912222 + timestamp: 1777966300032 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + sha256: 7684da83306bb69686c0506fb09aa7074e1a55ade50c3a879e4e5df6eebb1009 + md5: af491aae930edc096b58466c51c4126c + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=13 + - libntlm >=1.8,<2.0a0 + - libstdcxx >=13 + - libxcrypt >=4.4.36 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause-Attribution + license_family: BSD + purls: [] + size: 210103 + timestamp: 1771943128249 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda + sha256: ee09ad7610c12c7008262d713416d0b58bf365bc38584dce48950025850bdf3f + md5: cae723309a49399d2949362f4ab5c9e4 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libntlm >=1.8,<2.0a0 + - libstdcxx >=13 + - libxcrypt >=4.4.36 + - openssl >=3.5.0,<4.0a0 + license: BSD-3-Clause-Attribution + license_family: BSD + purls: [] + size: 209774 + timestamp: 1750239039316 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.1.0-py312h4c3975b_2.conda + sha256: 75b3d3c9497cded41e029b7a0ce4cc157334bbc864d6701221b59bb76af4396d + md5: 29fd0bdf551881ab3d2801f7deaba528 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - toolz >=0.10.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cytoolz?source=hash-mapping + size: 623770 + timestamp: 1771855837505 +- conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda + sha256: 22053a5842ca8ee1cf8e1a817138cdb5e647eb2c46979f84153f6ad7bde73020 + md5: 418c6ca5929a611cbd69204907a83995 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 760229 + timestamp: 1685695754230 +- conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + sha256: 8bb557af1b2b7983cf56292336a1a1853f26555d9c6cecf1e5b2b96838c9da87 + md5: ce96f2f470d39bd96ce03945af92e280 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - libglib >=2.86.2,<3.0a0 + - libexpat >=2.7.3,<3.0a0 + license: AFL-2.1 OR GPL-2.0-or-later + purls: [] + size: 447649 + timestamp: 1764536047944 +- conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.3.1-h5888daf_0.conda + sha256: 1bcc132fbcc13f9ad69da7aa87f60ea41de7ed4d09f3a00ff6e0e70e1c690bc2 + md5: bfd56492d8346d669010eccafe0ba058 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 69544 + timestamp: 1739569648873 +- conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda + sha256: 40cdd1b048444d3235069d75f9c8e1f286db567f6278a93b4f024e5642cfaecc + md5: dbe3ec0f120af456b3477743ffd99b74 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 71809 + timestamp: 1765193127016 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.11-nompi_h3b011a4_100.conda + sha256: 6fd5d681fba20adaca771f138ac52dbf0a52e0dc2ac31b9ce7406068d102a9a7 + md5: 0717f4eb3d18259358a1fa77edb18917 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - libstdcxx >=14 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 2195198 + timestamp: 1776781721834 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.0-h27c8c51_0.conda + sha256: e798086d8a65d55dc4c51f5746705639c9a5f2eeb0b8fc50e6152cfc0d69a4e8 + md5: 06965b2f9854d0b15e0443ee81fe83dc + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libuuid >=2.42.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 280882 + timestamp: 1779421631622 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.63.0-py312h8a5da7c_0.conda + sha256: d235ae7075642044ceb3d922ef2a710a82665755ac9bbb7e8dad7daa72bc6d87 + md5: 294fb524171e2a2748cb7fe708aba826 + depends: + - __glibc >=2.17,<3.0.a0 + - brotli + - libgcc >=14 + - munkres + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - unicodedata2 >=15.1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/fonttools?source=hash-mapping + size: 3007892 + timestamp: 1778770568019 +- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + sha256: c934c385889c7836f034039b43b05ccfa98f53c900db03d8411189892ced090b + md5: 8462b5322567212beeb025f3519fb3e2 + depends: + - libfreetype 2.14.3 ha770c72_0 + - libfreetype6 2.14.3 h73754d4_0 + license: GPL-2.0-only OR FTL + purls: [] + size: 173839 + timestamp: 1774298173462 +- conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h480dda7_0.conda + sha256: 08896dcd94e14a83f247e91748444e610f344ab42d80cbf2b6082b481c3f8f4b + md5: 4d4efd0645cd556fab54617c4ad477ef + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: LGPL-2.1-only + purls: [] + size: 1974942 + timestamp: 1761593471198 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda + sha256: 6c33bf0c4d8f418546ba9c250db4e4221040936aef8956353bc764d4877bc39a + md5: d411fc29e338efb48c5fd4576d71d881 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 119654 + timestamp: 1726600001928 +- conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda + sha256: aac402a8298f0c0cc528664249170372ef6b37ac39fdc92b40601a6aed1e32ff + md5: 3bf7b9fd5a7136126e0234db4b87c8b6 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 77248 + timestamp: 1712692454246 +- conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda + sha256: dc824dc1d0aa358e28da2ecbbb9f03d932d976c8dca11214aa1dcdfcbd054ba2 + md5: ff862eebdfeb2fd048ae9dc92510baca + depends: + - gflags >=2.2.2,<2.3.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 143452 + timestamp: 1718284177264 +- conda: https://conda.anaconda.org/conda-forge/linux-64/google-crc32c-1.8.0-py312h03f33d3_1.conda + sha256: 3f962b2cbdc2aac3089a5c708477657266c0a665f0eed09981a34d1ab6793065 + md5: 68f704ea294dcec9e09edd9c3d233846 + depends: + - __glibc >=2.17,<3.0.a0 + - libcrc32c >=1.1.2,<1.2.0a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/google-crc32c?source=hash-mapping + size: 24900 + timestamp: 1768549198202 +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda + sha256: 25ba37da5c39697a77fce2c9a15e48cf0a84f1464ad2aafbe53d8357a9f6cc8c + md5: 2cd94587f3a401ae05e03a6caf09539d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 99596 + timestamp: 1755102025473 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 + sha256: 132a918b676dd1f533d7c6f95e567abf7081a6ea3251c3280de35ef600e0da87 + md5: fec079ba39c9cca093bf4c00001825de + depends: + - libblas >=3.8.0,<4.0a0 + - libcblas >=3.8.0,<4.0a0 + - libgcc-ng >=9.3.0 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 3376423 + timestamp: 1626369596591 +- conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha4f8f14_102.conda + sha256: de9ec9b1b01b90f2da2d896a5835a2fd8049859aff0c6331ca4594327ec79a8b + md5: b270340809d19ae40ff9913f277b803a + depends: + - __glibc >=2.17,<3.0.a0 + - cached-property + - hdf5 >=1.14.6,<1.14.7.0a0 + - libgcc >=14 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/h5py?source=hash-mapping + size: 1335314 + timestamp: 1775581269364 +- conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha829cd9_102.conda + sha256: 578ab0db104435ac003061e103789299720fc49b8b3e8401dabd5130a1ef8663 + md5: c6e5cf708b01707fe4cd5e4dc56cf4cc + depends: + - __glibc >=2.17,<3.0.a0 + - cached-property + - hdf5 >=2.1.0,<3.0a0 + - libgcc >=14 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/h5py?source=hash-mapping + size: 1339689 + timestamp: 1775581278758 +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.2.0-h15599e2_0.conda + sha256: 6bd8b22beb7d40562b2889dc68232c589ff0d11a5ad3addd41a8570d11f039d9 + md5: b8690f53007e9b5ee2c2178dd4ac778c + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=75.1,<76.0a0 + - libexpat >=2.7.1,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libglib >=2.86.1,<3.0a0 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 2411408 + timestamp: 1762372726141 +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.0-h6083320_0.conda + sha256: 232c95b56d16d33d8256026a3b1ad34f7f9a75c179d388854be0fd624ddba9e3 + md5: e194f6a2f498f0c7b1e6498bd0b12645 + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=78.3,<79.0a0 + - libexpat >=2.7.5,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 2333599 + timestamp: 1776778392713 +- conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_106.conda + sha256: 1fc50ce3b86710fba3ec9c5714f1612b5ffa4230d70bfe43e2a1436eacba1621 + md5: c223ee1429ba538f3e48cfb4a0b97357 + depends: + - __glibc >=2.17,<3.0.a0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.18.0,<9.0a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3708864 + timestamp: 1770390337946 +- conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_h87a9417_105.conda + sha256: beb8a2fb18924ca7b5b82cfb50f008f882f577daef2c00ed88022abea35fec76 + md5: 0d0595612fa229dddb5fc565c260a11f + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-auth >=0.10.1,<0.10.2.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-http >=0.10.13,<0.10.14.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-s3 >=0.12.2,<0.12.3.0a0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.20.0,<9.0a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4713397 + timestamp: 1777861887131 +- conda: https://conda.anaconda.org/conda-forge/linux-64/healpy-1.19.0-py312hb99e9eb_2.conda + sha256: f65c5c4a0d81feec9fd6676b1edfacff3200106d8113b091e2b773ea251df8c9 + md5: efbe39dbdb4991feb3a20cf927566880 + depends: + - __glibc >=2.17,<3.0.a0 + - astropy-base + - cfitsio >=4.6.3,<4.6.4.0a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + - matplotlib-base + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - scipy + license: GPL-2.0-only + license_family: GPL + purls: + - pkg:pypi/healpy?source=hash-mapping + size: 2166869 + timestamp: 1774834007399 +- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-24.12.4-py312h7900ff3_0.conda + sha256: a75dd3e93e5c9d6e097392adfc0849f4e7639b01a5f19aa88a026dd8d53ee02e + md5: 92495faf88b9faf255b9355229216b85 + depends: + - htcondor-classads 24.12.4 hf1419ba_0 + - htcondor-cli 24.12.4 py312h7900ff3_0 + - htcondor-utils 24.12.4 h4a68bad_0 + - libcondor_utils 24.12.4 he8e5dd1_0 + - python >=3.12,<3.13.0a0 + - python-htcondor 24.12.4 py312h1e35698_0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 23452 + timestamp: 1759416970099 +- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-25.10.1-py312h7900ff3_0.conda + sha256: a70ffeffdef4e12da6e703da1de9802f3f45421937a604b54b70f39f81535689 + md5: b658441442ab6c35d45656f87e78e573 + depends: + - htcondor-classads 25.10.1 h793e66c_0 + - htcondor-cli 25.10.1 py312h7900ff3_0 + - htcondor-utils 25.10.1 h8d23d0f_0 + - libcondor_utils 25.10.1 h4effbbe_0 + - python >=3.12,<3.13.0a0 + - python-htcondor 25.10.1 py312h40fa4ac_0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 22403 + timestamp: 1778792535321 +- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-classads-24.12.4-hf1419ba_0.conda + sha256: e1dfb61b1b8252ea5451601e9088e0080bd8e2a41aeaccf3b04c6e76cce512a0 + md5: 0771e88823ac06decd5b3e3d762202ac + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - pcre2 >=10.46,<10.47.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 11890389 + timestamp: 1759415794736 +- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-classads-25.10.1-h793e66c_0.conda + sha256: bbbb0f4c72f530e89c12cf85d75f1d05613e308630b7e0608f2aa4bb841e09bf + md5: 3b1b74e1a556ae6d49bfc9a275ff2b15 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - pcre2 >=10.47,<10.48.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 11957963 + timestamp: 1778792191542 +- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-cli-24.12.4-py312h7900ff3_0.conda + sha256: 918add18c5a956ede11105bf703f82db6154593145a1114c6dc2656844bb1c93 + md5: d3ca4377b069c9e1dd15276595ff2ade + depends: + - python >=3.12,<3.13.0a0 + - python-htcondor 24.12.4 py312h1e35698_0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/htcondor-cli?source=hash-mapping + size: 153921 + timestamp: 1759416911673 +- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-cli-25.10.1-py312h7900ff3_0.conda + sha256: c34a3db8f8588d18b61b7ae694149c6be11068f4c40d8ebce9047402a9d72d48 + md5: abbe0d39442da1975ee7be3849745f1b + depends: + - python >=3.12,<3.13.0a0 + - python-htcondor 25.10.1 py312h40fa4ac_0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/htcondor-cli?source=hash-mapping + size: 174899 + timestamp: 1778792510774 +- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-utils-24.12.4-h4a68bad_0.conda + sha256: 1f9d644542720037a81bc5b5a31d49b274f67415e80270cdcc8b1975dce2756f + md5: 9cbb6b4b95410165adb24090d739bd67 + depends: + - __glibc >=2.17,<3.0.a0 + - htcondor-classads 24.12.4 hf1419ba_0 + - libcondor_utils 24.12.4 he8e5dd1_0 + - libcurl >=8.14.1,<9.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libuuid >=2.41.2,<3.0a0 + - openssl >=3.5.4,<4.0a0 + - scitokens-cpp >=1.1.3,<2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 25774213 + timestamp: 1759415888312 +- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-utils-25.10.1-h8d23d0f_0.conda + sha256: 0fe2a1dcd64b91c493d270a33a600b117cf5d1d9a8d1d1c4048197463fb681a2 + md5: 2ed89ef0c97aea7404330a4f2f986ad1 + depends: + - __glibc >=2.17,<3.0.a0 + - htcondor-classads 25.10.1 h793e66c_0 + - libcondor_utils 25.10.1 h4effbbe_0 + - libcurl >=8.20.0,<9.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libuuid >=2.42,<3.0a0 + - openssl >=3.5.6,<4.0a0 + - scitokens-cpp >=1.4.0,<2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 27667256 + timestamp: 1778792257390 +- conda: https://conda.anaconda.org/conda-forge/linux-64/htgettoken-2.6-py312h7900ff3_0.conda + sha256: ed166a6c3b811acfd2269a218da9784e718975e6fe48b2fd9411d682c50510ac + md5: d341279ba84525b9ac1ea09e28c9022c + depends: + - jq + - paramiko + - python >=3.12,<3.13.0a0 + - python-gssapi + - python_abi 3.12.* *_cp312 + - urllib3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/htgettoken?source=hash-mapping + size: 52468 + timestamp: 1768653480844 +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12129203 + timestamp: 1720853576813 +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a + md5: c80d8a3b84358cb967fa81e7075fbc8a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 12723451 + timestamp: 1773822285671 +- conda: https://conda.anaconda.org/conda-forge/linux-64/igwn-ligolw-2.1.1-py312h53c857e_1.conda + sha256: c2fbe2a1ed34588dcf251ae4a2d8a74a589ae11ef5816e09e25a2a34f6f4c57c + md5: 441adf613cc02135af099f76402829b3 + depends: + - igwn-segments + - numpy + - python + - python-dateutil + - pyyaml + - tqdm + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/igwn-ligolw?source=hash-mapping + size: 2420527 + timestamp: 1771054285142 +- conda: https://conda.anaconda.org/conda-forge/linux-64/igwn-segments-2.1.1-py312h53c857e_2.conda + sha256: 0bb2fa6032dd90857774bcfab883e3384ad2aaf5ddc381514ea795355b937fbd + md5: d859fd276966f13a9b95397256ea45c0 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/igwn-segments?source=hash-mapping + size: 95108 + timestamp: 1770797826962 +- conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2026.5.10-py312he34094b_0.conda + sha256: 413b83783b25864c46a1decd18f214505a439784ed7d38fc14832bc6c854e536 + md5: c20aa00cb836f0d13ea810d36c41fec9 + depends: + - __glibc >=2.17,<3.0.a0 + - blosc >=1.21.6,<2.0a0 + - brunsli >=0.1,<1.0a0 + - bzip2 >=1.0.8,<2.0a0 + - c-blosc2 >=3.0.2,<3.1.0a0 + - charls >=2.4.3,<2.5.0a0 + - giflib >=5.2.2,<5.3.0a0 + - jxrlib >=1.1,<1.2.0a0 + - lcms2 >=2.19.1,<3.0a0 + - lerc >=4.1.0,<5.0a0 + - libaec >=1.1.5,<2.0a0 + - libavif16 >=1.4.1,<2.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libgcc >=14 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libjxl >=0.11,<1.0a0 + - liblzma >=5.8.3,<6.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - libzopfli >=1.0.3,<1.1.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - numpy >=1.23,<3 + - openjpeg >=2.5.4,<3.0a0 + - openjph >=0.27.2,<0.28.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - snappy >=1.2.2,<1.3.0a0 + - zfp >=1.0.1,<2.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/imagecodecs?source=hash-mapping + size: 2288211 + timestamp: 1778501112233 +- conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.8.1-h73b1eb8_0.conda + sha256: ab26cb11ad0d10f5c6637d925b044c74a3eacb5825686d3720313b3cb6d40cef + md5: 2714e43bfc035f7ef26796632aa1b523 + depends: + - oniguruma 6.9.* + - libgcc >=13 + - __glibc >=2.17,<3.0.a0 + - oniguruma >=6.9.10,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 313184 + timestamp: 1751447310552 +- conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda + sha256: 2057ca87b313bde5b74b93b0e696f8faab69acd4cb0edebb78469f3f388040c0 + md5: 5aeabe88534ea4169d4c49998f293d6c + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 239104 + timestamp: 1703333860145 +- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + sha256: 0960d06048a7185d3542d850986d807c6e37ca2e644342dd0c72feefcf26c2a4 + md5: b38117a3c920364aff79f870c984b4a3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-or-later + purls: [] + size: 134088 + timestamp: 1754905959823 +- conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py312h0a2e395_0.conda + sha256: eec7654c2d68f06590862c6e845cc70987b6d6559222b6f0e619dea4268f5dd5 + md5: cd74a9525dc74bbbf93cf8aa2fa9eb5b + depends: + - python + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/kiwisolver?source=hash-mapping + size: 77120 + timestamp: 1773067050308 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 + md5: 3f43953b7d3fb3aaa1d0d0723d91e368 + depends: + - keyutils >=1.6.1,<2.0a0 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1370023 + timestamp: 1719463201255 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + sha256: 3e307628ca3527448dd1cb14ad7bb9d04d1d28c7d4c5f97ba196ae984571dd25 + md5: fb53fb07ce46a575c5d004bbc96032c2 + depends: + - __glibc >=2.17,<3.0.a0 + - keyutils >=1.6.3,<2.0a0 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1386730 + timestamp: 1769769569681 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lal-7.7.0-fftw_py312h3c92f15_101.conda + sha256: d1a2e42d18ffac5fff9e73659ea20bd48cebad3fc2aef8fea6e4aeb6283e4378 + md5: b8c7d01aa8c26054751c5d0c18572ef9 + depends: + - __glibc >=2.17,<3.0.a0 + - fftw >=3.3.10,<4.0a0 + - igwn-ligolw + - igwn-segments + - libgcc >=14 + - liblal 7.7.0 fftw_h0eb8034_101 + - numpy + - python >=3.12,<3.13.0a0 + - python-lal 7.7.0 fftw_py312h26d0d96_101 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 85597 + timestamp: 1755600484293 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lal-7.7.0-fftw_py312he4eb8fe_104.conda + sha256: ed81cf0e25934a068526a536854db20e03c46b9517f56ab11cc65799aeaf550d + md5: 38787938a5ee46f0a69070fe5578775e + depends: + - __glibc >=2.17,<3.0.a0 + - fftw >=3.3.10,<4.0a0 + - igwn-segments + - libgcc >=14 + - liblal 7.7.0 fftw_h9f6c97b_104 + - numpy + - python >=3.12,<3.13.0a0 + - python-lal 7.7.0 fftw_py312hb15a3d9_104 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 86533 + timestamp: 1774637334848 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalapps-10.1.0-py312h8a05548_2.conda + sha256: 3e9b4073b414435c7f9c9be210a1c3a18d9f1e5b5c608ce7783acb5a0e9f531f + md5: 8784862eb56c6a7a40a5ff540db36f0f + depends: + - cfitsio + - gsl + - h5py + - igwn-ligolw >=2.1.0 + - igwn-segments + - lal >=7.7.0 + - lalburst >=2.0.0 + - lalframe >=3.0.0 + - lalinference >=4.1.0 + - lalinspiral >=5.0.0 + - lalmetaio >=4.0.0 + - lalpulsar >=7.1.0 + - lalsimulation >=6.2.0 + - libframel >=8.39.2 + - libmetaio >=8.2.0 + - numpy + - pillow + - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - liblalinspiral >=5.0.3,<6.0a0 + - liblalmetaio >=4.0.6,<5.0a0 + - gsl >=2.7,<2.8.0a0 + - liblalpulsar >=7.1.1,<8.0a0 + - liblalburst >=2.0.7,<3.0a0 + - liblalsimulation >=6.2.0,<7.0a0 + - libmetaio >=8.5.1,<9.0a0 + - liblalinference >=4.1.9,<5.0a0 + - liblal >=7.7.0,<8.0a0 + - libframel >=8.41.3,<9.0a0 + - liblalframe >=3.0.7,<4.0a0 + - cfitsio >=4.6.3,<4.6.4.0a0 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 2480748 + timestamp: 1771238025460 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalburst-2.0.7-py312h4c3975b_2.conda + sha256: fa7ce50107211ff152b3923b184d0701d5216ee3d6b85b6d07e37d1cef672c5f + md5: 7722fd6fd8826e699511eb4a88c7ca67 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalburst 2.0.7 h43c0734_2 + - pillow + - python >=3.12,<3.13.0a0 + - python-lalburst 2.0.7 py312h71fd7f1_2 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 56539 + timestamp: 1771409840763 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalframe-3.0.7-py312h4c3975b_2.conda + sha256: 4fd8dfcfa6e5800cf4c0cc8cd3e4b68f3b9395f4db3de4efe88f3a7dd2947482 + md5: 98e9577d17a9b8bd79eb9c87b0eeb598 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - liblal >=7.7.0,<8.0a0 + - liblalframe 3.0.7 hbf9efdd_2 + - python >=3.12,<3.13.0a0 + - python-lalframe 3.0.7 py312h4f23490_2 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 361796 + timestamp: 1774541561700 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-4.1.9-nompi_py312h1d0e7ed_100.conda + sha256: eaa69fa956bd30d79857adeb8b9c45538e3429af38e5ca2de05313a9aab8e1d3 + md5: 818ca24a9ade3c4ab853b2501deea0f6 + depends: + - __glibc >=2.17,<3.0.a0 + - astropy-base >=1.1.1 + - h5py + - icu >=75.1,<76.0a0 + - igwn-ligolw >=2.1.0 + - libgcc >=13 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalinference 4.1.9 h3773ae6_0 + - ligo-gracedb + - lscsoft-glue >=1.54.1 + - matplotlib-base >=1.2.0 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python-lalinference 4.1.9 py312hc0a28a1_0 + - python-lalsimulation >=6.2.0 + - python_abi 3.12.* *_cp312 + - scipy >=0.9.0 + - six + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 141029 + timestamp: 1748278287353 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-4.1.9-nompi_py312h894bbbb_102.conda + sha256: f280a6d65b8a5e4cb3e3457c45defb8fe2073fb42afb67da338503805686823f + md5: 73f92c14d61863bfe8cc3c8288b05d9a + depends: + - __glibc >=2.17,<3.0.a0 + - astropy-base >=1.1.1 + - h5py + - icu >=78.3,<79.0a0 + - igwn-ligolw >=2.1.0 + - libgcc >=14 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalinference 4.1.9 h43c0734_2 + - ligo-gracedb + - lscsoft-glue >=1.54.1 + - matplotlib-base >=1.2.0 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python-lalinference 4.1.9 py312h4f23490_2 + - python-lalsimulation >=6.2.0 + - python_abi 3.12.* *_cp312 + - scipy >=0.9.0 + - six + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 141431 + timestamp: 1774964216149 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-data-4.1.9-ha770c72_0.conda + sha256: 4ffba18f2f8062df96318e74a71e28cf03a47b4f3aa9557e322a91932b8a9780 + md5: abd584c795b4d779e4a57428b8f1d4ed + constrains: + - liblalinference >=3.0.3 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 32373 + timestamp: 1748277779253 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-data-4.1.9-ha770c72_2.conda + sha256: 6062e5ec27fb6fa4daecb7b9ca65315fd3a992e5c8f4e579159fbf0becafe734 + md5: 94f0af952fdad29716c49d37ac379907 + constrains: + - liblalinference >=3.0.3 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 32527 + timestamp: 1774963649603 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalinspiral-5.0.3-py312h4c3975b_3.conda + sha256: 4835f1c546202d6ed638db8314a977773f21179d4120d38f5f7de7a9b07bde27 + md5: 44759365a85aa59719a68db1d625e465 + depends: + - __glibc >=2.17,<3.0.a0 + - igwn-segments + - libgcc >=14 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalinspiral 5.0.3 h43c0734_3 + - python >=3.12,<3.13.0a0 + - python-lalinspiral 5.0.3 py312h4f23490_3 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 28812 + timestamp: 1774544057987 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalmetaio-4.0.6-py312h4c3975b_2.conda + sha256: 60144d7ee6a958da4c70edd07bec8729418cee65b35116dc9490948cff898295 + md5: 14f27dcd7721ce972e2037e78054ba83 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalmetaio 4.0.6 hb03c661_2 + - python >=3.12,<3.13.0a0 + - python-lalmetaio 4.0.6 py312h4f23490_2 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 23710 + timestamp: 1774543136676 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-7.1.1-py312h14108ff_2.conda + sha256: e015062f1b476586f72eb6619a73e63ac933212c4fa3886f957817c6d278cd62 + md5: 745221491004b1e21d38cc58058a4ad1 + depends: + - __glibc >=2.17,<3.0.a0 + - astropy-base + - cfitsio >=4.6.3,<4.6.4.0a0 + - fftw >=3.3.10,<4.0a0 + - gsl >=2.7,<2.8.0a0 + - jplephem + - lalinference >=4.1.0 + - libgcc >=14 + - liblal >=7.6.0 + - liblal >=7.7.0,<8.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalinference >=4.1.0 + - liblalinference >=4.1.9,<5.0a0 + - liblalpulsar 7.1.1 h3c7535d_2 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.2.0,<7.0a0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.6.0 + - python-lalframe >=3.0.0 + - python-lalinference >=4.1.0 + - python-lalpulsar 7.1.1 py312h4f23490_2 + - python-lalsimulation >=6.1.0 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 1731119 + timestamp: 1774627738870 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-data-7.1.1-ha770c72_2.conda + sha256: c387cacc7b6aedaacd4699b4f1c4840f3090afee55c99312e5bd854d940163bd + md5: c76e527f18662948274bf0650213783e + constrains: + - liblalpulsar >=4.0.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 90041050 + timestamp: 1774625764895 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-6.2.0-py312hd1ec2bb_3.conda + sha256: 1a7f985159c6801f4baeaedba6656ab0530912b28841df12799cdc6d58415f15 + md5: 2707df1001cdec205f4e88fbf02f3561 + depends: + - __glibc >=2.17,<3.0.a0 + - gsl >=2.7,<2.8.0a0 + - libgcc >=14 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalsimulation 6.2.0 py312hd1ec2bb_3 + - mpmath >=1.0.0 + - python >=3.12,<3.13.0a0 + - python-lalsimulation 6.2.0 py312h71fd7f1_3 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 190327 + timestamp: 1774541332932 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-data-6.2.0-ha770c72_3.conda + sha256: fce82bb619c81f8ebcc5e8cc5c219e154d1c2d20cae861c00a0e9904c281deec + md5: 29aade78133b079c3b73ad042f280676 + constrains: + - liblalsimulation >=3.1.2 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 3642694 + timestamp: 1774541235570 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_0.conda + sha256: eb89c6c39f2f6a93db55723dbb2f6bba8c8e63e6312bf1abf13e6e9ff45849c8 + md5: f92f984b558e6e6204014b16d212b271 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 251086 + timestamp: 1778079286384 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + sha256: 3d584956604909ff5df353767f3a2a2f60e07d070b328d109f30ac40cd62df6c + md5: 18335a698559cdbcd86150a48bf54ba6 + depends: + - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - binutils_impl_linux-64 2.45.1 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 728002 + timestamp: 1774197446916 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ldas-tools-al-2.7.0-hd827ec0_3.conda + sha256: cb41035f9c7bfa456409c06b7f093105cf5c8ccbb1876937f5767c2ad7ce83bb + md5: 754b9e851afaea050c27ee93cfb2efaa + depends: + - __glibc >=2.17,<3.0.a0 + - libboost >=1.88.0,<1.89.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 2493268 + timestamp: 1764932544027 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ldas-tools-framecpp-2.9.3-he85ded8_4.conda + sha256: abbee4227ac52d8d86ee48ac6b72a557087c4f4c3db744e792320d3db100e567 + md5: 41b300c2be384755cc193016f4eadb0c + depends: + - __glibc >=2.17,<3.0.a0 + - ldas-tools-al >=2.6.7 + - ldas-tools-al >=2.7.0,<2.8.0a0 + - libboost >=1.88.0,<1.89.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.2,<4.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 37619803 + timestamp: 1756907139608 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + sha256: f84cb54782f7e9cea95e810ea8fef186e0652d0fa73d3009914fa2c1262594e1 + md5: a752488c68f2e7c456bcbd8f16eec275 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 261513 + timestamp: 1773113328888 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda + sha256: a7a4481a4d217a3eadea0ec489826a69070fcc3153f00443aa491ed21527d239 + md5: 6f7b4302263347698fd24565fbf11310 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - libabseil-static =20260107.1=cxx17* + - abseil-cpp =20260107.1 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1384817 + timestamp: 1770863194876 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + sha256: 822e4ae421a7e9c04e841323526321185f6659222325e1a9aedec811c686e688 + md5: 86f7414544ae606282352fa1e116b41f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 36544 + timestamp: 1769221884824 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-23.0.1-hf605819_4_cpu.conda + build_number: 4 + sha256: ab98e6f69161ea682c57d081c756c2ebf32377af00f8935470146f31a7ea2671 + md5: 67a646e10ae89bca5ea51784160f6e2f + depends: + - __glibc >=2.17,<3.0.a0 + - aws-crt-cpp >=0.37.3,<0.37.4.0a0 + - aws-sdk-cpp >=1.11.747,<1.11.748.0a0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - azure-identity-cpp >=1.13.3,<1.13.4.0a0 + - azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0 + - azure-storage-files-datalake-cpp >=12.14.0,<12.14.1.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.7.1,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libgcc >=14 + - libgoogle-cloud >=2.39.0,<2.40.0a0 + - libgoogle-cloud-storage >=2.39.0,<2.40.0a0 + - libopentelemetry-cpp >=1.21.0,<1.22.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - orc >=2.3.0,<2.3.1.0a0 + - snappy >=1.2.2,<1.3.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - arrow-cpp <0.0a0 + - apache-arrow-proc =*=cpu + - parquet-cpp <0.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 6476655 + timestamp: 1773271630169 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-24.0.0-h033f57b_2_cpu.conda + build_number: 2 + sha256: ec054deb459dffd5964a300a2c2b11ea0b30733405cae6879d9276cfc7e43260 + md5: ee6a5c5e61bc7272118a1f15f9a3e823 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-crt-cpp >=0.38.3,<0.38.4.0a0 + - aws-sdk-cpp >=1.11.747,<1.11.748.0a0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - azure-identity-cpp >=1.13.3,<1.13.4.0a0 + - azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0 + - azure-storage-files-datalake-cpp >=12.14.0,<12.14.1.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.7.1,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libgcc >=14 + - libgoogle-cloud >=3.5.0,<3.6.0a0 + - libgoogle-cloud-storage >=3.5.0,<3.6.0a0 + - libopentelemetry-cpp >=1.26.0,<1.27.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - orc >=2.3.0,<2.3.1.0a0 + - snappy >=1.2.2,<1.3.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - apache-arrow-proc =*=cpu + - arrow-cpp <0.0a0 + - parquet-cpp <0.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 6497921 + timestamp: 1779475517197 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-23.0.1-h635bf11_4_cpu.conda + build_number: 4 + sha256: 7839fbede8048f23e4ff2af07a9a434b522b5cc80e075e07c276e289d96fdc87 + md5: 710409d5a7908333633a845f9f665488 + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 23.0.1 hf605819_4_cpu + - libarrow-compute 23.0.1 h53684a4_4_cpu + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 608862 + timestamp: 1773271881163 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-24.0.0-h635bf11_2_cpu.conda + build_number: 2 + sha256: 9f19abf335f64778a383b3b4e83eb3044deeb8817c4e3c56d7c44577130b6204 + md5: 87104635f538f60afc81b74ce70416a9 + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 24.0.0 h033f57b_2_cpu + - libarrow-compute 24.0.0 h53684a4_2_cpu + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 592078 + timestamp: 1779475696276 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-compute-23.0.1-h53684a4_4_cpu.conda + build_number: 4 + sha256: 189d3b7f7292f19f37320b016feacd8f3636cc7377c49653da56141b158691ad + md5: c1c5caac6cd765606e5f3285d8fc3a40 + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 23.0.1 hf605819_4_cpu + - libgcc >=14 + - libre2-11 >=2025.11.5 + - libstdcxx >=14 + - libutf8proc >=2.11.3,<2.12.0a0 + - re2 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 3004719 + timestamp: 1773271711321 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-compute-24.0.0-h53684a4_2_cpu.conda + build_number: 2 + sha256: 5dd22caa43bf3dee4fb2d4fcb6ad03b8a904ae78d75b519559789ba403798649 + md5: e2a5ca285941f75273a26c5fd64cc46e + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 24.0.0 h033f57b_2_cpu + - libgcc >=14 + - libre2-11 >=2025.11.5 + - libstdcxx >=14 + - libutf8proc >=2.11.3,<2.12.0a0 + - re2 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 2994826 + timestamp: 1779475580825 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-23.0.1-h635bf11_4_cpu.conda + build_number: 4 + sha256: 6b8416458e69697196fd03bbf6642855f32a1735d8bd92127b51634b68b88bf7 + md5: 9b42e3a38fa716174aeeefa36b3c0e24 + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 23.0.1 hf605819_4_cpu + - libarrow-acero 23.0.1 h635bf11_4_cpu + - libarrow-compute 23.0.1 h53684a4_4_cpu + - libgcc >=14 + - libparquet 23.0.1 h7376487_4_cpu + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 608094 + timestamp: 1773271988669 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-24.0.0-h635bf11_2_cpu.conda + build_number: 2 + sha256: 4d197fce6e34373dd8a2188cfa13927aa04ec4c0ed34be334c63128e9f0185c1 + md5: f6563a2292b54f8e0bca57178394f979 + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 24.0.0 h033f57b_2_cpu + - libarrow-acero 24.0.0 h635bf11_2_cpu + - libarrow-compute 24.0.0 h53684a4_2_cpu + - libgcc >=14 + - libparquet 24.0.0 h7376487_2_cpu + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 592667 + timestamp: 1779475776850 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-23.0.1-hb4dd7c2_4_cpu.conda + build_number: 4 + sha256: bbffc6cc6deafe3993e66d5a7ccfbe520855e7c2e3797e5c54fa3f11cdd46c25 + md5: 466afa302c7781270b75dc504165ddc6 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 23.0.1 hf605819_4_cpu + - libarrow-acero 23.0.1 h635bf11_4_cpu + - libarrow-dataset 23.0.1 h635bf11_4_cpu + - libgcc >=14 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 518669 + timestamp: 1773272024297 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-24.0.0-hb4dd7c2_2_cpu.conda + build_number: 2 + sha256: b01d502e1080ddd6645c15f3ecc1986baac2a684608bf6e9400720f5334044c0 + md5: c5e748d5406229f4c046dedd5ea31723 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 24.0.0 h033f57b_2_cpu + - libarrow-acero 24.0.0 h635bf11_2_cpu + - libarrow-dataset 24.0.0 h635bf11_2_cpu + - libgcc >=14 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 502082 + timestamp: 1779475803489 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.4.1-hcfa2d63_0.conda + sha256: e29d8ed0334305c6bafecb32f9a1967cfc0a081eac916e947a1f2f7c4bb41947 + md5: f79415aee8862b3af85ea55dea37e46b + depends: + - __glibc >=2.17,<3.0.a0 + - aom >=3.9.1,<3.10.0a0 + - dav1d >=1.2.1,<1.2.2.0a0 + - libgcc >=14 + - rav1e >=0.8.1,<0.9.0a0 + - svt-av1 >=4.0.1,<4.0.2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 148710 + timestamp: 1774042709303 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-7_h4a7cf45_openblas.conda + build_number: 7 + sha256: 081c850f99bc355821fac9c6e3727d40b3f8ce3beb50a5437cf03726b611ff39 + md5: 955b44e8b00b7f7ef4ce0130cef12394 + depends: + - libopenblas >=0.3.33,<0.3.34.0a0 + - libopenblas >=0.3.33,<1.0a0 + constrains: + - libcblas 3.11.0 7*_openblas + - blas 2.307 openblas + - liblapack 3.11.0 7*_openblas + - liblapacke 3.11.0 7*_openblas + - mkl <2027 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18716 + timestamp: 1778489854108 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libboost-1.88.0-hd24cca6_7.conda + sha256: dd489228e1916c7720c925248d0ba12803d1dc8b9898be0c51f4ab37bab6ffa5 + md5: d70e4dc6a847d437387d45462fe60cf9 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - icu >=78.1,<79.0a0 + - libgcc >=14 + - liblzma >=5.8.1,<6.0a0 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - boost-cpp <0.0a0 + license: BSL-1.0 + purls: [] + size: 3072984 + timestamp: 1766347479317 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libboost-1.88.0-hed09d94_6.conda + sha256: 40b334d77229fcceb51d911a153d7ab9ff4f6a6f90e938387bf29129ab956c58 + md5: 70675d70a76e1b5539b1f464fd5f02ba + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - icu >=75.1,<76.0a0 + - libgcc >=14 + - liblzma >=5.8.1,<6.0a0 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - boost-cpp <0.0a0 + license: BSL-1.0 + purls: [] + size: 2978265 + timestamp: 1763017293494 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libboost-python-1.88.0-py312hf890105_6.conda + sha256: 2892a87a3b29582d82aa1a949825adb436fe6454a12f502f1ee2cde5f8da6dee + md5: 595192338e11b3cf5041b4ca978142b9 + depends: + - __glibc >=2.17,<3.0.a0 + - libboost 1.88.0 hed09d94_6 + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - boost <0.0a0 + - py-boost <0.0a0 + license: BSL-1.0 + purls: [] + size: 130214 + timestamp: 1763017581996 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + sha256: 318f36bd49ca8ad85e6478bd8506c88d82454cc008c1ac1c6bf00a3c42fa610e + md5: 72c8fd1af66bd67bf580645b426513ed + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 79965 + timestamp: 1764017188531 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + sha256: 12fff21d38f98bc446d82baa890e01fd82e3b750378fedc720ff93522ffb752b + md5: 366b40a69f0ad6072561c1d09301c886 + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 34632 + timestamp: 1764017199083 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + sha256: a0c15c79997820bbd3fbc8ecf146f4fe0eca36cc60b62b63ac6cf78857f1dd0d + md5: 4ffbb341c8b616aa2494b6afb26a0c5f + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 298378 + timestamp: 1764017210931 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-7_h0358290_openblas.conda + build_number: 7 + sha256: 956ae0bb1ec8b0c3663d75b151aceb0521b54e513bf97f621a035f9c87037970 + md5: 0675639dc24cb0032f199e7ff68e4633 + depends: + - libblas 3.11.0 7_h4a7cf45_openblas + constrains: + - liblapacke 3.11.0 7*_openblas + - blas 2.307 openblas + - liblapack 3.11.0 7*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18675 + timestamp: 1778489861559 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_4.conda + sha256: aa61ed39af5944d05cd27672d2b520dbf2b3428575fbc7192acede709bed974a + md5: 80edae9c0a5feaf93fa2996c266d1ce7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libllvm21 >=21.1.8,<21.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 21066414 + timestamp: 1777010859192 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.6-default_h746c552_1.conda + sha256: 4f91ada190f6e78efd9179fd995c9c7fe2f4bb00aef977a164b1cba8d49973bb + md5: bf306e7b1c8c2c204b28138a08666bbd + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libllvm22 >=22.1.6,<22.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 12828360 + timestamp: 1779397396725 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcondor_utils-24.12.4-he8e5dd1_0.conda + sha256: 1adbf97f6ff94f80f3998e9399fc453c23a657b4e17943f55020bf54e21f10a1 + md5: 9a0a0ee03fd0e3363efa59a9880d5c88 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - htcondor-classads 24.12.4 hf1419ba_0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libuuid >=2.41.2,<3.0a0 + - munge + - openssl >=3.5.4,<4.0a0 + - pcre2 >=10.46,<10.47.0a0 + - scitokens-cpp >=0.5.0 + - scitokens-cpp >=1.1.3,<2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 28064884 + timestamp: 1759415826899 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcondor_utils-25.10.1-h4effbbe_0.conda + sha256: 8708faeae70ed3a6ad4bff2f3fddf5f8585737d18e27c2579a076a7d1e6e1ee2 + md5: ba3fdcc6b33ed8eab01f8f561e1a7005 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - htcondor-classads 25.10.1 h793e66c_0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libuuid >=2.42,<3.0a0 + - munge + - openssl >=3.5.6,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - scitokens-cpp >=0.5.0 + - scitokens-cpp >=1.4.0,<2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 29267283 + timestamp: 1778792212520 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 + sha256: fd1d153962764433fe6233f34a72cdeed5dcf8a883a85769e8295ce940b5b0c5 + md5: c965a5aa0d5c1c37ffc62dff36e28400 + depends: + - libgcc-ng >=9.4.0 + - libstdcxx-ng >=9.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 20440 + timestamp: 1633683576494 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda + sha256: 205c4f19550f3647832ec44e35e6d93c8c206782bdd620c1d7cf66237580ff9c + md5: 49c553b47ff679a6a1e9fc80b9c5a2d4 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 4518030 + timestamp: 1770902209173 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda + sha256: cb83980c57e311783ee831832eb2c20ecb41e7dee6e86e8b70b8cef0e43eab55 + md5: d4a250da4737ee127fb1fa6452a9002e + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 4523621 + timestamp: 1749905341688 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda + sha256: 5454709d9fb6e9c3dd6423bc284fa7835a7823bfa8323f6e8786cdd555101fab + md5: 0a5563efed19ca4461cf927419b6eb73 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=14 + - libnghttp2 >=1.67.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.4,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 462942 + timestamp: 1767821743793 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.20.0-hcf29cc6_0.conda + sha256: 75963a5dd913311f59a35dbd307592f4fa754c4808aff9c33edb430c415e38eb + md5: c3cc2864f82a944bc90a7beb4d3b0e88 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libnghttp2 >=1.68.1,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 468706 + timestamp: 1777461492876 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 + md5: 6c77a605a7a689d17d4819c0f8ac9a00 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 73490 + timestamp: 1761979956660 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.127-hb03c661_0.conda + sha256: 7d3187c11b7ae66c5595a8afd5a7ce352a490527fdf6614cab129bc7f2c16ba3 + md5: d8d16b9b32a3c5df7e5b3350e2cbe058 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpciaccess >=0.19,<0.20.0a0 + license: MIT + license_family: MIT + purls: [] + size: 311505 + timestamp: 1778975798004 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 + md5: c277e0a4d549b03ac1e9d6cbbe3d017b + depends: + - ncurses + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 134676 + timestamp: 1738479519902 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_3.conda + sha256: 9a25ea93e8272785405a21d30f84e620befb1d545f6dfaae18f06103b5df0443 + md5: 75e9f795be506c96dd43cb09c7c8d557 + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_3 + license: LicenseRef-libglvnd + purls: [] + size: 46500 + timestamp: 1779728188901 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_3.conda + sha256: e4b46919c9bb65930bce238bd2736110ed7b8c30e5cd5394e4e1edb48de54843 + md5: 5bc6d55503483aabe8a90c5e7f49a2a4 + depends: + - __glibc >=2.17,<3.0.a0 + - libegl 1.7.0 ha4b6fd6_3 + - libgl-devel 1.7.0 ha4b6fd6_3 + - xorg-libx11 + license: LicenseRef-libglvnd + purls: [] + size: 31718 + timestamp: 1779728222280 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 + md5: 172bf1cd1ff8629f2b1179945ed45055 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 112766 + timestamp: 1702146165126 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda + sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131 + md5: a1cfcc585f0c42bf8d5546bb1dfb668d + depends: + - libgcc-ng >=12 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 427426 + timestamp: 1685725977222 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_0.conda + sha256: 363018b25fdb5534c79783d912bd4b685a3547f4fc5996357ad548899b0ee8e7 + md5: 93764a5ca80616e9c10106cdaec92f74 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - expat 2.8.1.* + license: MIT + license_family: MIT + purls: [] + size: 77294 + timestamp: 1779278686680 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 + md5: a360c33a5abe61c07959e449fa1453eb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 58592 + timestamp: 1769456073053 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libframel-8.48.5-ha02e5fa_0.conda + sha256: eff718a2ec302a5168a023e8b10e538edc27dc81e75d5fed57680a34ecf565e6 + md5: 75cb7a46d09c6c48494b3239751b9d20 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 482048 + timestamp: 1767613080978 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + sha256: 38f014a7129e644636e46064ecd6b1945e729c2140e21d75bb476af39e692db2 + md5: e289f3d17880e44b633ba911d57a321b + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 8049 + timestamp: 1774298163029 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + sha256: 16f020f96da79db1863fcdd8f2b8f4f7d52f177dd4c58601e38e9182e91adf1d + md5: fb16b4b69e3f1dcfe79d80db8fd0c55d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 384575 + timestamp: 1774298162622 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + sha256: 8e0a3b5e41272e5678499b5dfc4cddb673f9e935de01eb0767ce857001229f46 + md5: 57736f29cc2b0ec0b6c2952d3f101b6a + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==15.2.0=*_19 + - libgomp 15.2.0 he0feb66_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1041084 + timestamp: 1778269013026 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + sha256: 9dcf54adfaa5e861123c2da4f2f0451a685464ea7e5a41ad91cf67b31d658d98 + md5: 331ee9b72b9dff570d56b1302c5ab37d + depends: + - libgcc 15.2.0 he0feb66_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27694 + timestamp: 1778269016987 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + sha256: 561a42758ef25b9ce308c4e2cf56daee4f06138385a17e29a492cd928e00be6f + md5: 42bf7eca1a951735fa06c0e3c0d5c8e6 + depends: + - libgfortran5 15.2.0 h68bc16d_19 + constrains: + - libgfortran-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27655 + timestamp: 1778269042954 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + sha256: 057978bb69fea29ed715a9b98adf71015c31baecc4aeb2bfc20d4fd5d83579d4 + md5: 85072b0ad177c966294f129b7c04a2d5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 2483673 + timestamp: 1778269025089 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda + sha256: ec353b3076ed8e357ed961d0e9ff6997491cade0e603de5bd18a2e301ac78ebd + md5: f25206d7322c0e9648e8b83694d143ab + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_3 + - libglx 1.7.0 ha4b6fd6_3 + license: LicenseRef-libglvnd + purls: [] + size: 133469 + timestamp: 1779728207669 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda + sha256: 41d7d864ad1f199bdb06ff6cc3931455c8af62f1d2071a08c6fa08affbcb678f + md5: 63e43d278ee5084813fe3c2edf4834ce + depends: + - __glibc >=2.17,<3.0.a0 + - libgl 1.7.0 ha4b6fd6_3 + - libglx-devel 1.7.0 ha4b6fd6_3 + license: LicenseRef-libglvnd + purls: [] + size: 115664 + timestamp: 1779728218325 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.2-h32235b2_0.conda + sha256: 918306d6ed211ab483e4e19368e5748b265d24e75c88a1c66a61f72b9fa30b29 + md5: 0cb0612bc9cb30c62baf41f9d600611b + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.46,<10.47.0a0 + constrains: + - glib 2.86.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 3974801 + timestamp: 1763672326986 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + sha256: 33eb5d5310a5c2c0a4707a0afa644801c2e08c8f70c45e1f62f354116dfe0970 + md5: 17d484ab9c8179c6a6e5b7dbb5065afc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libffi >=3.5.2,<3.6.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libzlib >=1.3.2,<2.0a0 + - libiconv >=1.18,<2.0a0 + constrains: + - glib >2.66 + license: LGPL-2.1-or-later + purls: [] + size: 4754097 + timestamp: 1778508800134 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda + sha256: e019ebe4e3f5cdf23e2f5e58ddf7ade27988c53820115b17b98f218ebcc87748 + md5: eb83f3f8cecc3e9bff9e250817fc69b6 + depends: + - __glibc >=2.17,<3.0.a0 + license: LicenseRef-libglvnd + purls: [] + size: 133586 + timestamp: 1779728183422 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda + sha256: 2f74713c9ca408ea84e88a30a9028153e7b553e8bb42e06139eac9a753c27da9 + md5: ec3c4350aa0261bf7f87b8ca15c8e80e + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_3 + - xorg-libx11 >=1.8.13,<2.0a0 + license: LicenseRef-libglvnd + purls: [] + size: 76586 + timestamp: 1779728199059 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_3.conda + sha256: a17ae2d4cb2de04a20882ae14ec3cc1958e868a4dec81e3d7eca30115ee50e94 + md5: 16b6330783ce0d1ae8d22782173b32c9 + depends: + - __glibc >=2.17,<3.0.a0 + - libglx 1.7.0 ha4b6fd6_3 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-xorgproto + license: LicenseRef-libglvnd + purls: [] + size: 27363 + timestamp: 1779728211402 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + sha256: 5abe4ab9d93f6c9757d654f1969ae2267d4505315c1f2f8fe705fd60af084f1b + md5: faac990cb7aedc7f3a2224f2c9b0c26c + depends: + - __glibc >=2.17,<3.0.a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 603817 + timestamp: 1778268942614 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.39.0-h9d11ab5_1.conda + sha256: 44f8e354431d2336475465ec8d71df7f3dea1397e70df0718c2ac75137976c63 + md5: cd398eb8374fb626a710b7a35b7ffa98 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260107.0,<20260108.0a0 + - libcurl >=8.18.0,<9.0a0 + - libgcc >=14 + - libgrpc >=1.78.0,<1.79.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libstdcxx >=14 + - openssl >=3.5.5,<4.0a0 + constrains: + - libgoogle-cloud 2.39.0 *_1 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1307253 + timestamp: 1770461665848 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-3.5.0-h25dbb67_0.conda + sha256: 45c2b76656e22051b1ef45659c7aace412354d4620eba904c4596fa3160b8ff7 + md5: 1f50095d5260dd7701a6fc6309745f11 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libcurl >=8.20.0,<9.0a0 + - libgcc >=14 + - libgrpc >=1.78.1,<1.79.0a0 + - libopentelemetry-cpp >=1.26.0,<1.27.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libstdcxx >=14 + - openssl >=3.5.6,<4.0a0 + constrains: + - libgoogle-cloud 3.5.0 *_0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2632111 + timestamp: 1779223318268 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.39.0-hdbdcf42_1.conda + sha256: 2cce946ebf40b0b5fdb3e82c8a9f90ca28cd62abd281b20713067cc69a75c441 + md5: 384a1730ea66a72692e377cb45996d61 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libgcc >=14 + - libgoogle-cloud 2.39.0 h9d11ab5_1 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - openssl + license: Apache-2.0 + license_family: Apache + purls: [] + size: 803453 + timestamp: 1770461856392 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-3.5.0-hdbdcf42_0.conda + sha256: a1bb2afef01e907d4c726a4a847638977239e2f2facef87d37f91e0048158a8d + md5: a322823ef3fde4551fda639ed29af98b + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libgcc >=14 + - libgoogle-cloud 3.5.0 h25dbb67_0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + - openssl + license: Apache-2.0 + license_family: Apache + purls: [] + size: 779650 + timestamp: 1779223515503 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.78.1-h1d1128b_0.conda + sha256: 5bb935188999fd70f67996746fd2dca85ec6204289e11695c316772e19451eb8 + md5: b5fb6d6c83f63d83ef2721dca6ff7091 + depends: + - __glibc >=2.17,<3.0.a0 + - c-ares >=1.34.6,<2.0a0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libgcc >=14 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libre2-11 >=2025.11.5 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - re2 + constrains: + - grpc-cpp =1.78.1 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 7021360 + timestamp: 1774020290672 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h10be129_0.conda + sha256: 8b70955d5e9a49d08945d4f8e2eab855b2efa5fce9cb9bc5e75d86764e6f2f38 + md5: 3a9428b74c403c71048104d38437b48c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 OR BSD-3-Clause + purls: [] + size: 1435782 + timestamp: 1776989559668 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f + md5: 915f5995e94f60e9a4826e0b0920ee88 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-only + purls: [] + size: 790176 + timestamp: 1754908768807 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + sha256: 10056646c28115b174de81a44e23e3a0a3b95b5347d2e6c45cc6d49d35294256 + md5: 6178c6f2fb254558238ef4e6c56fb782 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 633831 + timestamp: 1775962768273 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-h174a0a3_1.conda + sha256: 0c8a78c6a42a6e4c6de3a5e82d692f60400d43f4cc80591745f28b37daad9c70 + md5: 850f48943d6b4589800a303f0de6a816 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libhwy >=1.4.0,<1.5.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1846962 + timestamp: 1777065125966 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblal-7.7.0-fftw_h0eb8034_101.conda + sha256: 42a2f79c7920d3a8fc49aa23cac13e9011d8c420027402da3c420211d7955a81 + md5: e52b43733b896f6caeafda529baac2c1 + depends: + - __glibc >=2.17,<3.0.a0 + - fftw >=3.3.10,<4.0a0 + - gsl >=2.7,<2.8.0a0 + - hdf5 >=1.14.6,<1.14.7.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + constrains: + - lal >=7.1.1 + - python-lal >=7.1.1 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 2302068 + timestamp: 1755599752967 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblal-7.7.0-fftw_h9f6c97b_104.conda + sha256: 7e355f26203923d422d8d3359b317ec4db8d52639d22a4d31a68a6d1e6ee1416 + md5: f15cd90efdd3e048dc1446a62bba344e + depends: + - __glibc >=2.17,<3.0.a0 + - fftw >=3.3.10,<4.0a0 + - gsl >=2.7,<2.8.0a0 + - hdf5 >=2.1.0,<3.0a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + constrains: + - lal >=7.1.1 + - python-lal >=7.1.1 + - swig >=4.4.1,<4.4.2.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 2305026 + timestamp: 1774636542993 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalburst-2.0.7-h43c0734_2.conda + sha256: 78ec2eff546a55d4ac5ddd83c60023468a4f3f0cf484393e6beb156f61aec7be + md5: 33854cc2ec46129c2ee1d2145ca32b54 + depends: + - __glibc >=2.17,<3.0.a0 + - gsl >=2.7,<2.8.0a0 + - libgcc >=14 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalmetaio >=4.0.0 + - liblalmetaio >=4.0.6,<5.0a0 + - liblalsimulation >=6.2.0 + - liblalsimulation >=6.2.0,<7.0a0 + constrains: + - python-lalburst >=1.5.7 + - lalburst >=1.5.7 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 75724 + timestamp: 1771409408299 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalframe-3.0.7-hbf9efdd_2.conda + sha256: 1415be69cd89258994b7b9efe27e417707e921c00659d68895dd6022fe6858b0 + md5: be064d0a4c05c9b9d513a719396982c1 + depends: + - __glibc >=2.17,<3.0.a0 + - ldas-tools-framecpp >=2.9.3,<2.10.0a0 + - libframel >=8.41.3,<9.0a0 + - libgcc >=14 + - liblal >=7.7.0,<8.0a0 + constrains: + - python-lalframe >=1.5.3 + - lalframe >=1.5.3 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 251800 + timestamp: 1774541277420 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinference-4.1.9-h3773ae6_0.conda + sha256: b698db5bec95f7404c3c1a5e1fc25e4249f0a269800bacbaaa45bdeb76f5b579 + md5: 4eeb887359ee4a86e8b7f1f2092b61b3 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - gsl >=2.7,<2.8.0a0 + - lalinference-data 4.1.9 ha770c72_0 + - libgcc >=13 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalburst >=2.0.0 + - liblalburst >=2.0.7,<3.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalinspiral >=5.0.0 + - liblalinspiral >=5.0.3,<6.0a0 + - liblalmetaio >=4.0.0 + - liblalmetaio >=4.0.6,<5.0a0 + - liblalsimulation >=6.2.0 + - liblalsimulation >=6.2.0,<7.0a0 + constrains: + - python-lalinference >=2.0.6 + - lalinference >=2.0.6 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 961885 + timestamp: 1748277813702 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinference-4.1.9-h43c0734_2.conda + sha256: 143865c4ac47d1150ef4536f413b03bc54038163f80d9e6028f1d69108046838 + md5: 8ee21b91a79700e5b903bef7fb4fb4a5 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - gsl >=2.7,<2.8.0a0 + - lalinference-data 4.1.9 ha770c72_2 + - libgcc >=14 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalburst >=2.0.0 + - liblalburst >=2.0.7,<3.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalinspiral >=5.0.0 + - liblalinspiral >=5.0.3,<6.0a0 + - liblalmetaio >=4.0.0 + - liblalmetaio >=4.0.6,<5.0a0 + - liblalsimulation >=6.2.0 + - liblalsimulation >=6.2.0,<7.0a0 + constrains: + - lalinference >=2.0.6 + - python-lalinference >=2.0.6 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 960730 + timestamp: 1774963680943 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinspiral-5.0.3-h43c0734_3.conda + sha256: e17cf71d5b400d993803d6931920c3f88d21fed7fdf6b0f602e797c11c4c2194 + md5: dfe5f6346b18978b1b448dca96819907 + depends: + - __glibc >=2.17,<3.0.a0 + - gsl >=2.7,<2.8.0a0 + - libgcc >=14 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalburst >=2.0.0 + - liblalburst >=2.0.7,<3.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalmetaio >=4.0.0 + - liblalmetaio >=4.0.6,<5.0a0 + - liblalsimulation >=6.2.0 + - liblalsimulation >=6.2.0,<7.0a0 + constrains: + - lalinspiral >=2.0.1 + - python-lalinspiral >=2.0.1 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 1199624 + timestamp: 1774543619880 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalmetaio-4.0.6-hb03c661_2.conda + sha256: d836a344bbf93e0bedf662ffba6dab2bf6c52118d8c605dafcd8c4f13c1e66e1 + md5: d243ced74ebaf13c7d01e7fe822f5a36 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - libmetaio >=8.4.0 + - libmetaio >=8.5.1,<9.0a0 + constrains: + - python-lalmetaio >=2.0.1 + - lalmetaio >=2.0.1 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 118811 + timestamp: 1774542914612 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalpulsar-7.1.1-h3c7535d_2.conda + sha256: 57a98e0b8a4c76881080e038bdcae6ea92d9131712532862f8b30201354d57a9 + md5: 6e84216b15d3d3dc45ee3ddbac3157ea + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - cfitsio >=4.6.3,<4.6.4.0a0 + - fftw + - gsl >=2.7,<2.8.0a0 + - lalpulsar-data 7.1.1 ha770c72_2 + - libgcc >=14 + - liblal >=7.6.0 + - liblal >=7.7.0,<8.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalinference >=4.1.0 + - liblalinference >=4.1.9,<5.0a0 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.2.0,<7.0a0 + constrains: + - lalpulsar >=3.0.0 + - python-lalpulsar >=3.0.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 1762705 + timestamp: 1774625816850 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalsimulation-6.2.0-py312hd1ec2bb_3.conda + sha256: 570e56d4bc0e7920e456fa0248025e7f0921000eafa8b153115b7a015eff6a2b + md5: 99b0c9efcb99048f099893cd438ee590 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - gsl >=2.7,<2.8.0a0 + - lalsimulation-data 6.2.0 ha770c72_3 + - libgcc >=14 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - lalsimulation >=2.5.0 + - python-lalsimulation >=2.5.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 7934645 + timestamp: 1774541272092 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h47877c9_openblas.conda + build_number: 7 + sha256: 96962084921f197c9ad13fb7f8b324f2351d50ff3d8d962148751ad532f54a01 + md5: 6569b4f273740e25dc0dc7e3232c2a6c + depends: + - libblas 3.11.0 7_h4a7cf45_openblas + constrains: + - liblapacke 3.11.0 7*_openblas + - libcblas 3.11.0 7*_openblas + - blas 2.307 openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18694 + timestamp: 1778489869038 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda + sha256: 91bb4f5be1601b40b4995911d785e29387970f0b3c80f33f7f9028f95335399f + md5: 1a2708a460884d6861425b7f9a7bef99 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 44333366 + timestamp: 1765959132513 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.6-hf7376ad_0.conda + sha256: c883814c109f6f1d3b159d6366a5d39dd1e160ce1cf48b27b6d7c4ee8d804232 + md5: 605a337de427d14e51adb39f8a07b282 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 44235433 + timestamp: 1779261596488 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d + md5: b88d90cad08e6bc8ad540cb310a761fb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + size: 113478 + timestamp: 1775825492909 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmetaio-8.5.1-h0b0be96_1003.conda + sha256: ece2d119d1f5743aeb40814308b2a9a989412e9f43f9e28fac05e289fef20fa9 + md5: 96380b4f61bbd8946f38fd1ecf54eb4e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + constrains: + - metaio >=8.5.1 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 47894 + timestamp: 1721742221704 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + sha256: 663444d77a42f2265f54fb8b48c5450bfff4388d9c0f8253dd7855f0d993153f + md5: 2a45e7f8af083626f009645a6481f12d + depends: + - __glibc >=2.17,<3.0.a0 + - c-ares >=1.34.6,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 663344 + timestamp: 1773854035739 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5 + md5: d864d34357c3b65a4b731f78c0801dc4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 33731 + timestamp: 1750274110928 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + sha256: 3b3f19ced060013c2dd99d9d46403be6d319d4601814c772a3472fe2955612b0 + md5: 7c7927b404672409d9917d49bff5f2d6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-or-later + purls: [] + size: 33418 + timestamp: 1734670021371 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + sha256: 3d9aa85648e5e18a6d66db98b8c4317cc426721ad7a220aa86330d1ccedc8903 + md5: 2d3278b721e40468295ca755c3b84070 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + constrains: + - openblas >=0.3.33,<0.3.34.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 5931919 + timestamp: 1776993658641 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_3.conda + sha256: 90777039b48529283df5f16383fc399866024257a8bd93de583f4730db1ab30a + md5: c2bd8055a2e2dce7a7f32cfd02101fb6 + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_3 + license: LicenseRef-libglvnd + purls: [] + size: 51767 + timestamp: 1779728204026 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.21.0-h9692893_2.conda + sha256: 59663bdd97ac6d8ce8a83bf80e18c14c4ac5ca536ef1a2de4bc9080a45dc501a + md5: c3de1cc30bc11edbc98aed352381449d + depends: + - libabseil * cxx17* + - libabseil >=20260107.0,<20260108.0a0 + - libcurl >=8.18.0,<9.0a0 + - libgrpc >=1.78.0,<1.79.0a0 + - libopentelemetry-cpp-headers 1.21.0 ha770c72_2 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libzlib >=1.3.1,<2.0a0 + - nlohmann_json + - prometheus-cpp >=1.3.0,<1.4.0a0 + constrains: + - cpp-opentelemetry-sdk =1.21.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 896630 + timestamp: 1770452315175 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.26.0-h9692893_0.conda + sha256: 5126b75e7733de31e261aa275c0a1fd38b25fdfff23e7d7056ebd6ca76d11532 + md5: c360be6f9e0947b64427603e91f9651f + depends: + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libcurl >=8.19.0,<9.0a0 + - libgrpc >=1.78.0,<1.79.0a0 + - libopentelemetry-cpp-headers 1.26.0 ha770c72_0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libzlib >=1.3.1,<2.0a0 + - nlohmann_json + - prometheus-cpp >=1.3.0,<1.4.0a0 + constrains: + - cpp-opentelemetry-sdk =1.26.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 934274 + timestamp: 1774001192674 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.21.0-ha770c72_2.conda + sha256: b2b2122f214c417851ba280009aea040e546665c43de737690c2610055a255e3 + md5: 253e70376a8ae74f9d99d44712b3e087 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 362214 + timestamp: 1770452273268 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.26.0-ha770c72_0.conda + sha256: fec2ba047f7000c213ca7ace5452435197c79fbcb1690da7ce85e99312245984 + md5: cb93c6e226a7bed5557601846555153d + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 396403 + timestamp: 1774001149705 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-23.0.1-h7376487_4_cpu.conda + build_number: 4 + sha256: c1c6f612b8cd50abff3ca345d2fb650c621723ceac4a7a98ff059599cf53ecbc + md5: ecc6a87df60b48824fca2f3027eaaa8f + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 23.0.1 hf605819_4_cpu + - libgcc >=14 + - libstdcxx >=14 + - libthrift >=0.22.0,<0.22.1.0a0 + - openssl >=3.5.5,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1390208 + timestamp: 1773271844211 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-24.0.0-h7376487_2_cpu.conda + build_number: 2 + sha256: e743bacdcc78738a518ef5be59caa046e85511fa162dd2f81dff90d198962c8e + md5: c45e43b49c31be5f4f3b516d33006278 + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 24.0.0 h033f57b_2_cpu + - libgcc >=14 + - libstdcxx >=14 + - libthrift >=0.22.0,<0.22.1.0a0 + - openssl >=3.5.6,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1428655 + timestamp: 1779475666749 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_0.conda + sha256: f41721636a7c2e51bc2c642e1127955ab9c81145470714fdaac44d4d09e4af41 + md5: 33082e13b4769b48cfeb648e15bfe3fc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 29147 + timestamp: 1773533027610 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + sha256: 377cfe037f3eeb3b1bf3ad333f724a64d32f315ee1958581fc671891d63d3f89 + md5: eba48a68a1a2b9d3c0d9511548db85db + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 317729 + timestamp: 1776315175087 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.1-h5c52fec_2.conda + sha256: bbab2c3e6f650f2bd1bc84d88e6a20fefa6a401fa445bb4b97c509c1b3a89fa8 + md5: a8ac9a6342569d1714ae1b53ae2fcadb + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=14 + - openldap >=2.6.10,<2.7.0a0 + - openssl >=3.5.4,<4.0a0 + license: PostgreSQL + purls: [] + size: 2711480 + timestamp: 1764345810429 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_0.conda + sha256: 076742d4a9fa88711c5fc6726b967e6a03b5060e669aa03288c684a7ae03583b + md5: 2772b7ab7bc43f24e9585a714761a255 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - openldap >=2.6.13,<2.7.0a0 + - openssl >=3.5.6,<4.0a0 + license: PostgreSQL + purls: [] + size: 2754709 + timestamp: 1778786234149 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda + sha256: afbf195443269ae10a940372c1d37cda749355d2bd96ef9587a962abd87f2429 + md5: 11ac478fa72cf12c214199b8a96523f4 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260107.0,<20260108.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3638698 + timestamp: 1769749419271 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.11.05-h0dc7533_1.conda + sha256: 138fc85321a8c0731c1715688b38e2be4fb71db349c9ab25f685315095ae70ff + md5: ced7f10b6cfb4389385556f47c0ad949 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260107.0,<20260108.0a0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - re2 2025.11.05.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 213122 + timestamp: 1768190028309 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + sha256: b677bbf1c339d894757c3dcfbb2f88649e499e4991d70ae09a1466da9a6c92d6 + md5: 965e4d531b588b2e42f66fd8e48b056c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: ISC + purls: [] + size: 269272 + timestamp: 1779163468406 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.1-h0c1763c_0.conda + sha256: 54cdcd3214313b62c2a8ee277e6f42150d9b748264c1b70d958bf735e420ef8d + md5: 7dc38adcbf71e6b38748e919e16e0dce + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + license: blessing + purls: [] + size: 954962 + timestamp: 1777986471789 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + sha256: fa39bfd69228a13e553bd24601332b7cfeb30ca11a3ca50bb028108fe90a7661 + md5: eecce068c7e4eddeb169591baac20ac4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 304790 + timestamp: 1745608545575 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + sha256: dff1058c76ec6b8759e41cefa2508162d00e4a5e6721aa68ec3fd10094e702dc + md5: 5794b3bdc38177caf969dabd3af08549 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 15.2.0 he0feb66_19 + constrains: + - libstdcxx-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 5852044 + timestamp: 1778269036376 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + sha256: 0672b6b6e1791c92e8eccad58081a99d614fcf82bca5841f9dfa3c3e658f83b9 + md5: e5ce228e579726c07255dbf90dc62101 + depends: + - libstdcxx 15.2.0 h934c35e_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27776 + timestamp: 1778269074600 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.22.0-h7d032f7_2.conda + sha256: af6025aa4a4fc3f4e71334000d2739d927e2f678607b109ec630cc17d716918a + md5: b6e326fbe1e3948da50ec29cee0380db + depends: + - __glibc >=2.17,<3.0.a0 + - libevent >=2.1.12,<2.1.13.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 423861 + timestamp: 1777018957474 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + sha256: e5f8c38625aa6d567809733ae04bb71c161a42e44a9fa8227abe61fa5c60ebe0 + md5: cd5a90476766d53e901500df9215e927 + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libgcc >=14 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libstdcxx >=14 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + size: 435273 + timestamp: 1762022005702 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.11.3-hfe17d71_0.conda + sha256: ecbf4b7520296ed580498dc66a72508b8a79da5126e1d6dc650a7087171288f9 + md5: 1247168fe4a0b8912e3336bccdbf98a5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 85969 + timestamp: 1768735071295 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.1-h5347b49_0.conda + sha256: 3f0edf1280e2f6684a986f821eaa3e123d2694a00b31b96ca0d4a4c12c129231 + md5: 7d0a66598195ef00b6efc55aefc7453b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 40163 + timestamp: 1779118517630 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda + sha256: a68280d57dfd29e3d53400409a39d67c4b9515097eba733aa6fe00c880620e2b + md5: 31ad065eda3c2d88f8215b1289df9c89 + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + constrains: + - libvulkan-headers 1.4.341.0.* + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 199795 + timestamp: 1770077125520 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + sha256: 3aed21ab28eddffdaf7f804f49be7a7d701e8f0e46c856d801270b470820a37b + md5: aea31d2e5b1091feca96fcfe945c3cf9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 429011 + timestamp: 1752159441324 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 395888 + timestamp: 1727278577118 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda + sha256: d2195b5fbcb0af1ff7b345efdf89290c279b8d1d74f325ae0ac98148c375863c + md5: 2bca1fbb221d9c3c8e3a155784bbc2e9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - xkeyboard-config + - xorg-libxau >=1.0.12,<2.0a0 + license: MIT/X11 Derivative + license_family: MIT + purls: [] + size: 837922 + timestamp: 1764794163823 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-ha9997c6_0.conda + sha256: 71436e72a286ef8b57d6f4287626ff91991eb03c7bdbe835280521791efd1434 + md5: e7733bc6785ec009e47a224a71917e84 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - libxml2 2.15.1 + license: MIT + license_family: MIT + purls: [] + size: 556302 + timestamp: 1761015637262 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + sha256: 3d44f737c5ae52d5af32682cc1530df433f401f8e58a7533926536244127572a + md5: e79d2c2f24b027aa8d5ab1b1ba3061e7 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - libxml2 2.15.3 + license: MIT + license_family: MIT + purls: [] + size: 559775 + timestamp: 1776376739004 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h26afc86_0.conda + sha256: ec0735ae56c3549149eebd7dc22c0bed91fd50c02eaa77ff418613ddda190aa8 + md5: e512be7dc1f84966d50959e900ca121f + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libxml2-16 2.15.1 ha9997c6_0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 45283 + timestamp: 1761015644057 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + sha256: 3bc5551720c58591f6ea1146f7d1539c734ed1c40e7b9f5cb8cb7e900c509aba + md5: 995d8c8bad2a3cc8db14675a153dec2b + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.3 hca6bf5a_0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 46810 + timestamp: 1776376751152 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda + sha256: 0694760a3e62bdc659d90a14ae9c6e132b525a7900e59785b18a08bb52a5d7e5 + md5: 87e6096ec6d542d1c1f8b33245fe8300 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxml2 + - libxml2-16 >=2.14.6 + license: MIT + license_family: MIT + purls: [] + size: 245434 + timestamp: 1757963724977 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9 + md5: d87ff7921124eccd67248aa483c23fec + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - zlib 1.3.2 *_2 + license: Zlib + license_family: Other + purls: [] + size: 63629 + timestamp: 1774072609062 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 + sha256: ff94f30b2e86cbad6296cf3e5804d442d9e881f7ba8080d92170981662528c6e + md5: c66fe2d123249af7651ebde8984c51c2 + depends: + - libgcc-ng >=9.3.0 + - libstdcxx-ng >=9.3.0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 168074 + timestamp: 1607309189989 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ligo-segments-1.4.0-py312h66e93f0_6.conda + sha256: b4d622c53fc839ecd5798bb0e0e60977973fe0aba6e744928f4470c2ab9ce559 + md5: 8dbb1268e79c44b25f6745af7b3ff452 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - six + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/ligo-segments?source=hash-mapping + size: 78098 + timestamp: 1733851880296 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ligo.skymap-2.5.3-np2h4e6c70c_1.conda + noarch: python + sha256: 9a356677ed8158f8dc046cb9ba8d3c9b111cbe8b634c4e31aea73e8c5f55d038 + md5: 5fd9d0be48175a109112ffbe94120ebb + depends: + - astroplan >=0.7 + - astropy-base >=6.0 + - astropy-healpix >=0.3 + - chealpix + - gsl + - healpy + - h5py + - igwn-ligolw + - igwn-segments + - libcblas + - ligo-gracedb >=2.0.1 + - matplotlib-base >=3.9.1 + - networkx + - numpy >=2.0.0 + - pillow >=2.5.0 + - python >=3.11 + - python-lal >=7.7.0 + - python-lalinspiral >=5.0.3 + - python-lalmetaio >=4.0.6 + - python-lalsimulation >=6.2.0 + - pytz + - reproject >=0.3.2 + - scipy >=1.10.1 + - shapely >=2.0.0 + - tqdm >=4.27.0 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - libcblas >=3.9.0,<4.0a0 + - gsl >=2.7,<2.8.0a0 + - chealpix >=3.31.0,<3.32.0a0 + - _python_abi3_support 1.* + - cpython >=3.11 + - numpy >=1.23,<3 + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/ligo-skymap?source=hash-mapping + size: 1796406 + timestamp: 1775055859500 +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.47.0-py312h7424e68_1.conda + sha256: 27b34a24cc4c872d328b07319ae5ab6673d5c94ec923cde5b1f3ac7f59b95dd0 + md5: 49f23211559c82cf8c5ffac112fe73b4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/llvmlite?source=hash-mapping + size: 34127488 + timestamp: 1776076739766 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.4.5-py312h3d67a73_1.conda + sha256: e8ae9141c7afcc95555fca7ff5f91d7a84f094536715211e750569fd4bb2caa4 + md5: a669145a2c834895bdf3fcba1f1e5b9c + depends: + - python + - lz4-c + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python_abi 3.12.* *_cp312 + - lz4-c >=1.10.0,<1.11.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/lz4?source=hash-mapping + size: 44154 + timestamp: 1765026394687 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346 + md5: 9de5350a85c4a20c685259b889aa6393 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 167055 + timestamp: 1733741040117 +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda + sha256: 5f3aad1f3a685ed0b591faad335957dbdb1b73abfd6fc731a0d42718e0653b33 + md5: 93a4752d42b12943a355b682ee43285b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 26057 + timestamp: 1772445297924 +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.9-py312h7900ff3_0.conda + sha256: cdd59bb1a52b09979f11c68909d53120b2e749edd1992853a74e1604db19c8b0 + md5: 579c6a324b197594fabc9240bddf2d8b + depends: + - matplotlib-base >=3.10.9,<3.10.10.0a0 + - pyside6 >=6.7.2 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tornado >=5 + license: PSF-2.0 + license_family: PSF + purls: [] + size: 17831 + timestamp: 1777000588302 +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.9-py312he3d6523_0.conda + sha256: c7e133837376e53e6a52719c205a3067c42f05769bc3e8307417f8d817dfc63e + md5: 7d499b5b6d150f133800dc3a582771c7 + depends: + - __glibc >=2.17,<3.0.a0 + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.23 + - numpy >=1.23,<3 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.12,<3.13.0a0 + - python-dateutil >=2.7 + - python_abi 3.12.* *_cp312 + - qhull >=2020.2,<2020.3.0a0 + - tk >=8.6.13,<8.7.0a0 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/matplotlib?source=hash-mapping + size: 8336056 + timestamp: 1777000573501 +- conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py312hd9148b4_1.conda + sha256: 94068fd39d1a672f8799e3146a18ba4ef553f0fcccefddb3c07fbdabfd73667a + md5: 2e489969e38f0b428c39492619b5e6e5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/msgpack?source=hash-mapping + size: 102525 + timestamp: 1762504116832 +- conda: https://conda.anaconda.org/conda-forge/linux-64/munge-0.5.16-h63a00c3_0.conda + sha256: 5a9964eab34510cead90d6db2f1ef4c5c5e99df898324aa811a6b68aa0b5c818 + md5: 64b3e80aa79b823d54862872aa4edd23 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.1,<4.0a0 + license: LGPL-3.0-or-later + license_family: GPL + purls: [] + size: 130717 + timestamp: 1720627584980 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + sha256: fc89f74bbe362fb29fa3c037697a89bec140b346a2469a90f7936d1d7ea4d8a3 + md5: fc21868a1a5aacc937e7a18747acb8a5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: X11 AND BSD-3-Clause + purls: [] + size: 918956 + timestamp: 1777422145199 +- conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_1.conda + sha256: fd2cbd8dfc006c72f45843672664a8e4b99b2f8137654eaae8c3d46dca776f63 + md5: 16c2a0e9c4a166e53632cfca4f68d020 + constrains: + - nlohmann_json-abi ==3.12.0 + license: MIT + license_family: MIT + purls: [] + size: 136216 + timestamp: 1758194284857 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.65.1-py312hd1dde6f_1.conda + sha256: 6c758c97b06e0bb99e425edce981610b2db9f95c0996f48288a031d847981193 + md5: acd0d3547b3cb443a5ce9124412b6295 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - libgcc >=14 + - libstdcxx >=14 + - llvmlite >=0.47.0,<0.48.0a0 + - numpy >=1.22.3,<2.5 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - cudatoolkit >=11.2 + - tbb >=2021.6.0 + - cuda-version >=11.2 + - cuda-python >=11.6 + - libopenblas !=0.3.6 + - scipy >=1.0 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/numba?source=hash-mapping + size: 5707782 + timestamp: 1778390479325 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.5-py312hf79963d_0.conda + sha256: ae1ec07448a10cdfcaf5df4a818291b0f4a99eb398e02ea5d7fc5d3c76be108f + md5: 86a969eeb489119374ec1d2e863777e6 + depends: + - __glibc >=2.17,<3.0.a0 + - deprecated + - libgcc >=14 + - libstdcxx >=14 + - msgpack-python + - numpy >=1.23,<3 + - numpy >=1.24 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - typing_extensions + license: MIT + license_family: MIT + purls: + - pkg:pypi/numcodecs?source=hash-mapping + size: 813229 + timestamp: 1764782491676 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py312h33ff503_0.conda + sha256: dfcbeadb3e7ad0da7a55a0525884ca34c19584154e13cc4159396b305d1bd445 + md5: 6e31d55ee1110fda83b4f4045f4d73ff + depends: + - python + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - liblapack >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - python_abi 3.12.* *_cp312 + - libcblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=compressed-mapping + size: 8759520 + timestamp: 1779169200325 +- conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda + sha256: bbff8a60f70d5ebab138b564554f28258472e1e63178614562d4feee29d10da2 + md5: 6ce853cb231f18576d2db5c2d4cb473e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 248670 + timestamp: 1735727084819 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + sha256: 3900f9f2dbbf4129cf3ad6acf4e4b6f7101390b53843591c53b00f034343bc4d + md5: 11b3379b191f63139e29c0d19dee24cd + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpng >=1.6.50,<1.7.0a0 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 355400 + timestamp: 1758489294972 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjph-0.27.3-h8d634f6_0.conda + sha256: fb2600253b6ab9f53cd0334ae77642f5a71e6d42848b2f9a350a0d3861ff00cc + md5: c6c0190e1995c47f4221a889ac3bde3e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 283239 + timestamp: 1778775149306 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda + sha256: cb0b07db15e303e6f0a19646807715d28f1264c6350309a559702f4f34f37892 + md5: 2e5bf4f1da39c0b32778561c3c4e5878 + depends: + - __glibc >=2.17,<3.0.a0 + - cyrus-sasl >=2.1.27,<3.0a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libstdcxx >=13 + - openssl >=3.5.0,<4.0a0 + license: OLDAP-2.8 + license_family: BSD + purls: [] + size: 780253 + timestamp: 1748010165522 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda + sha256: 21c4f6c7f41dc9bec2ea2f9c80440d9a4d45a6f2ac13243e658f10dcf1044146 + md5: 680608784722880fbfe1745067570b00 + depends: + - __glibc >=2.17,<3.0.a0 + - cyrus-sasl >=2.1.28,<3.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.6,<4.0a0 + license: OLDAP-2.8 + license_family: BSD + purls: [] + size: 786149 + timestamp: 1775741359582 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda + sha256: c0ef482280e38c71a08ad6d71448194b719630345b0c9c60744a2010e8a8e0cb + md5: da1b85b6a87e141f5140bb9924cecab0 + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3167099 + timestamp: 1775587756857 +- conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.3.0-h21090e2_0.conda + sha256: a60c2578c8422e0c67206d269767feb4d3e627511558b6866e5daf2231d5214d + md5: 8027fce94fdfdf2e54f9d18cbae496df + depends: + - tzdata + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - lz4-c >=1.10.0,<1.11.0a0 + - snappy >=1.2.2,<1.3.0a0 + - libabseil >=20260107.1,<20260108.0a0 + - libabseil * cxx17* + - libprotobuf >=6.33.5,<6.33.6.0a0 + - zstd >=1.5.7,<1.6.0a0 + - libzlib >=1.3.1,<2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1468651 + timestamp: 1773230208923 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-3.0.3-py312h8ecdadd_0.conda + sha256: 009408dcfdc789b8a1748d6a63fd2134ea2edc8474231ea7beba0ac3ad772a37 + md5: 15c437bfa4cbddd379b95357c9aa4150 + depends: + - python + - numpy >=1.26.0 + - python-dateutil >=2.8.2 + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.23,<3 + constrains: + - adbc-driver-postgresql >=1.2.0 + - adbc-driver-sqlite >=1.2.0 + - beautifulsoup4 >=4.12.3 + - blosc >=1.21.3 + - bottleneck >=1.4.2 + - fastparquet >=2024.11.0 + - fsspec >=2024.10.0 + - gcsfs >=2024.10.0 + - html5lib >=1.1 + - hypothesis >=6.116.0 + - jinja2 >=3.1.5 + - lxml >=5.3.0 + - matplotlib >=3.9.3 + - numba >=0.60.0 + - numexpr >=2.10.2 + - odfpy >=1.4.1 + - openpyxl >=3.1.5 + - psycopg2 >=2.9.10 + - pyarrow >=13.0.0 + - pyiceberg >=0.8.1 + - pymysql >=1.1.1 + - pyqt5 >=5.15.9 + - pyreadstat >=1.2.8 + - pytables >=3.10.1 + - pytest >=8.3.4 + - pytest-xdist >=3.6.1 + - python-calamine >=0.3.0 + - pytz >=2024.2 + - pyxlsb >=1.0.10 + - qtpy >=2.4.2 + - scipy >=1.14.1 + - s3fs >=2024.10.0 + - sqlalchemy >=2.0.36 + - tabulate >=0.9.0 + - xarray >=2024.10.0 + - xlrd >=2.0.1 + - xlsxwriter >=3.2.0 + - zstandard >=0.23.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandas?source=compressed-mapping + size: 14872605 + timestamp: 1778602625175 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.46-h1321c63_0.conda + sha256: 5c7380c8fd3ad5fc0f8039069a45586aa452cf165264bc5a437ad80397b32934 + md5: 7fa07cb0fb1b625a089ccc01218ee5b1 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1209177 + timestamp: 1756742976157 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + sha256: 5e6f7d161356fefd981948bea5139c5aa0436767751a6930cb1ca801ebb113ff + md5: 7a3bff861a6583f1889021facefc08b1 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1222481 + timestamp: 1763655398280 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py312h50c33e8_0.conda + sha256: fa291f8915114733dc1df9f1627b8c63c517217c1eee1a6ede2ceb5e368cf27a + md5: 9e5609720e31213d4f39afe377f6217e + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - lcms2 >=2.18,<3.0a0 + - libxcb >=1.17.0,<2.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - openjpeg >=2.5.4,<3.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - zlib-ng >=2.3.3,<2.4.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 1039561 + timestamp: 1775060059882 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + sha256: 43d37bc9ca3b257c5dd7bf76a8426addbdec381f6786ff441dc90b1a49143b6a + md5: c01af13bdc553d1a8fbfff6e8db075f0 + depends: + - libgcc >=14 + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + purls: [] + size: 450960 + timestamp: 1754665235234 +- conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda + sha256: 013669433eb447548f21c3c6b16b2ed64356f726b5f77c1b39d5ba17a8a4b8bc + md5: a83f6a2fdc079e643237887a37460668 + depends: + - __glibc >=2.17,<3.0.a0 + - libcurl >=8.10.1,<9.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 199544 + timestamp: 1730769112346 +- conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda + sha256: d834fd656133c9e4eaf63ffe9a117c7d0917d86d89f7d64073f4e3a0020bd8a7 + md5: dd94c506b119130aef5a9382aed648e7 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + size: 225545 + timestamp: 1769678155334 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8252 + timestamp: 1726802366959 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-23.0.1-py312h7900ff3_0.conda + sha256: 05ac953b934135cf63343ddc6cbea56abfd167af118f22a47fc8984f9158beb8 + md5: 58710f6789e9a893472922a9dcd03f4f + depends: + - libarrow-acero 23.0.1.* + - libarrow-dataset 23.0.1.* + - libarrow-substrait 23.0.1.* + - libparquet 23.0.1.* + - pyarrow-core 23.0.1 *_0_* + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 28639 + timestamp: 1771307345680 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-24.0.0-py312h7900ff3_0.conda + sha256: ce11f466f0dcfc41bd0ef3719adb396fbffa6b866aac75c9242938fa58e546d5 + md5: f9ced0be11f0d3120336e4171a121c2a + depends: + - libarrow-acero 24.0.0.* + - libarrow-dataset 24.0.0.* + - libarrow-substrait 24.0.0.* + - libparquet 24.0.0.* + - pyarrow-core 24.0.0 *_0_* + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 26787 + timestamp: 1776927989772 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-23.0.1-py312h2054cf2_0_cpu.conda + sha256: e023133b8d24bada11fcf57b80aca98cf253a09ce996393949c006d236ac87b7 + md5: 9ad4bfc6f8ca7cdf4acf857fa0c9a91f + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 23.0.1.* *cpu + - libarrow-compute 23.0.1.* *cpu + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - numpy >=1.23,<3 + - apache-arrow-proc * cpu + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/pyarrow?source=hash-mapping + size: 4776752 + timestamp: 1771307276253 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-24.0.0-py312h2054cf2_0_cpu.conda + sha256: cb2c89aeb97a97572869200e37c153098c5877c7be4774f045459976e0f70233 + md5: fe5033add07e3cf4876fd091b5fecf31 + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 24.0.0.* *cpu + - libarrow-compute 24.0.0.* *cpu + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - numpy >=1.23,<3 + - apache-arrow-proc * cpu + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/pyarrow?source=hash-mapping + size: 5401544 + timestamp: 1776927982900 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyerfa-2.0.1.5-py310h32771cd_2.conda + noarch: python + sha256: a3f25f921be09e15ed6ff46a1ec99ce9cca6affa4a086f6f39ad630e21e48fb7 + md5: e6efd9593a25d093b4ce9dd8053c4af7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - numpy >=1.21,<3 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyerfa?source=hash-mapping + size: 295617 + timestamp: 1756821497270 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.6.2-py312hf34ed73_2.conda + sha256: 2b35f29ea0e01c711749b29b0a09144df2e4cd7bdf8b29d264ef749951a75a0e + md5: aad7f28cd7236932f9c9c27c9b28280c + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.4.1 + - libgcc >=14 + - libsodium >=1.0.22,<1.0.23.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - six + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/pynacl?source=hash-mapping + size: 1180950 + timestamp: 1778984876791 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.10.1-py312h9da60e5_0.conda + sha256: dccbc2674aaae31711933942fd16d87b127e6335556d5701cb760f27986f0375 + md5: dda0a61b6186fc914cf6c1581f64229d + depends: + - __glibc >=2.17,<3.0.a0 + - libclang13 >=21.1.7 + - libegl >=1.7.0,<2.0a0 + - libgcc >=14 + - libgl >=1.7.0,<2.0a0 + - libopengl >=1.7.0,<2.0a0 + - libstdcxx >=14 + - libvulkan-loader >=1.4.328.1,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libxslt >=1.1.43,<2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - qt6-main 6.10.1.* + - qt6-main >=6.10.1,<6.11.0a0 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/pyside6?source=hash-mapping + - pkg:pypi/shiboken6?source=hash-mapping + size: 11606305 + timestamp: 1765811838817 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.1-py312h50ac2ff_1.conda + sha256: 6f9e4fd9f6aa1d82a524384399c956c0c79c6c5df5ae42e241eb59f42c11ffbf + md5: 90f891bc96f673acbff89f6f405aef10 + depends: + - python + - qt6-main 6.11.1.* + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - libopengl >=1.7.0,<2.0a0 + - libclang13 >=22.1.5 + - libxslt >=1.1.43,<2.0a0 + - qt6-main >=6.11.1,<6.12.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libegl >=1.7.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libgl >=1.7.0,<2.0a0 + - python_abi 3.12.* *_cp312 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/pyside6?source=compressed-mapping + size: 13797566 + timestamp: 1778933891067 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda + sha256: a44655c1c3e1d43ed8704890a91e12afd68130414ea2c0872e154e5633a13d7e + md5: 7eccb41177e15cc672e1babe9056018e + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.7.4,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - liblzma >=5.8.2,<6.0a0 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libuuid >=2.41.3,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.5,<4.0a0 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 31608571 + timestamp: 1772730708989 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.11.1-py312h7cea900_0.conda + sha256: 6111460af5c1860c03ef68b4a94fd7ba541687c1b3fe91e170bf8eb007272a60 + md5: 1a0ae53a0853e54d1ac8448fdeba9f01 + depends: + - __glibc >=2.17,<3.0.a0 + - decorator + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: ISC + purls: + - pkg:pypi/gssapi?source=hash-mapping + size: 559459 + timestamp: 1769842649997 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.11.1-py312hf9980d4_1.conda + sha256: 70deb9508f445f75e2e897a7fc069e1d8388712aa5f98cb0636bb35d1b9aa296 + md5: 2c94a14272c456aaa2a024cfa6621c2e + depends: + - __glibc >=2.17,<3.0.a0 + - decorator + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: ISC + purls: + - pkg:pypi/gssapi?source=hash-mapping + size: 558539 + timestamp: 1770934756531 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-htcondor-24.12.4-py312h1e35698_0.conda + sha256: 8908ab85bf345b919b4faa16b07a771a5ca945842cc4e2556e4e46844c52c37c + md5: cbd4ef4b341950969d3a776172449fe7 + depends: + - __glibc >=2.17,<3.0.a0 + - htcondor-classads 24.12.4 hf1419ba_0 + - libboost-python >=1.88.0,<1.89.0a0 + - libcondor_utils 24.12.4 he8e5dd1_0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/htcondor?source=hash-mapping + size: 10307972 + timestamp: 1759416481221 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-htcondor-25.10.1-py312h40fa4ac_0.conda + sha256: c91e85ce6073f02527e368196391f00d007569b524c9f3554f6505c184fff6da + md5: 622acb7c619da4a50e8d926f9593ca11 + depends: + - __glibc >=2.17,<3.0.a0 + - htcondor-classads 25.10.1 h793e66c_0 + - libcondor_utils 25.10.1 h4effbbe_0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/htcondor?source=hash-mapping + size: 2005169 + timestamp: 1778792466521 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lal-7.7.0-fftw_py312h26d0d96_101.conda + sha256: adfcceac135c59042917ec2c417d5ad78e2d29cc200c3a78b951e7ad35850dc8 + md5: f24350a1c92284992ff4a5eac9fc5b93 + depends: + - __glibc >=2.17,<3.0.a0 + - igwn-segments + - libgcc >=14 + - liblal 7.7.0 fftw_h0eb8034_101 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-dateutil + - python_abi 3.12.* *_cp312 + - scipy + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 1003061 + timestamp: 1755600394133 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lal-7.7.0-fftw_py312hb15a3d9_104.conda + sha256: d816fee22c8350210720439f24ad6d9715f7111653d98a355ba24c5d97216900 + md5: 357513fdcafecdb37b42e871a6b05105 + depends: + - __glibc >=2.17,<3.0.a0 + - igwn-segments + - libgcc >=14 + - liblal 7.7.0 fftw_h9f6c97b_104 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-dateutil + - python_abi 3.12.* *_cp312 + - scipy + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 989631 + timestamp: 1774636817204 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalburst-2.0.7-py312h71fd7f1_2.conda + sha256: 5e4a513157746f781d0799c17c322ac4e56f58235cdaf20c441a7be3a60ad092 + md5: 47d1405f18f4cea7fda334e5e17b5f9e + depends: + - __glibc >=2.17,<3.0.a0 + - gsl >=2.7,<2.8.0a0 + - igwn-ligolw >=2.1.0 + - igwn-segments + - libgcc >=14 + - liblalburst 2.0.7 h43c0734_2 + - lscsoft-glue + - matplotlib-base + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python-lalmetaio >=4.0.0 + - python-lalsimulation >=6.2.0 + - python_abi 3.12.* *_cp312 + - scipy + - tqdm + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 339230 + timestamp: 1771409727221 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalframe-3.0.7-py312h4f23490_2.conda + sha256: 768b771be89f24e63f81a051f71046ca403d12dc4eb34302d7c26ab37ded9d6e + md5: 0b1a042cecf3e90d8de47bd4f61c5afb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - liblalframe 3.0.7 hbf9efdd_2 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 741209 + timestamp: 1774541427811 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinference-4.1.9-py312h4f23490_2.conda + sha256: de5a01d49ad169f93a6fab84425d3bf9529175c4a158f2a2f7530c9fe308c2c0 + md5: 1f0a566566ac4de97e25e9514dbacfad + depends: + - __glibc >=2.17,<3.0.a0 + - astropy-base >=1.1.1 + - h5py + - healpy >=1.17.3 + - igwn-ligolw >=2.1.0 + - igwn-segments + - libgcc >=14 + - liblalinference 4.1.9 h43c0734_2 + - lscsoft-glue >=1.54.1 + - matplotlib-base >=1.2.0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python-lalburst >=2.0.0 + - python-lalinspiral >=5.0.0 + - python-lalmetaio >=4.0.0 + - python-lalsimulation >=6.2.0 + - python_abi 3.12.* *_cp312 + - scipy >=0.9.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 849150 + timestamp: 1774963740336 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinference-4.1.9-py312hc0a28a1_0.conda + sha256: 02b85b3f018474dd17c418a38c0084261cca905c21531d7f3c6ec0b9a87030b3 + md5: 89b49352922436b54661185310fa937c + depends: + - __glibc >=2.17,<3.0.a0 + - astropy-base >=1.1.1 + - h5py + - healpy >=1.17.3 + - igwn-ligolw >=2.1.0 + - libgcc >=13 + - liblalinference 4.1.9 h3773ae6_0 + - ligo-segments + - lscsoft-glue >=1.54.1 + - matplotlib-base >=1.2.0 + - numpy >=1.19,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python-lalburst >=2.0.0 + - python-lalinspiral >=5.0.0 + - python-lalmetaio >=4.0.0 + - python-lalsimulation >=6.2.0 + - python_abi 3.12.* *_cp312 + - scipy >=0.9.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 852524 + timestamp: 1748278061390 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinspiral-5.0.3-py312h4f23490_3.conda + sha256: d7813eb52f095f621f9ee2ffacc98180f0407711d15e3342df0587d20954176f + md5: 2dc0ddc4bd480749a17021aea7d45c38 + depends: + - __glibc >=2.17,<3.0.a0 + - igwn-ligolw + - libgcc >=14 + - liblalinspiral 5.0.3 h43c0734_3 + - lscsoft-glue + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python-lalburst >=2.0.0 + - python-lalframe >=3.0.0 + - python-lalmetaio >=4.0.0 + - python-lalsimulation >=6.2.0 + - python_abi 3.12.* *_cp312 + - tqdm + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 61721427 + timestamp: 1774543769661 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalmetaio-4.0.6-py312h4f23490_2.conda + sha256: df79aac2086f33d8368c4a0b96cc6a6147cada68e451698f14a5e5361f407751 + md5: 492cdbf012e0e19d4edbcff24f394e13 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - liblalmetaio 4.0.6 hb03c661_2 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 162733 + timestamp: 1774542953203 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalpulsar-7.1.1-py312h4f23490_2.conda + sha256: b99299edda44f8eec8b757f20e41212e9f356406635cafdf4017340dafa5260f + md5: 64bd69f72658847487a2f1be69117a7a + depends: + - __glibc >=2.17,<3.0.a0 + - astropy-base + - libgcc >=14 + - liblalpulsar 7.1.1 h3c7535d_2 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.6.0 + - python-lalframe >=3.0.0 + - python-lalinference >=4.1.0 + - python-lalsimulation >=6.1.0 + - python_abi 3.12.* *_cp312 + - six + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 96795951 + timestamp: 1774626285092 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalsimulation-6.2.0-py312h71fd7f1_3.conda + sha256: e111e6b4dc7811b4f75040f0ecff8df709c662596e95e0cd21626914f4e0dd0b + md5: edf8cd1cfa5fb6e585e9136db6226bf8 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - astropy-base + - gsl >=2.7,<2.8.0a0 + - gwpy + - libgcc >=14 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalsimulation 6.2.0 py312hd1ec2bb_3 + - mpmath >=1.0.0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python_abi 3.12.* *_cp312 + - scipy + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 8493302 + timestamp: 1774541308884 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda + sha256: cb142bfd92f6e55749365ddc244294fa7b64db6d08c45b018ff1c658907bfcbf + md5: 15878599a87992e44c059731771591cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + size: 198293 + timestamp: 1770223620706 +- conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + sha256: 776363493bad83308ba30bcb88c2552632581b143e8ee25b1982c8c743e73abc + md5: 353823361b1d27eb3960efb076dfcaf6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-Qhull + purls: [] + size: 552937 + timestamp: 1720813982144 +- conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.1-hca0d9c9_0.conda + sha256: 9b6d229110b0af7d80270cd14dc89acb8264128a29079bea58cee3fef0c5f8d3 + md5: 2ab549dfb24cfbac4cf53ed9ef3d8dfb + depends: + - __glibc >=2.17,<3.0.a0 + - alsa-lib >=1.2.14,<1.3.0a0 + - dbus >=1.16.2,<2.0a0 + - double-conversion >=3.3.1,<3.4.0a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - harfbuzz >=12.2.0 + - icu >=75.1,<76.0a0 + - krb5 >=1.21.3,<1.22.0a0 + - libclang-cpp21.1 >=21.1.6,<21.2.0a0 + - libclang13 >=21.1.6 + - libcups >=2.3.3,<2.4.0a0 + - libdrm >=2.4.125,<2.5.0a0 + - libegl >=1.7.0,<2.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libgl >=1.7.0,<2.0a0 + - libglib >=2.86.2,<3.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libllvm21 >=21.1.6,<21.2.0a0 + - libpng >=1.6.50,<1.7.0a0 + - libpq >=18.1,<19.0a0 + - libsqlite >=3.51.0,<4.0a0 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 + - libvulkan-loader >=1.4.328.1,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libxkbcommon >=1.13.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.4,<4.0a0 + - pcre2 >=10.46,<10.47.0a0 + - wayland >=1.24.0,<2.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + - xcb-util-cursor >=0.1.6,<0.2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxcomposite >=0.4.6,<1.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrandr >=1.5.4,<2.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - xorg-libxxf86vm >=1.1.6,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - qt 6.10.1 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 56495332 + timestamp: 1763747754806 +- conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.1-pl5321h16c4a6b_0.conda + sha256: 787d9a8eb7bb993e4a543901b8edade35c1c8e75d67cadb65c56a8f9c38119a5 + md5: cdae26862f9e4c674b8443fd267f2401 + depends: + - libxcb + - xcb-util + - xcb-util-wm + - xcb-util-keysyms + - xcb-util-image + - xcb-util-renderutil + - xcb-util-cursor + - libgl-devel + - libegl-devel + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - alsa-lib >=1.2.15.3,<1.3.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - double-conversion >=3.4.0,<3.5.0a0 + - dbus >=1.16.2,<2.0a0 + - libglib >=2.88.1,<3.0a0 + - libsqlite >=3.53.1,<4.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libdrm >=2.4.125,<2.5.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - harfbuzz >=14.2.0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - xorg-libxcomposite >=0.4.7,<1.0a0 + - openssl >=3.5.6,<4.0a0 + - xcb-util-cursor >=0.1.6,<0.2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + - xorg-libxxf86vm >=1.1.7,<2.0a0 + - icu >=78.3,<79.0a0 + - libxcb >=1.17.0,<2.0a0 + - wayland >=1.25.0,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libpq >=18.3,<19.0a0 + - libegl >=1.7.0,<2.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - libxkbcommon >=1.13.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - xorg-libxtst >=1.2.5,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libcups >=2.3.3,<2.4.0a0 + - libgl >=1.7.0,<2.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + constrains: + - qt ==6.11.1 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 60185269 + timestamp: 1778597122245 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.8.1-h1fbca29_0.conda + sha256: cf550bbc8e5ebedb6dba9ccaead3e07bd1cb86b183644a4c853e06e4b3ad5ac7 + md5: d83958768626b3c8471ce032e28afcd3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - __glibc >=2.17 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 5595970 + timestamp: 1772540833621 +- conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2025.11.05-h5301d42_1.conda + sha256: 3fc684b81631348540e9a42f6768b871dfeab532d3f47d5c341f1f83e2a2b2b2 + md5: 66a715bc01c77d43aca1f9fcb13dde3c + depends: + - libre2-11 2025.11.05 h0dc7533_1 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 27469 + timestamp: 1768190052132 +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 + md5: d7d95fc8287ea7bf33e0e7116d2b95ec + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 345073 + timestamp: 1765813471974 +- conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2026.5.9-py312h4c3975b_0.conda + sha256: 2d1d20f24cd3274c91ce62215fd86b28c24c33a9381699b00fd95cffe11c1dc4 + md5: 0cee21f9702469ebdd93b4ddc4a2dc3f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 AND CNRI-Python + license_family: PSF + purls: + - pkg:pypi/regex?source=hash-mapping + size: 411061 + timestamp: 1778374143589 +- conda: https://conda.anaconda.org/conda-forge/linux-64/reproject-0.19.0-py312h4f23490_0.conda + sha256: e449b4718d8434c0e9638023118bc77c32539b026bd565046c75b61014ed0bb8 + md5: db0a812a5ebdd7f71a75f34f20069b63 + depends: + - __glibc >=2.17,<3.0.a0 + - astropy-base >=5.0 + - astropy-healpix >=1.0 + - dask >=2024.4.1 + - dask-image >=2025.11.0 + - fsspec >=2021.9 + - libgcc >=14 + - numpy >=1.23 + - numpy >=1.23,<3 + - pillow >=10.0 + - pyavm >=0.9.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - scipy >=1.9 + - shapely + - zarr >=2.17.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/reproject?source=hash-mapping + size: 989593 + timestamp: 1763206506874 +- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.1-h1cbb8d7_1.conda + sha256: dbbe4ab36b90427f12d69fc14a8b601b6bca4185c6c4dd67b8046a8da9daec03 + md5: 9d978822b57bafe72ebd3f8b527bba71 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - openssl >=3.5.5,<4.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 395083 + timestamp: 1773251675551 +- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.3-hc5a330e_0.conda + sha256: 150a0a5254e8b15ad737549721c7d13406cd96432f3f446e07073dbd98bb2491 + md5: f2bd09e21c5844a12e2f5eefcd075555 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - openssl >=3.5.6,<4.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 388111 + timestamp: 1778113913631 +- conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.8.0-np2py312h3226591_1.conda + sha256: 23c643c37fafa14ba3f2b7a407126ea5e732a3655ea8157cf9f977098f863448 + md5: 38decbeae260892040709cafc0514162 + depends: + - python + - numpy >=1.24.1 + - scipy >=1.10.0 + - joblib >=1.3.0 + - threadpoolctl >=3.2.0 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - _openmp_mutex >=4.5 + - numpy >=1.23,<3 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scikit-learn?source=hash-mapping + size: 9726193 + timestamp: 1765801245538 +- conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda + sha256: e3ad577361d67f6c078a6a7a3898bf0617b937d44dc4ccd57aa3336f2b5778dd + md5: 3e38daeb1fb05a95656ff5af089d2e4c + depends: + - __glibc >=2.17,<3.0.a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=14 + - numpy <2.7 + - numpy >=1.23,<3 + - numpy >=1.25.2 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=hash-mapping + size: 17109648 + timestamp: 1771880675810 +- conda: https://conda.anaconda.org/conda-forge/linux-64/scitokens-cpp-1.4.0-h096d96b_0.conda + sha256: 48b6a8088232220d69949916a64c3e8b5fe0f763a47d8a530246cf233181545a + md5: d0b9190c5937652677d4822d8f9abba9 + depends: + - __glibc >=2.17,<3.0.a0 + - libcurl >=8.18.0,<9.0a0 + - libgcc >=14 + - libsqlite >=3.51.2,<4.0a0 + - libstdcxx >=14 + - libuuid >=2.41.3,<3.0a0 + - openssl >=3.5.5,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 2278960 + timestamp: 1771576161131 +- conda: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.2-py312h383787d_2.conda + sha256: da100ac0210f52399faf814f701165058fa2e2f65f5c036cdf2bf99a40223373 + md5: 69e400d3deca12ee7afd4b73a5596905 + depends: + - __glibc >=2.17,<3.0.a0 + - geos >=3.14.1,<3.14.2.0a0 + - libgcc >=14 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/shapely?source=hash-mapping + size: 631649 + timestamp: 1762523699384 +- conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda + sha256: 48f3f6a76c34b2cfe80de9ce7f2283ecb55d5ed47367ba91e8bb8104e12b8f11 + md5: 98b6c9dc80eb87b2519b97bcf7e578dd + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 45829 + timestamp: 1762948049098 +- conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.0.1-hecca717_0.conda + sha256: 4a1d2005153b9454fc21c9bad1b539df189905be49e851ec62a6212c2e045381 + md5: 2a2170a3e5c9a354d09e4be718c43235 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 2619743 + timestamp: 1769664536467 +- conda: https://conda.anaconda.org/conda-forge/linux-64/swig-4.3.1-hf1419ba_4.conda + sha256: 004d184fc0f03addb56801677efc840275b4af13c5a171528041464621dad457 + md5: fe76a95e3e0d1cc4f9e23bedc54d8f39 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - pcre2 >=10.46,<10.47.0a0 + constrains: + - swig-abi ==4 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 1258554 + timestamp: 1761740324989 +- conda: https://conda.anaconda.org/conda-forge/linux-64/swig-4.4.1-h7a96c5f_0.conda + sha256: 45ec1eedd1de2d7985955290015773a4adc9b8ea95d0f839aaabda2ed075d83c + md5: ce50bd18ea2a92833be8b62881929e23 + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - swig-abi ==5 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 1329174 + timestamp: 1773251886390 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac + md5: cffd3bdd58090148f4cfcd831f4b26ab + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + constrains: + - xorg-libx11 >=1.8.12,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3301196 + timestamp: 1769460227866 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda + sha256: 4629b1c9139858fb08bb357df917ffc12e4d284c57ff389806bb3ae476ef4e0a + md5: 2b37798adbc54fd9e591d24679d2133a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + size: 859665 + timestamp: 1774358032165 +- conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py312h4c3975b_0.conda + sha256: 895bbfe9ee25c98c922799de901387d842d7c01cae45c346879865c6a907f229 + md5: 0b6c506ec1f272b685240e70a29261b8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/unicodedata2?source=hash-mapping + size: 410641 + timestamp: 1770909099497 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + sha256: ea374d57a8fcda281a0a89af0ee49a2c2e99cc4ac97cf2e2db7064e74e764bdb + md5: 996583ea9c796e5b915f7d7580b51ea6 + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.7.4,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 334139 + timestamp: 1773959575393 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.2.1-py312h4c3975b_0.conda + sha256: 3d36b297c5f0c1ab0e598760f0033377334a3bfb5c12f4129c2abcb884e2d632 + md5: a4d41bb00f252b99b4b903b3a8fa3ecc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/wrapt?source=compressed-mapping + size: 114800 + timestamp: 1779477451511 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + sha256: ad8cab7e07e2af268449c2ce855cbb51f43f4664936eff679b1f3862e6e4b01d + md5: fdc27cb255a7a2cc73b7919a968b48f0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 20772 + timestamp: 1750436796633 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + sha256: c2be9cae786fdb2df7c2387d2db31b285cf90ab3bfabda8fa75a596c3d20fc67 + md5: 4d1fc190b99912ed557a8236e958c559 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxcb >=1.13 + - libxcb >=1.17.0,<2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 20829 + timestamp: 1763366954390 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + sha256: 94b12ff8b30260d9de4fd7a28cca12e028e572cbc504fd42aa2646ec4a5bded7 + md5: a0901183f08b6c7107aab109733a3c91 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + license: MIT + license_family: MIT + purls: [] + size: 24551 + timestamp: 1718880534789 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + sha256: 546e3ee01e95a4c884b6401284bb22da449a2f4daf508d038fdfa0712fe4cc69 + md5: ad748ccca349aec3e91743e08b5e2b50 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 14314 + timestamp: 1718846569232 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + sha256: 2d401dadc43855971ce008344a4b5bd804aca9487d8ebd83328592217daca3df + md5: 0e0cbe0564d03a99afd5fd7b362feecd + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 16978 + timestamp: 1718848865819 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + sha256: 31d44f297ad87a1e6510895740325a635dd204556aa7e079194a0034cdd7e66a + md5: 608e0ef8256b81d04456e8d211eee3e8 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 51689 + timestamp: 1718844051451 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda + sha256: 19c2bb14bec84b0e995b56b752369775c75f1589314b43733948bb5f471a6915 + md5: b56e0c8432b56decafae7e78c5f29ba5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 399291 + timestamp: 1772021302485 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + sha256: c12396aabb21244c212e488bbdc4abcdef0b7404b15761d9329f5a4a39113c4b + md5: fb901ff28063514abb6046c9ec2c4a45 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 58628 + timestamp: 1734227592886 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + sha256: 277841c43a39f738927145930ff963c5ce4c4dacf66637a3d95d802a64173250 + md5: 1c74ff8c35dcadf952a16f752ca5aa49 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libuuid >=2.38.1,<3.0a0 + - xorg-libice >=1.1.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 27590 + timestamp: 1741896361728 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + sha256: 516d4060139dbb4de49a4dcdc6317a9353fb39ebd47789c14e6fe52de0deee42 + md5: 861fb6ccbc677bb9a9fb2468430b9c6a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 839652 + timestamp: 1770819209719 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + sha256: 6bc6ab7a90a5d8ac94c7e300cc10beb0500eeba4b99822768ca2f2ef356f731b + md5: b2895afaf55bf96a8c8282a2e47a5de0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 15321 + timestamp: 1762976464266 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda + sha256: 048c103000af9541c919deef03ae7c5e9c570ffb4024b42ecb58dbde402e373a + md5: f2ba4192d38b6cef2bb2c25029071d90 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 14415 + timestamp: 1770044404696 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + sha256: 832f538ade441b1eee863c8c91af9e69b356cd3e9e1350fff4fe36cc573fc91a + md5: 2ccd714aa2242315acaf0a67faea780b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + - xorg-libxrender >=0.9.11,<0.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 32533 + timestamp: 1730908305254 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + sha256: 43b9772fd6582bf401846642c4635c47a9b0e36ca08116b3ec3df36ab96e0ec0 + md5: b5fcc7172d22516e1f965490e65e33a4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 13217 + timestamp: 1727891438799 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + sha256: 25d255fb2eef929d21ff660a0c687d38a6d2ccfbcbf0cc6aa738b12af6e9d142 + md5: 1dafce8548e38671bea82e3f5c6ce22f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 20591 + timestamp: 1762976546182 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + sha256: 79c60fc6acfd3d713d6340d3b4e296836a0f8c51602327b32794625826bd052f + md5: 34e54f03dfea3e7a2dcf1453a85f1085 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 50326 + timestamp: 1769445253162 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda + sha256: 83c4c99d60b8784a611351220452a0a85b080668188dce5dfa394b723d7b64f4 + md5: ba231da7fccf9ea1e768caf5c7099b84 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 20071 + timestamp: 1759282564045 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-hb03c661_0.conda + sha256: 495f99c8eacfa4ae2d8fed2a7f2105777af89acdc204df145d2bbbc380ac631b + md5: adba2e334082bb218db806d4c12277c9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 47717 + timestamp: 1779111857071 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda + sha256: 80ed047a5cb30632c3dc5804c7716131d767089f65877813d4ae855ee5c9d343 + md5: e192019153591938acf7322b6459d36e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 30456 + timestamp: 1769445263457 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + sha256: 044c7b3153c224c6cedd4484dd91b389d2d7fd9c776ad0f4a34f099b3389f4a1 + md5: 96d57aba173e878a2089d5638016dc5e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 33005 + timestamp: 1734229037766 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + sha256: 752fdaac5d58ed863bbf685bb6f98092fe1a488ea8ebb7ed7b606ccfce08637a + md5: 7bbe9a0cc0df0ac5f5a8ad6d6a11af2f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxi >=1.7.10,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 32808 + timestamp: 1727964811275 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + sha256: 64db17baaf36fa03ed8fae105e2e671a7383e22df4077486646f7dbf12842c9f + md5: 665d152b9c6e78da404086088077c844 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 18701 + timestamp: 1769434732453 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hb03c661_0.conda + sha256: 7a8c64938428c2bfd016359f9cb3c44f94acc256c6167dbdade9f2a1f5ca7a36 + md5: aa8d21be4b461ce612d8f5fb791decae + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 570010 + timestamp: 1766154256151 +- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad + md5: a77f85f77be52ff59391544bfe73390a + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + purls: [] + size: 85189 + timestamp: 1753484064210 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h909a3a2_5.conda + sha256: 5fabe6cccbafc1193038862b0b0d784df3dae84bc48f12cac268479935f9c8b7 + md5: 6a0eb48e58684cca4d7acc8b7a0fd3c7 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 277694 + timestamp: 1766549572069 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_2.conda + sha256: 245c9ee8d688e23661b95e3c6dd7272ca936fabc03d423cdb3cdee1bbcf9f2f2 + md5: c2a01a08fc991620a74b32420e97868a + depends: + - __glibc >=2.17,<3.0.a0 + - libzlib 1.3.2 h25fd6f3_2 + license: Zlib + license_family: Other + purls: [] + size: 95931 + timestamp: 1774072620848 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + sha256: ea4e50c465d70236408cb0bfe0115609fd14db1adcd8bd30d8918e0291f8a75f + md5: 2aadb0d17215603a82a2a6b0afd9a4cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Zlib + license_family: Other + purls: [] + size: 122618 + timestamp: 1770167931827 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 + md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 + depends: + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 601375 + timestamp: 1764777111296 +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661 + md5: aaa2a381ccc56eac91d63b6c1240312f + depends: + - cpython + - python-gil + license: MIT + license_family: MIT + purls: [] + size: 8191 + timestamp: 1744137672556 +- conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 + sha256: b91f8ab4ac2b48972fbee1fc8e092cc452fdf59156e4ff2322c94bbf73650f94 + md5: c88eaec8de9ae1fa161205aa18e7a5b1 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/antlr4-python3-runtime?source=hash-mapping + size: 101065 + timestamp: 1638309284042 +- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda + sha256: 97cfef648c974a3dd30817ada5052517b86055565142ac4a77d9a91944c3cbcb + md5: 1bdec040ccaa9e12ccbfebe45c358485 + depends: + - python >=3.12 + - arviz-base >=1.1.0,<1.2.0 + - arviz-stats >=1.1.0,<1.2.0 + - arviz-plots >=1.1.0,<1.2.0 + - matplotlib-base >=3.9 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/arviz?source=hash-mapping + size: 20579 + timestamp: 1777024093826 +- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda + sha256: 8e3351000e341f9a8d93488d07448b40065e312a698f9d1c02659dc009281e6f + md5: a94d579ff5f766bbf8b3cea3fed770e9 + depends: + - lazy_loader >=0.4 + - numpy >=2 + - python >=3.12 + - typing_extensions >=3.10 + - xarray >=2024.11.0 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/arviz-base?source=hash-mapping + size: 1381907 + timestamp: 1777009421241 +- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda + sha256: 4b2dcf51a01523e1b6eaa27b1ec9b3bb1c4163d1f27d2765f6eb885e74fddcb9 + md5: 61026a34eb9dce29cca3f1ddf223f3be + depends: + - python >=3.12 + - arviz-base >=1.1,<1.2 + - arviz-stats >=1.1,<1.2 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/arviz-plots?source=hash-mapping + size: 137020 + timestamp: 1777017305884 +- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda + sha256: 73e9cff67f93ba698c18dd49a11fbd6075af9628e74c5a9e2abdf52e9c2e80cf + md5: 0ad838e88323a0ab00e5c23d73e294c7 + depends: + - python >=3.12 + - arviz-stats-core ==1.1.0 pyhc364b38_0 + - arviz-base >=1.1.0,<1.2.0 + - xarray-einstats + - xarray >=2024.11.0 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/arviz-stats?source=hash-mapping + size: 142751 + timestamp: 1777012484760 +- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + sha256: 8ed0c2728b2c0ec9560ab2fe063f635fb7767718957b0b8481ba11ce7ee44284 + md5: 569718751577f8663a0996cf7303aa87 + depends: + - python >=3.12 + - numpy >=2 + - scipy >=1.13 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/arviz-stats?source=hash-mapping + size: 142674 + timestamp: 1777012484760 +- conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda + sha256: cc2ae4924d4ca8e5d411cb40d686c698e570ed80b96f9a3b247e97d85de91182 + md5: a1539d8a811402e8f5e1f9ee69197fd4 + depends: + - astropy-base >=4 + - matplotlib-base + - numpy >=1.17 + - python >=3.9 + - pytz + - six + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/astroplan?source=hash-mapping + size: 71853 + timestamp: 1734484572825 +- conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda + sha256: b2e2c6f4451388ca22e9a6ea57aadfc2dae7b380c5ccf7a676ad689ff5aff089 + md5: bc2a4cd601a4d4675d5f726c2195934c + depends: + - python >=3.10 + license: BSD-3-Clause + purls: + - pkg:pypi/astropy-iers-data?source=compressed-mapping + size: 1233982 + timestamp: 1779676762952 +- conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda + sha256: 96a6486d4fe27c02c1092a40096dfd82043929b3a7da156a49b28d851159c551 + md5: b9a6da57e94cd12bd71e7ab0713ef052 + depends: + - contourpy >=1.2 + - jinja2 >=2.9 + - narwhals >=1.13 + - numpy >=1.16 + - packaging >=16.8 + - pillow >=7.1.0 + - python >=3.10 + - pyyaml >=3.10 + - tornado >=6.2 + - xyzservices >=2021.09.1 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/bokeh?source=hash-mapping + size: 4240579 + timestamp: 1773302678722 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda + sha256: 9812a303a1395e1dafbd92e5bc8a1ff6013bcbba0a09c7f03a8d23e43560aa9b + md5: 489b8e97e666c93f68fdb35c3c9b957f + depends: + - __unix + license: ISC + purls: [] + size: 129868 + timestamp: 1779289852439 +- conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + noarch: python + sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 + md5: 9b347a7ec10940d3f7941ff6c460b551 + depends: + - cached_property >=1.5.2,<1.5.3.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4134 + timestamp: 1615209571450 +- conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 + md5: 576d629e47797577ab0f1b351297ef4a + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cached-property?source=hash-mapping + size: 11065 + timestamp: 1615209567874 +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda + sha256: 645655a3510e38e625da136595f3f16f2130c3263630cc3bc8f60f619ddbe490 + md5: 9fefff2f745ea1cc2ef15211a20c054a + depends: + - python >=3.10 + license: ISC + purls: + - pkg:pypi/certifi?source=compressed-mapping + size: 134201 + timestamp: 1779285131141 +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + sha256: 3f9483d62ce24ecd063f8a5a714448445dc8d9e201147c46699fc0033e824457 + md5: a9167b9571f3baa9d448faa2139d1089 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/charset-normalizer?source=hash-mapping + size: 58872 + timestamp: 1775127203018 +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda + sha256: 99ab8ef815c4520cce3a7482c2513f377c14348206857661d84c76a55e030f97 + md5: 003767c47f1f0a474c4de268b57839c3 + depends: + - __unix + - python + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=compressed-mapping + size: 104631 + timestamp: 1779108494556 +- conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda + sha256: 4c287c2721d8a34c94928be8fe0e9a85754e90189dd4384a31b1806856b50a67 + md5: 61b8078a0905b12529abc622406cb62c + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cloudpickle?source=hash-mapping + size: 27353 + timestamp: 1765303462831 +- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 + md5: 962b9857ee8e7018c22f2776ffa0b2d7 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 27011 + timestamp: 1733218222191 +- conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda + sha256: 0cd1c3b4d7a2ba10c34752d48ca7a5d758618dabc58e459f5126701672ff33cf + md5: cacf4ba53cf0341b2aa9d2755a5f5a98 + depends: + - arviz >=0.9 + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/corner?source=hash-mapping + size: 20423 + timestamp: 1734278657058 +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + noarch: generic + sha256: d3e9bbd7340199527f28bbacf947702368f31de60c433a16446767d3c6aaf6fe + md5: f54c1ffb8ecedb85a8b7fcde3a187212 + depends: + - python >=3.12,<3.13.0a0 + - python_abi * *_cp312 + license: Python-2.0 + purls: [] + size: 46463 + timestamp: 1772728929620 +- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + sha256: bb47aec5338695ff8efbddbc669064a3b10fe34ad881fb8ad5d64fbfa6910ed1 + md5: 4c2a8fef270f6c69591889b93f9f55c1 + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cycler?source=hash-mapping + size: 14778 + timestamp: 1764466758386 +- conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda + sha256: fe59c26dc20a47aa56fc38a2326f2a62403f3eed366837c1a0fba166a220d2b7 + md5: f9761ef056ba0ccef16e01cfceee62c2 + depends: + - python >=3.10 + - dask-core >=2026.3.0,<2026.3.1.0a0 + - distributed >=2026.3.0,<2026.3.1.0a0 + - cytoolz >=0.11.2 + - lz4 >=4.3.2 + - numpy >=1.26 + - pandas >=2.0 + - bokeh >=3.1.0 + - jinja2 >=2.10.3 + - pyarrow >=16.0 + - python + constrains: + - openssl !=1.1.1e + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 11383 + timestamp: 1773913283482 +- conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda + sha256: 5497e56b12b8a07921668f6469d725be9826ffe5ae8a2f6f71d26369400b41ca + md5: 809f4cde7c853f437becc43415a2ecdf + depends: + - python >=3.10 + - click >=8.1 + - cloudpickle >=3.0.0 + - fsspec >=2021.9.0 + - packaging >=20.0 + - partd >=1.4.0 + - pyyaml >=5.3.1 + - toolz >=0.12.0 + - importlib-metadata >=4.13.0 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/dask?source=hash-mapping + size: 1066502 + timestamp: 1773823162829 +- conda: https://conda.anaconda.org/conda-forge/noarch/dask-image-2025.11.0-pyhd8ed1ab_0.conda + sha256: e20bfbd456d6e4d52756d191803033f414a7fe1c6afa9c7311fb52b60b74555e + md5: 6be108f5a63f7ba1c2cb9b15a0836b6c + depends: + - dask >=2024.4.1 + - dask-core >=2024.4.1 + - numpy >=1.18 + - pandas >=2.0.0 + - pims >=0.4.1 + - python >=3.9 + - scipy >=1.7.0 + - tifffile >=2018.10.18 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/dask-image?source=hash-mapping + size: 69018 + timestamp: 1763075350614 +- conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.4.0-pyhd8ed1ab_0.conda + sha256: 9ccdd848db68efc03afbf5fc67e92accc912c0b609a4f4ba54b720f0c27c41a2 + md5: 4d8650857be15983a33032bf18059787 + depends: + - python >=3.10 + - python-dateutil >=2.7.0 + - pytz >=2024.2 + - regex >=2024.9.11 + - tzlocal >=0.2 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/dateparser?source=hash-mapping + size: 180549 + timestamp: 1774525022824 +- conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + sha256: 430bd9d731b265f0bedb3183ac3ecfaa1656390c092b6e864ff8cc1229843c8c + md5: 61dcf784d59ef0bd62c57d982b154ace + depends: + - python >=3.10 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/decorator?source=compressed-mapping + size: 16102 + timestamp: 1779115228886 +- conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda + sha256: 7d57a7b8266043ffb99d092ebc25e89a0a2490bed4146b9432c83c2c476fa94d + md5: 5498feb783ab29db6ca8845f68fa0f03 + depends: + - python >=3.10 + - wrapt <3,>=1.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/deprecated?source=hash-mapping + size: 15896 + timestamp: 1768934186726 +- conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2026.3.0-pyhc364b38_0.conda + sha256: 49cbb318f7a1797b9f17c135c9b5c48ba2086570a58c99054d3b40bf13a5b815 + md5: 8efb90a27e3b948514a428cb99f3fc70 + depends: + - python >=3.10 + - click >=8.0 + - cloudpickle >=3.0.0 + - cytoolz >=0.12.0 + - dask-core >=2026.3.0,<2026.3.1.0a0 + - jinja2 >=2.10.3 + - locket >=1.0.0 + - msgpack-python >=1.0.2 + - packaging >=20.0 + - psutil >=5.8.0 + - pyyaml >=5.4.1 + - sortedcontainers >=2.0.5 + - tblib >=1.6.0 + - toolz >=0.12.0 + - tornado >=6.2.0 + - urllib3 >=1.26.5 + - zict >=3.0.0 + - python + constrains: + - openssl !=1.1.1e + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/distributed?source=hash-mapping + size: 845608 + timestamp: 1773858577032 +- conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda + sha256: d58e97d418f71703e822c422af5b9c431e3621a0ecdc8b0334c1ca33e076dfe7 + md5: c56a7fa5597ad78b62e1f5d21f7f8b8f + depends: + - python >=3.9 + - pyyaml + license: MIT + license_family: MIT + purls: + - pkg:pypi/donfig?source=hash-mapping + size: 22491 + timestamp: 1734368817583 +- conda: https://conda.anaconda.org/conda-forge/noarch/dqsegdb2-1.3.0-pyhd8ed1ab_0.conda + sha256: 943d9927e3201123136379cbad784905f7657b631880f7b8fdaca197095d4baa + md5: 8e8f1ccdd98ef1eed28063e0b14d488d + depends: + - click >=6.7 + - igwn-auth-utils >=1.0.0 + - igwn-segments >=2.0.0 + - python >=3.9 + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/dqsegdb2?source=hash-mapping + size: 28326 + timestamp: 1736356382409 +- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144 + md5: 8e662bd460bda79b1ea39194e3c4c9ab + depends: + - python >=3.10 + - typing_extensions >=4.6.0 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 21333 + timestamp: 1763918099466 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b + md5: 0c96522c6bdaed4b1566d11387caaf45 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 397370 + timestamp: 1566932522327 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c + md5: 34893075a5c9e55cdafac56607368fc6 + license: OFL-1.1 + license_family: Other + purls: [] + size: 96530 + timestamp: 1620479909603 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 + md5: 4d59c254e01d9cde7957100457e2d5fb + license: OFL-1.1 + license_family: Other + purls: [] + size: 700814 + timestamp: 1620479612257 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 + md5: 49023d73832ef61042f6a237cb2687e7 + license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 + license_family: Other + purls: [] + size: 1620504 + timestamp: 1727511233259 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 + md5: fee5683a3f04bd15cbd8318b096a27ab + depends: + - fonts-conda-forge + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3667 + timestamp: 1566974674465 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 + md5: a7970cd949a077b7cb9696379d338681 + depends: + - font-ttf-ubuntu + - font-ttf-inconsolata + - font-ttf-dejavu-sans-mono + - font-ttf-source-code-pro + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4059 + timestamp: 1762351264405 +- conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.4.0-pyhd8ed1ab_0.conda + sha256: 079701b4ff3b317a1a158cabd48cf2b856b8b8d3ef44f152809d9acf20cc8e10 + md5: 2c11aa96ea85ced419de710c1c3a78ff + depends: + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/fsspec?source=hash-mapping + size: 149694 + timestamp: 1777547807038 +- conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_2.conda + sha256: 45dfd037889b7075c5eb46394f93172de0be0b1624c7f802dd3ecc94b814d8e0 + md5: 1054c53c95d85e35b88143a3eda66373 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/future?source=hash-mapping + size: 364561 + timestamp: 1738926525117 +- conda: https://conda.anaconda.org/conda-forge/noarch/gwdatafind-2.1.1-pyh707e725_0.conda + sha256: 3fc49a834431d7fbe40579a9577422c5d820d3cca027da9d4b054013944b2713 + md5: a001fbdeb771cafde9c2e1e6c3ba66fd + depends: + - __unix + - igwn-auth-utils >=0.3.1 + - igwn-segments + - python >=3.10 + constrains: + - lscsoft-glue >=2.0.0 + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/gwdatafind?source=hash-mapping + size: 40668 + timestamp: 1762163422217 +- conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda + sha256: e4c2f6b1c389fb551585cb7ba28d5830b8d91c991108f98202aec12f95ee6b63 + md5: 62fb0f6327a3c8cfc64f222aa3c012b0 + depends: + - python >=3.10 + - requests >=1.0.0 + - tenacity + license: MIT + license_family: MIT + purls: + - pkg:pypi/gwosc?source=hash-mapping + size: 32622 + timestamp: 1775579303307 +- conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda + sha256: ee29b7f28126612f313212d0852e4bac062839cab82d950ea9ab676ccb3b9f58 + md5: ac9dec4c551b055e5b86d9b1fca0356b + depends: + - astropy-base >=6.1.6 + - dateparser >=1.2.0 + - dqsegdb2 >=1.3.0 + - gwdatafind >=2.0.0 + - gwosc >=0.6.0 + - h5py >=3.11.0 + - igwn-segments >=2.0.0 + - ligotimegps >=2.1.0 + - matplotlib-base >=3.8.0 + - numpy >=1.24.4 + - packaging >=24.2 + - python >=3.11 + - python-dateutil >=2.9.0 + - requests >=2.32.3 + - scipy >=1.12.0 + - tqdm >=4.67.0 + - python + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/gwpy?source=hash-mapping + size: 1260379 + timestamp: 1770114269741 +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3 + md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 + depends: + - python >=3.10 + - hyperframe >=6.1,<7 + - hpack >=4.1,<5 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/h2?source=hash-mapping + size: 95967 + timestamp: 1756364871835 +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba + md5: 0a802cb9888dd14eeefc611f05c40b6e + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping + size: 30731 + timestamp: 1737618390337 +- conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda + sha256: 40b4469bd65e0156de1136ae8b265f5d2d72f14b8d431e009836d59438339ee8 + md5: a189dd36bcaaf4c7647deb2dcb4e1b05 + depends: + - antlr-python-runtime 4.9.* + - omegaconf >=2.2,<2.4 + - packaging + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hydra-core?source=hash-mapping + size: 110015 + timestamp: 1736934833060 +- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 + md5: 8e6923fc12f1fe8f8c4e5c9f343256ac + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperframe?source=hash-mapping + size: 17397 + timestamp: 1737618427549 +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda + sha256: 3d25f9f6f7ab3e1ce6429fc8c8aae0335cf446692e715068488536d220cc43de + md5: 1b9083b7f00609605d1483dbc6071a81 + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/idna?source=compressed-mapping + size: 62642 + timestamp: 1779294335905 +- conda: https://conda.anaconda.org/conda-forge/noarch/igwn-auth-utils-1.4.0-pyh707e725_0.conda + sha256: 6ac42aea820d0c5f5d240f330d6f591d100c22e56800790aab89ee85d9de8e12 + md5: ece2973a2bc0a03fbae8107f0feb7d48 + depends: + - __unix + - cryptography >=44.0.1 + - htgettoken >=2.1 + - python >=3.9 + - python-gssapi >=1.9.0 + - requests >=2.32.0 + - safe-netrc >=1.0.0 + - scitokens >=1.8.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/igwn-auth-utils?source=hash-mapping + size: 33429 + timestamp: 1748854840055 +- conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + sha256: 8ef69fa00c68fad34a3b7b260ea774fda9bd9274fd706d3baffb9519fd0063fe + md5: b5577bc2212219566578fd5af9993af6 + depends: + - numpy + - pillow >=8.3.2 + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/imageio?source=hash-mapping + size: 293226 + timestamp: 1738273949742 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + sha256: 43e2a5497cad1598ff88a3e69f69bc88b7b8f141fa63c60eab5db296317318b8 + md5: ffc17e785d64e12fc311af9184221839 + depends: + - python >=3.10 + - zipp >=3.20 + - python + license: Apache-2.0 + purls: + - pkg:pypi/importlib-metadata?source=compressed-mapping + size: 34766 + timestamp: 1779714582554 +- conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + sha256: e1a9e3b1c8fe62dc3932a616c284b5d8cbe3124bbfbedcf4ce5c828cb166ee19 + md5: 9614359868482abba1bd15ce465e3c42 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/iniconfig?source=hash-mapping + size: 13387 + timestamp: 1760831448842 +- conda: https://conda.anaconda.org/conda-forge/noarch/invoke-3.0.3-pyhd8ed1ab_0.conda + sha256: d7421c54944dec04d2671e23196a15583d48f309d06fbcf995b5dfa6d586a5e9 + md5: 4dee387356d58bdc4b686ae3424fbd9e + depends: + - python >=3.10 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/invoke?source=hash-mapping + size: 133811 + timestamp: 1775579645825 +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b + md5: 04558c96691bed63104678757beb4f8d + depends: + - markupsafe >=2.0 + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jinja2?source=hash-mapping + size: 120685 + timestamp: 1764517220861 +- conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + sha256: 301539229d7be6420c084490b8145583291123f0ce6b92f56be5948a2c83a379 + md5: 615de2a4d97af50c350e5cf160149e77 + depends: + - python >=3.10 + - setuptools + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/joblib?source=hash-mapping + size: 226448 + timestamp: 1765794135253 +- conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda + sha256: 0a3b690b4c0601319607b7fd4ba2eefcd87dc6a4b39d5ad6b50d8e4cb16f7442 + md5: d14d799f3aec31b2eb761e3d394f7bab + depends: + - numpy + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jplephem?source=hash-mapping + size: 41950 + timestamp: 1772477050871 +- conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda + sha256: fbd26ebb49c4ce186ed428b1528089b1aa40b946e69829718ae6076ebc968c2f + md5: f7b845c0a254c3ec1fecfc1bfae307ad + depends: + - lal 7.7.0.* + - lalapps 10.1.0.* + - lalburst 2.0.7.* + - lalframe 3.0.7.* + - lalinference 4.1.9.* + - lalinspiral 5.0.3.* + - lalmetaio 4.0.6.* + - lalpulsar 7.1.1.* + - lalsimulation 6.2.0.* + - python >=3.10 + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/lalsuite?source=hash-mapping + size: 16793 + timestamp: 1748464747617 +- conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda + sha256: 1a88069ac61d2756ccaf26a6c206ab4d56610fb054bd2fffb5df4cd0744ab78e + md5: 75932da6f03a6bef32b70a51e991f6eb + depends: + - packaging + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/lazy-loader?source=hash-mapping + size: 14883 + timestamp: 1772817374026 +- conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + sha256: 42adb08ded0662114a3146627b24d2cd5eba3bfc3ed424374bac869cdc1745a9 + md5: 4c8327180586e7b1cd8b6815fc8827f1 + depends: + - lazy-loader 0.5 pyhd8ed1ab_0 + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7565 + timestamp: 1772817387506 +- conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda + sha256: 13efdfebcdbd05b753f0731364200ba34e217211610ed1390e32bb4f228762f8 + md5: 495229a27540f4a8a74458d03509ecb6 + depends: + - cryptography >=1.7.2 + - future >=0.15.0 + - igwn-auth-utils >=1.0.0 + - python >=3.10 + - requests >=2.6.0 + - python + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/ligo-gracedb?source=hash-mapping + size: 2286879 + timestamp: 1775146909865 +- conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda + sha256: 15f32bee2a8e2dee908f06a2737ffa73bdcace49fae85b5fb33a02a8f178cb9c + md5: 48ffbc346313b1b98f5fc4bdee8fdc52 + depends: + - python >=3.11 + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/ligotimegps?source=hash-mapping + size: 26877 + timestamp: 1759852472917 +- conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + sha256: 9afe0b5cfa418e8bdb30d8917c5a6cec10372b037924916f1f85b9f4899a67a6 + md5: 91e27ef3d05cc772ce627e51cff111c4 + depends: + - python >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.* + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/locket?source=hash-mapping + size: 8250 + timestamp: 1650660473123 +- conda: https://conda.anaconda.org/conda-forge/noarch/lscsoft-glue-4.1.1-pyhd8ed1ab_0.conda + sha256: 7274143fbb34f473bca5f8a1c72c76c9845e00617b6cc9679903b6a574ee6a1b + md5: fc8ec1081b314a802e3905b5d0ac2689 + depends: + - igwn-segments + - python >=3.9 + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/lscsoft-glue?source=hash-mapping + size: 50615 + timestamp: 1759328954284 +- conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + sha256: 5bbf2f8179ec43d34d67ca8e4989d216c1bdb4b749fe6cb40e86ebf88c1b5300 + md5: 2e81b32b805f406d23ba61938a184081 + depends: + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/mpmath?source=hash-mapping + size: 464918 + timestamp: 1773662068273 +- conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + sha256: d09c47c2cf456de5c09fa66d2c3c5035aa1fa228a1983a433c47b876aa16ce90 + md5: 37293a85a0f4f77bbd9cf7aaefc62609 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/munkres?source=hash-mapping + size: 15851 + timestamp: 1749895533014 +- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda + sha256: 70f43d62450927d51673eecd8823e14f5b3cfebdb43cda1d502eba97162bab42 + md5: 6687827c332121727ce383919e1ec8c2 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/narwhals?source=compressed-mapping + size: 284323 + timestamp: 1778929680962 +- conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda + sha256: aeb1548eb72e4f198e72f19d242fb695b35add2ac7b2c00e0d83687052867680 + md5: e941e85e273121222580723010bd4fa2 + depends: + - python >=3.9 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/natsort?source=hash-mapping + size: 39262 + timestamp: 1770905275632 +- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + sha256: f6a82172afc50e54741f6f84527ef10424326611503c64e359e25a19a8e4c1c6 + md5: a2c1eeadae7a309daed9d62c96012a2b + depends: + - python >=3.11 + - python + constrains: + - numpy >=1.25 + - scipy >=1.11.2 + - matplotlib-base >=3.8 + - pandas >=2.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/networkx?source=hash-mapping + size: 1587439 + timestamp: 1765215107045 +- conda: https://conda.anaconda.org/conda-forge/noarch/omegaconf-2.3.0-pyhd8ed1ab_0.conda + sha256: df806841be847e5287b22b6ae7f380874f81ea51f1b51ae14a570f3385c7b133 + md5: 23cc056834cab53849b91f78d6ee3ea0 + depends: + - antlr-python-runtime 4.9.* + - python >=3.7 + - pyyaml >=5.1.0 + - typing_extensions + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/omegaconf?source=hash-mapping + size: 166453 + timestamp: 1670575519562 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + sha256: 3906abfb6511a3bb309e39b9b1b7bc38f50a723971de2395489fd1f379255890 + md5: 4c06a92e74452cfa53623a81592e8934 + depends: + - python >=3.8 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 91574 + timestamp: 1777103621679 +- conda: https://conda.anaconda.org/conda-forge/noarch/paramiko-5.0.0-pyhd8ed1ab_0.conda + sha256: 1b64a1b91b57c2a4c42a9e73b9a544e22fcdac55a953d2c09644b184edde7c3f + md5: e7fa4da3b74ededb2fa7ab4171f63d21 + depends: + - bcrypt >=3.2 + - cryptography >=3.3 + - invoke >=2.0 + - pynacl >=1.5 + - python >=3.10 + license: LGPL-2.1-or-later + license_family: LGPL + purls: + - pkg:pypi/paramiko?source=hash-mapping + size: 152584 + timestamp: 1778365181112 +- conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + sha256: 472fc587c63ec4f6eba0cc0b06008a6371e0a08a5986de3cf4e8024a47b4fe6c + md5: 0badf9c54e24cecfb0ad2f99d680c163 + depends: + - locket + - python >=3.9 + - toolz + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/partd?source=hash-mapping + size: 20884 + timestamp: 1715026639309 +- conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda + sha256: cc9521b3a517c9c0f5097a96ed2285b89ba3ee291320a26100261fea2130f8bf + md5: 146adfd93cac5e7c6b5def8f39c917cd + depends: + - imageio + - jinja2 + - numpy >=1.19 + - packaging + - pillow + - python >=3.9 + - slicerator >=1.1.0 + - tifffile + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pims?source=hash-mapping + size: 71357 + timestamp: 1734051228623 +- conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + sha256: 1bd94ef1ae08fd811ef3b26857e46ba460c7430bf1f3ccd94a4d6614fd619bd5 + md5: 35870d32aed92041d31cbb15e822dca3 + depends: + - python >=3.10,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip?source=hash-mapping + size: 1201616 + timestamp: 1777924080196 +- conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + sha256: e14aafa63efa0528ca99ba568eaf506eb55a0371d12e6250aaaa61718d2eb62e + md5: d7585b6550ad04c8c5e21097ada2888e + depends: + - python >=3.9 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/pluggy?source=hash-mapping + size: 25877 + timestamp: 1764896838868 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda + sha256: f232f80b489147cf447bbaa20bf3cf42f6df3059a92f5a4643f7422260e70771 + md5: 559e5051ce00d853e61f3f47e0b47115 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyavm?source=hash-mapping + size: 212409 + timestamp: 1773694994752 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda + sha256: 71a9524f44d6ac6304feae71e2bbe8d8ce0816f0be7a0271c15681ad1040965d + md5: e0f4549ccb507d4af8ed5c5345210673 + depends: + - python >=3.8 + - pybind11-global ==3.0.3 *_0 + - python + constrains: + - pybind11-abi ==11 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pybind11?source=hash-mapping + size: 247963 + timestamp: 1775004608640 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda + sha256: 97a0fbd2a81d95e90d714e5c628fe860b29a3caad53abcfb90add1965ad85bef + md5: 7fdc3e18c14b862ae5f064c1ea8e2636 + depends: + - python >=3.8 + - __unix + - python + constrains: + - pybind11-abi ==11 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pybind11-global?source=hash-mapping + size: 243898 + timestamp: 1775004520432 +- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + sha256: e27e0473fc6723311a0bd48b89b616fa1b996a2f7a2b555338cbbcfb9c640568 + md5: 9c5491066224083c41b6d5635ed7107b + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pycparser?source=compressed-mapping + size: 55886 + timestamp: 1779293633166 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + sha256: cf70b2f5ad9ae472b71235e5c8a736c9316df3705746de419b59d442e8348e86 + md5: 16c18772b340887160c79a6acc022db0 + depends: + - python >=3.10 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping + size: 893031 + timestamp: 1774796815820 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.13.0-pyhcf101f3_0.conda + sha256: 58cda7489477fecb859ec95bf73cba7e4634db1a517e29e0d3086d7ec71733ae + md5: edb808d7f7396478ab6e457e697b8ec5 + depends: + - python >=3.10 + - typing_extensions >=4.0 + - python + constrains: + - cryptography >=3.4.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyjwt?source=hash-mapping + size: 33417 + timestamp: 1779400286454 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + sha256: 417fba4783e528ee732afa82999300859b065dc59927344b4859c64aae7182de + md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyparsing?source=hash-mapping + size: 110893 + timestamp: 1769003998136 +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 + md5: 461219d1a5bd61342293efa2c0c90eac + depends: + - __unix + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pysocks?source=hash-mapping + size: 21085 + timestamp: 1733217331982 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda + sha256: 960f59442173eee0731906a9077bd5ccf60f4b4226f05a22d1728ab9a21a879c + md5: 6a991452eadf2771952f39d43615bb3e + depends: + - colorama >=0.4 + - pygments >=2.7.2 + - python >=3.10 + - iniconfig >=1.0.1 + - packaging >=22 + - pluggy >=1.5,<2 + - tomli >=1 + - exceptiongroup >=1 + - python + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping + size: 299984 + timestamp: 1775644472530 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 + md5: 5b8d21249ff20967101ffa321cab24e8 + depends: + - python >=3.9 + - six >=1.5 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/python-dateutil?source=hash-mapping + size: 233310 + timestamp: 1751104122689 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + sha256: 97327b9509ae3aae28d27217a5d7bd31aff0ab61a02041e9c6f98c11d8a53b29 + md5: 32780d6794b8056b78602103a04e90ef + depends: + - cpython 3.12.13.* + - python_abi * *_cp312 + license: Python-2.0 + purls: [] + size: 46449 + timestamp: 1772728979370 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + build_number: 8 + sha256: 80677180dd3c22deb7426ca89d6203f1c7f1f256f2d5a94dc210f6e758229809 + md5: c3efd25ac4d74b1584d2f7a57195ddf1 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6958 + timestamp: 1752805918820 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda + sha256: 5020863d629f584b5c057333a67a7aed43e3ed013ba15dd70f353501ccb5aff6 + md5: 03cb60f505ad3ada0a95277af5faeb1a + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytz?source=hash-mapping + size: 201747 + timestamp: 1777892201250 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + sha256: 1715246b19c9f85ee022933b4845f2fc14ac9184981b7b7d9b728bec8e9588da + md5: 4a85203c1d80c1059086ae860836ffb9 + depends: + - python >=3.10 + - certifi >=2023.5.7 + - charset-normalizer >=2,<4 + - idna >=2.5,<4 + - urllib3 >=1.26,<3 + - python + constrains: + - chardet >=3.0.2,<8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/requests?source=compressed-mapping + size: 68709 + timestamp: 1778851103479 +- conda: https://conda.anaconda.org/conda-forge/noarch/safe-netrc-1.0.1-pyhd8ed1ab_1.conda + sha256: 644be784d3e33521464c7bb5d8830e2537f7a1feb1d618d36f05b7548e0852b5 + md5: fe7b13f5c99a4d31ca9f3f8de2c781d4 + depends: + - python >=3.10 + license: GPL-2.0-or-later + license_family: GPL + purls: + - pkg:pypi/safe-netrc?source=hash-mapping + size: 16997 + timestamp: 1764943298569 +- conda: https://conda.anaconda.org/conda-forge/noarch/scitokens-1.9.7-pyhcf101f3_0.conda + sha256: 46b0d97e9faea846013818d300bb45650522909fc44bef974e370131922c5982 + md5: e3e616e3d47c4956869a6c54b02ed2a3 + depends: + - cryptography + - pyjwt >=1.6.1 + - python >=3.10 + - requests + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/scitokens?source=hash-mapping + size: 54753 + timestamp: 1773654272163 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + sha256: 82088a6e4daa33329a30bc26dc19a98c7c1d3f05c0f73ce9845d4eab4924e9e1 + md5: 8e194e7b992f99a5015edbd4ebd38efd + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 639697 + timestamp: 1773074868565 +- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d + md5: 3339e3b65d58accf4ca4fb8748ab16b3 + depends: + - python >=3.9 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/six?source=hash-mapping + size: 18455 + timestamp: 1753199211006 +- conda: https://conda.anaconda.org/conda-forge/noarch/slicerator-1.1.0-pyhd8ed1ab_1.conda + sha256: 5340c36cb62b7c8a22c267254c037302fea2670a4fb9d29e10ba36565e2a5510 + md5: 102f1100ad3dcbcf57f789600c9c015a + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/slicerator?source=hash-mapping + size: 15755 + timestamp: 1734051114500 +- conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + sha256: d1e3e06b5cf26093047e63c8cc77b70d970411c5cbc0cb1fad461a8a8df599f7 + md5: 0401a17ae845fa72c7210e206ec5647d + depends: + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/sortedcontainers?source=hash-mapping + size: 28657 + timestamp: 1738440459037 +- conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda + sha256: 6b549360f687ee4d11bf85a6d6a276a30f9333df1857adb0fe785f0f8e9bcd60 + md5: f88bb644823094f436792f80fba3207e + depends: + - python >=3.10 + - python + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/tblib?source=hash-mapping + size: 19397 + timestamp: 1762956379123 +- conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda + sha256: 32e75900d6a094ffe4290a8c9f1fa15744d9da8ff617aba4acaa0f057a065c34 + md5: 043f0599dc8aa023369deacdb5ac24eb + depends: + - python >=3.10 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/tenacity?source=hash-mapping + size: 31404 + timestamp: 1770510172846 +- conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + sha256: 6016672e0e72c4cf23c0cf7b1986283bd86a9c17e8d319212d78d8e9ae42fdfd + md5: 9d64911b31d57ca443e9f1e36b04385f + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/threadpoolctl?source=hash-mapping + size: 23869 + timestamp: 1741878358548 +- conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + sha256: 697713f87c67560632a8a51d821ace70f5bd5a651f9a15ef626f2bc876fbf71d + md5: 9e1e5fe19dac2c52edb0f9807dba3c4c + depends: + - imagecodecs >=2026.3.6 + - numpy >=2.1 + - python >=3.12 + constrains: + - matplotlib-base >=3.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/tifffile?source=compressed-mapping + size: 209283 + timestamp: 1778926406601 +- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + sha256: 91cafdb64268e43e0e10d30bd1bef5af392e69f00edd34dfaf909f69ab2da6bd + md5: b5325cf06a000c5b14970462ff5e4d58 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=hash-mapping + size: 21561 + timestamp: 1774492402955 +- conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda + sha256: 4e379e1c18befb134247f56021fdf18e112fb35e64dd1691858b0a0f3bea9a45 + md5: c07a6153f8306e45794774cf9b13bd32 + depends: + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/toolz?source=hash-mapping + size: 53978 + timestamp: 1760707830681 +- conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda + sha256: 9ef8e47cf00e4d6dcc114eb32a1504cc18206300572ef14d76634ba29dfe1eb6 + md5: e5ce43272193b38c2e9037446c1d9206 + depends: + - python >=3.10 + - __unix + - python + license: MPL-2.0 and MIT + purls: + - pkg:pypi/tqdm?source=hash-mapping + size: 94132 + timestamp: 1770153424136 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 + md5: 0caa1af407ecff61170c9437a808404d + depends: + - python >=3.10 + - python + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 51692 + timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c + md5: ad659d0a2b3e47e38d829aa8cad2d610 + license: LicenseRef-Public-Domain + purls: [] + size: 119135 + timestamp: 1767016325805 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzlocal-5.3.1-pyh8f84b5b_0.conda + sha256: 6447388bd870ab0a2b38af5aa64185cd71028a2a702f0935e636a01d81fba7fc + md5: 369f3170d6f727d3102d83274e403b66 + depends: + - python >=3.10 + - __unix + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/tzlocal?source=hash-mapping + size: 23880 + timestamp: 1756227235167 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + sha256: feff959a816f7988a0893201aa9727bbb7ee1e9cec2c4f0428269b489eb93fb4 + md5: cbb88288f74dbe6ada1c6c7d0a97223e + depends: + - backports.zstd >=1.0.0 + - brotli-python >=1.2.0 + - h2 >=4,<5 + - pysocks >=1.5.6,<2.0,!=1.5.7 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/urllib3?source=hash-mapping + size: 103560 + timestamp: 1778188657149 +- conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda + sha256: 9e156ffaefb8463437144326ada4b85d1de17961b9997ac5f1cbbaf747bd8bed + md5: d0e3b2f0030cf4fca58bde71d246e94c + depends: + - packaging >=24.0 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wheel?source=hash-mapping + size: 33491 + timestamp: 1776878563806 +- conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda + sha256: 9f5f5905afea6e0188aa6887aed0809033143343a7af06983f4b390c2286d2d7 + md5: 099794df685f800c3f319ff4742dc1bb + depends: + - python >=3.11 + - numpy >=1.26 + - packaging >=24.2 + - pandas >=2.2 + - python + constrains: + - bottleneck >=1.4 + - cartopy >=0.23 + - cftime >=1.6 + - dask-core >=2024.6 + - distributed >=2024.6 + - flox >=0.9 + - h5netcdf >=1.3 + - h5py >=3.11 + - hdf5 >=1.14 + - iris >=3.9 + - matplotlib-base >=3.8 + - nc-time-axis >=1.4 + - netcdf4 >=1.6.0 + - numba >=0.60 + - numbagg >=0.8 + - pint >=0.24 + - pydap >=3.5.0 + - scipy >=1.13 + - seaborn-base >=0.13 + - sparse >=0.15 + - toolz >=0.12 + - zarr >=2.18 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/xarray?source=hash-mapping + size: 1017999 + timestamp: 1776122774298 +- conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + sha256: 02943091700f860bc3fc117deabe5fd609ed7bae64fd97da2f70241167c2719d + md5: b82273c95432c78efe98f14cbc46be7d + depends: + - numpy >=2.0 + - python >=3.12 + - scipy >=1.13 + - xarray >=2024.02.0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/xarray-einstats?source=hash-mapping + size: 38256 + timestamp: 1771933879255 +- conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + sha256: 663ea9b00d68c2da309114923924686ab6d3f59ef1b196c5029ba16799e7bb07 + md5: 4487b9c371d0161d54b5c7bbd890c0fc + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/xyzservices?source=hash-mapping + size: 51732 + timestamp: 1774900074457 +- conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + sha256: 88716d633ac7fdc896ce7aa00efdfc91df6363d51bebabfb60d34399c023a3d0 + md5: b787cd1f01e24b161261438a5589df51 + depends: + - python >=3.12 + - packaging >=22.0 + - numpy >=2 + - numcodecs >=0.14 + - typing_extensions >=4.13 + - donfig >=0.8 + - google-crc32c >=1.5 + - python + constrains: + - fsspec >=2023.10.0 + - obstore >=0.5.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zarr?source=hash-mapping + size: 367721 + timestamp: 1777989189792 +- conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda + sha256: 5488542dceeb9f2874e726646548ecc5608060934d6f9ceaa7c6a48c61f9cc8d + md5: e52c2ef711ccf31bb7f70ca87d144b9e + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zict?source=hash-mapping + size: 36341 + timestamp: 1733261642963 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + sha256: 210bd31c22bb88f5e2a167df24c95bb5f152b2ada7502f9b8c49d1f5366db423 + md5: ba3dcdc8584155c97c648ae9c044b7a3 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=compressed-mapping + size: 24190 + timestamp: 1779159948016 +- conda: https://conda.anaconda.org/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.conda + build_number: 7 + sha256: 30006902a9274de8abdad5a9f02ef7c8bb3d69a503486af0c1faee30b023e5b7 + md5: eaac87c21aff3ed21ad9656697bb8326 + depends: + - llvm-openmp >=9.0.1 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 8328 + timestamp: 1764092562779 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aom-3.9.1-hf036a51_0.conda + sha256: 3032f2f55d6eceb10d53217c2a7f43e1eac83603d91e21ce502e8179e63a75f5 + md5: 3f17bc32cb7fcb2b4bf3d8d37f656eb8 + depends: + - __osx >=10.13 + - libcxx >=16 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 2749186 + timestamp: 1718551450314 +- conda: https://conda.anaconda.org/conda-forge/osx-64/astropy-base-7.2.0-py312h391ab28_0.conda + sha256: f3aa65e2913ca569adcaba8e10a4c956dedcd794953ffea80267140944aeeb96 + md5: bd42b0ef0e3f318a5c4ef9ff81644302 + depends: + - __osx >=10.13 + - astropy-iers-data >=0.2025.10.27.0.39.10 + - numpy >=1.23,<3 + - numpy >=1.24 + - packaging >=22.0.0 + - pyerfa >=2.0.1.1 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - pyyaml >=6.0.0 + constrains: + - astropy >=7.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/astropy?source=hash-mapping + size: 9405459 + timestamp: 1764120956355 +- conda: https://conda.anaconda.org/conda-forge/osx-64/astropy-healpix-1.1.3-py312h8ab2c85_0.conda + sha256: 3216d6447e9069ed71999a0924bc91981827c147afcf405883e48726f45b0549 + md5: 2d3524f373519d99d6d1ad34a01a0be9 + depends: + - __osx >=10.13 + - astropy-base >=3 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/astropy-healpix?source=hash-mapping + size: 111906 + timestamp: 1768880468035 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.10.1-ha3f0692_3.conda + sha256: 7cef042368d4e576b4f2cab16c964d989fba81a31b6bba9a70e8bb056d052775 + md5: a86f1fa5a9479cf6a11df72083408626 + depends: + - __osx >=11.0 + - aws-c-http >=0.10.13,<0.10.14.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 120729 + timestamp: 1777489539645 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.9.6-hbd79662_1.conda + sha256: 0e57c6ab849ed2dc17c0479779402e4a2febda55a547920ede353fb89da3bfd4 + md5: 6eac869db7e36861b52706a84b62adbb + depends: + - __osx >=11.0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - aws-c-http >=0.10.10,<0.10.11.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 119960 + timestamp: 1771494173039 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.9.13-hea39f9f_1.conda + sha256: c085b749572ca7c137dfbf8a2a4fd505657f8f7f8a7b374d5f41bf4eb2dd9214 + md5: cbf7be9e03e8b5e38ec60b6dbdf3a649 + depends: + - __osx >=10.13 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 45262 + timestamp: 1764593359925 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.12.6-h8616949_0.conda + sha256: 66fb2710898bb3e25cb4af52ee88a0559dcde5e56e6bd09b31b98a346a89b2e3 + md5: c7f2d588a6d50d170b343f3ae0b72e62 + depends: + - __osx >=10.13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 230785 + timestamp: 1763585852531 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.3.2-hb9ea233_0.conda + sha256: 599eff2c7b6d2e4e2ed1594e330f5f4f06f0fbe21d20d53beb78e3443344555c + md5: da394e3dc9c78278c8bdbd3a81fdbdb2 + depends: + - __osx >=10.13 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 21769 + timestamp: 1767790884673 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.5.9-h8efd969_2.conda + sha256: 15f2228ecb30aaf96856a2a3f5991e496a8e9b0fd428090c9f1ebb9a349a17be + md5: c17ce609af703addf9aa5627bee9abe9 + depends: + - __osx >=11.0 + - libcxx >=19 + - aws-c-io >=0.26.1,<0.26.2.0a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 53601 + timestamp: 1771380412957 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.7.0-ha9bd753_0.conda + sha256: f8127169c450667c802ffe5cfc38eee2291ce253aa2b6bf244bc09d74e4edbac + md5: a7f76898deba16f0b70782ad3c0f841a + depends: + - __osx >=11.0 + - libcxx >=19 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 53830 + timestamp: 1774479986246 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.10.10-h8f73dec_0.conda + sha256: ed5b9375d4cadf5fc2633722185662c3a09e80b2e669ef97785b41521b931d36 + md5: 1e24e3a1577f3308d38b1b840b79a78e + depends: + - __osx >=11.0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-compression >=0.3.2,<0.3.3.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 193259 + timestamp: 1771421371021 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.10.13-h1037d30_0.conda + sha256: 5dd30efffb930499b30b0c0ad98cae9c62179143d07645e18823e04e50667d90 + md5: 52af2e201214cbd7bc6282f01c535879 + depends: + - __osx >=11.0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-compression >=0.3.2,<0.3.3.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 193468 + timestamp: 1777483091300 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.26.1-hc95b61d_2.conda + sha256: 2068bd26f7edebde73ddb5e8c621f180b6ec3d1add5689e32610b5947888c116 + md5: e8f6d38042ecf60daa190d2577cd1cee + depends: + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 182851 + timestamp: 1773328980145 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.26.3-hc95b61d_2.conda + sha256: e3b6b0b68b1f8708ebbc1c4b8486939cdc26cbd1d8e9af51a719e41b9860f1bb + md5: 6056103306b72ddc7f85fe8579764c07 + depends: + - __osx >=11.0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 182725 + timestamp: 1779133075397 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.14.0-h2b5127a_1.conda + sha256: 3ec986cbc20e2320243bc81752807601d4e203dddb0cdb55c34d88c4c3df4065 + md5: 348c5b73925a44a5f66111d20f245e68 + depends: + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + - aws-c-http >=0.10.10,<0.10.11.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 191622 + timestamp: 1771458106157 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.15.2-h377fd20_2.conda + sha256: 7f13b421167b55d296a92cf95f7c0793ec54a7da34da4749ea3eee9cb9e44306 + md5: 636c0b11b63f8ee234388624caa971fb + depends: + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-http >=0.10.13,<0.10.14.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 193355 + timestamp: 1777488219057 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.11.5-hafc236b_3.conda + sha256: c52910e453a9f95a76b49ffd469568c9b1b42af97b68a5a572e36521a7c8aa3d + md5: a7909e0fd744693b22ae9adba17ac1aa + depends: + - __osx >=11.0 + - aws-c-auth >=0.9.6,<0.9.7.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + - aws-c-http >=0.10.10,<0.10.11.0a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 134299 + timestamp: 1771586339084 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.12.2-hfe16a33_1.conda + sha256: df4040780a6331295563fa9e251266d150920bcf5359dd6d6960f07403480b31 + md5: 84be59d0b0107cc0ba06983a2a05070d + depends: + - __osx >=11.0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-http >=0.10.13,<0.10.14.0a0 + - aws-c-auth >=0.10.1,<0.10.2.0a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 134870 + timestamp: 1777824857364 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.2.4-h901532c_4.conda + sha256: 468629dbf52fee6dcabda1fcb0c0f2f29941b9001dcc75a57ebfbe38d0bde713 + md5: b384fb05730f549a55cdb13c484861eb + depends: + - __osx >=10.13 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 55664 + timestamp: 1764610141049 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.2.10-h31279ed_0.conda + sha256: 8776d3d51e03ba373a13e4cd4adaf70fd15323c50f1dde85669dc4e379c10dbd + md5: 28a458ade86d135a90951d816760cc5c + depends: + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 95954 + timestamp: 1771063481230 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.37.3-h4bfe737_0.conda + sha256: a999e49690418ab1a58a36af0c1546f6b16006535dae4f7716ad25a2924f7c4d + md5: f28fc0586a01af5aa8963e3bb885bfe4 + depends: + - libcxx >=19 + - __osx >=11.0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-s3 >=0.11.5,<0.11.6.0a0 + - aws-c-mqtt >=0.14.0,<0.14.1.0a0 + - aws-c-event-stream >=0.5.9,<0.5.10.0a0 + - aws-c-auth >=0.9.6,<0.9.7.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - aws-c-http >=0.10.10,<0.10.11.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 346889 + timestamp: 1771983363260 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.38.3-heb35453_1.conda + sha256: 693a235526a4bb2f533d55926640403299846def598f69007e38f8d406bc0eba + md5: 1a605fd4a7d4e70d5a26b9f8068360af + depends: + - libcxx >=19 + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-s3 >=0.12.2,<0.12.3.0a0 + - aws-c-mqtt >=0.15.2,<0.15.3.0a0 + - aws-c-auth >=0.10.1,<0.10.2.0a0 + - aws-c-http >=0.10.13,<0.10.14.0a0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-event-stream >=0.7.0,<0.7.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 348359 + timestamp: 1778019141858 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.747-h5d703ad_1.conda + sha256: 0ba35d639628f7f08150fd5a525da57fa5f567098fe22ebad0f3f76d63227030 + md5: 5ad302589c4e42f984cde8124ae932fa + depends: + - libcxx >=19 + - __osx >=11.0 + - aws-c-event-stream >=0.5.9,<0.5.10.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - libzlib >=1.3.1,<2.0a0 + - aws-crt-cpp >=0.37.3,<0.37.4.0a0 + - libcurl >=8.18.0,<9.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 3476896 + timestamp: 1772084563334 +- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.747-h9890d28_4.conda + sha256: e167de27b143ce0ded8dd7601e7f25ebe5664c51e5e90c6e972cca0219b937f1 + md5: 7e6e4e6253356bdd3dbe52370c01ea1a + depends: + - __osx >=11.0 + - libcxx >=19 + - aws-c-event-stream >=0.7.0,<0.7.1.0a0 + - aws-crt-cpp >=0.38.3,<0.38.4.0a0 + - libcurl >=8.20.0,<9.0a0 + - libzlib >=1.3.2,<2.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 3477268 + timestamp: 1778156316324 +- conda: https://conda.anaconda.org/conda-forge/osx-64/azure-core-cpp-1.16.2-h87f1c7e_0.conda + sha256: bc2cde0d7204b3574084de1d83d80bceb7eb1550a17a0f0ccedbb312145475d3 + md5: 24997c4c96d1875956abd9ce37f262eb + depends: + - __osx >=10.13 + - libcurl >=8.18.0,<9.0a0 + - libcxx >=19 + - openssl >=3.5.4,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 298273 + timestamp: 1768837905794 +- conda: https://conda.anaconda.org/conda-forge/osx-64/azure-identity-cpp-1.13.3-h1135191_1.conda + sha256: 182769c18c23e2b29bb35f6fca4c233f0125f84418dacb2c36912298dafbe42e + md5: 14d2491d2dfcbb127fa0ff6219704ab5 + depends: + - __osx >=10.13 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - libcxx >=19 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 175167 + timestamp: 1770345309347 +- conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-blobs-cpp-12.16.0-hefc3566_2.conda + sha256: 7353b04b2aff8c34610011710be614733df343986f7b15d825dbed27005ef742 + md5: 5bf9d81a733e5864a723bd308a473c6b + depends: + - __osx >=11.0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - azure-storage-common-cpp >=12.13.0,<12.13.1.0a0 + - libcxx >=19 + license: MIT + license_family: MIT + purls: [] + size: 434697 + timestamp: 1778727610755 +- conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-common-cpp-12.13.0-h74781cd_0.conda + sha256: 21cf4bc77e20a4a4874452dc5438fdae86f2cccfa2ffa29e920b2be0450e906b + md5: 7d4ec20278fbc5159c0899787a8afea3 + depends: + - __osx >=11.0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - libcxx >=19 + - libxml2 + - libxml2-16 >=2.14.6 + - openssl >=3.5.6,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 133457 + timestamp: 1778662369219 +- conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-files-datalake-cpp-12.14.0-h2303994_2.conda + sha256: 040025c0dc8e338dc1038572748ffc2d1bb6f646b2c4a95daae3a4468a74af0f + md5: b3e6633ee0101fb99316de21754ec448 + depends: + - __osx >=11.0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0 + - azure-storage-common-cpp >=12.13.0,<12.13.1.0a0 + - libcxx >=19 + license: MIT + license_family: MIT + purls: [] + size: 204849 + timestamp: 1778764549811 +- conda: https://conda.anaconda.org/conda-forge/osx-64/backports.zstd-1.5.0-py312h5f4ecc6_0.conda + sha256: f6166347ee8dd7e5c71029c27e89cc5d4a84ccb3f374761363d5bce08ce92227 + md5: c987aba92ae6e528ed495f1ea71d4834 + depends: + - python + - __osx >=11.0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause AND MIT AND EPL-2.0 + purls: + - pkg:pypi/backports-zstd?source=hash-mapping + size: 240621 + timestamp: 1778594129022 +- conda: https://conda.anaconda.org/conda-forge/osx-64/bcrypt-5.0.0-py312h8a6388b_1.conda + sha256: 38923f0ca303c603404f6a6468d53d7222678a4858356c0912879680f914ac29 + md5: 7fbc2ba672662d9fd4dbfebc3c9acd9b + depends: + - python + - __osx >=10.13 + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=10.13 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/bcrypt?source=hash-mapping + size: 278137 + timestamp: 1762497774810 +- conda: https://conda.anaconda.org/conda-forge/osx-64/blosc-1.21.6-hd145fbb_1.conda + sha256: 876bdb1947644b4408f498ac91c61f1f4987d2c57eb47c0aba0d5ee822cd7da9 + md5: 717852102c68a082992ce13a53403f9d + depends: + - __osx >=10.13 + - libcxx >=18 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - snappy >=1.2.1,<1.3.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 46990 + timestamp: 1733513422834 +- conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-1.2.0-hf139dec_1.conda + sha256: c838c71ded28ada251589f6462fc0f7c09132396799eea2701277566a1a863bf + md5: 149d8ee7d6541a02a6117d8814fd9413 + depends: + - __osx >=10.13 + - brotli-bin 1.2.0 h8616949_1 + - libbrotlidec 1.2.0 h8616949_1 + - libbrotlienc 1.2.0 h8616949_1 + license: MIT + license_family: MIT + purls: [] + size: 20194 + timestamp: 1764017661405 +- conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-bin-1.2.0-h8616949_1.conda + sha256: dcb5a2b29244b82af2545efad13dfdf8dddb86f88ce64ff415be9e7a10cc0383 + md5: 34803b20dfec7af32ba675c5ccdbedbf + depends: + - __osx >=10.13 + - libbrotlidec 1.2.0 h8616949_1 + - libbrotlienc 1.2.0 h8616949_1 + license: MIT + license_family: MIT + purls: [] + size: 18589 + timestamp: 1764017635544 +- conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.2.0-py312h4b46afd_1.conda + sha256: 8854a80360128157e8d05eb57c1c7e7c1cb10977e4c4557a77d29c859d1f104b + md5: 01fdbccc39e0a7698e9556e8036599b7 + depends: + - __osx >=10.13 + - libcxx >=19 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - libbrotlicommon 1.2.0 h8616949_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 389534 + timestamp: 1764017976737 +- conda: https://conda.anaconda.org/conda-forge/osx-64/brunsli-0.1-ha00ef93_2.conda + sha256: 8267fa351967ffb2587ea58f93226abe57d68a020758cab56591dc7fa4eb455d + md5: 44c70b2db8d9b7be20a86bd40a2aa9e9 + depends: + - __osx >=10.13 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libcxx >=19 + license: MIT + license_family: MIT + purls: [] + size: 147378 + timestamp: 1761759461091 +- conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda + sha256: 9f242f13537ef1ce195f93f0cc162965d6cc79da578568d6d8e50f70dd025c42 + md5: 4173ac3b19ec0a4f400b4f782910368b + depends: + - __osx >=10.13 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 133427 + timestamp: 1771350680709 +- conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda + sha256: 2f5bc0292d595399df0d168355b4e9820affc8036792d6984bd751fdda2bcaea + md5: fc9a153c57c9f070bebaa7eef30a8f17 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + size: 186122 + timestamp: 1765215100384 +- conda: https://conda.anaconda.org/conda-forge/osx-64/c-blosc2-3.0.3-h32e32c0_0.conda + sha256: 5162c640cae2be1555fd6582ad9ce14875ba762f925035c98c144ed0a7a7d66b + md5: 3ad9b814c5a67bbae42e883f1dd3cb72 + depends: + - __osx >=11.0 + - libcxx >=19 + - lz4-c >=1.10.0,<1.11.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 310107 + timestamp: 1778844643033 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cffi-2.0.0-py312he90777b_1.conda + sha256: e2888785e50ef99c63c29fb3cfbfb44cdd50b3bb7cd5f8225155e362c391936f + md5: cf70c8244e7ceda7e00b1881ad7697a9 + depends: + - __osx >=10.13 + - libffi >=3.5.2,<3.6.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 288241 + timestamp: 1761203170357 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.6.3-hf728c8e_0.conda + sha256: b56de7134f3826d194ad282db0de3f8896c2d98ab8212eafed044170990f804a + md5: 4c9dd7d86df698f38f0a39e87ddcbbcf + depends: + - __osx >=10.13 + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.14.1,<9.0a0 + - libzlib >=1.3.1,<2.0a0 + license: LicenseRef-fitsio + purls: [] + size: 695582 + timestamp: 1759288647997 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.6.4-hd57ea71_1.conda + sha256: 067975c0db75bb5f0455574c43917af1075b464fdfb5ff00241313538a208864 + md5: e6cca09478ea60f189ccec950011fcb9 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.20.0,<9.0a0 + - libzlib >=1.3.2,<2.0a0 + license: LicenseRef-fitsio + purls: [] + size: 697925 + timestamp: 1777678815545 +- conda: https://conda.anaconda.org/conda-forge/osx-64/charls-2.4.3-hcc62823_0.conda + sha256: 8755decbc126ed207da4618b104ee2a8a3336c1511264d5549b22dd21d356667 + md5: 04d7337a89a1def07cf2b2bd96e2b04a + depends: + - __osx >=11.0 + - libcxx >=19 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 135256 + timestamp: 1772713129777 +- conda: https://conda.anaconda.org/conda-forge/osx-64/chealpix-3.31.0-h1535d2a_9.conda + sha256: 65c60dee934062a3395cbc9906d3a9ccae61545062e2b9e52fdce19265e6672f + md5: 6560d926ff7379570882fca4f91f78ce + depends: + - __osx >=10.13 + - cfitsio >=4.6.3,<4.6.4.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 36646 + timestamp: 1764671572007 +- conda: https://conda.anaconda.org/conda-forge/osx-64/chealpix-3.31.0-he134003_10.conda + sha256: 2f520a4bf9fd8bc2424cc467a34e3fa1b10e0a9d6370227d1507ddbcb23dbbb0 + md5: dd0cbace181f560e6f2d7bdf669d62ff + depends: + - __osx >=11.0 + - cfitsio >=4.6.4,<4.6.5.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 34383 + timestamp: 1778488454431 +- conda: https://conda.anaconda.org/conda-forge/osx-64/contourpy-1.3.3-py312hb0c38da_4.conda + sha256: 6c03943009b07c6deb3a64afa094b6ca694062b58127a4da6f656a13d508c340 + md5: 625f08687ba33cc9e57865e7bf8e8123 + depends: + - numpy >=1.25 + - python + - __osx >=10.13 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/contourpy?source=hash-mapping + size: 298198 + timestamp: 1769156053873 +- conda: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.14.0-py312heb39f77_0.conda + sha256: 2015247c03005286e2bc86c99c5d73dc41a11b25e9d821b08879a228157aaebc + md5: e8cd6d5f41bbb4afa787a223d9b71a7d + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tomli + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/coverage?source=hash-mapping + size: 387001 + timestamp: 1778445412937 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cryptography-48.0.0-py312h1af399d_0.conda + sha256: 3c5f681f1916a653bc5d2b5304f13d5853a2fecc9be3ca4b88cb0c5f35d77d58 + md5: e4583dba46cd24ff9903630a567e56b2 + depends: + - __osx >=11.0 + - cffi >=2.0 + - openssl >=3.5.6,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=10.13 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1855412 + timestamp: 1777966414011 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cytoolz-1.1.0-py312h1a1c95f_2.conda + sha256: 7718e3415123f406e23e88b9a2e03db94984211c07c98a1dc20dc677a624c42e + md5: db9f538ce2d80fce3d42c7b67308f3d2 + depends: + - __osx >=10.13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - toolz >=0.10.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cytoolz?source=hash-mapping + size: 593863 + timestamp: 1771856019545 +- conda: https://conda.anaconda.org/conda-forge/osx-64/dav1d-1.2.1-h0dc2134_0.conda + sha256: ec71a835866b42e946cd2039a5f7a6458851a21890d315476f5e66790ac11c96 + md5: 9d88733c715300a39f8ca2e936b7808d + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 668439 + timestamp: 1685696184631 +- conda: https://conda.anaconda.org/conda-forge/osx-64/fftw-3.3.11-nompi_h54214ab_100.conda + sha256: c234b8f1be5b630236675a006172edd768ca2685fbf0713ec007f3d373f5ee27 + md5: 5174eb59171c77781c90fbff9eaf5c89 + depends: + - __osx >=11.0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - llvm-openmp >=19.1.7 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 1810437 + timestamp: 1776783050946 +- conda: https://conda.anaconda.org/conda-forge/osx-64/fonttools-4.63.0-py312heb39f77_0.conda + sha256: eb76350b1653a7e6e61c0fdc7dde79e32a0ba662c6c9471b2557720fb7db802d + md5: 86857c4f51ca02be0aa72fb98ea80ef9 + depends: + - __osx >=11.0 + - brotli + - munkres + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - unicodedata2 >=15.1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/fonttools?source=compressed-mapping + size: 2914614 + timestamp: 1778770861388 +- conda: https://conda.anaconda.org/conda-forge/osx-64/freetype-2.14.3-h694c41f_0.conda + sha256: 5ddd46a88a0b6483e3dec52cabb62414504c94ee0e77369a4717f61a656c535a + md5: 6ab1403cc6cb284d56d0464f19251075 + depends: + - libfreetype 2.14.3 h694c41f_0 + - libfreetype6 2.14.3 h58fbd8d_0 + license: GPL-2.0-only OR FTL + purls: [] + size: 174060 + timestamp: 1774298809296 +- conda: https://conda.anaconda.org/conda-forge/osx-64/geos-3.14.1-he483b9e_0.conda + sha256: 4d95fd55a9e649620b4e50ddafff064c4ec52d87e1ed64aa4cad13e643b32baf + md5: d83030a79ce1276edc2332c1730efa17 + depends: + - __osx >=10.13 + - libcxx >=19 + license: LGPL-2.1-only + purls: [] + size: 1631280 + timestamp: 1761593838143 +- conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda + sha256: c0bea66f71a6f4baa8d4f0248e17f65033d558d9e882c0af571b38bcca3e4b46 + md5: a26de8814083a6971f14f9c8c3cb36c2 + depends: + - __osx >=10.13 + - libcxx >=17 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 84946 + timestamp: 1726600054963 +- conda: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda + sha256: 2c825df829097536314a195ae5cacaa8695209da6b4400135a65d8e23c008ff8 + md5: 03e8c9b4d3da5f3d6eabdd020c2d63ac + license: MIT + license_family: MIT + purls: [] + size: 74516 + timestamp: 1712692686914 +- conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.1-h2790a97_0.conda + sha256: dd56547db8625eb5c91bb0a9fbe8bd6f5c7fbf5b6059d46365e94472c46b24f9 + md5: 06cf91665775b0da395229cd4331b27d + depends: + - __osx >=10.13 + - gflags >=2.2.2,<2.3.0a0 + - libcxx >=16 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 117017 + timestamp: 1718284325443 +- conda: https://conda.anaconda.org/conda-forge/osx-64/google-crc32c-1.8.0-py312hb9001e9_1.conda + sha256: ffd90aaf431a1a1d45f1b852aef16e56c1ce73bd443fae96d83c9d8d2b8a9af2 + md5: 558f8364bc7ccb5be86f035dadab7981 + depends: + - __osx >=10.13 + - libcrc32c >=1.1.2,<1.2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/google-crc32c?source=hash-mapping + size: 24287 + timestamp: 1768549357803 +- conda: https://conda.anaconda.org/conda-forge/osx-64/gsl-2.7-h93259b0_0.tar.bz2 + sha256: 8550d64004810fa0b5f552d1f21f9fe51483cd30d2d3200d7b0c5e324f7e6995 + md5: b4942b1ee2a52fd67f446074488d774d + depends: + - libblas >=3.8.0,<4.0a0 + - libcblas >=3.8.0,<4.0a0 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 3221488 + timestamp: 1626369980688 +- conda: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.16.0-nompi_py312h53b4df1_102.conda + sha256: 632227065f84306b2f5822b22d10ba84fcd6f5b397b2d69a4c36d92e0ca2f31e + md5: 626ce477182eeedea956ea6a2c94ef14 + depends: + - __osx >=11.0 + - cached-property + - hdf5 >=1.14.6,<1.14.7.0a0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/h5py?source=hash-mapping + size: 1183163 + timestamp: 1775582252030 +- conda: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.16.0-nompi_py312h82c48cf_102.conda + sha256: 705c25f8ef6e3795f4add3dd34a0563698b07f5a3d1c6c920d4279a15beb0841 + md5: 52167ce7748139f6ec29d8aa86e0ec38 + depends: + - __osx >=11.0 + - cached-property + - hdf5 >=2.1.0,<3.0a0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/h5py?source=hash-mapping + size: 1188195 + timestamp: 1775581932391 +- conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.6-nompi_hf563b80_106.conda + sha256: 4bcc7d54a011f1d515da2fb3406659574bae5f284bced126c756ed9ef151459f + md5: b74e900265ad3808337cd542cfad6733 + depends: + - __osx >=10.13 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.18.0,<9.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3526365 + timestamp: 1770391694712 +- conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-2.1.0-nompi_h650120f_105.conda + sha256: 2dd1bf089ed2cd70bd461569ffa53023a8dcdbdf98547f65fe257c93aa1aa9d9 + md5: 215fed8f2ea2f3578416dfadcd25b4a1 + depends: + - __osx >=11.0 + - aws-c-auth >=0.10.1,<0.10.2.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-http >=0.10.13,<0.10.14.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-s3 >=0.12.2,<0.12.3.0a0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.20.0,<9.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3829796 + timestamp: 1777863753790 +- conda: https://conda.anaconda.org/conda-forge/osx-64/healpy-1.19.0-py312h5272b37_2.conda + sha256: ad8c591842d1eef83db33c512fedfc98bfda4ba0b80e9bdceb101817b6026551 + md5: 6c47b5246a089e13b3b88038fcf0c7e7 + depends: + - __osx >=11.0 + - astropy-base + - cfitsio >=4.6.3,<4.6.4.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libzlib >=1.3.2,<2.0a0 + - matplotlib-base + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - scipy + license: GPL-2.0-only + license_family: GPL + purls: + - pkg:pypi/healpy?source=hash-mapping + size: 2072981 + timestamp: 1774834735517 +- conda: https://conda.anaconda.org/conda-forge/osx-64/healpy-1.19.0-py312h84047a7_3.conda + sha256: 0109cdba7168f1646e38015d200c3b4d746636c805e52f194e3ee7f3494f0898 + md5: 8bab7ea66a7965f1d2ea6100cc347a15 + depends: + - __osx >=11.0 + - astropy-base + - cfitsio >=4.6.4,<4.6.5.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libzlib >=1.3.2,<2.0a0 + - matplotlib-base + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - scipy + license: GPL-2.0-only + license_family: GPL + purls: + - pkg:pypi/healpy?source=hash-mapping + size: 2070001 + timestamp: 1777848876087 +- conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-24.12.4-py312hb401068_0.conda + sha256: c8b954a80737d8070b4414c74f144ccd57f4edffdc7580221c48e82ffa3707ba + md5: 556582715c2dd1495a8c61dff039f640 + depends: + - htcondor-classads 24.12.4 hf470585_0 + - htcondor-cli 24.12.4 py312hb401068_0 + - htcondor-utils 24.12.4 h1cc2291_0 + - libcondor_utils 24.12.4 h2da22b3_0 + - python >=3.12,<3.13.0a0 + - python-htcondor 24.12.4 py312h564a4e3_0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 23608 + timestamp: 1759418928559 +- conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-25.10.1-py312hb401068_0.conda + sha256: fb709483dd369888a66299f94aa5d6e2d7bc9a40c63bb24d43404bb8c21ec50e + md5: 1fb9d768e3095fc5cf37eb65c811021a + depends: + - htcondor-classads 25.10.1 h4086b99_0 + - htcondor-cli 25.10.1 py312hb401068_0 + - htcondor-utils 25.10.1 h712aeec_0 + - libcondor_utils 25.10.1 hcd6a731_0 + - python >=3.12,<3.13.0a0 + - python-htcondor 25.10.1 py312haf40f37_0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 22426 + timestamp: 1778794422743 +- conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-classads-24.12.4-hf470585_0.conda + sha256: cde6a889d223ae885878afc92c0500f2f99acf4764c50ed1d3c5a414db440970 + md5: 8f4d757577e61256e73388de61efda35 + depends: + - __osx >=10.13 + - libcxx >=19 + - pcre2 >=10.46,<10.47.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 2501573 + timestamp: 1759416537017 +- conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-classads-25.10.1-h4086b99_0.conda + sha256: 5c85547b7711204d3496aded6f00aed09a2962f708986a7afb700e4721456e2c + md5: bf9a09fe64a60f82a3572df78480bbe0 + depends: + - __osx >=11.0 + - libcxx >=19 + - pcre2 >=10.47,<10.48.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 2531070 + timestamp: 1778793321176 +- conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-cli-24.12.4-py312hb401068_0.conda + sha256: aa45b715147cff677d97a1320a3a4499f39ff67e003427add1296f21feb8bf70 + md5: 568ce7709491a3a154ed5226792e9d05 + depends: + - python >=3.12,<3.13.0a0 + - python-htcondor 24.12.4 py312h564a4e3_0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/htcondor-cli?source=hash-mapping + size: 154841 + timestamp: 1759418800395 +- conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-cli-25.10.1-py312hb401068_0.conda + sha256: 4a3f250dce2b0b57e53ede0c427155455bd8efb648ea538b96dc479a90cc1da6 + md5: f7c878e30dfd92e3fa8f78b2fc32b6e8 + depends: + - python >=3.12,<3.13.0a0 + - python-htcondor 25.10.1 py312haf40f37_0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/htcondor-cli?source=hash-mapping + size: 174823 + timestamp: 1778794313520 +- conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-utils-24.12.4-h1cc2291_0.conda + sha256: 297e5046b76c376e8216757f7e08b22eaea0c2b290ed4245e347356dd8bed129 + md5: 36e6c514601dd35fbb7f347e392589a1 + depends: + - __osx >=10.13 + - htcondor-classads 24.12.4 hf470585_0 + - libcondor_utils 24.12.4 h2da22b3_0 + - libcurl >=8.14.1,<9.0a0 + - libcxx >=19 + - openssl >=3.5.4,<4.0a0 + - scitokens-cpp >=1.1.3,<2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1412560 + timestamp: 1759416703980 +- conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-utils-25.10.1-h712aeec_0.conda + sha256: c8eef406e2a721b1154172373f6d205efb06cd591616c15c38d4d4d52cc4c336 + md5: fbc041f268d12cf49e382f52e3efa0e3 + depends: + - __osx >=11.0 + - htcondor-classads 25.10.1 h4086b99_0 + - libcondor_utils 25.10.1 hcd6a731_0 + - libcurl >=8.20.0,<9.0a0 + - libcxx >=19 + - openssl >=3.5.6,<4.0a0 + - scitokens-cpp >=1.4.0,<2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1474378 + timestamp: 1778793478879 +- conda: https://conda.anaconda.org/conda-forge/osx-64/htgettoken-2.6-py312hb401068_0.conda + sha256: 2abe186b0c33b212d4256383336d4ccd65106f6461b70d8fde0d1fb8bc1812a0 + md5: d9b96489e1948a1d17a2d254874d4293 + depends: + - jq + - paramiko + - python >=3.12,<3.13.0a0 + - python-gssapi + - python_abi 3.12.* *_cp312 + - urllib3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/htgettoken?source=hash-mapping + size: 52806 + timestamp: 1768653631587 +- conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda + sha256: 1294117122d55246bb83ad5b589e2a031aacdf2d0b1f99fd338aa4394f881735 + md5: 627eca44e62e2b665eeec57a984a7f00 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 12273764 + timestamp: 1773822733780 +- conda: https://conda.anaconda.org/conda-forge/osx-64/igwn-ligolw-2.1.1-py312h0b9663a_1.conda + sha256: 65a72e7dd6333fc207e8155e5994fc6a073bce23ff3d18055431d4dc4b092098 + md5: 1d3db82d02712e20c3b18fce291b0573 + depends: + - igwn-segments + - numpy + - python + - python-dateutil + - pyyaml + - tqdm + - __osx >=10.13 + - python_abi 3.12.* *_cp312 + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/igwn-ligolw?source=hash-mapping + size: 2420289 + timestamp: 1771054390399 +- conda: https://conda.anaconda.org/conda-forge/osx-64/igwn-segments-2.1.1-py312h0b9663a_2.conda + sha256: b9c3fc7fad57e4fab0dafd1adc04ddd34e8c731dda42c341d8c6511fac4f34d5 + md5: 9954af9fb6a95b0a462a91170d88424d + depends: + - python + - __osx >=10.13 + - python_abi 3.12.* *_cp312 + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/igwn-segments?source=hash-mapping + size: 93915 + timestamp: 1770798029599 +- conda: https://conda.anaconda.org/conda-forge/osx-64/imagecodecs-2026.5.10-py312hc8b613d_0.conda + sha256: 42b0d40fe1473c23ba814bab04255ed50a6fefa4aad9b4e43b692b4501ea18da + md5: ed38c7c051c9b5beee001d821df74b5b + depends: + - __osx >=11.0 + - blosc >=1.21.6,<2.0a0 + - brunsli >=0.1,<1.0a0 + - bzip2 >=1.0.8,<2.0a0 + - c-blosc2 >=3.0.2,<3.1.0a0 + - charls >=2.4.3,<2.5.0a0 + - giflib >=5.2.2,<5.3.0a0 + - jxrlib >=1.1,<1.2.0a0 + - lcms2 >=2.19.1,<3.0a0 + - lerc >=4.1.0,<5.0a0 + - libaec >=1.1.5,<2.0a0 + - libavif16 >=1.4.1,<2.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libcxx >=19 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libjxl >=0.11,<1.0a0 + - liblzma >=5.8.3,<6.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - libzopfli >=1.0.3,<1.1.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - numpy >=1.23,<3 + - openjpeg >=2.5.4,<3.0a0 + - openjph >=0.27.2,<0.28.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - snappy >=1.2.2,<1.3.0a0 + - zfp >=1.0.1,<2.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/imagecodecs?source=hash-mapping + size: 1834124 + timestamp: 1778501971550 +- conda: https://conda.anaconda.org/conda-forge/osx-64/jq-1.8.1-h2287256_0.conda + sha256: 971ec2b98b491bc9419bb8d97006dc521e2e06d7466f2da37612796fd38066ff + md5: f76d7d452699d8208be98516ab18df96 + depends: + - oniguruma 6.9.* + - __osx >=10.13 + - oniguruma >=6.9.10,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 331126 + timestamp: 1751447338102 +- conda: https://conda.anaconda.org/conda-forge/osx-64/jxrlib-1.1-h10d778d_3.conda + sha256: a548a4be14a4c76d6d992a5c1feffcbb08062f5c57abc6e4278d40c2c9a7185b + md5: cfaf81d843a80812fe16a68bdae60562 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 220376 + timestamp: 1703334073774 +- conda: https://conda.anaconda.org/conda-forge/osx-64/kiwisolver-1.5.0-py312hb1dc2e7_0.conda + sha256: 6ab69d441b3400cdf773f67e20f9fae7c37f076d32c31d06843f12d2099e70ce + md5: 4a38b6e74b5a7ea22f1840226e5103a8 + depends: + - python + - libcxx >=19 + - __osx >=11.0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/kiwisolver?source=hash-mapping + size: 69432 + timestamp: 1773067281295 +- conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda + sha256: 83b52685a4ce542772f0892a0f05764ac69d57187975579a0835ff255ae3ef9c + md5: d4765c524b1d91567886bde656fb514b + depends: + - __osx >=10.13 + - libcxx >=16 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1185323 + timestamp: 1719463492984 +- conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h207b36a_0.conda + sha256: df009385e8262c234c0dae9016540b86dad3d299f0d9366d08e327e8e7731634 + md5: e66e2c52d2fdddcf314ad750fb4ebb4a + depends: + - __osx >=10.13 + - libcxx >=19 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1193620 + timestamp: 1769770267475 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lal-7.7.0-fftw_py312h3a6e924_104.conda + sha256: 77cb0ac60f0bde0ef53c2d1700fd0dd6c8bb195fb94b06ca7cbc1db54869dc4f + md5: 0edf0df6e9614f4b1f45706235dbf9cc + depends: + - __osx >=11.0 + - fftw >=3.3.10,<4.0a0 + - igwn-segments + - liblal 7.7.0 fftw_he57ba51_104 + - numpy + - python >=3.12,<3.13.0a0 + - python-lal 7.7.0 fftw_py312h70f41d4_104 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 45343 + timestamp: 1774638882899 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lal-7.7.0-fftw_py312hf555030_101.conda + sha256: 6688ee01df54b5604034ce26dffe854d7606d1112ab7f8537bf8dd6158965f22 + md5: 3b316a983c450dd2d69960dc60fd1f65 + depends: + - __osx >=10.13 + - fftw >=3.3.10,<4.0a0 + - igwn-ligolw + - igwn-segments + - liblal 7.7.0 fftw_h11bfb9b_101 + - numpy + - python >=3.12,<3.13.0a0 + - python-lal 7.7.0 fftw_py312haa2233f_101 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 44048 + timestamp: 1755601485660 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalapps-10.1.0-py312h1f55956_2.conda + sha256: d8861ba473e5a61debcee46fd4fb31df445aacc256d8827462e167e68afc3ed9 + md5: 4a6085e0bc987bd42ad2dfe385337a99 + depends: + - cfitsio + - gsl + - h5py + - igwn-ligolw >=2.1.0 + - igwn-segments + - lal >=7.7.0 + - lalburst >=2.0.0 + - lalframe >=3.0.0 + - lalinference >=4.1.0 + - lalinspiral >=5.0.0 + - lalmetaio >=4.0.0 + - lalpulsar >=7.1.0 + - lalsimulation >=6.2.0 + - libframel >=8.39.2 + - libmetaio >=8.2.0 + - numpy + - pillow + - python + - __osx >=11.0 + - liblalburst >=2.0.7,<3.0a0 + - liblalsimulation >=6.2.0,<7.0a0 + - cfitsio >=4.6.3,<4.6.4.0a0 + - liblal >=7.7.0,<8.0a0 + - python_abi 3.12.* *_cp312 + - libmetaio >=8.5.1,<9.0a0 + - liblalinference >=4.1.9,<5.0a0 + - gsl >=2.7,<2.8.0a0 + - liblalpulsar >=7.1.1,<8.0a0 + - liblalframe >=3.0.7,<4.0a0 + - liblalmetaio >=4.0.6,<5.0a0 + - liblalinspiral >=5.0.3,<6.0a0 + - libframel >=8.41.3,<9.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 1652208 + timestamp: 1771238117822 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalapps-10.1.0-py312h69f915d_3.conda + sha256: d8c8d879d3e5ed6109e71a791dac09e11ec606c166212374392489212bdc0204 + md5: 792feb2dbf80fc0794072143034f9ffe + depends: + - cfitsio + - gsl + - h5py + - igwn-ligolw >=2.1.0 + - igwn-segments + - lal >=7.7.0 + - lalburst >=2.0.0 + - lalframe >=3.0.0 + - lalinference >=4.1.0 + - lalinspiral >=5.0.0 + - lalmetaio >=4.0.0 + - lalpulsar >=7.1.0 + - lalsimulation >=6.2.0 + - libframel >=8.39.2 + - libmetaio >=8.2.0 + - numpy + - pillow + - python + - __osx >=11.0 + - liblalinference >=4.1.9,<5.0a0 + - liblalmetaio >=4.0.6,<5.0a0 + - liblalinspiral >=5.0.3,<6.0a0 + - liblalburst >=2.0.7,<3.0a0 + - python_abi 3.12.* *_cp312 + - liblalpulsar >=7.1.1,<8.0a0 + - liblal >=7.7.0,<8.0a0 + - libmetaio >=8.5.1,<9.0a0 + - liblalsimulation >=6.2.0,<7.0a0 + - gsl >=2.7,<2.8.0a0 + - libframel >=8.41.3,<9.0a0 + - cfitsio >=4.6.4,<4.6.5.0a0 + - liblalframe >=3.0.7,<4.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 1653452 + timestamp: 1777985769166 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalburst-2.0.7-py312h933eb07_2.conda + sha256: 06fed6f240f5068eef21d1af2ec71b41754c19e4ddb02c17dc4d68bffa35bcae + md5: 0545c89132c843a9bfa56bad1ca67400 + depends: + - __osx >=11.0 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalburst 2.0.7 h0e85ab8_2 + - pillow + - python >=3.12,<3.13.0a0 + - python-lalburst 2.0.7 py312ha71206d_2 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 51915 + timestamp: 1771410577186 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalframe-3.0.7-py312h933eb07_2.conda + sha256: 67517b2f4fe77b80b85100fdd24b1b9677efbd711ec8115abe6aa257271ab571 + md5: c2a3c7f73fba190fb7f1afe945434543 + depends: + - __osx >=11.0 + - liblal >=7.7.0,<8.0a0 + - liblalframe 3.0.7 hdadb070_2 + - python >=3.12,<3.13.0a0 + - python-lalframe 3.0.7 py312h469e4ad_2 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 290549 + timestamp: 1774543365251 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-4.1.9-nompi_py312h2269b78_102.conda + sha256: 101a734ec2edd1bc5e36738fdd49800d710940db59b20aa2a9d243a5dc81c7ad + md5: 9b6c760429b0e9e1be1ec155bea208b2 + depends: + - __osx >=11.0 + - astropy-base >=1.1.1 + - h5py + - icu >=78.3,<79.0a0 + - igwn-ligolw >=2.1.0 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalinference 4.1.9 h4325a54_2 + - ligo-gracedb + - lscsoft-glue >=1.54.1 + - matplotlib-base >=1.2.0 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python-lalinference 4.1.9 py312h469e4ad_2 + - python-lalsimulation >=6.2.0 + - python_abi 3.12.* *_cp312 + - scipy >=0.9.0 + - six + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 100346 + timestamp: 1774966039984 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-data-4.1.9-h694c41f_2.conda + sha256: 8f0215f80900ec793a24b6b37bff38ccb3dc432922c5df03e011fe9b06c0ea4d + md5: 7dfbd7e83ca857013652a33affa999e3 + constrains: + - liblalinference >=3.0.3 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 32647 + timestamp: 1774964212305 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalinspiral-5.0.3-py312h933eb07_3.conda + sha256: 5dde62b4801ae820d8ede22c2cd0b2a24a9f597fb89b9065413c63002cd04d96 + md5: edf7d5fef403c4e0bf6cc0838e6c2eb5 + depends: + - __osx >=11.0 + - igwn-segments + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalinspiral 5.0.3 h0e85ab8_3 + - python >=3.12,<3.13.0a0 + - python-lalinspiral 5.0.3 py312h469e4ad_3 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 23743 + timestamp: 1774545603395 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalmetaio-4.0.6-py312h933eb07_2.conda + sha256: e195f6c3cbef594b092a4f4360453bcbb14bb56e9a64dab27734464bc26a87d2 + md5: 9f3b410dad89ff4cc16c927fa4cea0b0 + depends: + - __osx >=11.0 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalmetaio 4.0.6 ha1e9b39_2 + - python >=3.12,<3.13.0a0 + - python-lalmetaio 4.0.6 py312h469e4ad_2 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 18934 + timestamp: 1774545725153 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-7.1.1-py312h0a4f85f_3.conda + sha256: bc0a2fad1ab03acc22411156b5f166f969199f1f25c17a2e25f2de0b0e4d0adb + md5: 83745e072686ffa5537476d6dada45b1 + depends: + - __osx >=11.0 + - astropy-base + - cfitsio >=4.6.4,<4.6.5.0a0 + - fftw >=3.3.11,<4.0a0 + - gsl >=2.7,<2.8.0a0 + - jplephem + - lalinference >=4.1.0 + - liblal >=7.6.0 + - liblal >=7.7.0,<8.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalinference >=4.1.0 + - liblalinference >=4.1.9,<5.0a0 + - liblalpulsar 7.1.1 ha4006bb_3 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.2.0,<7.0a0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.6.0 + - python-lalframe >=3.0.0 + - python-lalinference >=4.1.0 + - python-lalpulsar 7.1.1 py312h469e4ad_3 + - python-lalsimulation >=6.1.0 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 663813 + timestamp: 1777891203273 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-7.1.1-py312hc6fbf67_2.conda + sha256: 80a67e1f6f6e4044ef9e7b7ff9fe113f43d186e0cdc0d4be6be624b877c3f7ea + md5: 01ab7216801fba556c1973daf69e8d97 + depends: + - __osx >=11.0 + - astropy-base + - cfitsio >=4.6.3,<4.6.4.0a0 + - fftw >=3.3.10,<4.0a0 + - gsl >=2.7,<2.8.0a0 + - jplephem + - lalinference >=4.1.0 + - liblal >=7.6.0 + - liblal >=7.7.0,<8.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalinference >=4.1.0 + - liblalinference >=4.1.9,<5.0a0 + - liblalpulsar 7.1.1 hde9e502_2 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.2.0,<7.0a0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.6.0 + - python-lalframe >=3.0.0 + - python-lalinference >=4.1.0 + - python-lalpulsar 7.1.1 py312h469e4ad_2 + - python-lalsimulation >=6.1.0 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 663135 + timestamp: 1774629746632 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-data-7.1.1-h694c41f_2.conda + sha256: e9083886bb7d316651c27cc51fc543a9638ef88c011d1232465437f8bd27c0fc + md5: 0cd461283013ecf9f8f141f2a1c47711 + constrains: + - liblalpulsar >=4.0.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 90052438 + timestamp: 1774626825713 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-data-7.1.1-h694c41f_3.conda + sha256: 1a835285628c058ffe2f84d4704c2c92667d31aaa9adb5252320dc1c6e999e0b + md5: b721d670514ad888837f3f580a7552d2 + constrains: + - liblalpulsar >=4.0.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 90038906 + timestamp: 1777888054934 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-6.2.0-py312hd5a5ae5_3.conda + sha256: efc26ccea17107d1dc7da0e762068a2c8df431b7972462c13469c9f7dd5b593b + md5: 987aea2a1d14dc9d08b902407fd606f2 + depends: + - __osx >=11.0 + - gsl >=2.7,<2.8.0a0 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalsimulation 6.2.0 py312hf591029_3 + - mpmath >=1.0.0 + - python >=3.12,<3.13.0a0 + - python-lalsimulation 6.2.0 py312hc642aa9_3 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 75012 + timestamp: 1774542818114 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-data-6.2.0-h694c41f_3.conda + sha256: 2b8884aa039c610350cc1a3b7490f530f5cda4d340cf0a192231a4bf26194834 + md5: bc64caf590af226f489c4c0294015dad + constrains: + - liblalsimulation >=3.1.2 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 3656737 + timestamp: 1774541867788 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.19.1-h5ea7634_0.conda + sha256: af14a2021a151b3bd98e5b40db0762b35ff54e57fa8c1968cca728cef8d13a8a + md5: 3ae3b6db0dcada986f1e3b608e1cb0fc + depends: + - __osx >=11.0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 229186 + timestamp: 1778079697832 +- conda: https://conda.anaconda.org/conda-forge/osx-64/ldas-tools-al-2.7.0-hb7f9d93_3.conda + sha256: c7482930b65fc8f9028d4662c907910278c2834e01e4e0eb1fb1066d9c180521 + md5: 6b432374926255bb481fe50e9e4b9bc0 + depends: + - __osx >=10.13 + - libboost >=1.88.0,<1.89.0a0 + - libcxx >=19 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 279328 + timestamp: 1764932851268 +- conda: https://conda.anaconda.org/conda-forge/osx-64/ldas-tools-framecpp-2.9.3-hf716561_4.conda + sha256: 83a8e2eb9c637c5ee56d2fa1ad2b3df4392fd124c501ec7a41f687510b0d6f8d + md5: 56098c7f0b7d234d0307ab71c02bd6eb + depends: + - __osx >=10.13 + - ldas-tools-al >=2.6.7 + - ldas-tools-al >=2.7.0,<2.8.0a0 + - libboost >=1.88.0,<1.89.0a0 + - libcxx >=19 + - libzlib >=1.3.1,<2.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 1790416 + timestamp: 1756907351606 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lerc-4.1.0-h35c7297_0.conda + sha256: f918716c71c8bebbc0c40e1050878aa512fea92c1d17c363ca35650bc60f6c35 + md5: d2fe7e177d1c97c985140bd54e2a5e33 + depends: + - __osx >=11.0 + - libcxx >=19 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 215089 + timestamp: 1773114468701 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20260107.1-cxx17_h7ed6875_0.conda + sha256: 2b4ff36082ddfbacc47ac6e11d4dd9f3403cd109ce8d7f0fbee0cdd47cdef013 + md5: 317f40d7bd7bf6d54b56d4a5b5f5085d + depends: + - __osx >=10.13 + - libcxx >=19 + constrains: + - libabseil-static =20260107.1=cxx17* + - abseil-cpp =20260107.1 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1217836 + timestamp: 1770863510112 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.5-he7c3a48_0.conda + sha256: b42ac9c684c730cb97cb3931a0a97aaf791da38bace4f6944eca10de609e5946 + md5: 975f98248cde8d54884c6d1eb5184e13 + depends: + - __osx >=10.13 + - libcxx >=19 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 30555 + timestamp: 1769222189944 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-23.0.1-h47227bc_4_cpu.conda + build_number: 4 + sha256: 17d2d7bfbcb787870055d97ef7df68c4ac67ad231619847fbf853f6aceae4fa3 + md5: 171dd70985713732069e1b5744b7ae8d + depends: + - __osx >=11.0 + - aws-crt-cpp >=0.37.3,<0.37.4.0a0 + - aws-sdk-cpp >=1.11.747,<1.11.748.0a0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - azure-identity-cpp >=1.13.3,<1.13.4.0a0 + - azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0 + - azure-storage-files-datalake-cpp >=12.14.0,<12.14.1.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.7.1,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libcxx >=21 + - libgoogle-cloud >=2.39.0,<2.40.0a0 + - libgoogle-cloud-storage >=2.39.0,<2.40.0a0 + - libopentelemetry-cpp >=1.21.0,<1.22.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - orc >=2.3.0,<2.3.1.0a0 + - snappy >=1.2.2,<1.3.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - apache-arrow-proc =*=cpu + - arrow-cpp <0.0a0 + - parquet-cpp <0.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 4369844 + timestamp: 1773271515389 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-24.0.0-h7252e1b_2_cpu.conda + build_number: 2 + sha256: 735c4a9ad7c11c69a70bac223822f9b38a6de31942fe7b3abeb1b87d49b335cb + md5: 668d559c020eb9ad055265618e7ce615 + depends: + - __osx >=11.0 + - aws-crt-cpp >=0.38.3,<0.38.4.0a0 + - aws-sdk-cpp >=1.11.747,<1.11.748.0a0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - azure-identity-cpp >=1.13.3,<1.13.4.0a0 + - azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0 + - azure-storage-files-datalake-cpp >=12.14.0,<12.14.1.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.7.1,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libcxx >=21 + - libgoogle-cloud >=3.5.0,<3.6.0a0 + - libgoogle-cloud-storage >=3.5.0,<3.6.0a0 + - libopentelemetry-cpp >=1.26.0,<1.27.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libzlib >=1.3.2,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - orc >=2.3.0,<2.3.1.0a0 + - snappy >=1.2.2,<1.3.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - apache-arrow-proc =*=cpu + - parquet-cpp <0.0a0 + - arrow-cpp <0.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 4397109 + timestamp: 1779478135998 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-acero-23.0.1-hc9ab1f6_4_cpu.conda + build_number: 4 + sha256: d6027ad1543433274a6bc8eade6e019343e99473af889ba19eb77df4becd6311 + md5: 5d1ea7aa1625e1f18e17feffbd8960d1 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 23.0.1 h47227bc_4_cpu + - libarrow-compute 23.0.1 h3b2c5b4_4_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.21.0,<1.22.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 562451 + timestamp: 1773272842993 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-acero-24.0.0-h66151e4_2_cpu.conda + build_number: 2 + sha256: c93c7fa0ddea32dfe73b51115da22fe2a9b22ca51a9e76b0d60c9b5b8467b637 + md5: f3ac93940da8fa0ec79d38b8a353aa11 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 24.0.0 h7252e1b_2_cpu + - libarrow-compute 24.0.0 h5d4fa73_2_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.26.0,<1.27.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 544508 + timestamp: 1779478662341 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-compute-23.0.1-h3b2c5b4_4_cpu.conda + build_number: 4 + sha256: 90215a74522d92901a5a73541a692794681a2d4868f8a542e5555f8b12f52298 + md5: 101ea394be8485114f828c22898fc073 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 23.0.1 h47227bc_4_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.21.0,<1.22.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libre2-11 >=2025.11.5 + - libutf8proc >=2.11.3,<2.12.0a0 + - re2 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 2402759 + timestamp: 1773272015660 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-compute-24.0.0-h5d4fa73_2_cpu.conda + build_number: 2 + sha256: 6b3f3cf15a92abd705091b886482938f28d3d2b570c91bbb03c2925ab773c893 + md5: a24dde555e47dd8d475f8d2ffa201595 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 24.0.0 h7252e1b_2_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.26.0,<1.27.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libre2-11 >=2025.11.5 + - libutf8proc >=2.11.3,<2.12.0a0 + - re2 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 2386077 + timestamp: 1779478316802 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-dataset-23.0.1-hc9ab1f6_4_cpu.conda + build_number: 4 + sha256: 418cbd0ab79ad17315b136b3550f6d06db7ab48197738860972625bd032fdb9e + md5: 7cd0e665893c03c07df98226b1301d0f + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 23.0.1 h47227bc_4_cpu + - libarrow-acero 23.0.1 hc9ab1f6_4_cpu + - libarrow-compute 23.0.1 h3b2c5b4_4_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.21.0,<1.22.0a0 + - libparquet 23.0.1 hb3ef814_4_cpu + - libprotobuf >=6.33.5,<6.33.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 550650 + timestamp: 1773273387721 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-dataset-24.0.0-h66151e4_2_cpu.conda + build_number: 2 + sha256: a1dfd554f33ba6154c432e8fe388ec3afdbc1e314e386d4f22d5494f391a1916 + md5: 1b70e5a6afc69aaf08cad78594405c5c + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 24.0.0 h7252e1b_2_cpu + - libarrow-acero 24.0.0 h66151e4_2_cpu + - libarrow-compute 24.0.0 h5d4fa73_2_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.26.0,<1.27.0a0 + - libparquet 24.0.0 h527dc83_2_cpu + - libprotobuf >=6.33.5,<6.33.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 534867 + timestamp: 1779478899386 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-23.0.1-h613493e_4_cpu.conda + build_number: 4 + sha256: 2f6ebdc92d72997306783c5e45faeb067da28c429e7e7af51741e0718a9dba8a + md5: 891da82209b59a87e3d09b83f7571afa + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 23.0.1 h47227bc_4_cpu + - libarrow-acero 23.0.1 hc9ab1f6_4_cpu + - libarrow-dataset 23.0.1 hc9ab1f6_4_cpu + - libcxx >=21 + - libprotobuf >=6.33.5,<6.33.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 466301 + timestamp: 1773273571522 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-24.0.0-h613493e_2_cpu.conda + build_number: 2 + sha256: f9bcd716ca8377e83d08699832bada98e33dbb1bb2b1009cdc8ac5cb4479bfe1 + md5: 73a69b3ef4df89bff6cf072d0c9adfaa + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 24.0.0 h7252e1b_2_cpu + - libarrow-acero 24.0.0 h66151e4_2_cpu + - libarrow-dataset 24.0.0 h66151e4_2_cpu + - libcxx >=21 + - libprotobuf >=6.33.5,<6.33.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 449689 + timestamp: 1779478977953 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libavif16-1.4.1-h9d3eb37_0.conda + sha256: b05246b6940fab957585bbc45bca440c0ad4e98ba3ead0ddb28b95ac7583337c + md5: ceedf05905ff9d9bc784ed91a5705f01 + depends: + - __osx >=11.0 + - aom >=3.9.1,<3.10.0a0 + - dav1d >=1.2.1,<1.2.2.0a0 + - rav1e >=0.8.1,<0.9.0a0 + - svt-av1 >=4.0.1,<4.0.2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 132870 + timestamp: 1774043184519 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.11.0-7_he492b99_openblas.conda + build_number: 7 + sha256: b2fe36d35c7b60e5f63cb0c865f4b3e40839120c47fd0cd56fd633765b25c148 + md5: 9033f3879f6a191d759d7fde5914555f + depends: + - libopenblas >=0.3.33,<0.3.34.0a0 + - libopenblas >=0.3.33,<1.0a0 + constrains: + - mkl <2027 + - liblapacke 3.11.0 7*_openblas + - libcblas 3.11.0 7*_openblas + - liblapack 3.11.0 7*_openblas + - blas 2.307 openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18868 + timestamp: 1778491111970 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-1.88.0-h5950822_7.conda + sha256: 4cf91837a0af26996a43538213abe14adf54e07ac9fc8cb3880185f6e086c5df + md5: de6f7fa28d94fa380024444324b15d5f + depends: + - __osx >=10.13 + - bzip2 >=1.0.8,<2.0a0 + - icu >=78.1,<79.0a0 + - libcxx >=19 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - boost-cpp <0.0a0 + license: BSL-1.0 + purls: [] + size: 2091448 + timestamp: 1766348915727 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-python-1.88.0-py312h3a26c12_7.conda + sha256: 755b9fbcc1ddb3f3f99b53e6c8de66c435d19acfda83348c978663fc2fc91e09 + md5: 9dd48597e90715887a9dbc5f26f76cc7 + depends: + - __osx >=10.13 + - libboost 1.88.0 h5950822_7 + - libcxx >=19 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - boost <0.0a0 + - py-boost <0.0a0 + license: BSL-1.0 + purls: [] + size: 108043 + timestamp: 1766349496804 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda + sha256: 4c19b211b3095f541426d5a9abac63e96a5045e509b3d11d4f9482de53efe43b + md5: f157c098841474579569c85a60ece586 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + size: 78854 + timestamp: 1764017554982 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda + sha256: 729158be90ae655a4e0427fe4079767734af1f9b69ff58cf94ca6e8d4b3eb4b7 + md5: 63186ac7a8a24b3528b4b14f21c03f54 + depends: + - __osx >=10.13 + - libbrotlicommon 1.2.0 h8616949_1 + license: MIT + license_family: MIT + purls: [] + size: 30835 + timestamp: 1764017584474 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda + sha256: 8ece7b41b6548d6601ac2c2cd605cf2261268fc4443227cc284477ed23fbd401 + md5: 12a58fd3fc285ce20cf20edf21a0ff8f + depends: + - __osx >=10.13 + - libbrotlicommon 1.2.0 h8616949_1 + license: MIT + license_family: MIT + purls: [] + size: 310355 + timestamp: 1764017609985 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.11.0-7_h9b27e0a_openblas.conda + build_number: 7 + sha256: 91b5abb146f7de3f95fda287c6a314a8ca3ceb2ae597a4bf5a180b6e0790b180 + md5: ebd8b6277cef635b7ae80400eda886e5 + depends: + - libblas 3.11.0 7_he492b99_openblas + constrains: + - liblapacke 3.11.0 7*_openblas + - liblapack 3.11.0 7*_openblas + - blas 2.307 openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18868 + timestamp: 1778491135869 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcondor_utils-24.12.4-h2da22b3_0.conda + sha256: aeedb0cda083e180500dbb9ed6c51f5f530633a46be286f2f0b45c153d2e3ca5 + md5: 3ed50b6e4b935933ddc3b873a0f71e27 + depends: + - __osx >=10.13 + - htcondor-classads 24.12.4 hf470585_0 + - krb5 >=1.21.3,<1.22.0a0 + - libcxx >=19 + - llvm-openmp >=19.1.7 + - openssl >=3.5.4,<4.0a0 + - pcre2 >=10.46,<10.47.0a0 + - scitokens-cpp >=0.5.0 + - scitokens-cpp >=1.1.3,<2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1894267 + timestamp: 1759416602722 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcondor_utils-25.10.1-hcd6a731_0.conda + sha256: 700e5a29cfdee12334fb33373b6f920e8f0ff75384431dd8951b88370d183366 + md5: 8c877ddf6d1c8d294afb90c41472aacf + depends: + - __osx >=11.0 + - htcondor-classads 25.10.1 h4086b99_0 + - krb5 >=1.22.2,<1.23.0a0 + - libcxx >=19 + - llvm-openmp >=19.1.7 + - openssl >=3.5.6,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - scitokens-cpp >=0.5.0 + - scitokens-cpp >=1.4.0,<2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1939516 + timestamp: 1778793378362 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2 + sha256: 3043869ac1ee84554f177695e92f2f3c2c507b260edad38a0bf3981fce1632ff + md5: 23d6d5a69918a438355d7cbc4c3d54c9 + depends: + - libcxx >=11.1.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 20128 + timestamp: 1633683906221 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9348e2b_0.conda + sha256: 1a0af3b7929af3c5893ebf50161978f54ae0256abb9532d4efba2735a0688325 + md5: de1910529f64ba4a9ac9005e0be78601 + depends: + - __osx >=10.13 + - krb5 >=1.21.3,<1.22.0a0 + - libnghttp2 >=1.67.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.4,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 419089 + timestamp: 1767822218800 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.20.0-h8f0b9e4_0.conda + sha256: 5d3d8a82ca43347e96f1d79048921f3a7c25e32514bc7feb53ed2a040dcca54d + md5: 4a0085ccf90dc514f0fc0909a874045e + depends: + - __osx >=11.0 + - krb5 >=1.22.2,<1.23.0a0 + - libnghttp2 >=1.68.1,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 419676 + timestamp: 1777462238769 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.6-h19cb2f5_0.conda + sha256: 6d60efb63fe4d0299526fcb26e06de1933de55c36fc2ae5a1478f1aa734604bb + md5: fa1bbb55bfda7a8a022d508fb03f1625 + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 565211 + timestamp: 1779253305906 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.25-h517ebb2_0.conda + sha256: 025f8b1e85dd8254e0ca65f011919fb1753070eb507f03bca317871a884d24de + md5: 31aa65919a729dc48180893f62c25221 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + size: 70840 + timestamp: 1761980008502 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda + sha256: 6cc49785940a99e6a6b8c6edbb15f44c2dd6c789d9c283e5ee7bdfedd50b4cd6 + md5: 1f4ed31220402fcddc083b4bff406868 + depends: + - ncurses + - __osx >=10.13 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 115563 + timestamp: 1738479554273 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda + sha256: 0d238488564a7992942aa165ff994eca540f687753b4f0998b29b4e4d030ff43 + md5: 899db79329439820b7e8f8de41bca902 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 106663 + timestamp: 1702146352558 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libevent-2.1.12-ha90c15b_1.conda + sha256: e0bd9af2a29f8dd74309c0ae4f17a7c2b8c4b89f875ff1d6540c941eefbd07fb + md5: e38e467e577bd193a7d5de7c2c540b04 + depends: + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 372661 + timestamp: 1685726378869 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.1-hcc62823_0.conda + sha256: 460afe7ba0882e6d2fcc0ad1568dce27025110ec09c2b9ce9e3b49d61e52ce6b + md5: f95dc08366f2a452005062b5bcceac51 + depends: + - __osx >=11.0 + constrains: + - expat 2.8.1.* + license: MIT + license_family: MIT + purls: [] + size: 75654 + timestamp: 1779279058576 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda + sha256: 951958d1792238006fdc6fce7f71f1b559534743b26cc1333497d46e5903a2d6 + md5: 66a0dc7464927d0853b590b6f53ba3ea + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + size: 53583 + timestamp: 1769456300951 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libframel-8.48.5-hbd657fc_0.conda + sha256: 056cb4aea9a3670750a274d542fc7b21beab5b9a157134d15ad0ccb952b84e57 + md5: dcd3464ff760e84dbda4321a45690e9b + depends: + - __osx >=10.13 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 214238 + timestamp: 1767613641146 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libfreetype-2.14.3-h694c41f_0.conda + sha256: b5daa4cee3beb98a0317e81a20aa507b9f897a9e21b11fe0b2e32852e372f746 + md5: 63b822fcf984c891f0afab2eedfcfaf4 + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 8088 + timestamp: 1774298785964 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libfreetype6-2.14.3-h58fbd8d_0.conda + sha256: 9d34b5b2be6ebdd3bcd9e21d6598d493afce4d3fcd2d419f3356022cb4d746fd + md5: 27515b8ab8bf4abd8d3d90cf11212411 + depends: + - __osx >=11.0 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 364828 + timestamp: 1774298783922 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgcc-15.2.0-h08519bb_19.conda + sha256: 17a5dcd818f89173db51d7d1acd77615cb77db7b4c2b5f571d4dafe559430ab5 + md5: 4bf33d5ca73f4b89d3495285a42414a4 + depends: + - _openmp_mutex + constrains: + - libgomp 15.2.0 19 + - libgcc-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 424164 + timestamp: 1778271183296 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_19.conda + sha256: 519045363b87b870be779d38f0bfd325d4b787acdaa0a2136a92c1081eff5112 + md5: d362f41203d0a1d2d4940446f95374c9 + depends: + - libgfortran5 15.2.0 hd16e46c_19 + constrains: + - libgfortran-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 139925 + timestamp: 1778271458366 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-hd16e46c_19.conda + sha256: c7f5f6e80357d6d5bc69588c16144205b0c79cf32cd090ccb5afef9d557632af + md5: 1cddb3f7e54f5871297afc0fafa61c2c + depends: + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1063687 + timestamp: 1778271196574 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.39.0-h11ac9da_1.conda + sha256: 1a10ca58677c4b5fb519c811bae095793c5d7324a0dd5bd093342c13a3f4aede + md5: 310fe75e741f8c6b3d1eadbd172de276 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.0,<20260108.0a0 + - libcurl >=8.18.0,<9.0a0 + - libcxx >=19 + - libgrpc >=1.78.0,<1.79.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - openssl >=3.5.5,<4.0a0 + constrains: + - libgoogle-cloud 2.39.0 *_1 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 905886 + timestamp: 1770461298001 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-3.5.0-h10ed7cb_0.conda + sha256: dc19780b67454772a25369fa9e56d70313b29a08030df7a5b39970a533d53a52 + md5: 79317f4baa4dc5ab8c81d08948c6b14a + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libcurl >=8.20.0,<9.0a0 + - libcxx >=19 + - libgrpc >=1.78.1,<1.79.0a0 + - libopentelemetry-cpp >=1.26.0,<1.27.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - openssl >=3.5.6,<4.0a0 + constrains: + - libgoogle-cloud 3.5.0 *_0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1866947 + timestamp: 1779227772698 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-storage-2.39.0-hea209c6_1.conda + sha256: 53774cf2a62ae2d8d4713c63032523de4b19c05374fafed2d7f1e5b0ec292756 + md5: f0cd372ebbff46dff0bb67e5630a772c + depends: + - __osx >=11.0 + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libcxx >=19 + - libgoogle-cloud 2.39.0 h11ac9da_1 + - libzlib >=1.3.1,<2.0a0 + - openssl + license: Apache-2.0 + license_family: Apache + purls: [] + size: 542117 + timestamp: 1770461812445 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-storage-3.5.0-hea209c6_0.conda + sha256: 4dc8cb3f96b1c0436d9f4bae58dd28fdfc7c08d259fe88a2266f1917152c82b2 + md5: 0b013f8557cc868bf61053a8bdb75aef + depends: + - __osx >=11.0 + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libcxx >=19 + - libgoogle-cloud 3.5.0 h10ed7cb_0 + - libzlib >=1.3.2,<2.0a0 + - openssl + license: Apache-2.0 + license_family: Apache + purls: [] + size: 542231 + timestamp: 1779228289061 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.78.1-h147dede_0.conda + sha256: ecf98c41dbde09fb3bf6878d7099613c10e256223ec7ccdb5eb401948eadc558 + md5: 69524227096cee1a8af2f4693cf6afa2 + depends: + - __osx >=11.0 + - c-ares >=1.34.6,<2.0a0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libcxx >=19 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libre2-11 >=2025.11.5 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - re2 + constrains: + - grpc-cpp =1.78.1 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 5153859 + timestamp: 1774015913341 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libhwy-1.4.0-hca42a69_0.conda + sha256: fb82a974f5bc029963665a77a0d669cacecfd067e1f3b32fe427d806ec21d52b + md5: b9e41e8946bb04aca90e181f29c5cf82 + depends: + - __osx >=11.0 + - libcxx >=19 + license: Apache-2.0 OR BSD-3-Clause + purls: [] + size: 1000219 + timestamp: 1776990421693 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda + sha256: a1c8cecdf9966921e13f0ae921309a1f415dfbd2b791f2117cf7e8f5e61a48b6 + md5: 210a85a1119f97ea7887188d176db135 + depends: + - __osx >=10.13 + license: LGPL-2.1-only + purls: [] + size: 737846 + timestamp: 1754908900138 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.1.4.1-ha1e9b39_0.conda + sha256: 6b809d8acb6b97bbb1a858eb4ba7b7163c67257b6c3f199dd9d1e0751f4c5b18 + md5: 57cc1464d457d01ac78f5860b9ca1714 + depends: + - __osx >=11.0 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 587997 + timestamp: 1775963139212 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.11.2-h473410d_1.conda + sha256: 5c59a02fcb345c49ef8bdd5e1889de8aa918bedd95917f9805d20659cec65da1 + md5: 596810d804d0b2f2c54bfdd635025e92 + depends: + - __osx >=11.0 + - libcxx >=19 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libhwy >=1.4.0,<1.5.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1692611 + timestamp: 1777065242546 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblal-7.7.0-fftw_h11bfb9b_101.conda + sha256: 1da531df850531b6430880a28f82ec5a1b9ed01fb90270250776b774558e04b1 + md5: d28e597204c715492543b3ebe58c66bf + depends: + - __osx >=10.13 + - fftw >=3.3.10,<4.0a0 + - gsl >=2.7,<2.8.0a0 + - hdf5 >=1.14.6,<1.14.7.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - python-lal >=7.1.1 + - lal >=7.1.1 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 807987 + timestamp: 1755600468926 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblal-7.7.0-fftw_he57ba51_104.conda + sha256: 4cde289e6fb6bf12232abfcbcf05a2d8fe09545eccb37b7e6bba2f4bf317559f + md5: 3856a8f37039281db9797a0e6809c063 + depends: + - __osx >=11.0 + - fftw >=3.3.10,<4.0a0 + - gsl >=2.7,<2.8.0a0 + - hdf5 >=2.1.0,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - lal >=7.1.1 + - python-lal >=7.1.1 + - swig >=4.4.1,<4.4.2.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 808514 + timestamp: 1774637692052 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalburst-2.0.7-h0e85ab8_2.conda + sha256: a8349cc692bde08228c140965a98694344d6ebbb91cafb26c2c8dbe85928fbcc + md5: 4802771dad10ec18432f66790ac93d7f + depends: + - __osx >=11.0 + - gsl >=2.7,<2.8.0a0 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalmetaio >=4.0.0 + - liblalmetaio >=4.0.6,<5.0a0 + - liblalsimulation >=6.2.0 + - liblalsimulation >=6.2.0,<7.0a0 + constrains: + - lalburst >=1.5.7 + - python-lalburst >=1.5.7 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 38923 + timestamp: 1771409841524 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalframe-3.0.7-hdadb070_2.conda + sha256: 5b4e8c65384a8cb8d0f2538314a2b11d89555d523adbce987605f5b2eb7ad19d + md5: c1f0e9327196adbf82468fe477b802fb + depends: + - __osx >=11.0 + - ldas-tools-framecpp >=2.9.3,<2.10.0a0 + - libframel >=8.41.3,<9.0a0 + - liblal >=7.7.0,<8.0a0 + constrains: + - lalframe >=1.5.3 + - python-lalframe >=1.5.3 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 101538 + timestamp: 1774542247513 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinference-4.1.9-h4325a54_2.conda + sha256: c8c1e718209839162725a8e8f0916faf9651f8f7abefd4f301f858b3015d7880 + md5: bbf70421f3e573a5b8c4865a8c3eb6a5 + depends: + - __osx >=11.0 + - gsl >=2.7,<2.8.0a0 + - lalinference-data 4.1.9 h694c41f_2 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalburst >=2.0.0 + - liblalburst >=2.0.7,<3.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalinspiral >=5.0.0 + - liblalinspiral >=5.0.3,<6.0a0 + - liblalmetaio >=4.0.0 + - liblalmetaio >=4.0.6,<5.0a0 + - liblalsimulation >=6.2.0 + - liblalsimulation >=6.2.0,<7.0a0 + - llvm-openmp >=19.1.7 + - llvm-openmp >=22.1.2 + constrains: + - lalinference >=2.0.6 + - python-lalinference >=2.0.6 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 305892 + timestamp: 1774964268258 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinspiral-5.0.3-h0e85ab8_3.conda + sha256: a6772fa4aa51afdc2fa06e895945ce75fa4507b30bb83cddc9a59fd0c94b24d1 + md5: 34c3551eb6d44275820d5fd2e1981b4b + depends: + - __osx >=11.0 + - gsl >=2.7,<2.8.0a0 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalburst >=2.0.0 + - liblalburst >=2.0.7,<3.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalmetaio >=4.0.0 + - liblalmetaio >=4.0.6,<5.0a0 + - liblalsimulation >=6.2.0 + - liblalsimulation >=6.2.0,<7.0a0 + constrains: + - lalinspiral >=2.0.1 + - python-lalinspiral >=2.0.1 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 412564 + timestamp: 1774544234288 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalmetaio-4.0.6-ha1e9b39_2.conda + sha256: 4923e50a409eba1ac8e80c97388124b7e2b998bb5ac7f3743ffa9b6703df790b + md5: a0febbf3d746f3214560041e99f3abc4 + depends: + - __osx >=11.0 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - libmetaio >=8.4.0 + - libmetaio >=8.5.1,<9.0a0 + constrains: + - python-lalmetaio >=2.0.1 + - lalmetaio >=2.0.1 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 54615 + timestamp: 1774544457207 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalpulsar-7.1.1-ha4006bb_3.conda + sha256: 24750f3faea7f584f3d1c498c360b08ae74d2e478acb356f7698726ac7fd40db + md5: f1bcbf87df349991deaca16e49509e8f + depends: + - __osx >=11.0 + - cfitsio >=4.6.4,<4.6.5.0a0 + - fftw + - gsl >=2.7,<2.8.0a0 + - lalpulsar-data 7.1.1 h694c41f_3 + - liblal >=7.6.0 + - liblal >=7.7.0,<8.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalinference >=4.1.0 + - liblalinference >=4.1.9,<5.0a0 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.2.0,<7.0a0 + - llvm-openmp >=19.1.7 + - llvm-openmp >=22.1.4 + constrains: + - lalpulsar >=3.0.0 + - python-lalpulsar >=3.0.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 652688 + timestamp: 1777888123319 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalpulsar-7.1.1-hde9e502_2.conda + sha256: 1386516a8fb89e7dc82ebf3c785fac0c0ea628eb7408fae1019210ab5b001661 + md5: 470d4fea71200e4c844ff232ba83103a + depends: + - __osx >=11.0 + - cfitsio >=4.6.3,<4.6.4.0a0 + - fftw + - gsl >=2.7,<2.8.0a0 + - lalpulsar-data 7.1.1 h694c41f_2 + - liblal >=7.6.0 + - liblal >=7.7.0,<8.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalinference >=4.1.0 + - liblalinference >=4.1.9,<5.0a0 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.2.0,<7.0a0 + - llvm-openmp >=19.1.7 + - llvm-openmp >=22.1.1 + constrains: + - lalpulsar >=3.0.0 + - python-lalpulsar >=3.0.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 651908 + timestamp: 1774626977990 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalsimulation-6.2.0-py312hf591029_3.conda + sha256: 92dae5b07fdf93319dc54b2f1476e0933b81fcb30c4070cef400d517e390f01d + md5: 54ffe4ca28da9da9913bb1bd5ee0b2d3 + depends: + - __osx >=11.0 + - gsl >=2.7,<2.8.0a0 + - lalsimulation-data 6.2.0 h694c41f_3 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - llvm-openmp >=19.1.7 + - llvm-openmp >=22.1.1 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - python-lalsimulation >=2.5.0 + - lalsimulation >=2.5.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 3757610 + timestamp: 1774542591365 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.11.0-7_h859234e_openblas.conda + build_number: 7 + sha256: 92fe5e99c1a4dbb53268790ce0b738411f21e0d7ca50dd3ce7a8781f1b03ed95 + md5: 3aa5c4d55000d922e71dee6daddc5031 + depends: + - libblas 3.11.0 7_he492b99_openblas + constrains: + - liblapacke 3.11.0 7*_openblas + - libcblas 3.11.0 7*_openblas + - blas 2.307 openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18862 + timestamp: 1778491179167 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda + sha256: d9e2006051529aec5578c6efeb13bb6a7200a014b2d5a77a579e83a8049d5f3c + md5: becdfbfe7049fa248e52aa37a9df09e2 + depends: + - __osx >=11.0 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + size: 105724 + timestamp: 1775826029494 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libmetaio-8.5.1-h97fe558_1003.conda + sha256: ed28b18a8ca5548711e6387439c01efde06c0f6e771b3243e51481dfd2293a98 + md5: 4a432bbf8764073858009a05a033b6d0 + depends: + - __osx >=10.13 + - libzlib >=1.3.1,<2.0a0 + constrains: + - metaio >=8.5.1 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 44865 + timestamp: 1721742286593 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.68.1-h70048d4_0.conda + sha256: 899551e16aac9dfb85bfc2fd98b655f4d1b7fea45720ec04ccb93d95b4d24798 + md5: dba4c95e2fe24adcae4b77ebf33559ae + depends: + - __osx >=11.0 + - c-ares >=1.34.6,<2.0a0 + - libcxx >=19 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 606749 + timestamp: 1773854765508 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.33-openmp_h9e49c7b_0.conda + sha256: 2c2ffe7c3ab7becd47ad308946873d2bdc219625af32a53d10efbaa54b595d31 + md5: 30666a6f0afe1471e999eca7ae5c8179 + depends: + - __osx >=11.0 + - libgfortran + - libgfortran5 >=14.3.0 + - llvm-openmp >=19.1.7 + constrains: + - openblas >=0.3.33,<0.3.34.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6287889 + timestamp: 1776996499823 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libopentelemetry-cpp-1.21.0-h7a0a166_2.conda + sha256: b51d5bbaee67c933cf753e4a9fef6636daef481bf564a16800b57c5323f17b29 + md5: f08ab4450c9d2dee6cb629b03d512b33 + depends: + - libabseil * cxx17* + - libabseil >=20260107.0,<20260108.0a0 + - libcurl >=8.18.0,<9.0a0 + - libgrpc >=1.78.0,<1.79.0a0 + - libopentelemetry-cpp-headers 1.21.0 h694c41f_2 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libzlib >=1.3.1,<2.0a0 + - nlohmann_json + - prometheus-cpp >=1.3.0,<1.4.0a0 + constrains: + - cpp-opentelemetry-sdk =1.21.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 582608 + timestamp: 1770453113535 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libopentelemetry-cpp-1.26.0-h7a0a166_0.conda + sha256: 6da1b908f427d66ca4a062df2026059229bdbdf5264c4095eec1e64f9351c837 + md5: 93aab3ab901b5b57d8d5d72308ead951 + depends: + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libcurl >=8.19.0,<9.0a0 + - libgrpc >=1.78.0,<1.79.0a0 + - libopentelemetry-cpp-headers 1.26.0 h694c41f_0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libzlib >=1.3.1,<2.0a0 + - nlohmann_json + - prometheus-cpp >=1.3.0,<1.4.0a0 + constrains: + - cpp-opentelemetry-sdk =1.26.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 602246 + timestamp: 1774001890965 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libopentelemetry-cpp-headers-1.21.0-h694c41f_2.conda + sha256: 2d6da82ed55ee074b0edb20ce8709fe1bca9a1b01f788d4c919ef66d5e2628d9 + md5: 63e0fa4a4c03578de1f7df0b35453bc2 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 364240 + timestamp: 1770452995387 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libopentelemetry-cpp-headers-1.26.0-h694c41f_0.conda + sha256: 039ced2fa6d5fc5d23d06e2764709f0db9af5fbaef486309d47bec0895eddfa6 + md5: 6ed6a92518104721c0e37c032dd9769e + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 395724 + timestamp: 1774001742305 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libparquet-23.0.1-hb3ef814_4_cpu.conda + build_number: 4 + sha256: da870d708c97432b2ddf215fdab87981dee88818cdabb62678d7e6810f3bdbf5 + md5: bd0016547e5e9863b290addc3d6e4a97 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 23.0.1 h47227bc_4_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.21.0,<1.22.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libthrift >=0.22.0,<0.22.1.0a0 + - openssl >=3.5.5,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1093828 + timestamp: 1773272696367 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libparquet-24.0.0-h527dc83_2_cpu.conda + build_number: 2 + sha256: 89cc8aaee0e33f353a636481fce8b93eeca30f308dd6ec8d0a83c93a544f0b4e + md5: c868e7d94b1efa4295eb3d153ed7c5f3 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 24.0.0 h7252e1b_2_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.26.0,<1.27.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libthrift >=0.22.0,<0.22.1.0a0 + - openssl >=3.5.6,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1122983 + timestamp: 1779478576878 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.58-he930e7c_0.conda + sha256: a669b22978e546484d18d99a210801b1823360a266d7035c713d8d1facd035f7 + md5: 9744d43d5200f284260637304a069ddd + depends: + - __osx >=11.0 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 299206 + timestamp: 1776315286816 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-6.33.5-h29d92e8_0.conda + sha256: adb74f4f1b1e13b02683ede915ce3a9fbf414325af8e035546c0498ffef870f6 + md5: d6d60b0a64a711d70ec2fd0105c299f9 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.0,<20260108.0a0 + - libcxx >=19 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 2774545 + timestamp: 1769749167835 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libre2-11-2025.11.05-h6e8c311_1.conda + sha256: 092f1ed90ba105402b0868eda0a1a11fd1aedd93ea6bb7a57f6e2fc2218806d5 + md5: 154f9f623c04dac40752d279bfdecebf + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.0,<20260108.0a0 + - libcxx >=19 + constrains: + - re2 2025.11.05.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 179250 + timestamp: 1768190310379 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.22-ha3d0635_1.conda + sha256: 07f0f37463564d93530fc23e2a77cc1aad58ba8724b1842f8713dbf6cde17cb0 + md5: bf0ce6af8f7628e34cdb399f6aa82e53 + depends: + - __osx >=11.0 + license: ISC + purls: [] + size: 281370 + timestamp: 1779164249823 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.1-h8f8c405_0.conda + sha256: 5e964e07a14180ce20decfd4897e8f81d48ec78c1cbf4af85c5520f535d9510c + md5: 9273c877f78b7486b0dfdd9268327a79 + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libzlib >=1.3.2,<2.0a0 + license: blessing + purls: [] + size: 1007171 + timestamp: 1777987093870 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda + sha256: 00654ba9e5f73aa1f75c1f69db34a19029e970a4aeb0fa8615934d8e9c369c3c + md5: a6cb15db1c2dc4d3a5f6cf3772e09e81 + depends: + - __osx >=10.13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 284216 + timestamp: 1745608575796 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.22.0-hebea4ca_2.conda + sha256: 89a20cb35e0f32d59a7080c934a56120591cb962d4fab1cba3a795a094bc8256 + md5: 36d5479e1b5967c2eb9824b953317e41 + depends: + - __osx >=11.0 + - libcxx >=19 + - libevent >=2.1.12,<2.1.13.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 332270 + timestamp: 1777019812419 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.7.1-ha0a348c_1.conda + sha256: e53424c34147301beae2cd9223ebf593720d94c038b3f03cacd0535e12c9668e + md5: 9d4344f94de4ab1330cdc41c40152ea6 + depends: + - __osx >=10.13 + - lerc >=4.0.0,<5.0a0 + - libcxx >=19 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + size: 404591 + timestamp: 1762022511178 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.11.3-hc282952_0.conda + sha256: 626db214208e8da6aa9a904518a0442e5bff7b4602cc295dd5ce1f4a98844c1d + md5: 2c49b6f6ec9a510bbb75ecbd2a572697 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + size: 84535 + timestamp: 1768735249136 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.6.0-hb807250_0.conda + sha256: 00dbfe574b5d9b9b2b519acb07545380a6bc98d1f76a02695be4995d4ec91391 + md5: 7bb6608cf1f83578587297a158a6630b + depends: + - __osx >=10.13 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 365086 + timestamp: 1752159528504 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.17.0-hf1f96e2_0.conda + sha256: 8896cd5deff6f57d102734f3e672bc17120613647288f9122bec69098e839af7 + md5: bbeca862892e2898bdb45792a61c4afc + depends: + - __osx >=10.13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 323770 + timestamp: 1727278927545 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.3-h7a90416_0.conda + sha256: 437f003e299d77403db42d17e532d686236f357ac5c3d6bf466558c697902597 + md5: c74ae93cd7876e3a9c4b5569d5e29e34 + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - libxml2 2.15.3 + license: MIT + license_family: MIT + purls: [] + size: 496338 + timestamp: 1776377250079 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.3-h953d39d_0.conda + sha256: 24248928e63b5de45012c8ad3fd6b350ae1fe2fc355613bb89ee5f0a35835bea + md5: 33f30d4878d1f047da82a669c33b307d + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.3 h7a90416_0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 40836 + timestamp: 1776377277986 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda + sha256: 4c6da089952b2d70150c74234679d6f7ac04f4a98f9432dec724968f912691e7 + md5: 30439ff30578e504ee5e0b390afc8c65 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.2 *_2 + license: Zlib + license_family: Other + purls: [] + size: 59000 + timestamp: 1774073052242 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libzopfli-1.0.3-h046ec9c_0.tar.bz2 + sha256: 3f35f8adf997467699a01819aeabba153ef554e796618c446a9626c2173aee90 + md5: 55f3f5c9bccca18d33cb3a4bcfe002d7 + depends: + - libcxx >=11.0.0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 162262 + timestamp: 1607309210977 +- conda: https://conda.anaconda.org/conda-forge/osx-64/ligo.skymap-2.5.3-np2hce383ba_1.conda + noarch: python + sha256: e419222c018707b1a1204dce7e68be9f73797470e4a5cc29350267cbaaeb30a9 + md5: 652f9ae30eaafd98b7a904aad02d246d + depends: + - astroplan >=0.7 + - astropy-base >=6.0 + - astropy-healpix >=0.3 + - chealpix + - gsl + - healpy + - h5py + - igwn-ligolw + - igwn-segments + - libcblas + - ligo-gracedb >=2.0.1 + - matplotlib-base >=3.9.1 + - networkx + - numpy >=2.0.0 + - pillow >=2.5.0 + - python >=3.11 + - python-lal >=7.7.0 + - python-lalinspiral >=5.0.3 + - python-lalmetaio >=4.0.6 + - python-lalsimulation >=6.2.0 + - pytz + - reproject >=0.3.2 + - scipy >=1.10.1 + - shapely >=2.0.0 + - tqdm >=4.27.0 + - __osx >=11.0 + - llvm-openmp >=19.1.7 + - numpy >=1.23,<3 + - _python_abi3_support 1.* + - cpython >=3.11 + - gsl >=2.7,<2.8.0a0 + - libcblas >=3.9.0,<4.0a0 + - chealpix >=3.31.0,<3.32.0a0 + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/ligo-skymap?source=hash-mapping + size: 1782541 + timestamp: 1775055974823 +- conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-22.1.6-h0d3cbff_0.conda + sha256: afbea63c0ffed8f150ba41a3e85bd849560f15f879d0f1b5e5fb6b90eca8ea78 + md5: b67316dec3b5c028b6b1bb6fd713c14e + depends: + - __osx >=11.0 + constrains: + - openmp 22.1.6|22.1.6.* + - intel-openmp <0.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 311051 + timestamp: 1779341346370 +- conda: https://conda.anaconda.org/conda-forge/osx-64/llvmlite-0.47.0-py312ha5a82fe_1.conda + sha256: 239afb28ccb79afc2ee8c620dcb121100ba87213142c49fcd6a3fbec80f230a0 + md5: 87e10812cded239b5d794dd99b1ab543 + depends: + - __osx >=11.0 + - libcxx >=19 + - libzlib >=1.3.2,<2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/llvmlite?source=hash-mapping + size: 26002496 + timestamp: 1776077462405 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-4.4.5-py312ha706d14_1.conda + sha256: 76327601d2b65bb5e3b93cee12cfd301d2cf0b246d150ff52ff7b4b01c6f9147 + md5: 157f8c5e9e63b3a4ceab8e73386f1629 + depends: + - python + - lz4-c + - __osx >=10.13 + - lz4-c >=1.10.0,<1.11.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/lz4?source=hash-mapping + size: 41972 + timestamp: 1765026424344 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.10.0-h240833e_1.conda + sha256: 8da3c9d4b596e481750440c0250a7e18521e7f69a47e1c8415d568c847c08a1c + md5: d6b9bd7e356abd7e3a633d59b753495a + depends: + - __osx >=10.13 + - libcxx >=18 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 159500 + timestamp: 1733741074747 +- conda: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-3.0.3-py312heb39f77_1.conda + sha256: 0eb418d4776a1a54c1869b11a5c4ae096ef9a46c8d7e481e32fa814561c5cfed + md5: d596f9d03043acd4ec711c844060da59 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 25095 + timestamp: 1772445399364 +- conda: https://conda.anaconda.org/conda-forge/osx-64/matplotlib-3.10.9-py312hb401068_0.conda + sha256: e236285396458870bd69842978a8c7aa412464e73e608105c59ca537d470d40a + md5: 4277a65bf3b72f018c778d719338e13a + depends: + - matplotlib-base >=3.10.9,<3.10.10.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tornado >=5 + license: PSF-2.0 + license_family: PSF + purls: [] + size: 17692 + timestamp: 1777000814535 +- conda: https://conda.anaconda.org/conda-forge/osx-64/matplotlib-base-3.10.9-py312h7609456_0.conda + sha256: 7cec29b831c25744736c92d3fa9afe0e2c090087ce2387e7f1c7ecf08414b23e + md5: c7133e403f67d8e34af93e0be4286478 + depends: + - __osx >=11.0 + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libcxx >=19 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - numpy >=1.23 + - numpy >=1.23,<3 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.12,<3.13.0a0 + - python-dateutil >=2.7 + - python_abi 3.12.* *_cp312 + - qhull >=2020.2,<2020.3.0a0 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/matplotlib?source=hash-mapping + size: 8284805 + timestamp: 1777000784713 +- conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.1.2-py312hd099df3_1.conda + sha256: 77314afa123abe6c25a0b8a161763d7f624f432bff382b976e5f243c72082944 + md5: 00597ae4dd073faaa9e6d2ca478f21c6 + depends: + - __osx >=10.13 + - libcxx >=19 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/msgpack?source=hash-mapping + size: 90666 + timestamp: 1762504423797 +- conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_0.conda + sha256: f5f7e006ff4271305ab4cc08eedd855c67a571793c3d18aff73f645f088a8cae + md5: 31b8740cf1b2588d4e61c81191004061 + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 831711 + timestamp: 1777423052277 +- conda: https://conda.anaconda.org/conda-forge/osx-64/nlohmann_json-3.12.0-h06076ce_1.conda + sha256: 8e1b8ac88e07da2910c72466a94d1fc77aa13c722f8ddbc7ae3beb7c19b41fc7 + md5: 97d7a1cda5546cb0bbdefa3777cb9897 + constrains: + - nlohmann_json-abi ==3.12.0 + license: MIT + license_family: MIT + purls: [] + size: 137081 + timestamp: 1768670842725 +- conda: https://conda.anaconda.org/conda-forge/osx-64/numba-0.65.1-py312h704f9c4_1.conda + sha256: 9453a0323f226052e3a4081e408ba6af3e0de932f7cd0372d1aaf7dcbfd3234f + md5: 49255c01905ec260d05004f75b07039a + depends: + - __osx >=11.0 + - libcxx >=19 + - llvm-openmp >=19.1.7 + - llvmlite >=0.47.0,<0.48.0a0 + - numpy >=1.22.3,<2.5 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - libopenblas !=0.3.6 + - cuda-python >=11.6 + - tbb >=2021.6.0 + - cuda-version >=11.2 + - cudatoolkit >=11.2 + - scipy >=1.0 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/numba?source=hash-mapping + size: 5690378 + timestamp: 1778390848946 +- conda: https://conda.anaconda.org/conda-forge/osx-64/numcodecs-0.16.5-py312h86abcb1_0.conda + sha256: dacadc1a0fe597ff94eea6b659ed0597e88f6a15c489a5562f0055bd7ef41c4e + md5: cb2f65f89f8194ff35e16cfe87dd1d62 + depends: + - __osx >=10.13 + - deprecated + - libcxx >=19 + - msgpack-python + - numpy >=1.23,<3 + - numpy >=1.24 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - typing_extensions + license: MIT + license_family: MIT + purls: + - pkg:pypi/numcodecs?source=hash-mapping + size: 753563 + timestamp: 1764782733189 +- conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.4.6-py312h746d82c_0.conda + sha256: e7837f62b874c987c1bd2eda335ae9b977caf61a5227c23e4e8cceef88bb21b6 + md5: 86c91d10224283ed367225057a09e4a3 + depends: + - python + - libcxx >=19 + - __osx >=11.0 + - libcblas >=3.9.0,<4.0a0 + - python_abi 3.12.* *_cp312 + - libblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + purls: + - pkg:pypi/numpy?source=compressed-mapping + size: 7997002 + timestamp: 1779782916096 +- conda: https://conda.anaconda.org/conda-forge/osx-64/oniguruma-6.9.10-h6e16a3a_0.conda + sha256: c8ecd1cb39e75677235daddc6ead10055a0ef66b2293118ed77adc621b2ffbcc + md5: 1de37bb098b5b39ad79027d1767b02dd + depends: + - __osx >=10.13 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 224022 + timestamp: 1735727100676 +- conda: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.4-h52bb76a_0.conda + sha256: 9a37ecf9c086f3a50d0132e6087dcbe7ea978d80e2da267fa3199c486529b311 + md5: 46e628da6e796c948fa8ec9d6d10bda3 + depends: + - __osx >=11.0 + - libcxx >=19 + - libpng >=1.6.55,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 335227 + timestamp: 1772625294157 +- conda: https://conda.anaconda.org/conda-forge/osx-64/openjph-0.27.3-h2c0e27e_0.conda + sha256: f1bf8f40499668146e1d3ce38312fa79903d4f3f05ec0a48acaf2ff143301233 + md5: ece1fbf9be3cf229b346468376fd2a14 + depends: + - libcxx >=19 + - __osx >=11.0 + - libtiff >=4.7.1,<4.8.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 267852 + timestamp: 1778775444580 +- conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.2-hc881268_0.conda + sha256: 334fd49ea31b99114f5afb1ec44555dc8c90640648302a4f8f838ee345d1ec50 + md5: 5cf0ece4375c73d7a5765e83565a69c7 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2776564 + timestamp: 1775589970694 +- conda: https://conda.anaconda.org/conda-forge/osx-64/orc-2.3.0-hb9b210e_0.conda + sha256: c4872822be78b2503bba06b906604c87000e3a63c7b7b8cb459463d46c55814b + md5: 292d30447800bc51a0d3e0e9738f5730 + depends: + - tzdata + - libcxx >=19 + - __osx >=11.0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + - snappy >=1.2.2,<1.3.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - libabseil >=20260107.1,<20260108.0a0 + - libabseil * cxx17* + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 594601 + timestamp: 1773230256637 +- conda: https://conda.anaconda.org/conda-forge/osx-64/pandas-3.0.3-py312h8e27051_0.conda + sha256: d72b541b510e3a1db86db3ce8d4c30bddc945c3c89eb2c9d16fde0cc9f82e497 + md5: 8cfffbf760a7d7abc16c79141ead177a + depends: + - python + - numpy >=1.26.0 + - python-dateutil >=2.8.2 + - libcxx >=19 + - __osx >=11.0 + - numpy >=1.23,<3 + - python_abi 3.12.* *_cp312 + constrains: + - adbc-driver-postgresql >=1.2.0 + - adbc-driver-sqlite >=1.2.0 + - beautifulsoup4 >=4.12.3 + - blosc >=1.21.3 + - bottleneck >=1.4.2 + - fastparquet >=2024.11.0 + - fsspec >=2024.10.0 + - gcsfs >=2024.10.0 + - html5lib >=1.1 + - hypothesis >=6.116.0 + - jinja2 >=3.1.5 + - lxml >=5.3.0 + - matplotlib >=3.9.3 + - numba >=0.60.0 + - numexpr >=2.10.2 + - odfpy >=1.4.1 + - openpyxl >=3.1.5 + - psycopg2 >=2.9.10 + - pyarrow >=13.0.0 + - pyiceberg >=0.8.1 + - pymysql >=1.1.1 + - pyqt5 >=5.15.9 + - pyreadstat >=1.2.8 + - pytables >=3.10.1 + - pytest >=8.3.4 + - pytest-xdist >=3.6.1 + - python-calamine >=0.3.0 + - pytz >=2024.2 + - pyxlsb >=1.0.10 + - qtpy >=2.4.2 + - scipy >=1.14.1 + - s3fs >=2024.10.0 + - sqlalchemy >=2.0.36 + - tabulate >=0.9.0 + - xarray >=2024.10.0 + - xlrd >=2.0.1 + - xlsxwriter >=3.2.0 + - zstandard >=0.23.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandas?source=compressed-mapping + size: 14170082 + timestamp: 1778602746933 +- conda: https://conda.anaconda.org/conda-forge/osx-64/pcre2-10.46-ha3e7e28_0.conda + sha256: cb262b7f369431d1086445ddd1f21d40003bb03229dfc1d687e3a808de2663a6 + md5: 3b504da3a4f6d8b2b1f969686a0bf0c0 + depends: + - __osx >=10.13 + - bzip2 >=1.0.8,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1097626 + timestamp: 1756743061564 +- conda: https://conda.anaconda.org/conda-forge/osx-64/pcre2-10.47-h13923f0_0.conda + sha256: 8d64a9d36073346542e5ea042ef8207a45a0069a2e65ce3323ee3146db78134c + md5: 08f970fb2b75f5be27678e077ebedd46 + depends: + - __osx >=10.13 + - bzip2 >=1.0.8,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1106584 + timestamp: 1763655837207 +- conda: https://conda.anaconda.org/conda-forge/osx-64/pillow-12.2.0-py312he84af14_0.conda + sha256: 720a4bb7aa1cb6a1d4fa026350f69785f5f11fe4899730d575e32292399f470a + md5: 2062ffb1b958b050e65ddd8556bcb4d8 + depends: + - python + - __osx >=11.0 + - openjpeg >=2.5.4,<3.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libxcb >=1.17.0,<2.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - tk >=8.6.13,<8.7.0a0 + - lcms2 >=2.18,<3.0a0 + - python_abi 3.12.* *_cp312 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 973346 + timestamp: 1775060319565 +- conda: https://conda.anaconda.org/conda-forge/osx-64/prometheus-cpp-1.3.0-h7802330_0.conda + sha256: af754a477ee2681cb7d5d77c621bd590d25fe1caf16741841fc2d176815fc7de + md5: f36107fa2557e63421a46676371c4226 + depends: + - __osx >=10.13 + - libcurl >=8.10.1,<9.0a0 + - libcxx >=18 + - libzlib >=1.3.1,<2.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 179103 + timestamp: 1730769223221 +- conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-7.2.2-py312hf7082af_0.conda + sha256: 517c17b24349476535db4da7d1cd31538dadf2c77f9f7f7d8be6b7dc5dfbb636 + md5: 1fd947fae149960538fc941b8f122bc1 + depends: + - python + - __osx >=10.13 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + size: 236338 + timestamp: 1769678402626 +- conda: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-h00291cd_1002.conda + sha256: 05944ca3445f31614f8c674c560bca02ff05cb51637a96f665cb2bbe496099e5 + md5: 8bcf980d2c6b17094961198284b8e862 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + size: 8364 + timestamp: 1726802331537 +- conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-23.0.1-py312hb401068_0.conda + sha256: 0d684a15fcba8ffb234956c97bd7eb227b763ee26cbbdadb3d26495ba7cb307d + md5: 9d2d172fb73dc93dc6e1927fa8a49c4c + depends: + - libarrow-acero 23.0.1.* + - libarrow-dataset 23.0.1.* + - libarrow-substrait 23.0.1.* + - libparquet 23.0.1.* + - pyarrow-core 23.0.1 *_0_* + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 28593 + timestamp: 1771308132070 +- conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-24.0.0-py312hb401068_0.conda + sha256: 9f34bf129e8a618b6a8fecdfafa509823695b945d2618205758fab529ee9b88f + md5: 3301b7a88750f114aa09fc2a28db2435 + depends: + - libarrow-acero 24.0.0.* + - libarrow-dataset 24.0.0.* + - libarrow-substrait 24.0.0.* + - libparquet 24.0.0.* + - pyarrow-core 24.0.0 *_0_* + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 26749 + timestamp: 1776929273540 +- conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-core-23.0.1-py312h3987635_0_cpu.conda + sha256: c01d0acc0c6a68726efdcedf651e8cf0597a5bb1598fb418fa6dea32cc2dc28e + md5: 7b6b5b493e59ace41b368e3a7bc87e09 + depends: + - __osx >=11.0 + - libarrow 23.0.1.* *cpu + - libarrow-compute 23.0.1.* *cpu + - libcxx >=21 + - libzlib >=1.3.1,<2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - apache-arrow-proc * cpu + - numpy >=1.23,<3 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/pyarrow?source=hash-mapping + size: 4395017 + timestamp: 1771308059514 +- conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-core-24.0.0-py312h3987635_0_cpu.conda + sha256: dddbcf6e50454794ebd8ba77e892a099dbee4ad9727562e140f765ce0c08552d + md5: 40fe539ada22b325955f3590aefe39a9 + depends: + - __osx >=11.0 + - libarrow 24.0.0.* *cpu + - libarrow-compute 24.0.0.* *cpu + - libcxx >=21 + - libzlib >=1.3.2,<2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - numpy >=1.23,<3 + - apache-arrow-proc * cpu + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/pyarrow?source=hash-mapping + size: 4055527 + timestamp: 1776929225059 +- conda: https://conda.anaconda.org/conda-forge/osx-64/pyerfa-2.0.1.5-py310hcbffc5d_2.conda + noarch: python + sha256: 06beb9ed2f6df706b5bd050e42819e49606d6256fe66dc7255c577a0140a2379 + md5: cd854c208de8cd3e2a6a878500021633 + depends: + - __osx >=10.13 + - numpy >=1.21,<3 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyerfa?source=hash-mapping + size: 270277 + timestamp: 1756821799013 +- conda: https://conda.anaconda.org/conda-forge/osx-64/pynacl-1.6.2-py312h3bc9c61_2.conda + sha256: e9d67074d08df76c8835dcca4619b21549b67f95616edec086f7f73c66a6a576 + md5: 2e55aec7dce7390cbe537e79082c2ffa + depends: + - __osx >=11.0 + - cffi >=1.4.1 + - libsodium >=1.0.22,<1.0.23.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - six + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/pynacl?source=hash-mapping + size: 1194147 + timestamp: 1778985130828 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.13-ha9537fe_0_cpython.conda + sha256: fb592ceb1bc247d19247d5535083da4a79721553e29e1290f5d81c07d4f086b5 + md5: ec05996c0d914a4e98ee3c7d789083f8 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.4,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - liblzma >=5.8.2,<6.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.5,<4.0a0 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 13672169 + timestamp: 1772730464626 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-gssapi-1.11.1-py312h479078b_1.conda + sha256: b18065ebd7f0d126a434fae0b23adbf7b5bb2fbf0c791dee6ed7e88a2397e57a + md5: df4df185716e9fc68c12118b8f457676 + depends: + - __osx >=10.13 + - decorator + - krb5 >=1.22.2,<1.23.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: ISC + purls: + - pkg:pypi/gssapi?source=hash-mapping + size: 483085 + timestamp: 1770935003939 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-gssapi-1.11.1-py312h972ca57_0.conda + sha256: c36f7b2f763e383b9d5ccce60df8d3a94c1756f38fc4c0568ce16b942e97b8a5 + md5: 69a9c1256164ac1b857499662aa84de0 + depends: + - __osx >=10.13 + - decorator + - krb5 >=1.21.3,<1.22.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: ISC + purls: + - pkg:pypi/gssapi?source=hash-mapping + size: 482564 + timestamp: 1769842851678 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-htcondor-24.12.4-py312h564a4e3_0.conda + sha256: 2644017fe4104fd006a06c26cff0c0585e6f003526e8860ca38531b123e01c8f + md5: 60acec36edf5ae3bd69c3b5e0326c9db + depends: + - __osx >=10.13 + - htcondor-classads 24.12.4 hf470585_0 + - libboost-python >=1.88.0,<1.89.0a0 + - libcondor_utils 24.12.4 h2da22b3_0 + - libcxx >=19 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/htcondor?source=hash-mapping + size: 933415 + timestamp: 1759417119633 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-htcondor-25.10.1-py312haf40f37_0.conda + sha256: 9c7644309e92850e044379f4630c1123188fe32775092c62b9b51555b89f5f40 + md5: bf9185ff97db72ebd3262b15dec34905 + depends: + - __osx >=11.0 + - htcondor-classads 25.10.1 h4086b99_0 + - libcondor_utils 25.10.1 hcd6a731_0 + - libcxx >=19 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/htcondor?source=hash-mapping + size: 503241 + timestamp: 1778793697930 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lal-7.7.0-fftw_py312h70f41d4_104.conda + sha256: fccccf167eb5f27b3c44d9c6c4fe36346dd6f960082d8e09e90e844c2433171c + md5: 3456d56a47ba31e3c8ccf212560eb20e + depends: + - __osx >=11.0 + - igwn-segments + - liblal 7.7.0 fftw_he57ba51_104 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-dateutil + - python_abi 3.12.* *_cp312 + - scipy + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 902063 + timestamp: 1774637955141 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lal-7.7.0-fftw_py312haa2233f_101.conda + sha256: 91a3584546b5335fca85a7730b79ef13c2c97d7c555e4a092bd6f313de661aa7 + md5: d9d17824c3a2ea03d2a669fb51bb215f + depends: + - __osx >=10.13 + - igwn-segments + - liblal 7.7.0 fftw_h11bfb9b_101 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-dateutil + - python_abi 3.12.* *_cp312 + - scipy + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 903465 + timestamp: 1755600665238 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalburst-2.0.7-py312ha71206d_2.conda + sha256: f14e9941d43935d2e09da91320624faf8105eb2872a5cae3048c2f9d9a74b705 + md5: 8dcc6e8575559bce612732ce1665bd7b + depends: + - __osx >=11.0 + - gsl >=2.7,<2.8.0a0 + - igwn-ligolw >=2.1.0 + - igwn-segments + - liblalburst 2.0.7 h0e85ab8_2 + - lscsoft-glue + - matplotlib-base + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python-lalmetaio >=4.0.0 + - python-lalsimulation >=6.2.0 + - python_abi 3.12.* *_cp312 + - scipy + - tqdm + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 314810 + timestamp: 1771410107471 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalframe-3.0.7-py312h469e4ad_2.conda + sha256: 4446141ae01b9faf4c75d5e184565c820d5d76122f94315d8553835381ab60b2 + md5: ed7c6bdae05d49a2347c1eb8bc4909b7 + depends: + - __osx >=11.0 + - liblalframe 3.0.7 hdadb070_2 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 723427 + timestamp: 1774542953602 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinference-4.1.9-py312h469e4ad_2.conda + sha256: ad2ecea6d829fa496383d974de3a1b3d0f323fc41586e3738505ebc9f7a45ac9 + md5: bc9e69da5301b5989fe719a2894c6bb7 + depends: + - __osx >=11.0 + - astropy-base >=1.1.1 + - h5py + - healpy >=1.17.3 + - igwn-ligolw >=2.1.0 + - igwn-segments + - liblalinference 4.1.9 h4325a54_2 + - lscsoft-glue >=1.54.1 + - matplotlib-base >=1.2.0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python-lalburst >=2.0.0 + - python-lalinspiral >=5.0.0 + - python-lalmetaio >=4.0.0 + - python-lalsimulation >=6.2.0 + - python_abi 3.12.* *_cp312 + - scipy >=0.9.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 807930 + timestamp: 1774964726469 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinspiral-5.0.3-py312h469e4ad_3.conda + sha256: 7db3ddad1ffacf2773ad107598e7bf64de48f1176d1cb04d4bb25272c0d7ccc0 + md5: 0c6fc66008b677026c684bbace404d68 + depends: + - __osx >=11.0 + - igwn-ligolw + - liblalinspiral 5.0.3 h0e85ab8_3 + - lscsoft-glue + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python-lalburst >=2.0.0 + - python-lalframe >=3.0.0 + - python-lalmetaio >=4.0.0 + - python-lalsimulation >=6.2.0 + - python_abi 3.12.* *_cp312 + - tqdm + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 61664492 + timestamp: 1774544363349 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalmetaio-4.0.6-py312h469e4ad_2.conda + sha256: 65a753966ca13729f8c675e4016168dedd3f5ace8c723e15c921301f0d4dbeba + md5: 9ba82c74e7afac60195bd825e7da2957 + depends: + - __osx >=11.0 + - liblalmetaio 4.0.6 ha1e9b39_2 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 144592 + timestamp: 1774545353516 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalpulsar-7.1.1-py312h469e4ad_2.conda + sha256: da68ad424fb3a08f4892747d63d337e8b4cd70b2cd3707c913f30e3136d37cc7 + md5: 6e34217906e82847be8a6162bca48612 + depends: + - __osx >=11.0 + - astropy-base + - liblalpulsar 7.1.1 hde9e502_2 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.6.0 + - python-lalframe >=3.0.0 + - python-lalinference >=4.1.0 + - python-lalsimulation >=6.1.0 + - python_abi 3.12.* *_cp312 + - six + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 96730795 + timestamp: 1774627441731 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalpulsar-7.1.1-py312h469e4ad_3.conda + sha256: ffca16d39da1c9eb3208e85df9249f4373b5745e78bb2a38e787d9324d076271 + md5: 7a093071dc261b0fdb33b79af68e8e4f + depends: + - __osx >=11.0 + - astropy-base + - liblalpulsar 7.1.1 ha4006bb_3 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.6.0 + - python-lalframe >=3.0.0 + - python-lalinference >=4.1.0 + - python-lalsimulation >=6.1.0 + - python_abi 3.12.* *_cp312 + - six + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 96703161 + timestamp: 1777888667423 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalsimulation-6.2.0-py312hc642aa9_3.conda + sha256: 598218b80a727f22739190fe89a7b2bcc1ffca6a69f3efcf00844c2d0ac79e82 + md5: ad5d83128adbff884f293cbea8952cc7 + depends: + - __osx >=11.0 + - astropy-base + - gsl >=2.7,<2.8.0a0 + - gwpy + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalsimulation 6.2.0 py312hf591029_3 + - llvm-openmp >=19.1.7 + - llvm-openmp >=22.1.1 + - mpmath >=1.0.0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python_abi 3.12.* *_cp312 + - scipy + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 4272552 + timestamp: 1774542685088 +- conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.3-py312h51361c1_1.conda + sha256: d85e3be523b7173a194a66ae05a585ac1e14ccfbe81a9201b8047d6e45f2f7d9 + md5: 9029301bf8a667cf57d6e88f03a6726b + depends: + - __osx >=10.13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + size: 190417 + timestamp: 1770223755226 +- conda: https://conda.anaconda.org/conda-forge/osx-64/qhull-2020.2-h3c5361c_5.conda + sha256: 79d804fa6af9c750e8b09482559814ae18cd8df549ecb80a4873537a5a31e06e + md5: dd1ea9ff27c93db7c01a7b7656bd4ad4 + depends: + - __osx >=10.13 + - libcxx >=16 + license: LicenseRef-Qhull + purls: [] + size: 528122 + timestamp: 1720814002588 +- conda: https://conda.anaconda.org/conda-forge/osx-64/rav1e-0.8.1-h618d828_0.conda + sha256: 4286abee88102b8889d2d20e79a51424fcee2aa24aba3d0ea3c5c7ee251d48ca + md5: 19c2d0ae0255c175faec576d43fe9763 + depends: + - __osx >=11.0 + constrains: + - __osx >=10.13 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 1129893 + timestamp: 1772541463868 +- conda: https://conda.anaconda.org/conda-forge/osx-64/re2-2025.11.05-h77e0585_1.conda + sha256: 1aeb9a9554cc719d454ad6158afbb0c249973fa4ee1d782d7e40cbec1de9b061 + md5: b2cc31f114e4487d24e5617e62a24017 + depends: + - libre2-11 2025.11.05 h6e8c311_1 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 27447 + timestamp: 1768190352348 +- conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda + sha256: 4614af680aa0920e82b953fece85a03007e0719c3399f13d7de64176874b80d5 + md5: eefd65452dfe7cce476a519bece46704 + depends: + - __osx >=10.13 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 317819 + timestamp: 1765813692798 +- conda: https://conda.anaconda.org/conda-forge/osx-64/regex-2026.5.9-py312h933eb07_0.conda + sha256: 0ca7dc702def6b38ba17d9092c746089b04262a5481523fa636a62caf6de357a + md5: 41e37a699f3ca95813394005d82784e8 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 AND CNRI-Python + license_family: PSF + purls: + - pkg:pypi/regex?source=hash-mapping + size: 377764 + timestamp: 1778374454469 +- conda: https://conda.anaconda.org/conda-forge/osx-64/reproject-0.19.0-py312h391ab28_0.conda + sha256: a9277d09d48763dfed1e50b0be842456309a5f471d48ac78ebd711c5a6fcec81 + md5: 2376a866079c62b37ca09d17638d4bbb + depends: + - __osx >=10.13 + - astropy-base >=5.0 + - astropy-healpix >=1.0 + - dask >=2024.4.1 + - dask-image >=2025.11.0 + - fsspec >=2021.9 + - numpy >=1.23 + - numpy >=1.23,<3 + - pillow >=10.0 + - pyavm >=0.9.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - scipy >=1.9 + - shapely + - zarr >=2.17.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/reproject?source=hash-mapping + size: 967338 + timestamp: 1763206623898 +- conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.8.0-np2py312h47bbdc5_1.conda + sha256: 1a03f549462e9c700c93664c663c08a651f6c93c0979384417ac132549c44b98 + md5: 9c037f2050f55c721704013b87c9724e + depends: + - python + - numpy >=1.24.1 + - scipy >=1.10.0 + - joblib >=1.3.0 + - threadpoolctl >=3.2.0 + - __osx >=10.13 + - llvm-openmp >=19.1.7 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.23,<3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scikit-learn?source=hash-mapping + size: 9288972 + timestamp: 1766550860454 +- conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.17.1-py312h6309490_0.conda + sha256: 81842a4b39f700e122c8ba729034c7fc7b3a6bfd8d3ca41fe64e2bc8b0d1a4f4 + md5: 07c955303eea8d00535164eb5f63ee97 + depends: + - __osx >=11.0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - liblapack >=3.9.0,<4.0a0 + - numpy <2.7 + - numpy >=1.23,<3 + - numpy >=1.25.2 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=hash-mapping + size: 15312767 + timestamp: 1771881124085 +- conda: https://conda.anaconda.org/conda-forge/osx-64/scitokens-cpp-1.4.0-h1c2ca81_0.conda + sha256: 8cc1d5c4a21e28f06e8d452a3db1f729836cdde7cc84209fac24063bf234f2a1 + md5: 431ea6026f7d94436135184130347ee6 + depends: + - __osx >=11.0 + - libcurl >=8.18.0,<9.0a0 + - libcxx >=19 + - libsqlite >=3.51.2,<4.0a0 + - openssl >=3.5.5,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 188453 + timestamp: 1771576368104 +- conda: https://conda.anaconda.org/conda-forge/osx-64/shapely-2.1.2-py312hd8edc82_2.conda + sha256: 0ad376aee3a2fe149443af9345aadeb8ad82a95953bee74b59ca17997da03012 + md5: eae9cbc6418de8f26e08f4fb255759e9 + depends: + - __osx >=10.13 + - geos >=3.14.1,<3.14.2.0a0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/shapely?source=hash-mapping + size: 603294 + timestamp: 1762523892524 +- conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.2.2-h01f5ddf_1.conda + sha256: 1525e6d8e2edf32dabfe2a8e2fc8bf2df81c5ef9f0b5374a3d4ccfa672bfd949 + md5: 2e993292ec18af5cd480932d448598cf + depends: + - libcxx >=19 + - __osx >=10.13 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 40023 + timestamp: 1762948053450 +- conda: https://conda.anaconda.org/conda-forge/osx-64/svt-av1-4.0.1-h991f03e_0.conda + sha256: 5f8c150f558437364bfe6dade1a81cf1b3fe8ba291d8d8db01f889c32a310f08 + md5: 111339b9431e9de1e37ffa8e53040609 + depends: + - __osx >=10.13 + - libcxx >=19 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 2364161 + timestamp: 1769664663364 +- conda: https://conda.anaconda.org/conda-forge/osx-64/swig-4.3.1-hf470585_4.conda + sha256: 59d08fe888e623eabd72b320753dc507280e17370b8642ef97de592300d5d399 + md5: 53469220ecb176496c25c151e3ed9044 + depends: + - __osx >=10.13 + - libcxx >=19 + - pcre2 >=10.46,<10.47.0a0 + constrains: + - swig-abi ==4 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 1164059 + timestamp: 1761740878132 +- conda: https://conda.anaconda.org/conda-forge/osx-64/swig-4.4.1-hdac4ec2_0.conda + sha256: 5f89ae3ec8f2ac47f355838e5071708440807c78afbe68bf5d5719e0d9483197 + md5: 4f5f602a207a0b56d48ada419014b26e + depends: + - libcxx >=19 + - __osx >=11.0 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - swig-abi ==5 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 1234602 + timestamp: 1773252006725 +- conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda + sha256: 7f0d9c320288532873e2d8486c331ec6d87919c9028208d3f6ac91dc8f99a67b + md5: 6e6efb7463f8cef69dbcb4c2205bf60e + depends: + - __osx >=10.13 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3282953 + timestamp: 1769460532442 +- conda: https://conda.anaconda.org/conda-forge/osx-64/tornado-6.5.5-py312h933eb07_0.conda + sha256: da46b42ce6413f6fd03195507df57c8149cc04e043cdbf4d06f7cae236a5445c + md5: af855ebae119a5ff8902ef7a8e200303 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + size: 857717 + timestamp: 1774358322837 +- conda: https://conda.anaconda.org/conda-forge/osx-64/unicodedata2-17.0.1-py312h1a1c95f_0.conda + sha256: 29bdc3648a4b8011c572003234ebfaa13666aa71760c9f89f798758ccebd7448 + md5: 563dc18b746f873408b76e068e2b4baa + depends: + - __osx >=10.13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/unicodedata2?source=hash-mapping + size: 406056 + timestamp: 1770909495553 +- conda: https://conda.anaconda.org/conda-forge/osx-64/wrapt-2.2.1-py312h933eb07_0.conda + sha256: d836266c79039b60e2104d87d277a74ddc95b195c84ed08dc31185faf3dead6c + md5: 9832454120b29950e9304a608d71c01a + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/wrapt?source=hash-mapping + size: 111048 + timestamp: 1779477872468 +- conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.12-h8616949_1.conda + sha256: 928f28bd278c7da674b57d71b2e7f4ac4e7c7ce56b0bf0f60d6a074366a2e76d + md5: 47f1b8b4a76ebd0cd22bd7153e54a4dc + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + size: 13810 + timestamp: 1762977180568 +- conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.5-h8616949_1.conda + sha256: b7b291cc5fd4e1223058542fca46f462221027779920dd433d68b98e858a4afc + md5: 435446d9d7db8e094d2c989766cfb146 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + size: 19067 + timestamp: 1762977101974 +- conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + sha256: a335161bfa57b64e6794c3c354e7d49449b28b8d8a7c4ed02bf04c3f009953f9 + md5: a645bb90997d3fc2aea0adf6517059bd + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + size: 79419 + timestamp: 1753484072608 +- conda: https://conda.anaconda.org/conda-forge/osx-64/zfp-1.0.1-h1b13a81_4.conda + sha256: fa9f5df5c864abe1360633029789c9d54881d75752e064d0b76ea0ba578cbff6 + md5: ab3f885d2b4f24cdcbc91926f3ad9301 + depends: + - __osx >=10.13 + - libcxx >=19 + - llvm-openmp >=19.1.7 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 211942 + timestamp: 1766458562226 +- conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.2-hbb4bfdb_2.conda + sha256: 5dd728cebca2e96fa48d41661f1a35ed0ee3cb722669eee4e2d854c6745655eb + md5: 6276aa61ffc361cbf130d78cfb88a237 + depends: + - __osx >=11.0 + - libzlib 1.3.2 hbb4bfdb_2 + license: Zlib + license_family: Other + purls: [] + size: 92411 + timestamp: 1774073075482 +- conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.3.3-h8bce59a_1.conda + sha256: 4a1beb656761c7d8c9a53474bfd3932c30d82af5d93a32b8ef626c01c059d981 + md5: b3ecb6480fd46194e3f7dd0ff4445dff + depends: + - __osx >=10.13 + - libcxx >=19 + license: Zlib + license_family: Other + purls: [] + size: 120464 + timestamp: 1770168263684 +- conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda + sha256: 47101a4055a70a4876ffc87b750ab2287b67eca793f21c8224be5e1ee6394d3f + md5: 727109b184d680772e3122f40136d5ca + depends: + - __osx >=10.13 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 528148 + timestamp: 1764777156963 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + build_number: 7 + sha256: 7acaa2e0782cad032bdaf756b536874346ac1375745fb250e9bdd6a48a7ab3cd + md5: a44032f282e7d2acdeb1c240308052dd + depends: + - llvm-openmp >=9.0.1 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 8325 + timestamp: 1764092507920 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda + sha256: ec238f18ce8140485645252351a0eca9ef4f7a1c568a420f240a585229bc12ef + md5: 7adba36492a1bb22d98ffffe4f6fc6de + depends: + - __osx >=11.0 + - libcxx >=16 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 2235747 + timestamp: 1718551382432 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/astropy-base-7.2.0-py312ha11c99a_0.conda + sha256: 1d235639c72e2704e4a71548ae229f6fddd5a7599363027ee887692cfa2ad6af + md5: 805e724e1d067bf930ea9a342640a402 + depends: + - __osx >=11.0 + - astropy-iers-data >=0.2025.10.27.0.39.10 + - numpy >=1.23,<3 + - numpy >=1.24 + - packaging >=22.0.0 + - pyerfa >=2.0.1.1 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - pyyaml >=6.0.0 + constrains: + - astropy >=7.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/astropy?source=hash-mapping + size: 9377467 + timestamp: 1764121407665 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/astropy-healpix-1.1.3-py312hf57c059_0.conda + sha256: 90d6bfd802bb93ff7326fb9b06109f7e1e7f765575ba33c174a1f00d7f036e65 + md5: 85973aa99b28c4b0067078caf5bb4cd7 + depends: + - __osx >=11.0 + - astropy-base >=3 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/astropy-healpix?source=hash-mapping + size: 109368 + timestamp: 1768880553169 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.10.1-ha7d4cc1_3.conda + sha256: ce023981f49a96074bc84d6249c7097b71c27e8d3bd750fc07c520579159521c + md5: 4fbd86a4d1efeb954b0d559d6717bd2b + depends: + - __osx >=11.0 + - aws-c-http >=0.10.13,<0.10.14.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 116717 + timestamp: 1777489477698 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.9.6-ha02d361_1.conda + sha256: 69b1b619958a9120b92ba9f418c51309fbd14f67628ea9617e7e0a4936d5d035 + md5: 798becc566a5335533252906c42ef71b + depends: + - __osx >=11.0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + - aws-c-http >=0.10.10,<0.10.11.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 115282 + timestamp: 1771494170485 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.13-h6ee9776_1.conda + sha256: 13c42cb54619df0a1c3e5e5b0f7c8e575460b689084024fd23abeb443aac391b + md5: 8baab664c541d6f059e83423d9fc5e30 + depends: + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 45233 + timestamp: 1764593742187 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.12.6-hc919400_0.conda + sha256: cd3817c82470826167b1d8008485676862640cff65750c34062e6c20aeac419b + md5: b759f02a7fa946ea9fd9fb035422c848 + depends: + - __osx >=11.0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 224116 + timestamp: 1763585987935 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.2-h3e7f9b5_0.conda + sha256: ce405171612acef0924a1ff9729d556db7936ad380a81a36325b7df5405a6214 + md5: 6edccad10fc1c76a7a34b9c14efbeaa3 + depends: + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 21470 + timestamp: 1767790900862 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.5.9-hd533cd8_2.conda + sha256: c06a47704bba4f9f979e2ee2d0b35200458f1ac6d4009fcd2c6d616ed8a18160 + md5: 523157d65a64b29f4bf2be084756df69 + depends: + - libcxx >=19 + - __osx >=11.0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 53198 + timestamp: 1771380419309 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.7.0-h351c84d_0.conda + sha256: 454c02593d88246ac0fd4fc5e306147dd4f6c4866931c436ddeccdb37a70250f + md5: cb6d3b9905ffa47de2628e1ba9666c33 + depends: + - __osx >=11.0 + - libcxx >=19 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 53822 + timestamp: 1774480046539 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.10.10-ha1850f6_0.conda + sha256: a73aa557b246944f13af9fb3ad9f3bad6260252aa0b92df066eb5113c0be8fec + md5: 2b65d6ea75034df28aa2f2117920c51f + depends: + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-compression >=0.3.2,<0.3.3.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 172345 + timestamp: 1771421384051 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.10.13-h95cdebe_0.conda + sha256: 7a008a5a2f76256e841a8565b373a7dcfd2a439e5d9dbec320322468637f69e5 + md5: fc4478bc51e76c5d26ea2c4f1e3ba366 + depends: + - __osx >=11.0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-compression >=0.3.2,<0.3.3.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 173575 + timestamp: 1774488444724 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.26.1-h4137820_2.conda + sha256: 131064d83b9e8b0214c0c240df053e55fef0a7c0590acf6fb569354ae0d22cb8 + md5: c67922134dc54a497da7a12bca07d001 + depends: + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 177168 + timestamp: 1773328939595 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.26.3-h4137820_2.conda + sha256: 953207d6854b41cb12c4ecfa49f15f5c21086df47c0535de8a5f3cc4eb3e70de + md5: e18c6ab3c89c04be91b14f02386bc916 + depends: + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 176967 + timestamp: 1779133165183 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.14.0-h5721393_1.conda + sha256: e6149bb7b836ddd3ccf87ff84d57925ee27e773b531932e75095b90cb30f87e0 + md5: f06bafa0131571f5a09d25ad2478873f + depends: + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-http >=0.10.10,<0.10.11.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 155370 + timestamp: 1771458064307 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.15.2-h8860bc9_2.conda + sha256: 19a97f5d06ef994d7f48e77de3f998cc0a72d750d9363f2ba3894234c7bc799e + md5: 826c667323e95b2af0223641c69f327c + depends: + - __osx >=11.0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-http >=0.10.13,<0.10.14.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 156329 + timestamp: 1777488187414 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.11.5-h7d214dc_3.conda + sha256: 691d5081569ec9cebf6a9d33b5ea7d0d7e642469b0f11b6736a4c277f5d879a9 + md5: 79e417d4617e8e1c0738184979cd0753 + depends: + - __osx >=11.0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + - aws-c-http >=0.10.10,<0.10.11.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-auth >=0.9.6,<0.9.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 129600 + timestamp: 1771586353474 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.12.2-h07b101a_1.conda + sha256: 236b4acfc8b0757e427087b53ebaf090190d106a7e73b6b1e8f80388988e89ac + md5: 7a520ebd6ae9efe641cb207b650d004c + depends: + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-http >=0.10.13,<0.10.14.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-auth >=0.10.1,<0.10.2.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 131374 + timestamp: 1777824889044 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.4-h16f91aa_4.conda + sha256: 8a4ee03ea6e14d5a498657e5fe96875a133b4263b910c5b60176db1a1a0aaa27 + md5: 658a8236f3f1ebecaaa937b5ccd5d730 + depends: + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 53430 + timestamp: 1764755714246 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.10-h3e7f9b5_0.conda + sha256: 06661bc848b27aa38a85d8018ace8d4f4a3069e22fa0963e2431dc6c0dc30450 + md5: 07f6c5a5238f5deeed6e985826b30de8 + depends: + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 91917 + timestamp: 1771063496505 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.37.3-hcfbc53e_0.conda + sha256: c3ec75e1ec5c33ed1d25fb039baad7e7834417279b030f29bd3987190de333cb + md5: 85f41c2eea3b03e0b0b8aedaaee3e2b6 + depends: + - __osx >=11.0 + - libcxx >=19 + - aws-c-s3 >=0.11.5,<0.11.6.0a0 + - aws-c-auth >=0.9.6,<0.9.7.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-mqtt >=0.14.0,<0.14.1.0a0 + - aws-c-io >=0.26.1,<0.26.2.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - aws-c-event-stream >=0.5.9,<0.5.10.0a0 + - aws-c-http >=0.10.10,<0.10.11.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 269227 + timestamp: 1771983403739 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.38.3-hba17502_1.conda + sha256: 917ca9bcd9271a55be1c39dc1b07ce2e6c268c1fd507750d86138d98f708724a + md5: 40aa7f64708aef33749bcedd53d04d2e + depends: + - libcxx >=19 + - __osx >=11.0 + - aws-c-auth >=0.10.1,<0.10.2.0a0 + - aws-c-event-stream >=0.7.0,<0.7.1.0a0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-http >=0.10.13,<0.10.14.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-s3 >=0.12.2,<0.12.3.0a0 + - aws-c-mqtt >=0.15.2,<0.15.3.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 271073 + timestamp: 1778019218424 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.747-h30a6df1_4.conda + sha256: 29c21176bc47051ed20db066dc4917b1c9d8e209f936a1737998755061ee133f + md5: 45bb0d0e776ed7cd12597710058c2d50 + depends: + - __osx >=11.0 + - libcxx >=19 + - aws-crt-cpp >=0.38.3,<0.38.4.0a0 + - libcurl >=8.20.0,<9.0a0 + - libzlib >=1.3.2,<2.0a0 + - aws-c-event-stream >=0.7.0,<0.7.1.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 3261086 + timestamp: 1778156290937 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.747-h35a1687_1.conda + sha256: bee6af5afafd9372028fd6820d6e09798a3248c9991478d96a68fe67e9621112 + md5: e60910468151f2bc63a69d8ee9dab529 + depends: + - __osx >=11.0 + - libcxx >=19 + - libcurl >=8.18.0,<9.0a0 + - libzlib >=1.3.1,<2.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-event-stream >=0.5.9,<0.5.10.0a0 + - aws-crt-cpp >=0.37.3,<0.37.4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 3260740 + timestamp: 1772084565005 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.16.2-he5ae378_0.conda + sha256: d9a04af33d9200fcd9f6c954e2a882c5ac78af4b82025623e59cb7f7e590b451 + md5: 7efe92d28599c224a24de11bb14d395e + depends: + - __osx >=11.0 + - libcurl >=8.18.0,<9.0a0 + - libcxx >=19 + - openssl >=3.5.4,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 290928 + timestamp: 1768837810218 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.13.3-h810541e_1.conda + sha256: 428fa73808a688a252639080b6751953ad7ecd8a4cbd8f23147b954d6902b31b + md5: ca46cc84466b5e05f15a4c4f263b6e80 + depends: + - __osx >=11.0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - libcxx >=19 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 167424 + timestamp: 1770345338067 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.16.0-h5446563_2.conda + sha256: 2ab2bc487d2cb985d2d45adbac7a6fe9a554bd78808268622566acb5e28fe5a2 + md5: 1ac96ad3d642a951b4576ea09ae502a3 + depends: + - __osx >=11.0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - azure-storage-common-cpp >=12.13.0,<12.13.1.0a0 + - libcxx >=19 + license: MIT + license_family: MIT + purls: [] + size: 426524 + timestamp: 1778727625073 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.13.0-he467506_0.conda + sha256: bc73ce983d90baa732e6f64e4d8b4ddbb8e671c5d6e7b9475d33dbd118ddd5b6 + md5: 4cfc08976cf62fef7736a763652987cb + depends: + - __osx >=11.0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - libcxx >=19 + - libxml2 + - libxml2-16 >=2.14.6 + - openssl >=3.5.6,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 128808 + timestamp: 1778662321258 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.14.0-hdc9d693_2.conda + sha256: 77dde85d2c3c4c2f2a0a0cf6ac7e2b2458d60fe9a633e8fe934f0c9bfcbae168 + md5: 4dbee4ea590bf017fb7b2fba71b16b24 + depends: + - __osx >=11.0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0 + - azure-storage-common-cpp >=12.13.0,<12.13.1.0a0 + - libcxx >=19 + license: MIT + license_family: MIT + purls: [] + size: 198818 + timestamp: 1778764243281 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/backports.zstd-1.5.0-py312h87c4bb7_0.conda + sha256: a492dcf07b1c58797b3192f11aef7e3beb18ec91646d6a5acfe5c6e61e66118d + md5: 6ec306e02579965dc9c01092a5f4ce4c + depends: + - python + - __osx >=11.0 + - zstd >=1.5.7,<1.6.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause AND MIT AND EPL-2.0 + purls: + - pkg:pypi/backports-zstd?source=compressed-mapping + size: 240840 + timestamp: 1778594074672 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bcrypt-5.0.0-py312h6ef9ec0_1.conda + sha256: f93cb3d56e002e0c2a8e37a4a8c555aaacf2e1eeee751bd838d9f2f58b2446c4 + md5: 93bc90afdb07688a2ff63fbd11950033 + depends: + - python + - __osx >=11.0 + - python 3.12.* *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=11.0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/bcrypt?source=hash-mapping + size: 267217 + timestamp: 1762497792005 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda + sha256: c3fe902114b9a3ac837e1a32408cc2142c147ec054c1038d37aec6814343f48a + md5: 925acfb50a750aa178f7a0aced77f351 + depends: + - __osx >=11.0 + - libcxx >=18 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - snappy >=1.2.1,<1.3.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 33602 + timestamp: 1733513285902 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda + sha256: 422ac5c91f8ef07017c594d9135b7ae068157393d2a119b1908c7e350938579d + md5: 48ece20aa479be6ac9a284772827d00c + depends: + - __osx >=11.0 + - brotli-bin 1.2.0 hc919400_1 + - libbrotlidec 1.2.0 hc919400_1 + - libbrotlienc 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: [] + size: 20237 + timestamp: 1764018058424 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda + sha256: e2d142052a83ff2e8eab3fe68b9079cad80d109696dc063a3f92275802341640 + md5: 377d015c103ad7f3371be1777f8b584c + depends: + - __osx >=11.0 + - libbrotlidec 1.2.0 hc919400_1 + - libbrotlienc 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: [] + size: 18628 + timestamp: 1764018033635 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py312h0dfefe5_1.conda + sha256: 6178775a86579d5e8eec6a7ab316c24f1355f6c6ccbe84bb341f342f1eda2440 + md5: 311fcf3f6a8c4eb70f912798035edd35 + depends: + - __osx >=11.0 + - libcxx >=19 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 359503 + timestamp: 1764018572368 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brunsli-0.1-he0dfb12_2.conda + sha256: f32d7c6285601ac3f6baf0715b225fd017702cf24260c6f7f14f7b6e721d92bc + md5: 4cfe5258439d88ce2ef0b159007ee067 + depends: + - __osx >=11.0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libcxx >=19 + license: MIT + license_family: MIT + purls: [] + size: 141089 + timestamp: 1761759272675 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df + md5: 620b85a3f45526a8bc4d23fd78fc22f0 + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 124834 + timestamp: 1771350416561 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + sha256: 2995f2aed4e53725e5efbc28199b46bf311c3cab2648fc4f10c2227d6d5fa196 + md5: bcb3cba70cf1eec964a03b4ba7775f01 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 180327 + timestamp: 1765215064054 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-3.0.3-hf9886e1_0.conda + sha256: 186fc951441f1af61a903fcedcf4610ac0357e61313626f9cebf1eb1a0c22ab5 + md5: 9e6f81eff6c17a3edad8102faeb286a8 + depends: + - __osx >=11.0 + - libcxx >=19 + - lz4-c >=1.10.0,<1.11.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 277145 + timestamp: 1778844295797 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py312h1b4d9a2_1.conda + sha256: 597e986ac1a1bd1c9b29d6850e1cdea4a075ce8292af55568952ec670e7dd358 + md5: 503ac138ad3cfc09459738c0f5750705 + depends: + - __osx >=11.0 + - libffi >=3.5.2,<3.6.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 288080 + timestamp: 1761203317419 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.6.3-hb409788_0.conda + sha256: 98eec929c3ecfa154418ce4b0445228edf885f98206e7d0acdf1d59a9ad30372 + md5: f46edcf9db6bb793c34af6c18cb22ebc + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.14.1,<9.0a0 + - libzlib >=1.3.1,<2.0a0 + license: LicenseRef-fitsio + purls: [] + size: 603272 + timestamp: 1759288490003 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.6.4-h29bb15e_1.conda + sha256: f54e91c2c1d3571fb91302a3b10bd0c3d9bf5de66af83e35ee1de759a0925a5d + md5: 0240dfbed60b00a028c0a5325269f8bf + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.20.0,<9.0a0 + - libzlib >=1.3.2,<2.0a0 + license: LicenseRef-fitsio + purls: [] + size: 604254 + timestamp: 1777679084571 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.3-hf6b4638_0.conda + sha256: 1009bd6c2bb26e41dada4015793a1edf44d1320c7ca14fc646f89b0b51236e20 + md5: 91f1daf22f72792e11382938bb0dd9ac + depends: + - __osx >=11.0 + - libcxx >=19 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 118790 + timestamp: 1772712898684 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/chealpix-3.31.0-h47a9372_10.conda + sha256: ac468fcb05c88187d087f34d49bc763556a8080c98cc7f4f0c31e5029d9ca0c6 + md5: 62290acbd36b96e70481f746a2d7b94f + depends: + - __osx >=11.0 + - cfitsio >=4.6.4,<4.6.5.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 34711 + timestamp: 1778488354943 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/chealpix-3.31.0-h6fab0b2_9.conda + sha256: 7b7d964946892d0843b114356cad6fe0f11c63eacfd9190f5640e0caba85e257 + md5: f4572e560fbb2c31fd5e4ea7d52558a6 + depends: + - __osx >=11.0 + - cfitsio >=4.6.3,<4.6.4.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 36512 + timestamp: 1764671333900 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py312h3093aea_4.conda + sha256: fa1b3967c644c1ffaf8beba3d7aee2301a8db32c0e9a56649a0e496cf3abd27c + md5: f9cce0bc86b46533489a994a47d3c7d2 + depends: + - numpy >=1.25 + - python + - python 3.12.* *_cpython + - __osx >=11.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/contourpy?source=hash-mapping + size: 286084 + timestamp: 1769156157865 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.14.0-py312h04c11ed_0.conda + sha256: f96b3c7ebd947defc940cb53c6cb508b8e53db7e21e30426e154a0b69f528192 + md5: 7568d1be300c1b10faac484fdf425241 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - tomli + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/coverage?source=hash-mapping + size: 389749 + timestamp: 1778445251509 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cryptography-48.0.0-py312h1238841_0.conda + sha256: f2560a639d9f67c53f495d75289a63b840744be04669dc949afb0e694f971fdb + md5: 7a4c2757d53e6a36c45f0eeaf50dac34 + depends: + - __osx >=11.0 + - cffi >=2.0 + - openssl >=3.5.6,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=11.0 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1853060 + timestamp: 1777966201485 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cytoolz-1.1.0-py312h2bbb03f_2.conda + sha256: be8d2bf477d0bf8d19a7916c2ceccef33cbfecf918508c18b89098aa7b20017e + md5: 49389c14c49a416f458ce91491f62c67 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - toolz >=0.10.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cytoolz?source=hash-mapping + size: 591797 + timestamp: 1771856474133 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + sha256: 93e077b880a85baec8227e8c72199220c7f87849ad32d02c14fb3807368260b8 + md5: 5a74cdee497e6b65173e10d94582fae6 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 316394 + timestamp: 1685695959391 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fftw-3.3.11-nompi_haf1500d_100.conda + sha256: fc6c507d7c68db156d6c8c5f6a79ca6b34c2a4c0c6222d8d4ecd0e4b97d3fd5e + md5: 58628fdc0c614982f1dafd2116916288 + depends: + - __osx >=11.0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - llvm-openmp >=19.1.7 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 746873 + timestamp: 1776782373231 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.63.0-py312h04c11ed_0.conda + sha256: b78cc8df0d93ac0f0d59cb91cf54cc91effa6c124a78c8d2e8afc8011d9fb320 + md5: 77e64a600d8426c3863942f67491f5fb + depends: + - __osx >=11.0 + - brotli + - munkres + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - unicodedata2 >=15.1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/fonttools?source=hash-mapping + size: 2904377 + timestamp: 1778771054844 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.3-hce30654_0.conda + sha256: 5952bd9db12207a18a112e8924aa2ce8c2f9d57b62584d58a97d2f6afe1ea324 + md5: 6dcc75ba2e04c555e881b72793d3282f + depends: + - libfreetype 2.14.3 hce30654_0 + - libfreetype6 2.14.3 hdfa99f5_0 + license: GPL-2.0-only OR FTL + purls: [] + size: 173313 + timestamp: 1774298702053 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.14.1-h5afe852_0.conda + sha256: 1ac5f5a3a35f2e4778025043c87993208d336e30539406e380e0952bb7ffd188 + md5: 4238412c29eff0bb2bb5c60a720c035a + depends: + - __osx >=11.0 + - libcxx >=19 + license: LGPL-2.1-only + purls: [] + size: 1530844 + timestamp: 1761594597236 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda + sha256: fd56ed8a1dab72ab90d8a8929b6f916a6d9220ca297ff077f8f04c5ed3408e20 + md5: 57a511a5905caa37540eb914dfcbf1fb + depends: + - __osx >=11.0 + - libcxx >=17 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 82090 + timestamp: 1726600145480 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda + sha256: 843b3f364ff844137e37d5c0a181f11f6d51adcedd216f019d074e5aa5d7e09c + md5: 95fa1486c77505330c20f7202492b913 + license: MIT + license_family: MIT + purls: [] + size: 71613 + timestamp: 1712692611426 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda + sha256: 9fc77de416953aa959039db72bc41bfa4600ae3ff84acad04a7d0c1ab9552602 + md5: fef68d0a95aa5b84b5c1a4f6f3bf40e1 + depends: + - __osx >=11.0 + - gflags >=2.2.2,<2.3.0a0 + - libcxx >=16 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 112215 + timestamp: 1718284365403 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/google-crc32c-1.8.0-py312h090f823_1.conda + sha256: cf6c1345d2c4fb4cee1128256d3a1d3fe5150c8788bc6cad12a04cbfc44bb247 + md5: 0c8ad601cdbec3be85d1c62080b388d7 + depends: + - __osx >=11.0 + - libcrc32c >=1.1.2,<1.2.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/google-crc32c?source=hash-mapping + size: 25105 + timestamp: 1768549598713 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gsl-2.7-h6e638da_0.tar.bz2 + sha256: 979c2976adcfc70be997abeab2ed8395f9ac2b836bdcd25ed5d2efbf1fed226b + md5: 2a2126a940e033e7225a5dc7215eea9a + depends: + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 2734398 + timestamp: 1626369562748 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py312h585e8c8_102.conda + sha256: 2ac08cff564c3b49f8a7f21eb9abdb81cad2fe2270ed1d48a5be05416d99f40c + md5: d5c7d8decb6113045ac8168f66ad1de2 + depends: + - __osx >=11.0 + - cached-property + - hdf5 >=2.1.0,<3.0a0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/h5py?source=hash-mapping + size: 1186119 + timestamp: 1775583048662 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py312hdd01ddf_102.conda + sha256: 68bf1ed50a983c4eea17bab8cb91e7b2bfd19b92f3846e2a057ab1bb78b5b1cd + md5: d6561da751793e9f534b175e070b19d3 + depends: + - __osx >=11.0 + - cached-property + - hdf5 >=1.14.6,<1.14.7.0a0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/h5py?source=hash-mapping + size: 1180081 + timestamp: 1775582311942 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.6-nompi_had3affe_106.conda + sha256: e91c2b8fe62d73bb56bdb9b5adcdcbedbd164ced288e0f361b8eb3f017ddcd7b + md5: 2d1270d283403c542680e969bea70355 + depends: + - __osx >=11.0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.18.0,<9.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3299759 + timestamp: 1770390513189 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-2.1.0-nompi_he586413_105.conda + sha256: 518237c7e1e1f1f2d98f0283a483571b2d62c5c71b455a0ad0f0cc40087bb939 + md5: deb297adb6083474bb8b75b92172fb95 + depends: + - __osx >=11.0 + - aws-c-auth >=0.10.1,<0.10.2.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-http >=0.10.13,<0.10.14.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-s3 >=0.12.2,<0.12.3.0a0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.20.0,<9.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3319915 + timestamp: 1777861894583 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/healpy-1.19.0-py312h372f765_2.conda + sha256: a2ba1aab6492f29d773a2136f807a95aaddaeb62184feda29c9019aed3bff6ed + md5: bd83153bfc02ebac7384eaae2f43059e + depends: + - __osx >=11.0 + - astropy-base + - cfitsio >=4.6.3,<4.6.4.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libzlib >=1.3.2,<2.0a0 + - matplotlib-base + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - scipy + license: GPL-2.0-only + license_family: GPL + purls: + - pkg:pypi/healpy?source=hash-mapping + size: 2016274 + timestamp: 1774834589297 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/healpy-1.19.0-py312hc7c58be_3.conda + sha256: 65926d286d4b2b8d3e61ace74ed6d954b3c9c01dbc5106d2ae641a907aa477b1 + md5: cb732aa92892e2f8538a0cf8c47197a5 + depends: + - __osx >=11.0 + - astropy-base + - cfitsio >=4.6.4,<4.6.5.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libzlib >=1.3.2,<2.0a0 + - matplotlib-base + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - scipy + license: GPL-2.0-only + license_family: GPL + purls: + - pkg:pypi/healpy?source=hash-mapping + size: 2013588 + timestamp: 1777848822457 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-24.12.4-py312h1f38498_0.conda + sha256: 63fed07cf9d3acb89e50ccc2d8431e24bf4288077ace111e6e4ccee0c3e96b83 + md5: fae86127c716727738212baa03336609 + depends: + - htcondor-classads 24.12.4 h0c2a548_0 + - htcondor-cli 24.12.4 py312h81bd7bf_0 + - htcondor-utils 24.12.4 h9e88eaa_0 + - libcondor_utils 24.12.4 h4785e8b_0 + - python >=3.12,<3.13.0a0 + - python-htcondor 24.12.4 py312hd1c112e_0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 23644 + timestamp: 1759419459906 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-25.10.1-py312h1f38498_0.conda + sha256: 6db47eb6ecd5cf8a96dfbf3fefd48cbb5101f07841284d40725bfd7ddf84eea3 + md5: 827f308526f68f37574077945474e411 + depends: + - htcondor-classads 25.10.1 h7a491f7_0 + - htcondor-cli 25.10.1 py312h81bd7bf_0 + - htcondor-utils 25.10.1 h91f37e5_0 + - libcondor_utils 25.10.1 h3669c8c_0 + - python >=3.12,<3.13.0a0 + - python-htcondor 25.10.1 py312hacc1691_0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 22455 + timestamp: 1778794634309 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-classads-24.12.4-h0c2a548_0.conda + sha256: 1b659bfdc9e9ad01d23939e82631da8e5cbe15ea6ef664545b36a3b4395a6098 + md5: 58c51c6f0c9941cd15ba8f7dd59738ff + depends: + - __osx >=11.0 + - libcxx >=19 + - pcre2 >=10.46,<10.47.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 2571572 + timestamp: 1759416840783 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-classads-25.10.1-h7a491f7_0.conda + sha256: f9dded4f282d61e9b796c8e039deac96f919f146a0bf8ea0f20cb56a10e1a4ee + md5: ef73fd05e0f7f6ce50a68e94dd41dcc8 + depends: + - __osx >=11.0 + - libcxx >=19 + - pcre2 >=10.47,<10.48.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 2598071 + timestamp: 1778793318636 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-cli-24.12.4-py312h81bd7bf_0.conda + sha256: fbdfe5acaf661052479db8dceed9e8e752d307a191cf097ed2d4b00a9d710a47 + md5: 9bf38bd6a00570d4a2e877076d784e41 + depends: + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-htcondor 24.12.4 py312hd1c112e_0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/htcondor-cli?source=hash-mapping + size: 155395 + timestamp: 1759419263227 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-cli-25.10.1-py312h81bd7bf_0.conda + sha256: f4346d299fd60bfe19a5903084f19ad3892e77dbc05e7b65a7b98daf036a839b + md5: 53f1247a5309ac33e1a1357fa709498e + depends: + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-htcondor 25.10.1 py312hacc1691_0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/htcondor-cli?source=hash-mapping + size: 175610 + timestamp: 1778794521864 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-utils-24.12.4-h9e88eaa_0.conda + sha256: 041970a055fd3d3fa562ad976600cab0a6b1ec4236a05ea3c0d8aaefb0612880 + md5: ce4b559c3f286459ab51508249c7d44f + depends: + - __osx >=11.0 + - htcondor-classads 24.12.4 h0c2a548_0 + - libcondor_utils 24.12.4 h4785e8b_0 + - libcurl >=8.14.1,<9.0a0 + - libcxx >=19 + - openssl >=3.5.4,<4.0a0 + - scitokens-cpp >=1.1.3,<2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1419497 + timestamp: 1759416982079 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-utils-25.10.1-h91f37e5_0.conda + sha256: 466bbe8f98cb9c83baaed1df09964f8c52f7890afdf29190d3270b79d7aa87f9 + md5: cd5a3d4997f1d8dd243f77bc5c7cacd0 + depends: + - __osx >=11.0 + - htcondor-classads 25.10.1 h7a491f7_0 + - libcondor_utils 25.10.1 h3669c8c_0 + - libcurl >=8.20.0,<9.0a0 + - libcxx >=19 + - openssl >=3.5.6,<4.0a0 + - scitokens-cpp >=1.4.0,<2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1470703 + timestamp: 1778793422810 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/htgettoken-2.6-py312h81bd7bf_0.conda + sha256: dfae2e5a163598ae6a6b6327ac484b7d153d6f8f3a7612468083fbd1f5cedc51 + md5: 6b9da215275c8c9575decbdf45ebefce + depends: + - jq + - paramiko + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-gssapi + - python_abi 3.12.* *_cp312 + - urllib3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/htgettoken?source=hash-mapping + size: 53052 + timestamp: 1768653800550 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + sha256: 3a7907a17e9937d3a46dfd41cffaf815abad59a569440d1e25177c15fd0684e5 + md5: f1182c91c0de31a7abd40cedf6a5ebef + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 12361647 + timestamp: 1773822915649 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/igwn-ligolw-2.1.1-py312h8d938ae_1.conda + sha256: 401c6eaf3696a6123a50d9e1f9b1fc610f8593194ff4797271f0fcf3432251e9 + md5: 001055872cdbc6a9f946f875e18e4903 + depends: + - igwn-segments + - numpy + - python + - python-dateutil + - pyyaml + - tqdm + - python 3.12.* *_cpython + - __osx >=11.0 + - python_abi 3.12.* *_cp312 + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/igwn-ligolw?source=hash-mapping + size: 2423284 + timestamp: 1771054437583 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/igwn-segments-2.1.1-py312h8d938ae_2.conda + sha256: 1f2263245db006e8f44e0946af0ba04ec1fb62964f98e6d48e754d0fd82062df + md5: dc719a38bf0dd2214e823f0d282cca94 + depends: + - python + - python 3.12.* *_cpython + - __osx >=11.0 + - python_abi 3.12.* *_cp312 + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/igwn-segments?source=hash-mapping + size: 96759 + timestamp: 1770797922959 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2026.5.10-py312ha5a633e_0.conda + sha256: ff598bd8f3cdb3b0112b6b025a3f0293581c051d25905385842292bb36c48613 + md5: bb35a78bff932bc41fe85075560f6b17 + depends: + - __osx >=11.0 + - blosc >=1.21.6,<2.0a0 + - brunsli >=0.1,<1.0a0 + - bzip2 >=1.0.8,<2.0a0 + - c-blosc2 >=3.0.2,<3.1.0a0 + - charls >=2.4.3,<2.5.0a0 + - giflib >=5.2.2,<5.3.0a0 + - jxrlib >=1.1,<1.2.0a0 + - lcms2 >=2.19.1,<3.0a0 + - lerc >=4.1.0,<5.0a0 + - libaec >=1.1.5,<2.0a0 + - libavif16 >=1.4.1,<2.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libcxx >=19 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libjxl >=0.11,<1.0a0 + - liblzma >=5.8.3,<6.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - libzopfli >=1.0.3,<1.1.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - numpy >=1.23,<3 + - openjpeg >=2.5.4,<3.0a0 + - openjph >=0.27.2,<0.28.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - snappy >=1.2.2,<1.3.0a0 + - zfp >=1.0.1,<2.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/imagecodecs?source=hash-mapping + size: 1831777 + timestamp: 1778501666198 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.8.1-hbc156a2_0.conda + sha256: 4c66141af08a9b1019345e800c5b1bcf005614167e35edee9977034371acce4a + md5: ab406f399e1becf7b51b74510e332f3d + depends: + - oniguruma 6.9.* + - __osx >=11.0 + - oniguruma >=6.9.10,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 338907 + timestamp: 1751447320937 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda + sha256: c9e0d3cf9255d4585fa9b3d07ace3bd934fdc6a67ef4532e5507282eff2364ab + md5: 879997fd868f8e9e4c2a12aec8583799 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 197843 + timestamp: 1703334079437 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py312h3093aea_0.conda + sha256: 8de440f0e33ab6895e81f2c47c51e59d177349a832087a0367e8e259c97f4833 + md5: 58261af35f0d33fd28e2257b208a1be0 + depends: + - python + - __osx >=11.0 + - libcxx >=19 + - python 3.12.* *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/kiwisolver?source=hash-mapping + size: 68490 + timestamp: 1773067215781 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + sha256: 4442f957c3c77d69d9da3521268cad5d54c9033f1a73f99cde0a3658937b159b + md5: c6dc8a0fdec13a0565936655c33069a1 + depends: + - __osx >=11.0 + - libcxx >=16 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1155530 + timestamp: 1719463474401 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + sha256: c0a0bf028fe7f3defcdcaa464e536cf1b202d07451e18ad83fdd169d15bef6ed + md5: e446e1822f4da8e5080a9de93474184d + depends: + - __osx >=11.0 + - libcxx >=19 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1160828 + timestamp: 1769770119811 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lal-7.7.0-fftw_py312h0b98bce_101.conda + sha256: 650e91e51ba9bacf1788bdf4f618f0b35651042689571caa0b28a237b7ebaad1 + md5: 588fcddc15efc696b66e4d79235ce989 + depends: + - __osx >=11.0 + - fftw >=3.3.10,<4.0a0 + - igwn-ligolw + - igwn-segments + - liblal 7.7.0 fftw_hebea562_101 + - numpy + - python >=3.12,<3.13.0a0 + - python-lal 7.7.0 fftw_py312he477bca_101 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 43586 + timestamp: 1755601176127 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lal-7.7.0-fftw_py312h8aca948_104.conda + sha256: 1e38945d750b5cd9950ca3fe9e0e4a4b8a8a794b636a9ea747008a8311ccb5ea + md5: 4f9637fbbcb99a4ca2edcc3ffdc28900 + depends: + - __osx >=11.0 + - fftw >=3.3.10,<4.0a0 + - igwn-segments + - liblal 7.7.0 fftw_h4b20030_104 + - numpy + - python >=3.12,<3.13.0a0 + - python-lal 7.7.0 fftw_py312h2cc9458_104 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 44655 + timestamp: 1774638627399 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalapps-10.1.0-py312hb943a6c_3.conda + sha256: 2147dfd214479e06312a768ed75bdc6b7814d87d5bddefb7c6fb042990bb1cf9 + md5: ae3b2af08004b888974b91d3a4b1d7d3 + depends: + - cfitsio + - gsl + - h5py + - igwn-ligolw >=2.1.0 + - igwn-segments + - lal >=7.7.0 + - lalburst >=2.0.0 + - lalframe >=3.0.0 + - lalinference >=4.1.0 + - lalinspiral >=5.0.0 + - lalmetaio >=4.0.0 + - lalpulsar >=7.1.0 + - lalsimulation >=6.2.0 + - libframel >=8.39.2 + - libmetaio >=8.2.0 + - numpy + - pillow + - python + - __osx >=11.0 + - python 3.12.* *_cpython + - liblalsimulation >=6.2.0,<7.0a0 + - liblalburst >=2.0.7,<3.0a0 + - liblalframe >=3.0.7,<4.0a0 + - libmetaio >=8.5.1,<9.0a0 + - liblalmetaio >=4.0.6,<5.0a0 + - libframel >=8.41.3,<9.0a0 + - liblal >=7.7.0,<8.0a0 + - liblalinference >=4.1.9,<5.0a0 + - cfitsio >=4.6.4,<4.6.5.0a0 + - gsl >=2.7,<2.8.0a0 + - liblalpulsar >=7.1.1,<8.0a0 + - liblalinspiral >=5.0.3,<6.0a0 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 1420079 + timestamp: 1777985834945 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalapps-10.1.0-py312hf84635f_2.conda + sha256: d021d8520a0993d53d8aba606405f5d4ef5ab2c653c9766de5afe14e62b91160 + md5: 668af39d14f03a5a9901d463e42ae510 + depends: + - cfitsio + - gsl + - h5py + - igwn-ligolw >=2.1.0 + - igwn-segments + - lal >=7.7.0 + - lalburst >=2.0.0 + - lalframe >=3.0.0 + - lalinference >=4.1.0 + - lalinspiral >=5.0.0 + - lalmetaio >=4.0.0 + - lalpulsar >=7.1.0 + - lalsimulation >=6.2.0 + - libframel >=8.39.2 + - libmetaio >=8.2.0 + - numpy + - pillow + - python + - __osx >=11.0 + - python 3.12.* *_cpython + - gsl >=2.7,<2.8.0a0 + - liblalburst >=2.0.7,<3.0a0 + - libmetaio >=8.5.1,<9.0a0 + - liblalpulsar >=7.1.1,<8.0a0 + - liblalsimulation >=6.2.0,<7.0a0 + - python_abi 3.12.* *_cp312 + - liblalframe >=3.0.7,<4.0a0 + - libframel >=8.41.3,<9.0a0 + - liblal >=7.7.0,<8.0a0 + - cfitsio >=4.6.3,<4.6.4.0a0 + - liblalmetaio >=4.0.6,<5.0a0 + - liblalinspiral >=5.0.3,<6.0a0 + - liblalinference >=4.1.9,<5.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 1418785 + timestamp: 1771238118697 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalburst-2.0.7-py312h76b007c_2.conda + sha256: d859b4cc401405cc66f037e8afc1cb3704db42e17eb26519e10544377b116514 + md5: 4b1dad6a9e10dd005b30ff81166436c2 + depends: + - __osx >=11.0 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalburst 2.0.7 h957e360_2 + - pillow + - python >=3.12,<3.13.0a0 + - python-lalburst 2.0.7 py312hd9443c7_2 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 50279 + timestamp: 1771411869709 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalframe-3.0.7-py312h76b007c_2.conda + sha256: 45c438518bcaad286ef73e7f77a23b96f93a33ce9853ba7bf4b13ca057d0352f + md5: 3ac504fd9e1dab84237835df90cb21ca + depends: + - __osx >=11.0 + - liblal >=7.7.0,<8.0a0 + - liblalframe 3.0.7 h304a64b_2 + - python >=3.12,<3.13.0a0 + - python-lalframe 3.0.7 py312hf57c059_2 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 292521 + timestamp: 1774544321017 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-4.1.9-nompi_py312h594389e_102.conda + sha256: 0bc7e5411b835d7e7ed0a858c8f3f0122afbe0c0474ae5c419fee1e4a89e1bd6 + md5: fe16638b85f4f152886dba6d5c43f461 + depends: + - __osx >=11.0 + - astropy-base >=1.1.1 + - h5py + - icu >=78.3,<79.0a0 + - igwn-ligolw >=2.1.0 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalinference 4.1.9 ha9a36a6_2 + - ligo-gracedb + - lscsoft-glue >=1.54.1 + - matplotlib-base >=1.2.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-lal >=7.7.0 + - python-lalinference 4.1.9 py312hf57c059_2 + - python-lalsimulation >=6.2.0 + - python_abi 3.12.* *_cp312 + - scipy >=0.9.0 + - six + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 103066 + timestamp: 1774966858123 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-data-4.1.9-hce30654_2.conda + sha256: c9b94c68a71c5074d01dddfad1334ddc1cc3cf2686e25e697c098a5f914e5fa4 + md5: e46d2e9798a7d852771f2f09d4ad3a71 + constrains: + - liblalinference >=3.0.3 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 32808 + timestamp: 1774965053995 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinspiral-5.0.3-py312h76b007c_3.conda + sha256: 487e56cb3635f1438b55bd7ea55f89ad148b670bd05364bbe7a550983002caff + md5: 5d82ce17830d5a8baaa2c0e34a6ced83 + depends: + - __osx >=11.0 + - igwn-segments + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalinspiral 5.0.3 h957e360_3 + - python >=3.12,<3.13.0a0 + - python-lalinspiral 5.0.3 py312hf57c059_3 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 23575 + timestamp: 1774546545051 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalmetaio-4.0.6-py312h76b007c_2.conda + sha256: 3fe16f4f1dc0413c6809ab5b5c44199ad6edd968130d245ed9b4169039452856 + md5: 166f99ab6047412f272de52d4932bb20 + depends: + - __osx >=11.0 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalmetaio 4.0.6 h84a0fba_2 + - python >=3.12,<3.13.0a0 + - python-lalmetaio 4.0.6 py312hf57c059_2 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 19089 + timestamp: 1774544998542 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-7.1.1-py312h1915c05_3.conda + sha256: babd0243d53a7e10d7799b51a703e603352e6aa47c12d07de1c319f3b4cf82ab + md5: b17b261701ebd1b446cefa98c4298470 + depends: + - __osx >=11.0 + - astropy-base + - cfitsio >=4.6.4,<4.6.5.0a0 + - fftw >=3.3.11,<4.0a0 + - gsl >=2.7,<2.8.0a0 + - jplephem + - lalinference >=4.1.0 + - liblal >=7.6.0 + - liblal >=7.7.0,<8.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalinference >=4.1.0 + - liblalinference >=4.1.9,<5.0a0 + - liblalpulsar 7.1.1 h169444b_3 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.2.0,<7.0a0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.6.0 + - python-lalframe >=3.0.0 + - python-lalinference >=4.1.0 + - python-lalpulsar 7.1.1 py312hf57c059_3 + - python-lalsimulation >=6.1.0 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 653317 + timestamp: 1777888975865 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-7.1.1-py312h57a7920_2.conda + sha256: eaead9a939a3df85add591b22587c86577108a521a01025738571c6bed48c043 + md5: d584bc6861236e11a9e56988a36f57e9 + depends: + - __osx >=11.0 + - astropy-base + - cfitsio >=4.6.3,<4.6.4.0a0 + - fftw >=3.3.10,<4.0a0 + - gsl >=2.7,<2.8.0a0 + - jplephem + - lalinference >=4.1.0 + - liblal >=7.6.0 + - liblal >=7.7.0,<8.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalinference >=4.1.0 + - liblalinference >=4.1.9,<5.0a0 + - liblalpulsar 7.1.1 h43f389f_2 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.2.0,<7.0a0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.6.0 + - python-lalframe >=3.0.0 + - python-lalinference >=4.1.0 + - python-lalpulsar 7.1.1 py312hf57c059_2 + - python-lalsimulation >=6.1.0 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 654603 + timestamp: 1774627905603 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-data-7.1.1-hce30654_2.conda + sha256: 403207aedfe9d99d87a46314a803e61c0d15f983825cdd78a7abd572e6f431bb + md5: f4a724b91230d43c2f69250b6dc9815e + constrains: + - liblalpulsar >=4.0.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 90043358 + timestamp: 1774626009237 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-data-7.1.1-hce30654_3.conda + sha256: 5dfe300a2fa4d9dae7fa05d0546d6ce4c2cc82e2b9e6ade03194f4524f3e9061 + md5: 6f8b9a77ff0f83454cb57f603a9d27cf + constrains: + - liblalpulsar >=4.0.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 90035864 + timestamp: 1777887525526 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-6.2.0-py312h1ab2389_3.conda + sha256: ad036337ad5df19dae68b91fd099a9b69e261ee97bc3dc5c18d41f15420f53eb + md5: 26aac4300c80033e7c5e8d9c994279bd + depends: + - __osx >=11.0 + - gsl >=2.7,<2.8.0a0 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalsimulation 6.2.0 py312h593d7fe_3 + - mpmath >=1.0.0 + - python >=3.12,<3.13.0a0 + - python-lalsimulation 6.2.0 py312h7cf3665_3 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 72223 + timestamp: 1774542207675 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-data-6.2.0-hce30654_3.conda + sha256: 40aa5e3dd1dad08d77611d7a43b3309f7445a5605e3e6506f6987167464960ed + md5: 0cf513617f6097fb4c178a35c9305d64 + constrains: + - liblalsimulation >=3.1.2 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 3635046 + timestamp: 1774541915235 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_0.conda + sha256: d589ff5294e42576563b22bdea0860cb80b0cbe0f3852836eddaadedf6eec4ef + md5: e5ba982008c0ac1a1c0154617371bab5 + depends: + - __osx >=11.0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 212998 + timestamp: 1778079809873 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ldas-tools-al-2.7.0-he7ec6a4_3.conda + sha256: 7ab52ef245f80b6e4788dbbe3887e71c001ee8bcc213512a91615c93ee372834 + md5: 6cbbac2a6747c712d59ac1ad86e5476d + depends: + - __osx >=11.0 + - libboost >=1.88.0,<1.89.0a0 + - libcxx >=19 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 269293 + timestamp: 1764933123930 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ldas-tools-framecpp-2.9.3-ha7f91e6_4.conda + sha256: 78afd30c0e75e7f9b6d4e2b11846f04964d11aecc0cc08614fcd7a83f0f4cdbb + md5: 394320b801104d9b7a3080906fd19dec + depends: + - __osx >=11.0 + - ldas-tools-al >=2.6.7 + - ldas-tools-al >=2.7.0,<2.8.0a0 + - libboost >=1.88.0,<1.89.0a0 + - libcxx >=19 + - libzlib >=1.3.1,<2.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 1541492 + timestamp: 1756906717246 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda + sha256: 66e5ffd301a44da696f3efc2f25d6d94f42a9adc0db06c44ad753ab844148c51 + md5: 095e5749868adab9cae42d4b460e5443 + depends: + - __osx >=11.0 + - libcxx >=19 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 164222 + timestamp: 1773114244984 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20260107.1-cxx17_h2062a1b_0.conda + sha256: 756611fbb8d2957a5b4635d9772bd8432cb6ddac05580a6284cca6fdc9b07fca + md5: bb65152e0d7c7178c0f1ee25692c9fd1 + depends: + - __osx >=11.0 + - libcxx >=19 + constrains: + - abseil-cpp =20260107.1 + - libabseil-static =20260107.1=cxx17* + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1229639 + timestamp: 1770863511331 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.5-h8664d51_0.conda + sha256: af9cd8db11eb719e38a3340c88bb4882cf19b5b4237d93845224489fc2a13b46 + md5: 13e6d9ae0efbc9d2e9a01a91f4372b41 + depends: + - __osx >=11.0 + - libcxx >=19 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 30390 + timestamp: 1769222133373 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-23.0.1-h5390cfe_4_cpu.conda + build_number: 4 + sha256: bee77acf20b51d0f5ff81076ce2e0c922085696175dd2dc2b15ce22aeae15fa0 + md5: bbbd069f104614c8ea37bc181fb628f8 + depends: + - __osx >=11.0 + - aws-crt-cpp >=0.37.3,<0.37.4.0a0 + - aws-sdk-cpp >=1.11.747,<1.11.748.0a0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - azure-identity-cpp >=1.13.3,<1.13.4.0a0 + - azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0 + - azure-storage-files-datalake-cpp >=12.14.0,<12.14.1.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.7.1,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libcxx >=21 + - libgoogle-cloud >=2.39.0,<2.40.0a0 + - libgoogle-cloud-storage >=2.39.0,<2.40.0a0 + - libopentelemetry-cpp >=1.21.0,<1.22.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - orc >=2.3.0,<2.3.1.0a0 + - snappy >=1.2.2,<1.3.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - arrow-cpp <0.0a0 + - parquet-cpp <0.0a0 + - apache-arrow-proc =*=cpu + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 4244946 + timestamp: 1773268061189 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-24.0.0-h4c70b79_2_cpu.conda + build_number: 2 + sha256: 5055e2568d835e7d2343047a9462aa3ec8f2ca806829a4b7c2a895671e322e6a + md5: 8a2c3ba1a7579f5e537ae90d2ddae2ae + depends: + - __osx >=11.0 + - aws-crt-cpp >=0.38.3,<0.38.4.0a0 + - aws-sdk-cpp >=1.11.747,<1.11.748.0a0 + - azure-core-cpp >=1.16.2,<1.16.3.0a0 + - azure-identity-cpp >=1.13.3,<1.13.4.0a0 + - azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0 + - azure-storage-files-datalake-cpp >=12.14.0,<12.14.1.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.7.1,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libcxx >=21 + - libgoogle-cloud >=3.5.0,<3.6.0a0 + - libgoogle-cloud-storage >=3.5.0,<3.6.0a0 + - libopentelemetry-cpp >=1.26.0,<1.27.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libzlib >=1.3.2,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - orc >=2.3.0,<2.3.1.0a0 + - snappy >=1.2.2,<1.3.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - arrow-cpp <0.0a0 + - apache-arrow-proc =*=cpu + - parquet-cpp <0.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 4236842 + timestamp: 1779475409157 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-23.0.1-hbf36091_4_cpu.conda + build_number: 4 + sha256: 84e1352258e1258dc499cc8b4cb860f1c4a6708070723f45fb6ec159c2bd78c8 + md5: 660c265fd29448a1a6dd9477a961d94c + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 23.0.1 h5390cfe_4_cpu + - libarrow-compute 23.0.1 h4dbefc3_4_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.21.0,<1.22.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 540045 + timestamp: 1773268413763 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-24.0.0-hee8fe31_2_cpu.conda + build_number: 2 + sha256: c63c219630454d6a9a4c54ae6d5a770c94a6702343fddd55b154731426d46456 + md5: 4e27bf26634f174f03e1d16091d19f63 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 24.0.0 h4c70b79_2_cpu + - libarrow-compute 24.0.0 h3b6a98a_2_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.26.0,<1.27.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 520430 + timestamp: 1779475832626 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-compute-23.0.1-h4dbefc3_4_cpu.conda + build_number: 4 + sha256: a90c7caa41c6879f4e09841b8af528b72319ff194eb0e2ccd43b4153e320028b + md5: 7429882c9878a30891426c5ddff1a313 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 23.0.1 h5390cfe_4_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.21.0,<1.22.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libre2-11 >=2025.11.5 + - libutf8proc >=2.11.3,<2.12.0a0 + - re2 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 2256372 + timestamp: 1773268168954 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-compute-24.0.0-h3b6a98a_2_cpu.conda + build_number: 2 + sha256: e1e8d6dc8f260d47c01c920609d0b3900cf6f1f901faf3fab1108e1903fb4abd + md5: 9f50362294e8a49c13fe403caf8a2931 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 24.0.0 h4c70b79_2_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.26.0,<1.27.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libre2-11 >=2025.11.5 + - libutf8proc >=2.11.3,<2.12.0a0 + - re2 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 2243118 + timestamp: 1779475555728 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-23.0.1-hbf36091_4_cpu.conda + build_number: 4 + sha256: 2b9fda07d3f4eab30131f88d3a1fb6dd1a576515ccb131fad81c61b8f4765894 + md5: ab67f4e519042b1638e638297ac37d4e + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 23.0.1 h5390cfe_4_cpu + - libarrow-acero 23.0.1 hbf36091_4_cpu + - libarrow-compute 23.0.1 h4dbefc3_4_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.21.0,<1.22.0a0 + - libparquet 23.0.1 h7a13205_4_cpu + - libprotobuf >=6.33.5,<6.33.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 536312 + timestamp: 1773268563348 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-24.0.0-hee8fe31_2_cpu.conda + build_number: 2 + sha256: 4fa7d1ba6ad82864a1ffaaa933d4e8fbb9b8efe07f496ee95b7f74fe2e4b09fa + md5: 044c3c020777f44d95a2326d4615e75f + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 24.0.0 h4c70b79_2_cpu + - libarrow-acero 24.0.0 hee8fe31_2_cpu + - libarrow-compute 24.0.0 h3b6a98a_2_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.26.0,<1.27.0a0 + - libparquet 24.0.0 h16c0493_2_cpu + - libprotobuf >=6.33.5,<6.33.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 519730 + timestamp: 1779476031364 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-23.0.1-h05be00f_4_cpu.conda + build_number: 4 + sha256: 2224ddad25b073b72c0b92c94fa18de2857369ed8590c2ec187844bfec1fc5bc + md5: b535b4df80b502a3da04aeccc797a747 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 23.0.1 h5390cfe_4_cpu + - libarrow-acero 23.0.1 hbf36091_4_cpu + - libarrow-dataset 23.0.1 hbf36091_4_cpu + - libcxx >=21 + - libprotobuf >=6.33.5,<6.33.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 471801 + timestamp: 1773268633092 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-24.0.0-h05be00f_2_cpu.conda + build_number: 2 + sha256: a860ea929d23b02085ff4894498b01a20f9e9b06cb2afc4cc7d2554dd14fbe6e + md5: b600071368fbdf4d6fddbe0beee56aef + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 24.0.0 h4c70b79_2_cpu + - libarrow-acero 24.0.0 hee8fe31_2_cpu + - libarrow-dataset 24.0.0 hee8fe31_2_cpu + - libcxx >=21 + - libprotobuf >=6.33.5,<6.33.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 454958 + timestamp: 1779476106037 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.4.1-hfce71f6_0.conda + sha256: 09e31e51026a3b74d947ba4b30a68dd99013aeef2860bcb03565bf43cad18da6 + md5: 2df04ee54a2ce2d34cf375eb02a63725 + depends: + - __osx >=11.0 + - aom >=3.9.1,<3.10.0a0 + - dav1d >=1.2.1,<1.2.2.0a0 + - rav1e >=0.8.1,<0.9.0a0 + - svt-av1 >=4.0.1,<4.0.2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 118959 + timestamp: 1774043016600 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-7_h51639a9_openblas.conda + build_number: 7 + sha256: 662935bfb93d2d097e26e273a3a2f504a9f833f64aa6f9e295b577655478c39b + md5: ab6670d099d19fe70cb9efb88a1b5f78 + depends: + - libopenblas >=0.3.33,<0.3.34.0a0 + - libopenblas >=0.3.33,<1.0a0 + constrains: + - libcblas 3.11.0 7*_openblas + - blas 2.307 openblas + - mkl <2027 + - liblapack 3.11.0 7*_openblas + - liblapacke 3.11.0 7*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18783 + timestamp: 1778489983152 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-1.88.0-h0419b56_7.conda + sha256: d3872915a43512b0404e131d965e6e8c1e2546b13ccfd2463ef72fbfe1456afc + md5: 34e8ce0732bb254bd17f0b9ecea788c2 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - icu >=78.1,<79.0a0 + - libcxx >=19 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - boost-cpp <0.0a0 + license: BSL-1.0 + purls: [] + size: 1992135 + timestamp: 1766348005115 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-python-1.88.0-py312hdeff4eb_7.conda + sha256: e2cacd2816859f5c73acd6e125d8a87362d324fa6dbde7d4973f9d42bde15fc0 + md5: ddee8cd9d4ccaf5df49944264b56c88b + depends: + - __osx >=11.0 + - libboost 1.88.0 h0419b56_7 + - libcxx >=19 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - py-boost <0.0a0 + - boost <0.0a0 + license: BSL-1.0 + purls: [] + size: 107200 + timestamp: 1766348442415 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + sha256: a7cb9e660531cf6fbd4148cff608c85738d0b76f0975c5fc3e7d5e92840b7229 + md5: 006e7ddd8a110771134fcc4e1e3a6ffa + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 79443 + timestamp: 1764017945924 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + sha256: 2eae444039826db0454b19b52a3390f63bfe24f6b3e63089778dd5a5bf48b6bf + md5: 079e88933963f3f149054eec2c487bc2 + depends: + - __osx >=11.0 + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: [] + size: 29452 + timestamp: 1764017979099 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + sha256: 01436c32bb41f9cb4bcf07dda647ce4e5deb8307abfc3abdc8da5317db8189d1 + md5: b2b7c8288ca1a2d71ff97a8e6a1e8883 + depends: + - __osx >=11.0 + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: [] + size: 290754 + timestamp: 1764018009077 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-7_hb0561ab_openblas.conda + build_number: 7 + sha256: 3ac3d27022b3ca8b1980c087e0ede250434f6ed90a4fdc78a8a5ed382bc75505 + md5: 189b373453ec3904095dcb16f502bace + depends: + - libblas 3.11.0 7_h51639a9_openblas + constrains: + - blas 2.307 openblas + - liblapack 3.11.0 7*_openblas + - liblapacke 3.11.0 7*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18810 + timestamp: 1778489991330 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcondor_utils-24.12.4-h4785e8b_0.conda + sha256: 25ec338070e98dcaac8914918c816696589ea361c6d1a0506e727d41157c5f1e + md5: c946d31727e6fe3d3330b7b37743cca4 + depends: + - __osx >=11.0 + - htcondor-classads 24.12.4 h0c2a548_0 + - krb5 >=1.21.3,<1.22.0a0 + - libcxx >=19 + - llvm-openmp >=19.1.7 + - openssl >=3.5.4,<4.0a0 + - pcre2 >=10.46,<10.47.0a0 + - scitokens-cpp >=0.5.0 + - scitokens-cpp >=1.1.3,<2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1824828 + timestamp: 1759416895146 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcondor_utils-25.10.1-h3669c8c_0.conda + sha256: 2aa01b6a844aed635c5d5b88c0b7c39ea1c95cf959d283d9dcc3fb84fb00ed6e + md5: 5d0785219d97eeb8ca8a12646f834d33 + depends: + - __osx >=11.0 + - htcondor-classads 25.10.1 h7a491f7_0 + - krb5 >=1.22.2,<1.23.0a0 + - libcxx >=19 + - llvm-openmp >=19.1.7 + - openssl >=3.5.6,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - scitokens-cpp >=0.5.0 + - scitokens-cpp >=1.4.0,<2.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1878082 + timestamp: 1778793357885 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 + sha256: 58477b67cc719060b5b069ba57161e20ba69b8695d154a719cb4b60caf577929 + md5: 32bd82a6a625ea6ce090a81c3d34edeb + depends: + - libcxx >=11.1.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18765 + timestamp: 1633683992603 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.18.0-he38603e_0.conda + sha256: 11c78b3e89bc332933386f0a11ac60d9200afb7a811b9e3bec98aef8d4a6389b + md5: 36190179a799f3aee3c2d20a8a2b970d + depends: + - __osx >=11.0 + - krb5 >=1.21.3,<1.22.0a0 + - libnghttp2 >=1.67.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.4,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 402681 + timestamp: 1767822693908 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.20.0-hd5a2499_0.conda + sha256: 38c0bc634b61e542776e97cfd15d5d41edd304d4e47c333004d2d622439b2381 + md5: 2f57b7d0c6adda88957586b7afd78438 + depends: + - __osx >=11.0 + - krb5 >=1.22.2,<1.23.0a0 + - libnghttp2 >=1.68.1,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 400568 + timestamp: 1777462251987 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.6-h55c6f16_0.conda + sha256: 3e2f8ad32ddab88c5114b9aa2160f8c129f515df0e551d0d86ef5744446afdbd + md5: 589cc6f6222fdc0eaf8e90bc38fcce7b + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 570038 + timestamp: 1779253025527 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda + sha256: 5e0b6961be3304a5f027a8c00bd0967fc46ae162cffb7553ff45c70f51b8314c + md5: a6130c709305cd9828b4e1bd9ba0000c + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 55420 + timestamp: 1761980066242 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + sha256: 66aa216a403de0bb0c1340a88d1a06adaff66bae2cfd196731aa24db9859d631 + md5: 44083d2d2c2025afca315c7a172eab2b + depends: + - ncurses + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 107691 + timestamp: 1738479560845 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f + md5: 36d33e440c31857372a72137f78bacf5 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 107458 + timestamp: 1702146414478 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda + sha256: 8c136d7586259bb5c0d2b913aaadc5b9737787ae4f40e3ad1beaf96c80b919b7 + md5: 1a109764bff3bdc7bdd84088347d71dc + depends: + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 368167 + timestamp: 1685726248899 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_0.conda + sha256: 3133fb6bfa871288b92c8b8752696686a841bf4ffe035aa3038033c9e15b738e + md5: ef22e9ab1dc7c2f334252f565f90b3b8 + depends: + - __osx >=11.0 + constrains: + - expat 2.8.1.* + license: MIT + license_family: MIT + purls: [] + size: 69110 + timestamp: 1779278728511 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + sha256: 6686a26466a527585e6a75cc2a242bf4a3d97d6d6c86424a441677917f28bec7 + md5: 43c04d9cb46ef176bb2a4c77e324d599 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 40979 + timestamp: 1769456747661 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libframel-8.48.5-h2f1a0bb_0.conda + sha256: c4b320b091db4041c59118a18a8f653b862590fdcb5555a6ca7e006ac67afb4d + md5: cd113dfd259676215493a7a0dd227fed + depends: + - __osx >=11.0 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 202282 + timestamp: 1767613720062 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_0.conda + sha256: a047a2f238362a37d484f9620e8cba29f513a933cd9eb68571ad4b270d6f8f3e + md5: f73b109d49568d5d1dda43bb147ae37f + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 8091 + timestamp: 1774298691258 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-hdfa99f5_0.conda + sha256: ff764608e1f2839e95e2cf9b243681475f8778c36af7a42b3f78f476fdbb1dd3 + md5: e98ba7b5f09a5f450eca083d5a1c4649 + depends: + - __osx >=11.0 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 338085 + timestamp: 1774298689297 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_19.conda + sha256: 06644fa4d34d57c9e48f4d84b1256f9e5f654fdb37f43acc8a58a396952d42b7 + md5: 644058123986582db33aebd4ae2ca184 + depends: + - _openmp_mutex + constrains: + - libgcc-ng ==15.2.0=*_19 + - libgomp 15.2.0 19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 404080 + timestamp: 1778273064154 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_19.conda + sha256: d4837b3b9b30af3132d260225e91ab9dde83be04c59513f500cc81050fb37486 + md5: 1ea03f87cdb1078fbc0e2b2deb63752c + depends: + - libgfortran5 15.2.0 hdae7583_19 + constrains: + - libgfortran-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 139675 + timestamp: 1778273280875 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_19.conda + sha256: d0a68b7a121d115b80c169e24d1265dcc25a3fe58d107df1bbc430797e226d88 + md5: ba36d8c606a6a53fe0b8c12d47267b3d + depends: + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 599691 + timestamp: 1778273075448 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.39.0-h2f60c08_1.conda + sha256: ccb95b546725d408b5229b7e269139a417594ff33bf30642d4a5b98642c22988 + md5: bc5d2c9015fe3b52b669287130a328af + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.0,<20260108.0a0 + - libcurl >=8.18.0,<9.0a0 + - libcxx >=19 + - libgrpc >=1.78.0,<1.79.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - openssl >=3.5.5,<4.0a0 + constrains: + - libgoogle-cloud 2.39.0 *_1 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 881725 + timestamp: 1770461059435 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-3.5.0-he41eb1d_0.conda + sha256: ff87ab8f88d6e0479ff42889e838f3265e2130b8af5d87e5c24441ede9c584fc + md5: ed72289ab19a3103deee5f28aa351d99 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libcurl >=8.20.0,<9.0a0 + - libcxx >=19 + - libgrpc >=1.78.1,<1.79.0a0 + - libopentelemetry-cpp >=1.26.0,<1.27.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - openssl >=3.5.6,<4.0a0 + constrains: + - libgoogle-cloud 3.5.0 *_0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1819466 + timestamp: 1779268312201 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.39.0-ha114238_1.conda + sha256: 82a760b31a498a24c0e58d91d0c3fee9c204bddd626b29072cd24c89ec5423b8 + md5: 8f1142ab8e0284a7a612d777a405a0f6 + depends: + - __osx >=11.0 + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libcxx >=19 + - libgoogle-cloud 2.39.0 h2f60c08_1 + - libzlib >=1.3.1,<2.0a0 + - openssl + license: Apache-2.0 + license_family: Apache + purls: [] + size: 524772 + timestamp: 1770461461389 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-3.5.0-ha114238_0.conda + sha256: 0d1630817981e05dc4c7962cb7acd50e1d5a843f367f7c15556e67e3dd87fdce + md5: b199a64a2c8b0db5ee53b344cc35261f + depends: + - __osx >=11.0 + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libcxx >=19 + - libgoogle-cloud 3.5.0 he41eb1d_0 + - libzlib >=1.3.2,<2.0a0 + - openssl + license: Apache-2.0 + license_family: Apache + purls: [] + size: 529065 + timestamp: 1779268730296 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.78.1-h3e3f78d_0.conda + sha256: a6e01573795484c2200e499ddffb825d24184888be6a596d4beaceebe6f8f525 + md5: 17b9e07ba9b46754a6953999a948dcf7 + depends: + - __osx >=11.0 + - c-ares >=1.34.6,<2.0a0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libcxx >=19 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libre2-11 >=2025.11.5 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - re2 + constrains: + - grpc-cpp =1.78.1 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 4820402 + timestamp: 1774012715207 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwy-1.4.0-ha332bbd_0.conda + sha256: 4fcad3cbec60da940312e883b7866816517acc5f9baecfe9a778de57327a1b1b + md5: 7394850583ca88325244b68b532c7a39 + depends: + - __osx >=11.0 + - libcxx >=19 + license: Apache-2.0 OR BSD-3-Clause + purls: [] + size: 609931 + timestamp: 1776990524407 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + sha256: de0336e800b2af9a40bdd694b03870ac4a848161b35c8a2325704f123f185f03 + md5: 4d5a7445f0b25b6a3ddbb56e790f5251 + depends: + - __osx >=11.0 + license: LGPL-2.1-only + purls: [] + size: 750379 + timestamp: 1754909073836 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda + sha256: 17e035ae6a520ff6a6bb5dd93a4a7c3895891f4f9743bcb8c6ef607445a31cd0 + md5: b8a7544c83a67258b0e8592ec6a5d322 + depends: + - __osx >=11.0 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 555681 + timestamp: 1775962975624 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.2-h934fa54_1.conda + sha256: 948cf1370abb58e06a7c9554838c68672ef1d78e01c3fc4e62ccfc3072579645 + md5: 05bead8980f5ae6a070117dacec38b5b + depends: + - libcxx >=19 + - __osx >=11.0 + - libhwy >=1.4.0,<1.5.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1032419 + timestamp: 1777065264956 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblal-7.7.0-fftw_h4b20030_104.conda + sha256: a5eab6e5f482a1988936a64acd1403f2dbefa8575ddb59328c754b9365b378f5 + md5: 7cf8168ad627299ad2deb16aaf9d3ed2 + depends: + - __osx >=11.0 + - fftw >=3.3.10,<4.0a0 + - gsl >=2.7,<2.8.0a0 + - hdf5 >=2.1.0,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - python-lal >=7.1.1 + - lal >=7.1.1 + - swig >=4.4.1,<4.4.2.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 752465 + timestamp: 1774637379051 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblal-7.7.0-fftw_hebea562_101.conda + sha256: fe8297db83b4ad883914917ae3b6ea8f72e374e8330a443c239b09a76c542601 + md5: 17dbb61e41d5b2000be5d891925ee32b + depends: + - __osx >=11.0 + - fftw >=3.3.10,<4.0a0 + - gsl >=2.7,<2.8.0a0 + - hdf5 >=1.14.6,<1.14.7.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - python-lal >=7.1.1 + - lal >=7.1.1 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 751847 + timestamp: 1755600054361 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalburst-2.0.7-h957e360_2.conda + sha256: 6a169cc9ce7e83af9b691762bb0569b848ea589550cb8e62097b7da849c6e0f5 + md5: d0d539410c43f9e3c4a9557af5f615fc + depends: + - __osx >=11.0 + - gsl >=2.7,<2.8.0a0 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalmetaio >=4.0.0 + - liblalmetaio >=4.0.6,<5.0a0 + - liblalsimulation >=6.2.0 + - liblalsimulation >=6.2.0,<7.0a0 + constrains: + - python-lalburst >=1.5.7 + - lalburst >=1.5.7 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 38663 + timestamp: 1771410459722 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalframe-3.0.7-h304a64b_2.conda + sha256: 251473768849e6911555aeca629702e7f31beed8c641f3478077723c80bad3ab + md5: d1e9534dd7baa34b0decc586c427fb04 + depends: + - __osx >=11.0 + - ldas-tools-framecpp >=2.9.3,<2.10.0a0 + - libframel >=8.41.3,<9.0a0 + - liblal >=7.7.0,<8.0a0 + constrains: + - python-lalframe >=1.5.3 + - lalframe >=1.5.3 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 102142 + timestamp: 1774542891656 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinference-4.1.9-ha9a36a6_2.conda + sha256: c82c433a5121e4036fe116817165cd2dcf1ba51cf12a2bdfbc16b5c7ec1c3aed + md5: 6a050dad84fd99cdb500e16fc9b400ff + depends: + - __osx >=11.0 + - gsl >=2.7,<2.8.0a0 + - lalinference-data 4.1.9 hce30654_2 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalburst >=2.0.0 + - liblalburst >=2.0.7,<3.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalinspiral >=5.0.0 + - liblalinspiral >=5.0.3,<6.0a0 + - liblalmetaio >=4.0.0 + - liblalmetaio >=4.0.6,<5.0a0 + - liblalsimulation >=6.2.0 + - liblalsimulation >=6.2.0,<7.0a0 + - llvm-openmp >=19.1.7 + - llvm-openmp >=22.1.2 + constrains: + - python-lalinference >=2.0.6 + - lalinference >=2.0.6 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 286407 + timestamp: 1774965134322 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinspiral-5.0.3-h957e360_3.conda + sha256: 61a7810b0777910dff29deafd85637841ac93fe8d96838bd81be4382ccfe08da + md5: d2de2a46be51f0d8d820fef04e09174a + depends: + - __osx >=11.0 + - gsl >=2.7,<2.8.0a0 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalburst >=2.0.0 + - liblalburst >=2.0.7,<3.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalmetaio >=4.0.0 + - liblalmetaio >=4.0.6,<5.0a0 + - liblalsimulation >=6.2.0 + - liblalsimulation >=6.2.0,<7.0a0 + constrains: + - lalinspiral >=2.0.1 + - python-lalinspiral >=2.0.1 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 377957 + timestamp: 1774544731606 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalmetaio-4.0.6-h84a0fba_2.conda + sha256: 4f6a9bde5337184f90645755ff68ba5e998564e167253a4d70ed3b14a38e43ea + md5: 58a0836f877b30cd37648f70a45c82a8 + depends: + - __osx >=11.0 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - libmetaio >=8.4.0 + - libmetaio >=8.5.1,<9.0a0 + constrains: + - lalmetaio >=2.0.1 + - python-lalmetaio >=2.0.1 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 57186 + timestamp: 1774543909804 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalpulsar-7.1.1-h169444b_3.conda + sha256: a8d1f8bf53bd3d9f97f885e1cb646237bfdbaa989d466bebc630a199c0532a8a + md5: 618c54f51e1c2f18004f3be182d531b3 + depends: + - __osx >=11.0 + - cfitsio >=4.6.4,<4.6.5.0a0 + - fftw + - gsl >=2.7,<2.8.0a0 + - lalpulsar-data 7.1.1 hce30654_3 + - liblal >=7.6.0 + - liblal >=7.7.0,<8.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalinference >=4.1.0 + - liblalinference >=4.1.9,<5.0a0 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.2.0,<7.0a0 + - llvm-openmp >=19.1.7 + - llvm-openmp >=22.1.4 + constrains: + - python-lalpulsar >=3.0.0 + - lalpulsar >=3.0.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 623846 + timestamp: 1777887639014 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalpulsar-7.1.1-h43f389f_2.conda + sha256: 65467606fe73f3b2cbc4240ae8383c99a3ef8a490d61a0b9df9afd8f6daa21ae + md5: c691472d2d6471b18df0bbac1334e31e + depends: + - __osx >=11.0 + - cfitsio >=4.6.3,<4.6.4.0a0 + - fftw + - gsl >=2.7,<2.8.0a0 + - lalpulsar-data 7.1.1 hce30654_2 + - liblal >=7.6.0 + - liblal >=7.7.0,<8.0a0 + - liblalframe >=3.0.0 + - liblalframe >=3.0.7,<4.0a0 + - liblalinference >=4.1.0 + - liblalinference >=4.1.9,<5.0a0 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.2.0,<7.0a0 + - llvm-openmp >=19.1.7 + - llvm-openmp >=22.1.1 + constrains: + - lalpulsar >=3.0.0 + - python-lalpulsar >=3.0.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 622240 + timestamp: 1774626123962 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalsimulation-6.2.0-py312h593d7fe_3.conda + sha256: d5ca8ff0908e91d6d61edd4a5c65015d17ae13aaa1b9a2c3f8f4415c61b98084 + md5: f1963b3e7d5913aabc1e6870c07613ca + depends: + - __osx >=11.0 + - gsl >=2.7,<2.8.0a0 + - lalsimulation-data 6.2.0 hce30654_3 + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - llvm-openmp >=19.1.7 + - llvm-openmp >=22.1.1 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - lalsimulation >=2.5.0 + - python-lalsimulation >=2.5.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 3552422 + timestamp: 1774542083775 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-7_hd9741b5_openblas.conda + build_number: 7 + sha256: ff3018918ca8b22173dcb231842e819767fd05a08df61483eb5f3e9f2895d114 + md5: d1289ad41d5a78e2269eea3a2d7f0c7d + depends: + - libblas 3.11.0 7_h51639a9_openblas + constrains: + - libcblas 3.11.0 7*_openblas + - blas 2.307 openblas + - liblapacke 3.11.0 7*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18780 + timestamp: 1778490000843 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + sha256: 34878d87275c298f1a732c6806349125cebbf340d24c6c23727268184bba051e + md5: b1fd823b5ae54fbec272cea0811bd8a9 + depends: + - __osx >=11.0 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + size: 92472 + timestamp: 1775825802659 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmetaio-8.5.1-h57f5043_1003.conda + sha256: 11ec8b7c14fcc991eae90908ee757abcbd9cb9d05e3f5ae9f9892f5651864005 + md5: 535416098c190840a512fae1677bc4a8 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - metaio >=8.5.1 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 44891 + timestamp: 1721742371302 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + sha256: 2bc7bc3978066f2c274ebcbf711850cc9ab92e023e433b9631958a098d11e10a + md5: 6ea18834adbc3b33df9bd9fb45eaf95b + depends: + - __osx >=11.0 + - c-ares >=1.34.6,<2.0a0 + - libcxx >=19 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 576526 + timestamp: 1773854624224 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.33-openmp_he657e61_0.conda + sha256: 9dd455b2d172aeedfa2058d324b5b5822b0bc1b7c1f32cd183d7078540d2f6eb + md5: 909e41855c29f0d52ae630198cd57135 + depends: + - __osx >=11.0 + - libgfortran + - libgfortran5 >=14.3.0 + - llvm-openmp >=19.1.7 + constrains: + - openblas >=0.3.33,<0.3.34.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4304965 + timestamp: 1776995497368 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-1.21.0-h08d5cc3_2.conda + sha256: e09ebfabe397f03a408697cd7464b4c8277b93fe776a51fc33c4be17825abd1a + md5: dcbf0ebf1dbbffe6ced8bf48562f5c6f + depends: + - libabseil * cxx17* + - libabseil >=20260107.0,<20260108.0a0 + - libcurl >=8.18.0,<9.0a0 + - libgrpc >=1.78.0,<1.79.0a0 + - libopentelemetry-cpp-headers 1.21.0 hce30654_2 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libzlib >=1.3.1,<2.0a0 + - nlohmann_json + - prometheus-cpp >=1.3.0,<1.4.0a0 + constrains: + - cpp-opentelemetry-sdk =1.21.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 560169 + timestamp: 1770452742811 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-1.26.0-h08d5cc3_0.conda + sha256: 47ce35cc7b903d546cc8ac0a09abfab7aea955147dc18bb2c9eaa5dc7c378a37 + md5: 8cb49289db7cfec1dea3bf7e0e4f0c8d + depends: + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libcurl >=8.19.0,<9.0a0 + - libgrpc >=1.78.0,<1.79.0a0 + - libopentelemetry-cpp-headers 1.26.0 hce30654_0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libzlib >=1.3.1,<2.0a0 + - nlohmann_json + - prometheus-cpp >=1.3.0,<1.4.0a0 + constrains: + - cpp-opentelemetry-sdk =1.26.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 579527 + timestamp: 1774001294901 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-headers-1.21.0-hce30654_2.conda + sha256: 793fe6c7189290934578ef4bda0f34b529717a00c1676a66a7cfb3425b04abed + md5: d1adb8f085e35aa6335c2a4e6f025fb6 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 364108 + timestamp: 1770452651582 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-headers-1.26.0-hce30654_0.conda + sha256: 17f18bab128650598d2f09ae653ab406b9f049e0692b4519a2cf09a6f1603ee9 + md5: efdb13315f1041c7750214a20c1ab162 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 396412 + timestamp: 1774001222028 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-23.0.1-h7a13205_4_cpu.conda + build_number: 4 + sha256: 1c837890f0a71e9506d32ecd3f64e5a9221913573899af9d89135b224e790f83 + md5: 4a0b3e6db6084493c914b3f5596ccb56 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 23.0.1 h5390cfe_4_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.21.0,<1.22.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libthrift >=0.22.0,<0.22.1.0a0 + - openssl >=3.5.5,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1072294 + timestamp: 1773268358554 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-24.0.0-h16c0493_2_cpu.conda + build_number: 2 + sha256: 591c2605168287d5fab42c6e7481d2d950b282ca76fc7c3c9e343e95e8c2e780 + md5: 93d0cfbb69902a92aa4426c33a775d00 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libarrow 24.0.0 h4c70b79_2_cpu + - libcxx >=21 + - libopentelemetry-cpp >=1.26.0,<1.27.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libthrift >=0.22.0,<0.22.1.0a0 + - openssl >=3.5.6,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1098691 + timestamp: 1779475768999 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.58-h132b30e_0.conda + sha256: 66eae34546df1f098a67064970c92aa14ae7a7505091889e00468294d2882c36 + md5: 2259ae0949dbe20c0665850365109b27 + depends: + - __osx >=11.0 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 289546 + timestamp: 1776315246750 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-6.33.5-h4a5acfd_0.conda + sha256: 626852cd50690526c9eac216a9f467edd4cbb01060d0efe41b7def10b54bdb08 + md5: b839e3295b66434f20969c8b940f056a + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.0,<20260108.0a0 + - libcxx >=19 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 2713660 + timestamp: 1769748299578 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2025.11.05-h4c27e2a_1.conda + sha256: 1e2d23bbc1ffca54e4912365b7b59992b7ae5cbeb892779a6dcd9eca9f71c428 + md5: 40d8ad21be4ccfff83a314076c3563f4 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.0,<20260108.0a0 + - libcxx >=19 + constrains: + - re2 2025.11.05.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 165851 + timestamp: 1768190225157 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.22-h1a92334_1.conda + sha256: 202be45db5726757a8ea1f374f85aacc18c504f5ff15b2558496dff4c8779c48 + md5: 9ed5ab909c449bdcae72322e44875a18 + depends: + - __osx >=11.0 + license: ISC + purls: [] + size: 247352 + timestamp: 1779164136206 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.1-h1b79a29_0.conda + sha256: 49daec7c83e70d4efc17b813547824bc2bcf2f7256d84061d24fbfe537da9f74 + md5: 6681822ea9d362953206352371b6a904 + depends: + - __osx >=11.0 + - libzlib >=1.3.2,<2.0a0 + license: blessing + purls: [] + size: 920047 + timestamp: 1777987051643 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + sha256: 8bfe837221390ffc6f111ecca24fa12d4a6325da0c8d131333d63d6c37f27e0a + md5: b68e8f66b94b44aaa8de4583d3d4cc40 + depends: + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 279193 + timestamp: 1745608793272 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.22.0-h1fb9c8a_2.conda + sha256: 568bb23db02b050c3903bec05edbcab84960c8c7e5a1710dac3109df997ac7f1 + md5: d006875f9a58a44f92aec9a7ebeb7150 + depends: + - __osx >=11.0 + - libcxx >=19 + - libevent >=2.1.12,<2.1.13.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 323017 + timestamp: 1777019893083 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda + sha256: e9248077b3fa63db94caca42c8dbc6949c6f32f94d1cafad127f9005d9b1507f + md5: e2a72ab2fa54ecb6abab2b26cde93500 + depends: + - __osx >=11.0 + - lerc >=4.0.0,<5.0a0 + - libcxx >=19 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + size: 373892 + timestamp: 1762022345545 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.11.3-h2431656_0.conda + sha256: ae1a82e62cd4e3c18e005ae7ff4358ed72b2bfbfe990d5a6a5587f81e9a100dc + md5: 2255add2f6ae77d0a96624a5cbde6d45 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 87916 + timestamp: 1768735311947 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda + sha256: a4de3f371bb7ada325e1f27a4ef7bcc81b2b6a330e46fac9c2f78ac0755ea3dd + md5: e5e7d467f80da752be17796b87fe6385 + depends: + - __osx >=11.0 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 294974 + timestamp: 1752159906788 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + sha256: bd3816218924b1e43b275863e21a3e13a5db4a6da74cca8e60bc3c213eb62f71 + md5: af523aae2eca6dfa1c8eec693f5b9a79 + depends: + - __osx >=11.0 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 323658 + timestamp: 1727278733917 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.3-h5ef1a60_0.conda + sha256: ff75b84cdb9e8d123db2fa694a8ac2c2059516b6cbc98ac21fb68e235d0fd354 + md5: 19edaa53885fc8205614b03da2482282 + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - libxml2 2.15.3 + license: MIT + license_family: MIT + purls: [] + size: 466360 + timestamp: 1776377102261 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.3-h5654f7c_0.conda + sha256: 2fe1d8de0854342ae9cabe408b476935f82f5636e153b3b497456264dc8ff3a1 + md5: 8e037d73747d6fe34e12d7bcac10cf21 + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.3 h5ef1a60_0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 41102 + timestamp: 1776377119495 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + sha256: 361415a698514b19a852f5d1123c5da746d4642139904156ddfca7c922d23a05 + md5: bc5a5721b6439f2f62a84f2548136082 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.2 *_2 + license: Zlib + license_family: Other + purls: [] + size: 47759 + timestamp: 1774072956767 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzopfli-1.0.3-h9f76cd9_0.tar.bz2 + sha256: e3003b8efe551902dc60b21c81d7164b291b26b7862704421368d26ba5c10fa0 + md5: a0758d74f57741aa0d9ede13fd592e56 + depends: + - libcxx >=11.0.0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 147901 + timestamp: 1607309166373 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo.skymap-2.5.3-np2h6a9d7bf_1.conda + noarch: python + sha256: d05e842b5848efaf4768ada7e37865e5b1864ec0534a378837823deed22f4d15 + md5: 60ce344e98f69e5515004e9adf05fea9 + depends: + - astroplan >=0.7 + - astropy-base >=6.0 + - astropy-healpix >=0.3 + - chealpix + - gsl + - healpy + - h5py + - igwn-ligolw + - igwn-segments + - libcblas + - ligo-gracedb >=2.0.1 + - matplotlib-base >=3.9.1 + - networkx + - numpy >=2.0.0 + - pillow >=2.5.0 + - python >=3.11 + - python-lal >=7.7.0 + - python-lalinspiral >=5.0.3 + - python-lalmetaio >=4.0.6 + - python-lalsimulation >=6.2.0 + - pytz + - reproject >=0.3.2 + - scipy >=1.10.1 + - shapely >=2.0.0 + - tqdm >=4.27.0 + - __osx >=11.0 + - llvm-openmp >=19.1.7 + - _python_abi3_support 1.* + - cpython >=3.11 + - numpy >=1.23,<3 + - libcblas >=3.9.0,<4.0a0 + - gsl >=2.7,<2.8.0a0 + - chealpix >=3.31.0,<3.32.0a0 + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/ligo-skymap?source=hash-mapping + size: 1779402 + timestamp: 1775055991453 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.6-hc7d1edf_0.conda + sha256: 12d3652549a9abd30f3cc14797715327b86e91001d11865106eb3e02c40be9da + md5: b8cf70b77b2ed10d5f82e367c327b76b + depends: + - __osx >=11.0 + constrains: + - openmp 22.1.6|22.1.6.* + - intel-openmp <0.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 284850 + timestamp: 1779340584016 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmlite-0.47.0-py312h7ca588d_1.conda + sha256: dc8477d74574e5b4bd4b45882f021a95f8a311b66633869e9b4d750e00a81add + md5: 24c6c9295e1048c90b8b1c3e9b6340f0 + depends: + - __osx >=11.0 + - libcxx >=19 + - libzlib >=1.3.2,<2.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/llvmlite?source=hash-mapping + size: 24314492 + timestamp: 1776077372867 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.4.5-py312h2b25a0d_1.conda + sha256: fb2c6c6d0078cc7097f71ca4117adfb013163dd7845d3a7b90c80cf8c324b2e3 + md5: 43132aaf61e6d8a59624b2da26aec518 + depends: + - python + - lz4-c + - __osx >=11.0 + - python 3.12.* *_cpython + - lz4-c >=1.10.0,<1.11.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/lz4?source=hash-mapping + size: 125772 + timestamp: 1765026411222 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + sha256: 94d3e2a485dab8bdfdd4837880bde3dd0d701e2b97d6134b8806b7c8e69c8652 + md5: 01511afc6cc1909c5303cf31be17b44f + depends: + - __osx >=11.0 + - libcxx >=18 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 148824 + timestamp: 1733741047892 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py312h04c11ed_1.conda + sha256: 330394fb9140995b29ae215a19fad46fcc6691bdd1b7654513d55a19aaa091c1 + md5: 11d95ab83ef0a82cc2de12c1e0b47fe4 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 25564 + timestamp: 1772445846939 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-3.10.9-py312h1f38498_0.conda + sha256: 79d518d9556ce81ff4e55e3e947a5a8cb6b1c4a101536e86ab90c34d2c80efcf + md5: 94174d301ce2f5962197fb9b880ea8ff + depends: + - matplotlib-base >=3.10.9,<3.10.10.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tornado >=5 + license: PSF-2.0 + license_family: PSF + purls: [] + size: 17770 + timestamp: 1777001080046 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.9-py312hf3defc7_0.conda + sha256: c2dc997012fb8a901163cdad333ba5ba27733aa26d67a28a6501f4b4d69fcbce + md5: e5d83f3ae6ada32d4e64e366a41f9ff6 + depends: + - __osx >=11.0 + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libcxx >=19 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - numpy >=1.23 + - numpy >=1.23,<3 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-dateutil >=2.7 + - python_abi 3.12.* *_cp312 + - qhull >=2020.2,<2020.3.0a0 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/matplotlib?source=hash-mapping + size: 8191891 + timestamp: 1777001043842 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.2-py312h84eede6_1.conda + sha256: 1540339678e13365001453fdcb698887075a2b326d5fab05cfd0f4fdefae4eab + md5: e3973f0ac5ac854bf86f0d5674a1a289 + depends: + - __osx >=11.0 + - libcxx >=19 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/msgpack?source=hash-mapping + size: 91268 + timestamp: 1762504467174 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda + sha256: 4ea6c620b87bd1d42bb2ccc2c87cd2483fa2d7f9e905b14c223f11ff3f4c455d + md5: 343d10ed5b44030a2f67193905aea159 + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 805509 + timestamp: 1777423252320 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/nlohmann_json-3.12.0-h784d473_1.conda + sha256: 1945fd5b64b74ef3d57926156fb0bfe88ee637c49f3273067f7231b224f1d26d + md5: 755cfa6c08ed7b7acbee20ccbf15a47c + constrains: + - nlohmann_json-abi ==3.12.0 + license: MIT + license_family: MIT + purls: [] + size: 137595 + timestamp: 1768670878127 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numba-0.65.1-py312h2d3d6e9_1.conda + sha256: 304cc4894ed021d6101801219449afcca1179c7f1c700cc7a87b543a9bbbc7e7 + md5: 489bd27f778c3194664c82447b73bc96 + depends: + - __osx >=11.0 + - libcxx >=19 + - llvm-openmp >=19.1.7 + - llvmlite >=0.47.0,<0.48.0a0 + - numpy >=1.22.3,<2.5 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - libopenblas >=0.3.18,!=0.3.20 + - scipy >=1.0 + - tbb >=2021.6.0 + - cuda-python >=11.6 + - cuda-version >=11.2 + - cudatoolkit >=11.2 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/numba?source=hash-mapping + size: 5721304 + timestamp: 1778390934553 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numcodecs-0.16.5-py312h5978115_0.conda + sha256: 6bd51c8f1a194289f741dd7112f3ad071856443f707926233a1323347df149c0 + md5: 1de2e6a0fda23e8fb7e31c87b3a422a8 + depends: + - __osx >=11.0 + - deprecated + - libcxx >=19 + - msgpack-python + - numpy >=1.23,<3 + - numpy >=1.24 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - typing_extensions + license: MIT + license_family: MIT + purls: + - pkg:pypi/numcodecs?source=hash-mapping + size: 660694 + timestamp: 1764782989453 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.6-py312ha003a3f_0.conda + sha256: b09e03dace335a6f303352fc4e167243e04d7026d55008546fa643d224fb0bad + md5: 9f554fdfa902971390975b489e678c03 + depends: + - python + - __osx >=11.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - liblapack >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=compressed-mapping + size: 6843172 + timestamp: 1779169213435 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.10-h5505292_0.conda + sha256: cedcd880e316240cbb35a1275990bfed1da36dba4a4f714edf95237f03d48665 + md5: 045afd0b8e35a71bfbe95345146592c4 + depends: + - __osx >=11.0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 223354 + timestamp: 1735727101839 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda + sha256: 60aca8b9f94d06b852b296c276b3cf0efba5a6eb9f25feb8708570d3a74f00e4 + md5: 4b5d3a91320976eec71678fad1e3569b + depends: + - __osx >=11.0 + - libcxx >=19 + - libpng >=1.6.55,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 319697 + timestamp: 1772625397692 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjph-0.27.3-h2a4d681_0.conda + sha256: 05189fd9379e48e097016a18c1403a64cb0a08471cb5e64fdb3bbd0d6ce34e3b + md5: 97e85be52ac311fbedd3650699c7193b + depends: + - libcxx >=19 + - __osx >=11.0 + - libtiff >=4.7.1,<4.8.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 184336 + timestamp: 1778775342709 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda + sha256: c91bf510c130a1ea1b6ff023e28bac0ccaef869446acd805e2016f69ebdc49ea + md5: 25dcccd4f80f1638428613e0d7c9b4e1 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3106008 + timestamp: 1775587972483 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.3.0-hd11884d_0.conda + sha256: 8594f064828cca9b8d625e2ebe79436fd4ffc030c950573380c54a8f4329f955 + md5: 77bfe521901c1a247cc66c1276826a85 + depends: + - tzdata + - libcxx >=19 + - __osx >=11.0 + - zstd >=1.5.7,<1.6.0a0 + - libzlib >=1.3.1,<2.0a0 + - snappy >=1.2.2,<1.3.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libabseil >=20260107.1,<20260108.0a0 + - libabseil * cxx17* + - lz4-c >=1.10.0,<1.11.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 548180 + timestamp: 1773230270828 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-3.0.3-py312h6510ced_0.conda + sha256: 7202013525593f57a452dac7e5fee9f26478822be3ba5c893643517b8627406d + md5: 4581a32b837950217327fcab93214313 + depends: + - python + - numpy >=1.26.0 + - python-dateutil >=2.8.2 + - __osx >=11.0 + - python 3.12.* *_cpython + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.23,<3 + constrains: + - adbc-driver-postgresql >=1.2.0 + - adbc-driver-sqlite >=1.2.0 + - beautifulsoup4 >=4.12.3 + - blosc >=1.21.3 + - bottleneck >=1.4.2 + - fastparquet >=2024.11.0 + - fsspec >=2024.10.0 + - gcsfs >=2024.10.0 + - html5lib >=1.1 + - hypothesis >=6.116.0 + - jinja2 >=3.1.5 + - lxml >=5.3.0 + - matplotlib >=3.9.3 + - numba >=0.60.0 + - numexpr >=2.10.2 + - odfpy >=1.4.1 + - openpyxl >=3.1.5 + - psycopg2 >=2.9.10 + - pyarrow >=13.0.0 + - pyiceberg >=0.8.1 + - pymysql >=1.1.1 + - pyqt5 >=5.15.9 + - pyreadstat >=1.2.8 + - pytables >=3.10.1 + - pytest >=8.3.4 + - pytest-xdist >=3.6.1 + - python-calamine >=0.3.0 + - pytz >=2024.2 + - pyxlsb >=1.0.10 + - qtpy >=2.4.2 + - scipy >=1.14.1 + - s3fs >=2024.10.0 + - sqlalchemy >=2.0.36 + - tabulate >=0.9.0 + - xarray >=2024.10.0 + - xlrd >=2.0.1 + - xlsxwriter >=3.2.0 + - zstandard >=0.23.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandas?source=hash-mapping + size: 13926263 + timestamp: 1778602825408 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.46-h7125dd6_0.conda + sha256: 5bf2eeaa57aab6e8e95bea6bd6bb2a739f52eb10572d8ed259d25864d3528240 + md5: 0e6e82c3cc3835f4692022e9b9cd5df8 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 835080 + timestamp: 1756743041908 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-h30297fc_0.conda + sha256: 5e2e443f796f2fd92adf7978286a525fb768c34e12b1ee9ded4000a41b2894ba + md5: 9b4190c4055435ca3502070186eba53a + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 850231 + timestamp: 1763655726735 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.2.0-py312h4e908a4_0.conda + sha256: f7ee5d45bf16184d2b53f0d35c98c06e4e82e21688ce93e52b55c02ec7153bf3 + md5: 0634560e556adb3e7924668e49ad53fc + depends: + - python + - __osx >=11.0 + - python 3.12.* *_cpython + - libxcb >=1.17.0,<2.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - tk >=8.6.13,<8.7.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - lcms2 >=2.18,<3.0a0 + - python_abi 3.12.* *_cp312 + - openjpeg >=2.5.4,<3.0a0 + - libwebp-base >=1.6.0,<2.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 965082 + timestamp: 1775060469004 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/prometheus-cpp-1.3.0-h0967b3e_0.conda + sha256: 851a77ae1a8e90db9b9f3c4466abea7afb52713c3d98ceb0d37ba6ff27df2eff + md5: 7172339b49c94275ba42fec3eaeda34f + depends: + - __osx >=11.0 + - libcurl >=8.10.1,<9.0a0 + - libcxx >=18 + - libzlib >=1.3.1,<2.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 173220 + timestamp: 1730769371051 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py312hb3ab3e3_0.conda + sha256: 6d0e21c76436374635c074208cfeee62a94d3c37d0527ad67fd8a7615e546a05 + md5: fd856899666759403b3c16dcba2f56ff + depends: + - python + - __osx >=11.0 + - python 3.12.* *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + size: 239031 + timestamp: 1769678393511 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + sha256: 8ed65e17fbb0ca944bfb8093b60086e3f9dd678c3448b5de212017394c247ee3 + md5: 415816daf82e0b23a736a069a75e9da7 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 8381 + timestamp: 1726802424786 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-23.0.1-py312h1f38498_0.conda + sha256: 3cc847d7fc9d16efb145dd2593c3bcc78a4423a77be1748214e7b1c02a85bcb7 + md5: 9a2007e9af67ae4fc94ec64d29672382 + depends: + - libarrow-acero 23.0.1.* + - libarrow-dataset 23.0.1.* + - libarrow-substrait 23.0.1.* + - libparquet 23.0.1.* + - pyarrow-core 23.0.1 *_0_* + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 28670 + timestamp: 1771307852216 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-24.0.0-py312h1f38498_0.conda + sha256: c7cc2c75525c6522f9b948cd9ead2d5ceec55ba8b78cfd6f222fbc581219d0ff + md5: 2b3892c12915851e12955ee753eaedbb + depends: + - libarrow-acero 24.0.0.* + - libarrow-dataset 24.0.0.* + - libarrow-substrait 24.0.0.* + - libparquet 24.0.0.* + - pyarrow-core 24.0.0 *_0_* + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 26799 + timestamp: 1776928498495 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-23.0.1-py312h21b41d0_0_cpu.conda + sha256: 285b146dbb09da5cd71cb8a460f833572f5e527ba44c5541b4739254aaf447d1 + md5: 2c0f60cf75d24b80367308e5454b472a + depends: + - __osx >=11.0 + - libarrow 23.0.1.* *cpu + - libarrow-compute 23.0.1.* *cpu + - libcxx >=21 + - libzlib >=1.3.1,<2.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - numpy >=1.23,<3 + - apache-arrow-proc * cpu + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/pyarrow?source=hash-mapping + size: 3915948 + timestamp: 1771307781330 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-24.0.0-py312h21b41d0_0_cpu.conda + sha256: 38049b8b098fa02446e97bedebdde2ff4cae4b579581a7125da3e751bcf5a54d + md5: 7020684cfd5c066e86cee8affad06e83 + depends: + - __osx >=11.0 + - libarrow 24.0.0.* *cpu + - libarrow-compute 24.0.0.* *cpu + - libcxx >=21 + - libzlib >=1.3.2,<2.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - apache-arrow-proc * cpu + - numpy >=1.23,<3 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/pyarrow?source=hash-mapping + size: 4322018 + timestamp: 1776928464897 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyerfa-2.0.1.5-py310hbb12772_2.conda + noarch: python + sha256: ec2a947d95ffb46ca3a818272c8594f195b1e74369164c46f4512b2d66f7f4c4 + md5: 51a8f8137ff9e55513e5e722c86fb9f8 + depends: + - __osx >=11.0 + - numpy >=1.21,<3 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyerfa?source=hash-mapping + size: 271352 + timestamp: 1756821964759 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pynacl-1.6.2-py312h8fd69cb_2.conda + sha256: fc7973feaa661bcefb3e97cc67438e5345100f7c9e894bbcc42b9f78ac319ba0 + md5: 52bace8397027430e2be07d2a3876078 + depends: + - __osx >=11.0 + - cffi >=1.4.1 + - libsodium >=1.0.22,<1.0.23.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - six + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/pynacl?source=hash-mapping + size: 1155969 + timestamp: 1778985617424 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda + sha256: e658e647a4a15981573d6018928dec2c448b10c77c557c29872043ff23c0eb6a + md5: 8e7608172fa4d1b90de9a745c2fd2b81 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.4,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - liblzma >=5.8.2,<6.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.5,<4.0a0 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 12127424 + timestamp: 1772730755512 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-gssapi-1.11.1-py312h72ca3cf_0.conda + sha256: ec889c7463bbd63b748f9b42970ac96efdd8e6dd2f7cf38cb9996bf93a192cbf + md5: ef1087dc64dd9484ee77d81705375eb9 + depends: + - __osx >=11.0 + - decorator + - krb5 >=1.21.3,<1.22.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: ISC + purls: + - pkg:pypi/gssapi?source=hash-mapping + size: 484822 + timestamp: 1769843035292 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-gssapi-1.11.1-py312h858ef95_1.conda + sha256: 7a28921306a1e39083483ca6e8d836ea99ede38abfa6a9b8e587c5ec5b51c9e8 + md5: ebee80a25b43b351b0848a4d7d4c03dd + depends: + - __osx >=11.0 + - decorator + - krb5 >=1.22.2,<1.23.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: ISC + purls: + - pkg:pypi/gssapi?source=hash-mapping + size: 484305 + timestamp: 1770935400303 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-htcondor-24.12.4-py312hd1c112e_0.conda + sha256: 6ef36799dca4aa265027159dd7c9fbb881fd2da56275478a1ccbde163f2b1660 + md5: b582afdb6a35f4c1657016182a81c673 + depends: + - __osx >=11.0 + - htcondor-classads 24.12.4 h0c2a548_0 + - libboost-python >=1.88.0,<1.89.0a0 + - libcondor_utils 24.12.4 h4785e8b_0 + - libcxx >=19 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/htcondor?source=hash-mapping + size: 932493 + timestamp: 1759418635468 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-htcondor-25.10.1-py312hacc1691_0.conda + sha256: cab7c838b00ea51cc02d8ba941cd711e5f540b9f67a12f923886170d2eb3dfd5 + md5: 408cc0cc2900d098c250945ab82737a2 + depends: + - __osx >=11.0 + - htcondor-classads 25.10.1 h7a491f7_0 + - libcondor_utils 25.10.1 h3669c8c_0 + - libcxx >=19 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/htcondor?source=hash-mapping + size: 505934 + timestamp: 1778794246872 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lal-7.7.0-fftw_py312h2cc9458_104.conda + sha256: 725e8af17447df0de194bff88196114ec6637e10e2a62534328a35c3a4da2fbc + md5: 77bae30e703073b033d0d0f7d4e06193 + depends: + - __osx >=11.0 + - igwn-segments + - liblal 7.7.0 fftw_h4b20030_104 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-dateutil + - python_abi 3.12.* *_cp312 + - scipy + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 849272 + timestamp: 1774637608407 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lal-7.7.0-fftw_py312he477bca_101.conda + sha256: b1c761fd97762ecdb78222965d86233818bb1d6890b8be23dcd8c00d2b1d263d + md5: 93428ebf6d08b5e95353956213da7a87 + depends: + - __osx >=11.0 + - igwn-segments + - liblal 7.7.0 fftw_hebea562_101 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-dateutil + - python_abi 3.12.* *_cp312 + - scipy + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 850173 + timestamp: 1755600783452 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalburst-2.0.7-py312hd9443c7_2.conda + sha256: 7a13ab235ef5d4229be301930857711648bae741a6e9c064b4650119476b7d2a + md5: 59e45e5fc3cce1ec287dc594c9d4b5cb + depends: + - __osx >=11.0 + - gsl >=2.7,<2.8.0a0 + - igwn-ligolw >=2.1.0 + - igwn-segments + - liblalburst 2.0.7 h957e360_2 + - lscsoft-glue + - matplotlib-base + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-lal >=7.7.0 + - python-lalmetaio >=4.0.0 + - python-lalsimulation >=6.2.0 + - python_abi 3.12.* *_cp312 + - scipy + - tqdm + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 315920 + timestamp: 1771411447208 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalframe-3.0.7-py312hf57c059_2.conda + sha256: 6e2b7af6e01d32e1db06dcc244f9e15071205a837db5df18d33d1f3ed9fa047b + md5: c1011015121cee02cc80d202e95aa00c + depends: + - __osx >=11.0 + - liblalframe 3.0.7 h304a64b_2 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-lal >=7.7.0 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 753175 + timestamp: 1774543366517 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinference-4.1.9-py312hf57c059_2.conda + sha256: 7fca54a44bce711d7c6da3678c776dbc2972f8f418c6344339fb121a0e7fc157 + md5: 52acb78043fc9563ed61427f3ae93953 + depends: + - __osx >=11.0 + - astropy-base >=1.1.1 + - h5py + - healpy >=1.17.3 + - igwn-ligolw >=2.1.0 + - igwn-segments + - liblalinference 4.1.9 ha9a36a6_2 + - lscsoft-glue >=1.54.1 + - matplotlib-base >=1.2.0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-lal >=7.7.0 + - python-lalburst >=2.0.0 + - python-lalinspiral >=5.0.0 + - python-lalmetaio >=4.0.0 + - python-lalsimulation >=6.2.0 + - python_abi 3.12.* *_cp312 + - scipy >=0.9.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 810668 + timestamp: 1774965664350 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinspiral-5.0.3-py312hf57c059_3.conda + sha256: 134f18d35de4ab259d22d09b1ff378c80d9fae15ed44d248e8399dfbad47e13c + md5: 18a4ed4be2ae11ebf9cad2d295cbcc39 + depends: + - __osx >=11.0 + - igwn-ligolw + - liblalinspiral 5.0.3 h957e360_3 + - lscsoft-glue + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-lal >=7.7.0 + - python-lalburst >=2.0.0 + - python-lalframe >=3.0.0 + - python-lalmetaio >=4.0.0 + - python-lalsimulation >=6.2.0 + - python_abi 3.12.* *_cp312 + - tqdm + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 61658305 + timestamp: 1774545308064 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalmetaio-4.0.6-py312hf57c059_2.conda + sha256: ac2d32d8a1333a7d32ef12c3efe4e70cd17b7adb9893f3cf64e05764676b361a + md5: 54953cd279270d32fde352dd0303fd18 + depends: + - __osx >=11.0 + - liblalmetaio 4.0.6 h84a0fba_2 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-lal >=7.7.0 + - python_abi 3.12.* *_cp312 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 146708 + timestamp: 1774544139673 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalpulsar-7.1.1-py312hf57c059_2.conda + sha256: 9bfcc06d6f39c26be73270ad57bb3ff9eaef3b8931cee83f8f7c1ae968f0cebf + md5: f550f312512805c7f8e49f64263c19bb + depends: + - __osx >=11.0 + - astropy-base + - liblalpulsar 7.1.1 h43f389f_2 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-lal >=7.6.0 + - python-lalframe >=3.0.0 + - python-lalinference >=4.1.0 + - python-lalsimulation >=6.1.0 + - python_abi 3.12.* *_cp312 + - six + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 96710153 + timestamp: 1774626912460 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalpulsar-7.1.1-py312hf57c059_3.conda + sha256: 57cc3343ca724a92022cccd1df7019b3af6a623c15b7d9490f7e8799de3aa1e9 + md5: 6027c14cb75ba034238e1da2474dda33 + depends: + - __osx >=11.0 + - astropy-base + - liblalpulsar 7.1.1 h169444b_3 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-lal >=7.6.0 + - python-lalframe >=3.0.0 + - python-lalinference >=4.1.0 + - python-lalsimulation >=6.1.0 + - python_abi 3.12.* *_cp312 + - six + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 96699529 + timestamp: 1777887960340 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalsimulation-6.2.0-py312h7cf3665_3.conda + sha256: 6545a7bab2b808bfe09d86fa00921823ff3d060695b54127a901ffe7252bd92b + md5: 4ed5e1415b33c5e553c68964526725e8 + depends: + - __osx >=11.0 + - astropy-base + - gsl >=2.7,<2.8.0a0 + - gwpy + - liblal >=7.7.0 + - liblal >=7.7.0,<8.0a0 + - liblalsimulation 6.2.0 py312h593d7fe_3 + - llvm-openmp >=19.1.7 + - llvm-openmp >=22.1.1 + - mpmath >=1.0.0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python-lal >=7.7.0 + - python_abi 3.12.* *_cp312 + - scipy + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 4008822 + timestamp: 1774542143901 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py312h04c11ed_1.conda + sha256: 737959262d03c9c305618f2d48c7f1691fb996f14ae420bfd05932635c99f873 + md5: 95a5f0831b5e0b1075bbd80fcffc52ac + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + size: 187278 + timestamp: 1770223990452 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda + sha256: 873ac689484262a51fd79bc6103c1a1bedbf524924d7f0088fb80703042805e4 + md5: 6483b1f59526e05d7d894e466b5b6924 + depends: + - __osx >=11.0 + - libcxx >=16 + license: LicenseRef-Qhull + purls: [] + size: 516376 + timestamp: 1720814307311 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.8.1-h8246384_0.conda + sha256: 925e35b71fe513e0380ecd2fe137e3f4f248bf7ce4bad96946c7c704b7a50d26 + md5: 4706a8a71474c692482c3f86c2175454 + depends: + - __osx >=11.0 + constrains: + - __osx >=11.0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 886953 + timestamp: 1772541394570 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2025.11.05-ha480c28_1.conda + sha256: 5bab972e8f2bff1b5b3574ffec8ecb89f7937578bd107584ed3fde507ff132f9 + md5: a1ff22f664b0affa3de712749ccfbf04 + depends: + - libre2-11 2025.11.05 h4c27e2a_1 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 27445 + timestamp: 1768190259003 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + sha256: a77010528efb4b548ac2a4484eaf7e1c3907f2aec86123ed9c5212ae44502477 + md5: f8381319127120ce51e081dce4865cf4 + depends: + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 313930 + timestamp: 1765813902568 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2026.5.9-py312h2bbb03f_0.conda + sha256: 70c8590c2fa6474dd1f440d4fe674faed5ff17f9079d69abef7aaceefa229bbe + md5: 5f8dbdc69edd17a2fd6cf0833e532357 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: Apache-2.0 AND CNRI-Python + license_family: PSF + purls: + - pkg:pypi/regex?source=compressed-mapping + size: 373798 + timestamp: 1778374452771 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/reproject-0.19.0-py312ha11c99a_0.conda + sha256: a9154fe429d440b1d2621a5059cefd60532076949fcfacedf4ea67a61dcb7467 + md5: ea6c3bacc93d7b704517f2ecc463b4e6 + depends: + - __osx >=11.0 + - astropy-base >=5.0 + - astropy-healpix >=1.0 + - dask >=2024.4.1 + - dask-image >=2025.11.0 + - fsspec >=2021.9 + - numpy >=1.23 + - numpy >=1.23,<3 + - pillow >=10.0 + - pyavm >=0.9.6 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - scipy >=1.9 + - shapely + - zarr >=2.17.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/reproject?source=hash-mapping + size: 963288 + timestamp: 1763206877177 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.8.0-np2py312he5ca3e3_1.conda + sha256: 5f640a06e001666f9d4dca7cca992f1753e722e9f6e50899d7d250c02ddf7398 + md5: ed7887c51edfa304c69a424279cec675 + depends: + - python + - numpy >=1.24.1 + - scipy >=1.10.0 + - joblib >=1.3.0 + - threadpoolctl >=3.2.0 + - libcxx >=19 + - python 3.12.* *_cpython + - __osx >=11.0 + - llvm-openmp >=19.1.7 + - numpy >=1.23,<3 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scikit-learn?source=hash-mapping + size: 9124177 + timestamp: 1766550900752 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.17.1-py312h0f234b1_0.conda + sha256: 7082a8c87ae32b6090681a1376e3335cf23c95608c68a3f96f3581c847f8b840 + md5: fd035cd01bb171090a990ae4f4143090 + depends: + - __osx >=11.0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - liblapack >=3.9.0,<4.0a0 + - numpy <2.7 + - numpy >=1.23,<3 + - numpy >=1.25.2 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=hash-mapping + size: 13966986 + timestamp: 1771881089893 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scitokens-cpp-1.4.0-h608d757_0.conda + sha256: 87fd75f8f087763bf83d081aac23d4a481ba47cb14c8d6ea4a922643f47cb666 + md5: 2c4e402af68d87892ebede3ba1f30ab9 + depends: + - __osx >=11.0 + - libcurl >=8.18.0,<9.0a0 + - libcxx >=19 + - libsqlite >=3.51.2,<4.0a0 + - openssl >=3.5.5,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 181487 + timestamp: 1771576981524 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.1.2-py312h35cd81b_2.conda + sha256: 81d4780a8a7d2f6b696fc8cd43f791ef058a420e35366fd4cd68bef9f139f3d5 + md5: 624173184d65db80f267b6191c1ad26d + depends: + - __osx >=11.0 + - geos >=3.14.1,<3.14.2.0a0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/shapely?source=hash-mapping + size: 596152 + timestamp: 1762524099944 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hada39a4_1.conda + sha256: cb9305ede19584115f43baecdf09a3866bfcd5bcca0d9e527bd76d9a1dbe2d8d + md5: fca4a2222994acd7f691e57f94b750c5 + depends: + - libcxx >=19 + - __osx >=11.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 38883 + timestamp: 1762948066818 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-4.0.1-h0cb729a_0.conda + sha256: bdef3c1c4d2a396ad4f7dc64c5e9a02d4c5a21ff93ed07a33e49574de5d2d18d + md5: 8badc3bf16b62272aa2458f138223821 + depends: + - __osx >=11.0 + - libcxx >=19 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 1456245 + timestamp: 1769664727051 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/swig-4.3.1-h0c2a548_4.conda + sha256: 0c107166881dc4b2d2958a8a721fd211def42aaf7cd8ea7dc01026c7641d6118 + md5: 5701bdedd264c6c6bb1b3c0561ce7916 + depends: + - __osx >=11.0 + - libcxx >=19 + - pcre2 >=10.46,<10.47.0a0 + constrains: + - swig-abi ==4 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 1125420 + timestamp: 1761740898649 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/swig-4.4.1-h4366dc5_0.conda + sha256: 6491edeb3df94578b016015f78dd80bddc0f85e2624ed9cea79ad9f9f4b240ca + md5: f9a4ce9ad596a0feac7cc7aba8517389 + depends: + - libcxx >=19 + - __osx >=11.0 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - swig-abi ==5 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 1189583 + timestamp: 1773252068990 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + sha256: 799cab4b6cde62f91f750149995d149bc9db525ec12595e8a1d91b9317f038b3 + md5: a9d86bc62f39b94c4661716624eb21b0 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3127137 + timestamp: 1769460817696 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py312h2bbb03f_0.conda + sha256: 29edd36311b4a810a9e6208437bdbedb28c9ac15221caf812cb5c5cf48375dca + md5: 02cce5319b0f1317d9642dcb2e475379 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + size: 859155 + timestamp: 1774358568476 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py312h2bbb03f_0.conda + sha256: e935d0c11581e31e89ce4899a28b16f924d1a3c1af89f18f8a2c5f5728b3107f + md5: 45b836f333fd3e282c16fff7dc82994e + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/unicodedata2?source=hash-mapping + size: 415828 + timestamp: 1770909782683 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.2.1-py312h2bbb03f_0.conda + sha256: baefb9a73519863a70f6e7a6f6acb982ee5485ae986a16960ff1e8cb99f1a023 + md5: a82ae4e18607e068c9259136d07e4f87 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/wrapt?source=hash-mapping + size: 111458 + timestamp: 1779477998634 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hc919400_1.conda + sha256: adae11db0f66f86156569415ed79cda75b2dbf4bea48d1577831db701438164f + md5: 78b548eed8227a689f93775d5d23ae09 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 14105 + timestamp: 1762976976084 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hc919400_1.conda + sha256: f7fa0de519d8da589995a1fe78ef74556bb8bc4172079ae3a8d20c3c81354906 + md5: 9d1299ace1924aa8f4e0bc8e71dd0cf7 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 19156 + timestamp: 1762977035194 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + sha256: b03433b13d89f5567e828ea9f1a7d5c5d697bf374c28a4168d71e9464f5dafac + md5: 78a0fe9e9c50d2c381e8ee47e3ea437d + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 83386 + timestamp: 1753484079473 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-ha86207d_5.conda + sha256: 5b8bc86ca206f456ca9fe9e1a629f68b949ac47070211bccf4b44d29141c85d7 + md5: 581bd74656ccd460cf2bbe152292a1eb + depends: + - __osx >=11.0 + - libcxx >=19 + - llvm-openmp >=19.1.7 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 204043 + timestamp: 1766549790975 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.2-h8088a28_2.conda + sha256: 8dd2ac25f0ba714263aac5832d46985648f4bfb9b305b5021d702079badc08d2 + md5: f1c0bce276210bed45a04949cfe8dc20 + depends: + - __osx >=11.0 + - libzlib 1.3.2 h8088a28_2 + license: Zlib + license_family: Other + purls: [] + size: 81123 + timestamp: 1774072974535 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda + sha256: a339606a6b224bb230ff3d711e801934f3b3844271df9720165e0353716580d4 + md5: d99c2a23a31b0172e90f456f580b695e + depends: + - __osx >=11.0 + - libcxx >=19 + license: Zlib + license_family: Other + purls: [] + size: 94375 + timestamp: 1770168363685 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9 + md5: ab136e4c34e97f34fb621d2592a393d8 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 433413 + timestamp: 1764777166076 +- pypi: https://files.pythonhosted.org/packages/00/e2/1cb7cfb88fd3866062977a484bc0dda4e165361e949cc8e270302d05b007/spinsfast-2022.4.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: spinsfast + version: 2022.4.10 + sha256: edfe300d3b83b12033d5d18d9619c5eaae43cc4d830ce7164b71db233982a615 +- pypi: https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl + name: itsdangerous + version: 2.2.0 + sha256: c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/05/30/affbabf3c27fb501ec7b5808230c619d4d1a4525c07301074eb4bda92fa9/statsmodels-0.14.6-cp312-cp312-macosx_11_0_arm64.whl + name: statsmodels + version: 0.14.6 + sha256: 26d4f0ed3b31f3c86f83a92f5c1f5cbe63fc992cd8915daf28ca49be14463a1c + requires_dist: + - numpy>=1.22.3,<3 + - scipy>=1.8,!=1.9.2 + - pandas>=1.4,!=2.1.0 + - patsy>=0.5.6 + - packaging>=21.3 + - cython>=3.0.10 ; extra == 'build' + - cython>=3.0.10 ; extra == 'develop' + - cython>=3.0.10,<4 ; extra == 'develop' + - setuptools-scm[toml]~=8.0 ; extra == 'develop' + - matplotlib>=3 ; extra == 'develop' + - colorama ; extra == 'develop' + - joblib ; extra == 'develop' + - jinja2 ; extra == 'develop' + - pytest>=7.3.0,<8 ; extra == 'develop' + - pytest-randomly ; extra == 'develop' + - pytest-xdist ; extra == 'develop' + - pytest-cov ; extra == 'develop' + - pywinpty ; os_name == 'nt' and extra == 'develop' + - flake8 ; extra == 'develop' + - isort ; extra == 'develop' + - sphinx ; extra == 'docs' + - nbconvert ; extra == 'docs' + - jupyter-client ; extra == 'docs' + - ipykernel ; extra == 'docs' + - matplotlib ; extra == 'docs' + - nbformat ; extra == 'docs' + - numpydoc ; extra == 'docs' + - pandas-datareader ; extra == 'docs' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/07/40/4058220b3d60890b62e0a2e8212e2546695827cf85e6186405ecf8ef33f1/numpy_quaternion-2024.0.13-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: numpy-quaternion + version: 2024.0.13 + sha256: cc2e037ad4269a8f7c9ccf37711cae16451745822e0e77db5a4da7c3633c51d1 + requires_dist: + - numpy>=1.25,<3 + - scipy>=1.5,<2 + - mkdocs-material ; extra == 'docs' + - mkdocstrings-python ; extra == 'docs' + - pymdown-extensions ; extra == 'docs' + requires_python: '>=3.10,<3.15' +- pypi: https://files.pythonhosted.org/packages/09/c9/a9271d39c86d28d8bfacec831e416e42eb6d154f03605429631c4c08138b/pygsl_lite-0.1.8.tar.gz + name: pygsl-lite + version: 0.1.8 + sha256: 3213755c71da61e9629551e088530130d28e27048cd5f3ba48deb8165e6df6de + requires_dist: + - numpy>=1.23.0 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + name: blinker + version: 1.9.0 + sha256: ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl + name: pydantic-core + version: 2.46.4 + sha256: 962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/19/cb/d31459da1f482479512c642c8463347b828004ecfa5bcd0a26ab57317add/spinsfast-2022.4.10-cp312-cp312-macosx_13_0_x86_64.whl + name: spinsfast + version: 2022.4.10 + sha256: ba472e367da00ed650775fcc439dd0fd7e6230dcb9a299607fe05a730820ac12 +- pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl + name: gitpython + version: 3.1.50 + sha256: d352abe2908d07355014abdd21ddf798c2a961469239afec4962e9da884858f9 + requires_dist: + - gitdb>=4.0.1,<5 + - typing-extensions>=3.10.0.2 ; python_full_version < '3.10' + - coverage[toml] ; extra == 'test' + - ddt>=1.1.1,!=1.4.3 ; extra == 'test' + - mock ; python_full_version < '3.8' and extra == 'test' + - mypy==1.18.2 ; python_full_version >= '3.9' and extra == 'test' + - pre-commit ; extra == 'test' + - pytest>=7.3.1 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-instafail ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-sugar ; extra == 'test' + - typing-extensions ; python_full_version < '3.11' and extra == 'test' + - sphinx>=7.4.7,<8 ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - sphinx-autodoc-typehints ; extra == 'doc' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/25/ce/308e5e5da57515dd7cab3ec37ea2d5b8ff50bef1fcc8e6d31456f9fae08e/statsmodels-0.14.6-cp312-cp312-macosx_10_13_x86_64.whl + name: statsmodels + version: 0.14.6 + sha256: fe76140ae7adc5ff0e60a3f0d56f4fffef484efa803c3efebf2fcd734d72ecb5 + requires_dist: + - numpy>=1.22.3,<3 + - scipy>=1.8,!=1.9.2 + - pandas>=1.4,!=2.1.0 + - patsy>=0.5.6 + - packaging>=21.3 + - cython>=3.0.10 ; extra == 'build' + - cython>=3.0.10 ; extra == 'develop' + - cython>=3.0.10,<4 ; extra == 'develop' + - setuptools-scm[toml]~=8.0 ; extra == 'develop' + - matplotlib>=3 ; extra == 'develop' + - colorama ; extra == 'develop' + - joblib ; extra == 'develop' + - jinja2 ; extra == 'develop' + - pytest>=7.3.0,<8 ; extra == 'develop' + - pytest-randomly ; extra == 'develop' + - pytest-xdist ; extra == 'develop' + - pytest-cov ; extra == 'develop' + - pywinpty ; os_name == 'nt' and extra == 'develop' + - flake8 ; extra == 'develop' + - isort ; extra == 'develop' + - sphinx ; extra == 'docs' + - nbconvert ; extra == 'docs' + - jupyter-client ; extra == 'docs' + - ipykernel ; extra == 'docs' + - matplotlib ; extra == 'docs' + - nbformat ; extra == 'docs' + - numpydoc ; extra == 'docs' + - pandas-datareader ; extra == 'docs' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/26/96/92119e6b279a88547a51eb99726ecae1ada839bf4fbcc2856503e2558e80/blosc2-4.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: blosc2 + version: 4.3.3 + sha256: ef89bc8fadf6e586fa38dfa998f8b6091aae653c41ef85232814e59ed6e9db85 + requires_dist: + - numpy>=1.26 + - ndindex + - msgpack + - numexpr>=2.14.1 ; platform_machine != 'wasm32' + - pydantic + - requests + - threadpoolctl ; platform_machine != 'wasm32' + - pyarrow ; extra == 'parquet' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/27/ae/defd665dbbeb2fffa077491365ed160acaec49274ce8d4b979f55db71f18/ndindex-1.10.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: ndindex + version: 1.10.1 + sha256: 03cf1e6cdac876bd8fc92d3b65bb223496b1581d10eab3ba113f7c195121a959 + requires_dist: + - numpy ; extra == 'arrays' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/36/e1/84f6ede106afadc0e2c6a43d35b96ed6909149023f9a6a929175ad13a503/blosc2-4.3.3-cp312-cp312-macosx_10_13_x86_64.whl + name: blosc2 + version: 4.3.3 + sha256: b5ca83094ce1e2885f4a44eae6e2689959af67aee22b3f69af64447206dde3d9 + requires_dist: + - numpy>=1.26 + - ndindex + - msgpack + - numexpr>=2.14.1 ; platform_machine != 'wasm32' + - pydantic + - requests + - threadpoolctl ; platform_machine != 'wasm32' + - pyarrow ; extra == 'parquet' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + name: requests-toolbelt + version: 1.0.0 + sha256: cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06 + requires_dist: + - requests>=2.0.1,<3.0.0 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- pypi: https://files.pythonhosted.org/packages/42/c2/b602d2a5bbaaf9db1cff035ee6ddea76938c0b25ac1e6ac8ca288a073b47/otter_report-0.4.0-py2.py3-none-any.whl + name: otter-report + version: 0.4.0 + sha256: 8728862532c3cc5a385bf72200922e78d17dc58bcaf5777858311523ac3153c2 + requires_dist: + - tabulate + - jinja2>=3.1.4 + - markdown + - pyyaml>=6.0 + - matplotlib + - bumpversion>=0.6.0 ; extra == 'dev' + - wheel>=0.42 ; extra == 'dev' + - watchdog>=2.0 ; extra == 'dev' + - flake8>=6.0.0 ; extra == 'dev' + - tox>=3.28,<5 ; extra == 'dev' + - coverage>=6.5,<8 ; extra == 'dev' + - cryptography>=43.0.1 ; extra == 'dev' + - pygments>=2.15.0 ; extra == 'dev' + - sphinx>=4.0 ; extra == 'docs' + - numpydoc ; extra == 'docs' + - sphinx-multiversion ; extra == 'docs' + - kentigern ; extra == 'docs' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/45/93/b6760dd1904c2a498e5f43d1bb436f59383c3ddea3815f1461dfaa259373/numexpr-2.14.1-cp312-cp312-macosx_11_0_arm64.whl + name: numexpr + version: 2.14.1 + sha256: 47041f2f7b9e69498fb311af672ba914a60e6e6d804011caacb17d66f639e659 + requires_dist: + - numpy>=1.23.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/46/75/505cd72dfde3a1d7e719f840a2aa656a8c6b4c7b1b8c604a2d587cb1fc52/precession-2.1.1-py3-none-any.whl + name: precession + version: 2.1.1 + sha256: c58cbe813cb14acba7a27217b8aaf0f9555fee52ed68949dd578dee73d60d1b4 + requires_dist: + - numpy + - scipy>=1.8.0 +- pypi: https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl + name: inflection + version: 0.5.1 + sha256: f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2 + requires_python: '>=3.5' +- pypi: https://files.pythonhosted.org/packages/59/f3/77f85bfac22ee84b231ee8b147cdd948f679edf7d5a622acf9169d2a9b63/juliacall-0.9.34-py3-none-any.whl + name: juliacall + version: 0.9.34 + sha256: ac75b718a25357343d9be86981e5e5b7551621f3d2d5f58a815b852793857f41 + requires_dist: + - juliapkg>=0.1.21,<0.2 + requires_python: '>=3.10,<4' +- pypi: https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pydantic-core + version: 2.46.4 + sha256: 926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/65/90/774ddd08b2a1b41faa56da111f0fbfeb4f17ee537214c938ef41d61af949/ndindex-1.10.1-cp312-cp312-macosx_10_13_x86_64.whl + name: ndindex + version: 1.10.1 + sha256: 87f83e8c35a7f49a68cd3a3054c406e6c22f8c1315f3905f7a778c657669187e + requires_dist: + - numpy ; extra == 'arrays' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/66/8f/2515bd2f110f6316f39568e25943577effffa5283b6376969e8277ba330d/sxs-2025.0.12-py3-none-any.whl + name: sxs + version: 2025.0.12 + sha256: 96bf016c94505cbd28d29ac4d6b3ff95c7ff7f5f142a2ca38a6eb8e926f24bbf + requires_dist: + - h5py>=3 + - inflection>=0.5.1 + - juliacall>=0.9.20 + - numba>=0.55 ; implementation_name == 'cpython' + - numpy>=1.25 + - packaging + - pandas>=1.1.2 + - pytz>=2020.1 + - quaternionic>=1.0.15 + - requests>=2.24.0 + - scipy>=1.13 + - spherical>=1.0.15 + - sxscatalog>=3.0.14 + - tqdm>=4.63.1 + - urllib3>=1.25.10 + - mkdocs ; extra == 'docs' + - mkdocs-jupyter ; extra == 'docs' + - mkdocs-material ; extra == 'docs' + - mkdocstrings-python ; extra == 'docs' + - ipykernel>=6.29 ; extra == 'ecosystem' + - ipywidgets>=8.0 ; extra == 'ecosystem' + - jupyterlab>=4.2 ; extra == 'ecosystem' + - line-profiler>=3.0.2 ; extra == 'ecosystem' + - matplotlib>=2.1.1 ; extra == 'ecosystem' + - memory-profiler>=0.57.0 ; extra == 'ecosystem' + - numpy-quaternion>=2023.0.4 ; extra == 'ecosystem' + - numpy>=1.20,<2.0 ; extra == 'ecosystem' + - qgridnext>=2.0 ; extra == 'ecosystem' + - rise>=5.6.1 ; extra == 'ecosystem' + - scri>=2020.8.18 ; sys_platform != 'win32' and extra == 'ecosystem' + - seaborn>=0.13 ; extra == 'ecosystem' + - spinsfast>=2022 ; sys_platform != 'win32' and extra == 'ecosystem' + - sympy>=1.6.2 ; extra == 'ecosystem' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/66/92/8e7104d2cf40ba2f88528c01e8a063aba7b223a21c0310fcf043b441f5da/sxscatalog-3.0.28-py3-none-any.whl + name: sxscatalog + version: 3.0.28 + sha256: 622c8c52f93d744e3464c72ac087bed85df7e44908c19b0416db7afd970e9fa2 + requires_dist: + - numpy + - packaging + - pandas + - requests + - tqdm + - bs4 ; extra == 'scrape-rit' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/6d/a3/e2d6b17b02b5c52ce6c68fce7f2f190e796c2c1c5419e675f6a947fdb78c/qnm-0.4.4-py3-none-any.whl + name: qnm + version: 0.4.4 + sha256: 63711c37ff4847c8cb59e6266da5baf81f88cc6ab728f40fc3fe39a3025f6252 + requires_dist: + - numpy + - scipy + - numba + - tqdm +- pypi: https://files.pythonhosted.org/packages/6f/33/81570e825bdb2c0d7fa705087b704007bb7898c7dbb7a64f868da59252b3/pyseobnr-0.3.6.tar.gz + name: pyseobnr + version: 0.3.6 + sha256: 46508432709e637e6661252b55675bfb002a4425b770bb94b0bb4194ccdc5b97 + requires_dist: + - numpy>=1.23.0 + - scipy>=1.8.0 + - h5py + - numexpr + - numba + - qnm + - scri + - pygsl-lite + - lalsuite + - importlib-resources ; python_full_version < '3.10' + - bilby ; extra == 'checks' + - gwsurrogate ; extra == 'checks' + - pathos ; extra == 'checks' + - scikit-optimize ; extra == 'checks' + - matplotlib ; extra == 'checks' + - nbsphinx ; extra == 'docs' + - numpydoc ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - sphinx-tabs ; extra == 'docs' + - cython ; extra == 'docs' + - sphinx-gallery ; extra == 'docs' + - jupytext ; extra == 'docs' + - jupyterlab ; extra == 'docs' + - pandas ; extra == 'docs' + - pyarrow ; extra == 'docs' + - seaborn ; extra == 'docs' + - pycbc ; extra == 'docs' + - astropy ; extra == 'docs' + - gwpy ; extra == 'docs' + - matplotlib ; extra == 'docs' + - pytest ; extra == 'tests' + - pytest-sugar ; extra == 'tests' + - pandas ; extra == 'tests' + - pyarrow ; extra == 'tests' + - pycbc ; extra == 'tests' + - gwpy ; extra == 'tests' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl + name: tinydb + version: 4.8.2 + sha256: f97030ee5cbc91eeadd1d7af07ab0e48ceb04aa63d4a983adbaca4cba16e86c3 + requires_python: '>=3.8,<4.0' +- pypi: https://files.pythonhosted.org/packages/78/74/6568c8d3aabf9982ab89fe3e378afbd7aad4894bde4570991a3246169ef4/tables-3.11.1-cp311-abi3-macosx_11_0_arm64.whl + name: tables + version: 3.11.1 + sha256: f0367d2e3df0f10ea63ccf4279f3fe58e32ec481767320301a483e2b3cd83efc + requires_dist: + - numpy>=1.20.0 + - numexpr>=2.6.2 + - packaging + - py-cpuinfo + - blosc2>=2.3.0 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + name: annotated-types + version: 0.7.0 + sha256: 1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 + requires_dist: + - typing-extensions>=4.0.0 ; python_full_version < '3.9' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/7d/4a/75aadc3b17430d4d9f3ad7bf0332a22b7ef78312e2b5b70774d2a301b9ec/spherical-1.0.18-py3-none-any.whl + name: spherical + version: 1.0.18 + sha256: 4ed6ccc3964c5338b197f70e2c68e36e73fea9da7b3f53c9f24d6922f687242b + requires_dist: + - numba>=0.55 ; implementation_name == 'cpython' + - numpy>=1.20 + - quaternionic>=1.0 + - scipy>=1.5 + - spinsfast>=104.2020.8 ; sys_platform != 'win32' + - mkdocs ; extra == 'docs' + - mktheapidocs ; extra == 'docs' + - pymdown-extensions ; extra == 'docs' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl + name: flask + version: 3.1.3 + sha256: f4bcbefc124291925f1a26446da31a5178f9483862233b23c0c96a20701f670c + requires_dist: + - blinker>=1.9.0 + - click>=8.1.3 + - importlib-metadata>=3.6.0 ; python_full_version < '3.10' + - itsdangerous>=2.2.0 + - jinja2>=3.1.2 + - markupsafe>=2.1.1 + - werkzeug>=3.1.0 + - asgiref>=3.2 ; extra == 'async' + - python-dotenv ; extra == 'dotenv' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl + name: filelock + version: 3.29.0 + sha256: 96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/81/68/dddd76117df2ef14c943c6bbb6618be5c9401280046f4ddfc9fb4596a1b8/statsmodels-0.14.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: statsmodels + version: 0.14.6 + sha256: 19b58cf7474aa9e7e3b0771a66537148b2df9b5884fbf156096c0e6c1ff0469d + requires_dist: + - numpy>=1.22.3,<3 + - scipy>=1.8,!=1.9.2 + - pandas>=1.4,!=2.1.0 + - patsy>=0.5.6 + - packaging>=21.3 + - cython>=3.0.10 ; extra == 'build' + - cython>=3.0.10 ; extra == 'develop' + - cython>=3.0.10,<4 ; extra == 'develop' + - setuptools-scm[toml]~=8.0 ; extra == 'develop' + - matplotlib>=3 ; extra == 'develop' + - colorama ; extra == 'develop' + - joblib ; extra == 'develop' + - jinja2 ; extra == 'develop' + - pytest>=7.3.0,<8 ; extra == 'develop' + - pytest-randomly ; extra == 'develop' + - pytest-xdist ; extra == 'develop' + - pytest-cov ; extra == 'develop' + - pywinpty ; os_name == 'nt' and extra == 'develop' + - flake8 ; extra == 'develop' + - isort ; extra == 'develop' + - sphinx ; extra == 'docs' + - nbconvert ; extra == 'docs' + - jupyter-client ; extra == 'docs' + - ipykernel ; extra == 'docs' + - matplotlib ; extra == 'docs' + - nbformat ; extra == 'docs' + - numpydoc ; extra == 'docs' + - pandas-datareader ; extra == 'docs' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl + name: seaborn + version: 0.13.2 + sha256: 636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987 + requires_dist: + - numpy>=1.20,!=1.24.0 + - pandas>=1.2 + - matplotlib>=3.4,!=3.6.1 + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - flake8 ; extra == 'dev' + - mypy ; extra == 'dev' + - pandas-stubs ; extra == 'dev' + - pre-commit ; extra == 'dev' + - flit ; extra == 'dev' + - numpydoc ; extra == 'docs' + - nbconvert ; extra == 'docs' + - ipykernel ; extra == 'docs' + - sphinx<6.0.0 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-issues ; extra == 'docs' + - sphinx-design ; extra == 'docs' + - pyyaml ; extra == 'docs' + - pydata-sphinx-theme==0.10.0rc2 ; extra == 'docs' + - scipy>=1.7 ; extra == 'stats' + - statsmodels>=0.12 ; extra == 'stats' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + name: juliapkg + version: 0.1.23 + sha256: 195eb0986d83c7e4df7781290d1158e5dd8809dada634ff2e8196ea16608f1a0 + requires_dist: + - filelock>=3.16,<4.0 + - semver>=3.0,<4.0 + - tomli>=2.0,<3.0 + - tomlkit>=0.13.3,<0.15 + - click>=8.0,<9.0 ; extra == 'cli' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + name: plotly + version: 6.7.0 + sha256: ac8aca1c25c663a59b5b9140a549264a5badde2e057d79b8c772ae2920e32ff0 + requires_dist: + - narwhals>=1.15.1 + - packaging + - anywidget ; extra == 'dev' + - build ; extra == 'dev' + - colorcet ; extra == 'dev' + - fiona<=1.9.6 ; python_full_version < '3.9' and extra == 'dev' + - geopandas ; extra == 'dev' + - inflect ; extra == 'dev' + - jupyterlab ; extra == 'dev' + - kaleido>=1.1.0 ; extra == 'dev' + - numpy>=1.22 ; extra == 'dev' + - orjson ; extra == 'dev' + - pandas ; extra == 'dev' + - pdfrw ; extra == 'dev' + - pillow ; extra == 'dev' + - plotly-geo ; extra == 'dev' + - polars[timezone] ; extra == 'dev' + - pyarrow ; extra == 'dev' + - pyshp ; extra == 'dev' + - pytest ; extra == 'dev' + - pytz ; extra == 'dev' + - requests ; extra == 'dev' + - ruff==0.11.12 ; extra == 'dev' + - scikit-image ; extra == 'dev' + - scipy ; extra == 'dev' + - shapely ; extra == 'dev' + - statsmodels ; extra == 'dev' + - vaex ; python_full_version < '3.10' and extra == 'dev' + - xarray ; extra == 'dev' + - build ; extra == 'dev-build' + - jupyterlab ; extra == 'dev-build' + - pytest ; extra == 'dev-build' + - requests ; extra == 'dev-build' + - ruff==0.11.12 ; extra == 'dev-build' + - pytest ; extra == 'dev-core' + - requests ; extra == 'dev-core' + - ruff==0.11.12 ; extra == 'dev-core' + - anywidget ; extra == 'dev-optional' + - build ; extra == 'dev-optional' + - colorcet ; extra == 'dev-optional' + - fiona<=1.9.6 ; python_full_version < '3.9' and extra == 'dev-optional' + - geopandas ; extra == 'dev-optional' + - inflect ; extra == 'dev-optional' + - jupyterlab ; extra == 'dev-optional' + - kaleido>=1.1.0 ; extra == 'dev-optional' + - numpy>=1.22 ; extra == 'dev-optional' + - orjson ; extra == 'dev-optional' + - pandas ; extra == 'dev-optional' + - pdfrw ; extra == 'dev-optional' + - pillow ; extra == 'dev-optional' + - plotly-geo ; extra == 'dev-optional' + - polars[timezone] ; extra == 'dev-optional' + - pyarrow ; extra == 'dev-optional' + - pyshp ; extra == 'dev-optional' + - pytest ; extra == 'dev-optional' + - pytz ; extra == 'dev-optional' + - requests ; extra == 'dev-optional' + - ruff==0.11.12 ; extra == 'dev-optional' + - scikit-image ; extra == 'dev-optional' + - scipy ; extra == 'dev-optional' + - shapely ; extra == 'dev-optional' + - statsmodels ; extra == 'dev-optional' + - vaex ; python_full_version < '3.10' and extra == 'dev-optional' + - xarray ; extra == 'dev-optional' + - numpy>=1.22 ; extra == 'express' + - kaleido>=1.1.0 ; extra == 'kaleido' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl + name: werkzeug + version: 3.1.8 + sha256: 63a77fb8892bf28ebc3178683445222aa500e48ebad5ec77b0ad80f8726b1f50 + requires_dist: + - markupsafe>=2.1.1 + - watchdog>=2.3 ; extra == 'watchdog' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl + name: requests-pelican + version: 0.2.0 + sha256: e4f4aab8c9a6c1f6a72271ce5e78836161159e52f65b791746a83931c835f26c + requires_dist: + - requests>=2.32.3 + - furo ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-automodapi ; extra == 'docs' + - requests-scitokens>=0.1.0 ; extra == 'scitokens' + - pytest>=3.9.1 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-remotedata ; extra == 'test' + - requests-mock ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/99/29/c2dc674ea70fa9a4819417289a9c0d3e4780835beeed573eb66964cfb763/tables-3.11.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: tables + version: 3.11.1 + sha256: 1e78fe190fdeb4afe430b79651bae2a4f341904eb85aa8dbafe5f1caee1c7f67 + requires_dist: + - numpy>=1.20.0 + - numexpr>=2.6.2 + - packaging + - py-cpuinfo + - blosc2>=2.3.0 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl + name: tabulate + version: 0.10.0 + sha256: f0b0622e567335c8fabaaa659f1b33bcb6ddfe2e496071b743aa113f8774f2d3 + requires_dist: + - wcwidth ; extra == 'widechars' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/9d/20/c473fc04a371f5e2f8c5749e04505c13e7a8ede27c09e9f099b2ad6f43d6/numexpr-2.14.1-cp312-cp312-macosx_10_13_x86_64.whl + name: numexpr + version: 2.14.1 + sha256: 91ebae0ab18c799b0e6b8c5a8d11e1fa3848eb4011271d99848b297468a39430 + requires_dist: + - numpy>=1.23.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + name: gitdb + version: 4.0.12 + sha256: 67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf + requires_dist: + - smmap>=3.0.1,<6 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + name: semver + version: 3.0.4 + sha256: 9c824d87ba7f7ab4a1890799cec8596f15c1241cb473404ea1cb0c55e4b04746 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/a8/30/12c87de87d6a3b523996737b97ba2e75972afac3c804249e5e61036e03d7/spinsfast-2022.4.10.tar.gz + name: spinsfast + version: 2022.4.10 + sha256: a404c91d34e6df54741c925416d6a5be89a9801446af3a0e55280756e491baad +- pypi: https://files.pythonhosted.org/packages/ad/28/9f3700cb784c0f0475de7074ed489702d5c6fb63a3df56b4cb4333b055fc/liquidpy-0.9.0-py3-none-any.whl + name: liquidpy + version: 0.9.0 + sha256: df590d9cf89599cf3ee1b017f77e98e1586022685f7d55c9fb2820095e134aa8 + requires_dist: + - jinja2>=3,<4 + - markdown>=3.5 ; extra == 'extra' + - python-dateutil>=2.8 ; extra == 'extra' + - python-frontmatter>=1.0 ; extra == 'extra' + - python-slugify>=8 ; extra == 'extra' + - regex>=2024.11 ; extra == 'extra' + - toml>=0.10 ; extra == 'extra' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b3/8a/eafc962e29c7fe800c702b4ae09cc358f1cbe40089e7a8cdac4f5b4c8c7a/requests_scitokens-0.2.1-py3-none-any.whl + name: requests-scitokens + version: 0.2.1 + sha256: a7f2b826500ea2e2f311bbe10fb99c6a981ed40975459d552e681d36ca19acfb + requires_dist: + - requests>=2.32.0 + - scitokens>=1.8 + - pytest>=3.1.0 ; extra == 'test' + - pytest-cov>=2.4.0 ; extra == 'test' + - requests-mock ; extra == 'test' + - furo ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-automodapi ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-design ; extra == 'docs' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl + name: tomlkit + version: 0.14.0 + sha256: 592064ed85b40fa213469f81ac584f67a4f2992509a7c3ea2d632208623a3680 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/ba/b2/138065f2c50fd66b89623a5ee45d43d2341cfede4d7e0f7292075953ff12/numpy_quaternion-2024.0.13-cp312-cp312-macosx_10_13_x86_64.whl + name: numpy-quaternion + version: 2024.0.13 + sha256: 95e35c3c1033984cdc0177c723f084c0e617d9065eb071287aae35b9d7f8d0f5 + requires_dist: + - numpy>=1.25,<3 + - scipy>=1.5,<2 + - mkdocs-material ; extra == 'docs' + - mkdocstrings-python ; extra == 'docs' + - pymdown-extensions ; extra == 'docs' + requires_python: '>=3.10,<3.15' +- pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl + name: asimov + version: 0.6.1 + sha256: 0bd278ed86e6f5cec0b5cfcdb4f058eaac5499856e102276af3d54518dba2e7c + requires_dist: + - click + - gitpython + - htcondor + - ligo-gracedb + - liquidpy + - networkx + - numpy + - otter-report>=0.3.3 + - python-gitlab + - pytz + - pyyaml + - requests + - gwpy + - lscsoft-glue>=2.0.0 + - igwn-auth-utils>=0.2.1 + - flask + - tinydb + - pillow>=10.2.0 +- pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl + name: pesummary + version: 1.0.0 + sha256: d65d8dd6937ae5eff7ecb93b5c0a5568ba9f6f06cf74150aeffc37c0cc8797ba + requires_dist: + - astropy>=3.2.3 + - corner + - deepdish + - gwpy>=2.1.2 + - h5py + - lalsuite>=7.0.0 + - ligo-gracedb + - matplotlib + - numpy>=1.15.4 + - pandas + - pygments + - plotly + - pillow + - seaborn>=0.11.0 + - statsmodels + - scipy>=1.8.0 + - tables + - tqdm>=4.44.0 + - ipykernel ; extra == 'docs' + - jinja2==3.0.3 ; extra == 'docs' + - nbsphinx ; extra == 'docs' + - requests ; extra == 'docs' + - sphinx>=1.2.2 ; extra == 'docs' + - sphinx-argparse ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - sphinx-panels ; extra == 'docs' + - sphinxcontrib-programoutput ; extra == 'docs' + - bilby>=1.1.1 ; extra == 'extras' + - coloredlogs ; extra == 'extras' + - gitpython ; extra == 'extras' + - gwosc ; extra == 'extras' + - jupyter-client ; extra == 'extras' + - ligo-em-bright>=0.1.2 ; extra == 'extras' + - ligo-skymap ; extra == 'extras' + - nbformat ; extra == 'extras' + - pepredicates>=0.0.3 ; extra == 'extras' + - flake8>=3.7.0 ; extra == 'lint' + - flake8-bandit ; extra == 'lint' + - astropy>=3.2.3,!=4.3.0 ; extra == 'test' + - beautifulsoup4 ; extra == 'test' + - bilby-pipe ; extra == 'test' + - coverage ; extra == 'test' + - coverage-badge ; extra == 'test' + - cython>=0.28.5 ; extra == 'test' + - markupsafe==2.0.1 ; extra == 'test' + - pycbc>=2.0.3 ; extra == 'test' + - pytest>=3.0.0 ; extra == 'test' + - pytest-xdist ; extra == 'test' + - pytest-rerunfailures ; extra == 'test' + - pytest-cov ; extra == 'test' + - requests ; extra == 'test' + - testfixtures ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl + name: scri + version: 2024.0.11 + sha256: ff640c6dde5a7dd41cc85c24243f3e6c01cbd66b3115ecc0a3c5c09c012a9228 + requires_dist: + - h5py>=3 + - numba>=0.60.0 + - numpy-quaternion>=2024.0.2 + - numpy>=2.0 + - scipy>=1.13 + - spherical-functions>=2022.4 + - spinsfast>=2022.4 + - sxs>=2022.4.0 + - tqdm>=4.63.1 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl + name: smmap + version: 5.0.3 + sha256: c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl + name: pydantic-core + version: 2.46.4 + sha256: 3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2 + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl + name: deepdish + version: 0.3.7 + sha256: 272d6b075239efe66dd3e6d4e89bb6b0ffe68b0d9ce4f823e4e1c4549c4a294a + requires_dist: + - numpy + - scipy + - tables + - skimage ; extra == 'image' +- pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl + name: spherical-functions + version: 2023.0.2 + sha256: cb3a7fbbf3728893a5c230226db8c4ce86ce4208a2453591043a7b3cccf55e64 + requires_dist: + - numba>=0.55 + - numpy-quaternion>=2022 + - numpy>=1.20 + - scipy>=1.0 + - spinsfast>=2022 + - black>=22.1 ; extra == 'dev' + - line-profiler>=3.5.0 ; extra == 'dev' + - pytest-cov>=2.10.1 ; extra == 'dev' + - pytest>=7.0 ; extra == 'dev' + - sympy>=1.10 ; extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d9/43/560e9ba23c02c904b5934496486d061bcb14cd3ebba2e3cf0e2dccb6c22b/numexpr-2.14.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: numexpr + version: 2.14.1 + sha256: eee6d4fbbbc368e6cdd0772734d6249128d957b3b8ad47a100789009f4de7083 + requires_dist: + - numpy>=1.23.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/da/cc/ca6129956980fc6148d6b1983bc5dfc302f73bc734b376069eb560d170b6/blosc2-4.3.3-cp312-cp312-macosx_11_0_arm64.whl + name: blosc2 + version: 4.3.3 + sha256: 2153d08ba45f4a7bb632fa1eac9a7204b438336d7c7188edf3162f4a4087d719 + requires_dist: + - numpy>=1.26 + - ndindex + - msgpack + - numexpr>=2.14.1 ; platform_machine != 'wasm32' + - pydantic + - requests + - threadpoolctl ; platform_machine != 'wasm32' + - pyarrow ; extra == 'parquet' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + name: typing-inspection + version: 0.4.2 + sha256: 4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 + requires_dist: + - typing-extensions>=4.12.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/dc/9c/6a64269df4f032d883c5da72052850ef94fb79743b70606719c1ca579c79/numpy_quaternion-2024.0.13-cp312-cp312-macosx_11_0_arm64.whl + name: numpy-quaternion + version: 2024.0.13 + sha256: e64b15888c2d363fb1bd289f8d6f9785658edefe15acfc317395faca223a0ebb + requires_dist: + - numpy>=1.25,<3 + - scipy>=1.5,<2 + - mkdocs-material ; extra == 'docs' + - mkdocstrings-python ; extra == 'docs' + - pymdown-extensions ; extra == 'docs' + requires_python: '>=3.10,<3.15' +- pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl + name: markdown + version: 3.10.2 + sha256: e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36 + requires_dist: + - coverage ; extra == 'testing' + - pyyaml ; extra == 'testing' + - mkdocs>=1.6 ; extra == 'docs' + - mkdocs-nature>=0.6 ; extra == 'docs' + - mdx-gh-links>=0.2 ; extra == 'docs' + - mkdocstrings[python]>=0.28.3 ; extra == 'docs' + - mkdocs-gen-files ; extra == 'docs' + - mkdocs-section-index ; extra == 'docs' + - mkdocs-literate-nav ; extra == 'docs' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/df/b1/3e3144c3ada2ae1a60a378396629064ef14e425e356c8e7c1db3a50ef351/python_gitlab-8.3.0-py3-none-any.whl + name: python-gitlab + version: 8.3.0 + sha256: 7aace3585d57ee97ebcb74bc776f30af3e861e285290082a91646348aca3f22a + requires_dist: + - requests>=2.32.0 + - requests-toolbelt>=1.0.0 + - argcomplete>=1.10.0,<3 ; extra == 'autocompletion' + - pyyaml>=6.0.1 ; extra == 'yaml' + - gql[httpx]>=3.5.0,<5 ; extra == 'graphql' + requires_python: '>=3.10.0' +- pypi: https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl + name: py-cpuinfo + version: 9.0.0 + sha256: 859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5 +- pypi: https://files.pythonhosted.org/packages/e3/47/a8d68aed3f6cb55bae90f504cd5ea3698a923c5fb6e9690726359e28eb1c/asimov_gwdata-0.7.1-py3-none-any.whl + name: asimov-gwdata + version: 0.7.1 + sha256: 1e9ffd306550adec215d7b05530e3616efceda7fe422ca16f6b7afcea867bffc + requires_dist: + - gwosc + - asimov>=0.4.0 + - pesummary + - numpy + - requests + - click + - igwn-auth-utils + - requests-pelican + - requests-scitokens>=0.1.0 + - gwpy + - matplotlib + - otter-report + - sphinx ; extra == 'docs' + - kentigern ; extra == 'docs' + - rift ; extra == 'rift' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/ed/ee/a423e857f5b45da3adc8ddbcfbfd4a0e9a047edce3915d3e3d6e189b6bd9/ndindex-1.10.1-cp312-cp312-macosx_11_0_arm64.whl + name: ndindex + version: 1.10.1 + sha256: cf9e05986b2eb8c5993bce0f911d6cedd15bda30b5e35dd354b1ad1f4cc3599d + requires_dist: + - numpy ; extra == 'arrays' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f1/70/ba4b949bdc0490ab78d545459acd7702b211dfccf7eb89bbc1060f52818d/patsy-1.0.2-py2.py3-none-any.whl + name: patsy + version: 1.0.2 + sha256: 37bfddbc58fcf0362febb5f54f10743f8b21dd2aa73dec7e7ef59d1b02ae668a + requires_dist: + - numpy>=1.4 + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - scipy ; extra == 'test' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/fa/bb/4a9cde6628563388db26fa86c64adb0f2475a757e72af0ec185fd520b72f/tables-3.11.1-cp311-abi3-macosx_10_9_x86_64.whl + name: tables + version: 3.11.1 + sha256: eb30684c42a77bbecdef2b9c763c4372b0ddc9cc5bd8b2a2055f2042eee67217 + requires_dist: + - numpy>=1.20.0 + - numexpr>=2.6.2 + - packaging + - py-cpuinfo + - blosc2>=2.3.0 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + name: pydantic + version: 2.13.4 + sha256: 45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba + requires_dist: + - annotated-types>=0.6.0 + - pydantic-core==2.46.4 + - typing-extensions>=4.14.1 + - typing-inspection>=0.4.2 + - email-validator>=2.0.0 ; extra == 'email' + - tzdata ; python_full_version >= '3.9' and sys_platform == 'win32' and extra == 'timezone' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl + name: quaternionic + version: 1.0.17 + sha256: 5cb6d7948dc2a782575b0582ced8ea07ccb41b615c15cf14ea4d058434524252 + requires_dist: + - numba>=0.55 ; implementation_name == 'cpython' + - numpy>=1.20 + - scipy>=1.5 + - mkdocs ; extra == 'docs' + - mktheapidocs ; extra == 'docs' + - pymdown-extensions ; extra == 'docs' + requires_python: '>=3.8' diff --git a/pixi.toml b/pixi.toml new file mode 100644 index 000000000..5a30a9066 --- /dev/null +++ b/pixi.toml @@ -0,0 +1,89 @@ +# Root pixi project for RIFT development and SWIG compatibility testing. +# +# Default local environment: +# pixi install +# pixi run install-rift +# pixi run import-check +# +# SWIG comparison environments: +# pixi run -e swig-pre44 swig-version +# pixi run -e swig-post44 swig-version +# pixi run -e swig-pre44 import-check +# pixi run -e swig-post44 import-check +# +# RIFT is sensitive to generated SWIG bindings. Keep the default development +# environment on SWIG <4.4.0, but preserve a >=4.4.0 lane for deployment checks. + +[workspace] +name = "rift-dev" +version = "0.0.18.0rc0" +description = "Development and CI environments for RIFT." +authors = ["RIFT developers"] +channels = ["conda-forge"] +platforms = ["linux-64", "osx-64", "osx-arm64"] + +[dependencies] +python = ">=3.11,<3.13" +pip = "*" +setuptools = "*" +wheel = "*" +pytest = "*" +coverage = "*" +natsort = "*" +numpy = "*" +h5py = "*" +numba = ">=0.56" +pandas = "*" +corner = "*" +scikit-learn = "*" +matplotlib = "*" +lalsuite = ">=7.26" +gwdatafind = ">=1.2" +igwn-segments = "*" +igwn-ligolw = "*" +six = "*" +"ligo.skymap" = "*" +gwpy = "*" +scipy = ">=1.9.3" +htcondor = "*" +pybind11 = ">=2.12" +gsl = "*" +hydra-core = "*" +omegaconf = "*" +pyyaml = "*" + +[pypi-dependencies] +# requirements.txt currently spells this as precession[chip_avg], but the +# published PyPI metadata exposes no chip_avg extra; the base package is what +# pip/pixi can actually resolve. +precession = "*" +pyseobnr = "*" +asimov = ">=0.5.6" +asimov-gwdata = ">=0.4.0" + +[feature.swig-pre44.dependencies] +swig = "<4.4.0" + +[feature.swig-post44.dependencies] +swig = ">=4.4.0" + +[environments] +default = ["swig-pre44"] +swig-pre44 = ["swig-pre44"] +swig-post44 = ["swig-post44"] + +[activation.env] +GW_SURROGATE = "" +RIFT_ROOT = "$PIXI_PROJECT_ROOT" +RIFT_PY = "$PIXI_PROJECT_ROOT/MonteCarloMarginalizeCode/Code" +RIFT_BIN = "$PIXI_PROJECT_ROOT/MonteCarloMarginalizeCode/Code/bin" +PYTHONPATH = "$PIXI_PROJECT_ROOT/MonteCarloMarginalizeCode/Code:$PYTHONPATH" +PATH = "$PIXI_PROJECT_ROOT/MonteCarloMarginalizeCode/Code/bin:$PATH" + +[tasks] +install-rift = "python -m pip install --no-deps --editable ." +swig-version = "swig -version" +import-check = "python .travis/test-all-mod.py" +help-check = "bash .travis/test-all-bin.sh" +sim-manager-check = "python MonteCarloMarginalizeCode/Code/test/test_simulation_manager.py -v" +test-likelihood = "python MonteCarloMarginalizeCode/Code/test/test_likelihood.py" From eb7c37da5348717c6dd9db813c4b25e4fb058d0e Mon Sep 17 00:00:00 2001 From: "R. O'Shaughnessy" Date: Tue, 26 May 2026 19:13:34 -0400 Subject: [PATCH 12/32] pixi.toml: work around issue with np version --- pixi.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pixi.toml b/pixi.toml index 5a30a9066..02eb796c4 100644 --- a/pixi.toml +++ b/pixi.toml @@ -30,7 +30,7 @@ wheel = "*" pytest = "*" coverage = "*" natsort = "*" -numpy = "*" +numpy = "<2.0" h5py = "*" numba = ">=0.56" pandas = "*" From 106749f827e0f9be5ee431f969bf98924ea8f52e Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Thu, 28 May 2026 06:27:22 -0400 Subject: [PATCH 13/32] distance-grid: export pure likelihood, fix GMM sampler path, pin LAL env * RIFT/misc/distance_grid.py: build_distance_grid now divides out the distance sampling prior so the exported lnL is L_pure(d) = integral L(d,Omega) pi_Omega dOmega. New column ln_prior_d_sampling carries the per-bin sampling-prior factor so default reconstruction reproduces log_res exactly, while reconstruct_marginal_lnL(grid, ln_prior_d=...) re-marginalizes against any prior of choice. * integrate_likelihood_extrinsic_batchmode: handle mcsamplerEnsemble/GMM _rvs columns (raw integrand/joint_prior/joint_s_prior, not log_*); drop zero-weight samples cleanly instead of raising "missing type". Pass sampler.prior_pdf["distance"] values per-sample. * test/test_distance_grid.py: cover the pure-likelihood property (different priors yield correctly different marginals) and the round trip. * demo/rift/add_distance_grids/validate_distance_grid.py: new stress harness quantifies n_eff vs integral/shape error. * pixi.toml: pin lalsuite==7.25, lalmetaio<=4.0.5 to dodge the SWIG-4.4 cross-module SwigPyObject/LIGOTimeGPS regression (issue #136). Verified end-to-end ILE run produces .dgrid whose reconstruction matches log_res to machine precision. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../Code/RIFT/misc/distance_grid.py | 121 +- .../integrate_likelihood_extrinsic_batchmode | 38 +- .../validate_distance_grid.py | 114 + .../Code/test/test_distance_grid.py | 50 +- pixi.lock | 5342 ++++++----------- pixi.toml | 3 +- 6 files changed, 2242 insertions(+), 3426 deletions(-) create mode 100644 MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/validate_distance_grid.py diff --git a/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_grid.py b/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_grid.py index 7739e6dc9..4e3ebcc6d 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_grid.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_grid.py @@ -1,3 +1,21 @@ +"""Per-intrinsic likelihood-vs-distance export for ILE. + +The exported ``lnL`` is the *pure* extrinsic-marginalized likelihood as a +function of luminosity distance:: + + L_pure(d) = integral L(d, Omega) pi_Omega(Omega) dOmega + +i.e. the distance sampling prior has been divided out. Downstream consumers +can re-marginalize over distance with any prior pi'(d):: + + L_marg' = sum_k exp(lnL[k]) * pi'(dist[k]) * dist_weight[k] + +For convenience the grid also carries ``ln_prior_d_sampling``, the per-bin +log of the distance prior that ILE used while integrating, so the original +marginal likelihood can be reproduced exactly:: + + lnL_marg = logsumexp(lnL + ln_prior_d_sampling + log(dist_weight)) +""" import numpy as np @@ -19,6 +37,7 @@ "eos_index", "dist", "dist_weight", + "ln_prior_d_sampling", ) @@ -39,14 +58,18 @@ def _as_positive_integer(value, default): return value -def _weighted_blocks(distance, probability, n_grid): +def _weighted_blocks(distance, ln_prior_d, probability, n_grid): + """Sort samples by distance, split into n_grid equal-count blocks, and + return per-block (center, mass, width, mean ln-prior).""" order = np.argsort(distance) distance = np.asarray(distance, dtype=float)[order] probability = np.asarray(probability, dtype=float)[order] + ln_prior_d = np.asarray(ln_prior_d, dtype=float)[order] - finite = np.isfinite(distance) & np.isfinite(probability) & (probability > 0) + finite = np.isfinite(distance) & np.isfinite(probability) & (probability > 0) & np.isfinite(ln_prior_d) distance = distance[finite] probability = probability[finite] + ln_prior_d = ln_prior_d[finite] if len(distance) == 0: raise ValueError("no finite positive-weight distance samples to export") @@ -54,10 +77,16 @@ def _weighted_blocks(distance, probability, n_grid): blocks = np.array_split(np.arange(len(distance)), n_grid) grid_dist = np.empty(len(blocks)) grid_mass = np.empty(len(blocks)) + grid_ln_prior = np.empty(len(blocks)) for i, block in enumerate(blocks): - weights = probability[block] - grid_mass[i] = np.sum(weights) - grid_dist[i] = np.sum(distance[block] * weights) / grid_mass[i] + w = probability[block] + grid_mass[i] = np.sum(w) + grid_dist[i] = np.sum(distance[block] * w) / grid_mass[i] + # weighted average of ln_prior_d (in log space, by importance weights): + # log E_w[pi_d] = logsumexp(ln_prior_d + log w) - log sum_w + grid_ln_prior[i] = ( + _logsumexp(ln_prior_d[block] + np.log(w)) - np.log(grid_mass[i]) + ) if len(grid_dist) == 1: width = np.array([max(np.ptp(distance), np.finfo(float).eps)]) @@ -69,30 +98,56 @@ def _weighted_blocks(distance, probability, n_grid): width = np.diff(edges) width = np.maximum(width, np.finfo(float).eps) - return grid_dist, grid_mass, width - - -def build_distance_grid(distance, ln_weights, lnL_marginal, sigmaL, params, n_grid=None): - """Build a distance-extended likelihood grid from weighted ILE samples. - - The exported ``lnL`` is a density in luminosity distance. Therefore - ``sum(exp(lnL) * dist_weight)`` reconstructs the original marginalized - likelihood for this intrinsic point. + return grid_dist, grid_mass, width, grid_ln_prior + + +def build_distance_grid(distance, ln_weights, lnL_marginal, sigmaL, params, + ln_prior_d_at_samples, n_grid=None): + """Build a likelihood-vs-distance grid from weighted ILE samples. + + Parameters + ---------- + distance : array + Per-sample luminosity distances drawn by the ILE sampler. + ln_weights : array + Per-sample log importance weights, ``log L_i + log pi(theta_i) - log q(theta_i)``, + with ``pi`` and ``q`` being the joint prior and proposal used by ILE. + These weights include the distance prior. + lnL_marginal : float + The marginalized lnL the ILE batchmode would report (``log_res + + manual_avoid_overflow_logarithm``). Used as the absolute calibration. + sigmaL : float + ILE's reported lnL uncertainty. Carried verbatim into the grid. + params : dict + Intrinsic parameters to broadcast across the grid rows (mass, spins, + tides, ...). Missing keys default to 0. + ln_prior_d_at_samples : array + Per-sample log of the *distance* prior pi_d(d_i) used by ILE. This + is divided out so the exported ``lnL`` is a pure likelihood, not a + density-times-prior. + n_grid : int, optional + Number of grid bins. Defaults to ``len(distance)``. """ ln_weights = np.asarray(ln_weights, dtype=float) ln_norm = _logsumexp(ln_weights) probability = np.exp(ln_weights - ln_norm) - grid_dist, grid_mass, grid_width = _weighted_blocks(distance, probability, n_grid) + grid_dist, grid_mass, grid_width, grid_ln_prior = _weighted_blocks( + distance, ln_prior_d_at_samples, probability, n_grid) dtype = [(name, float) for name in DISTANCE_GRID_FIELDS] grid = np.zeros(len(grid_dist), dtype=dtype) - grid["lnL"] = lnL_marginal + np.log(grid_mass) - np.log(grid_width) + # Pure likelihood density in d: subtract log mean prior_d in bin so + # exp(lnL) = L_marg * p_post(d) / pi_d(d) = L(d) [extrinsic-marginalized]. + grid["lnL"] = ( + lnL_marginal + np.log(grid_mass) - np.log(grid_width) - grid_ln_prior + ) grid["sigmaL"] = sigmaL grid["dist"] = grid_dist grid["dist_weight"] = grid_width + grid["ln_prior_d_sampling"] = grid_ln_prior for name in DISTANCE_GRID_FIELDS: - if name in {"lnL", "sigmaL", "dist", "dist_weight"}: + if name in {"lnL", "sigmaL", "dist", "dist_weight", "ln_prior_d_sampling"}: continue grid[name] = float(params.get(name, 0.0)) return grid @@ -107,12 +162,26 @@ def load_distance_grid(fname): return np.genfromtxt(fname, names=True) -def reconstruct_marginal_lnL(grid): - if "dist_weight" in grid.dtype.names: - return _logsumexp(grid["lnL"] + np.log(grid["dist_weight"])) - order = np.argsort(grid["dist"]) - if hasattr(np, "trapezoid"): - integral = np.trapezoid(np.exp(grid["lnL"][order]), grid["dist"][order]) - else: - integral = np.trapz(np.exp(grid["lnL"][order]), grid["dist"][order]) - return np.log(integral) +def reconstruct_marginal_lnL(grid, ln_prior_d=None): + """Reconstruct the marginal lnL by integrating exp(lnL)*prior(d) over the + grid. If ``ln_prior_d`` is None and the grid has the ``ln_prior_d_sampling`` + column, that column (the sampling prior) is used. Otherwise integrates + against a flat prior (treats lnL as already-pure). Pass a callable + ``ln_prior_d(d)`` to integrate against a custom distance prior. + """ + names = grid.dtype.names + if "dist_weight" not in names: + # legacy grids without dist_weight: trapezoidal + order = np.argsort(grid["dist"]) + trap = np.trapezoid if hasattr(np, "trapezoid") else np.trapz + return np.log(trap(np.exp(grid["lnL"][order]), grid["dist"][order])) + + log_dw = np.log(grid["dist_weight"]) + if ln_prior_d is not None: + ln_pi = np.asarray(ln_prior_d(grid["dist"]), dtype=float) + return _logsumexp(grid["lnL"] + ln_pi + log_dw) + if "ln_prior_d_sampling" in names: + return _logsumexp(grid["lnL"] + grid["ln_prior_d_sampling"] + log_dw) + # legacy grids with dist_weight but no separate prior column: treat lnL + # as a pre-multiplied density (old format) + return _logsumexp(grid["lnL"] + log_dw) diff --git a/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode b/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode index 15227d153..15fc14a35 100755 --- a/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode +++ b/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode @@ -2013,19 +2013,38 @@ def analyze_event(P_list, indx_event, data_dict, psd_dict, fmax, opts,inv_spec_t else: numpy.savetxt(fname_output_txt, numpy.array([[event_id, m1, m2, P.s1x, P.s1y, P.s1z, P.s2x, P.s2y, P.s2z, P.lambda1, P.lambda2, P.eos_table_index, log_res+manual_avoid_overflow_logarithm, sqrt_var_over_res,sampler.ntotal, neff ]])) #dict_return["convergence_test_results"]["normal_integral]" - # Distance marginal grid. Only if NOT marginalize distance AND use lnL. - # The exported likelihood is a density in dL; integrating it over the - # exported dist_weight column reconstructs the ordinary marginalized lnL. + # Per-intrinsic likelihood-vs-distance grid. Pure extrinsic-marginalized + # likelihood as a function of d_L: divides out the distance sampling + # prior so downstream can re-marginalize with any prior of choice. if opts.output_file and opts.export_marginal_distance_grid and not(opts.distance_marginalization) and opts.internal_use_lnL: from RIFT.misc.distance_grid import build_distance_grid, save_distance_grid fname_output_dgrid = opts.output_file +"_"+str(indx_event)+"_" + ".dgrid" - dL = np.array(sampler._rvs["distance"] ) - if 'log_weights' in sampler._rvs: - ln_wts = np.array(sampler._rvs['log_weights']) # assume present - elif 'log_integrand' in sampler._rvs: - ln_wts = np.array(sampler._rvs["log_integrand"] + sampler._rvs["log_joint_prior"] - sampler._rvs["log_joint_s_prior"]) + dL = np.array(sampler._rvs["distance"]) + rvs = sampler._rvs + if 'log_weights' in rvs: + ln_wts = np.array(rvs['log_weights']) + elif 'log_integrand' in rvs: + ln_wts = np.array(rvs['log_integrand'] + rvs['log_joint_prior'] - rvs['log_joint_s_prior']) + elif 'integrand' in rvs and 'joint_prior' in rvs and 'joint_s_prior' in rvs: + # mcsamplerEnsemble / GMM stores raw (non-log) integrand and priors. + # Drop rejected/out-of-support samples (zero integrand or zero prior + # contribution) by setting log weight to -inf. + integrand = np.asarray(rvs['integrand']) + jp = np.asarray(rvs['joint_prior']) + jsp = np.asarray(rvs['joint_s_prior']) + keep = (integrand > 0) & (jp > 0) & (jsp > 0) + ln_wts = np.full(len(integrand), -np.inf) + ln_wts[keep] = np.log(integrand[keep]) + np.log(jp[keep]) - np.log(jsp[keep]) else: - raise Exception(" distance grid export: missing type") + raise Exception("distance grid export: cannot find weights in sampler._rvs (keys={})".format(list(rvs.keys()))) + # Distance prior at each sample. Use the sampler's stored prior_pdf + # callable; this matches whatever ILE actually integrated against + # (volumetric, pseudo_cosmo, redshift, ...). + prior_pdf_d = sampler.prior_pdf["distance"] + pi_d_samp = np.asarray(prior_pdf_d(dL), dtype=float) + # Guard: prior must be strictly positive at sampled points + pi_d_samp = np.where(pi_d_samp > 0, pi_d_samp, np.finfo(float).tiny) + ln_prior_d_samp = np.log(pi_d_samp) params_out = { "m1": P.m1/lal.MSUN_SI, "m2": P.m2/lal.MSUN_SI, @@ -2047,6 +2066,7 @@ def analyze_event(P_list, indx_event, data_dict, psd_dict, fmax, opts,inv_spec_t log_res + manual_avoid_overflow_logarithm, sqrt_var_over_res, params_out, + ln_prior_d_at_samples=ln_prior_d_samp, n_grid=opts.n_eff, ) save_distance_grid(fname_output_dgrid, dgrid) diff --git a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/validate_distance_grid.py b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/validate_distance_grid.py new file mode 100644 index 000000000..9169996f5 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/validate_distance_grid.py @@ -0,0 +1,114 @@ +"""Stress-test the distance-grid export at realistic n_eff regimes. + +Goals +----- +1. Verify round-trip identity: reconstruct_marginal_lnL(grid) == lnL_marginal, + to machine precision. +2. Verify the *pure* likelihood interpretation: re-integrating against an + alternative distance prior yields the closed-form answer. +3. Quantify how badly the per-bin shape degrades as n_eff drops, since RIFT + routinely runs ILE with low n_eff (50-200) and the user is worried Plan A + may fail catastrophically. + +The synthetic problem mimics ILE's actual setup: + d ~ q(d) (uniform-in-d sampling proposal) + pi_d(d) = 3 d^2 / (d_max^3 - d_min^3) (volumetric prior) + L(d, Omega) = peak * exp(-0.5 ((d - d0)/sigma_d)^2) (no Omega dependence) +The marginal is exp(lnL) integrated against pi_d. +""" +import numpy as np + +from RIFT.misc.distance_grid import ( + build_distance_grid, + reconstruct_marginal_lnL, + _logsumexp, +) + + +def vol_log_prior(d, d_min=1.0, d_max=4000.0): + norm = (d_max**3 - d_min**3) / 3.0 + return 2.0*np.log(d) - np.log(norm) + + +def closed_form_marg(d0, sigma, lnL_peak, d_min, d_max): + """Marginal under volumetric prior, in the wide-support limit.""" + # E[d^2] ~ d0^2 + sigma^2 (for d well inside box) + norm = (d_max**3 - d_min**3) / 3.0 + return lnL_peak + np.log(np.sqrt(2*np.pi)*sigma * (d0**2 + sigma**2)) - np.log(norm) + + +def closed_form_flat(d0, sigma, lnL_peak, d_min, d_max): + """Marginal under flat-in-d prior.""" + return lnL_peak + np.log(np.sqrt(2*np.pi)*sigma / (d_max - d_min)) + + +def synth_trial(n_samp, n_grid, d0, sigma, lnL_peak, d_min, d_max, rng): + distance = rng.uniform(d_min, d_max, size=n_samp) + ln_L = lnL_peak - 0.5*((distance-d0)/sigma)**2 + ln_pi = vol_log_prior(distance, d_min, d_max) + ln_q = -np.log(d_max - d_min) + ln_w = ln_L + ln_pi - ln_q + lnL_marg_mc = _logsumexp(ln_w) - np.log(n_samp) + grid = build_distance_grid(distance, ln_w, lnL_marg_mc, 0.0, {}, + ln_prior_d_at_samples=ln_pi, n_grid=n_grid) + return distance, ln_w, lnL_marg_mc, grid + + +def neff_from_ln_weights(ln_w): + p = np.exp(ln_w - _logsumexp(ln_w)) + return 1.0 / np.sum(p**2) + + +def density_L2_error(grid, d0, sigma, lnL_peak): + """L2 relative error of exp(grid['lnL']) vs the true pure likelihood + L(d) at the bin centers (note: this is exp lnL on its own, not the + posterior density in d).""" + d_g = grid["dist"] + truth = np.exp(lnL_peak - 0.5*((d_g - d0)/sigma)**2) + recov = np.exp(grid["lnL"]) + denom = np.sqrt(np.mean(truth**2)) + return np.sqrt(np.mean((truth - recov)**2)) / max(denom, 1e-300) + + +def main(): + rng = np.random.default_rng(20260528) + d_min, d_max = 1.0, 4000.0 + d0, sigma, lnL_peak = 400.0, 80.0, 37.0 + truth_vol = closed_form_marg(d0, sigma, lnL_peak, d_min, d_max) + truth_flat = closed_form_flat(d0, sigma, lnL_peak, d_min, d_max) + + print(f"closed-form marg (volumetric): {truth_vol:.3f}") + print(f"closed-form marg (flat in d): {truth_flat:.3f}") + print() + print(f"{'N':>6} {'n_grid':>7} {'n_eff':>7} " + f"{'lnL_mc':>10} {'lnL_reco_vol':>13} {'lnL_reco_flat':>14} " + f"{'reco-mc':>9} {'flat-truth':>11} {'L2 shape':>10}") + for N in (50, 100, 200, 500, 2000, 10000, 50000): + n_grid = max(8, min(N//2, 200)) + errs, mc_errs, flat_errs, neffs = [], [], [], [] + for trial in range(50): + _, ln_w, lnL_mc, grid = synth_trial(N, n_grid, d0, sigma, lnL_peak, + d_min, d_max, rng) + lnL_reco_vol = reconstruct_marginal_lnL(grid) + flat = lambda d: -np.log(d_max-d_min) * np.ones_like(np.asarray(d, float)) + lnL_reco_flat = reconstruct_marginal_lnL(grid, ln_prior_d=flat) + errs.append(density_L2_error(grid, d0, sigma, lnL_peak)) + mc_errs.append(lnL_mc - truth_vol) + flat_errs.append(lnL_reco_flat - truth_flat) + neffs.append(neff_from_ln_weights(ln_w)) + last = (lnL_mc, lnL_reco_vol, lnL_reco_flat) + print(f"{N:6d} {n_grid:7d} {np.median(neffs):7.1f} " + f"{last[0]:10.4f} {last[1]:13.4f} {last[2]:14.4f} " + f"{last[1]-last[0]:+9.2e} {np.median(flat_errs):+11.3f} " + f"{np.median(errs):10.3f}") + + print() + print("Round-trip identity (lnL_reco_vol - lnL_mc, should be ~machine eps):") + for n_grid in (4, 8, 32, 200): + _, _, lnL_mc, grid = synth_trial(500, n_grid, d0, sigma, lnL_peak, + d_min, d_max, rng) + print(f" n_grid={n_grid:3d}: {reconstruct_marginal_lnL(grid) - lnL_mc:+.3e}") + + +if __name__ == "__main__": + main() diff --git a/MonteCarloMarginalizeCode/Code/test/test_distance_grid.py b/MonteCarloMarginalizeCode/Code/test/test_distance_grid.py index a21f0cdc4..497da59d2 100644 --- a/MonteCarloMarginalizeCode/Code/test/test_distance_grid.py +++ b/MonteCarloMarginalizeCode/Code/test/test_distance_grid.py @@ -5,11 +5,16 @@ build_distance_grid, load_distance_grid, reconstruct_marginal_lnL, - save_distance_grid, + _logsumexp, ) -def test_distance_grid_reconstructs_marginal_lnL(): +def _volumetric_log_prior(d, d_min=1.0, d_max=4000.0): + norm = (d_max**3 - d_min**3) / 3.0 + return 2.0*np.log(d) - np.log(norm) + + +def test_distance_grid_reconstructs_marginal_lnL_with_sampling_prior(): rng = np.random.default_rng(1234) distance = rng.lognormal(mean=np.log(450.0), sigma=0.22, size=200) ln_weights = -0.5 * ((distance - 430.0) / 35.0) ** 2 @@ -21,6 +26,7 @@ def test_distance_grid_reconstructs_marginal_lnL(): lnL_marginal, sigmaL=0.012, params={"m1": 35.0, "m2": 28.0, "s1z": 0.1, "s2z": -0.2}, + ln_prior_d_at_samples=_volumetric_log_prior(distance), n_grid=40, ) @@ -29,18 +35,22 @@ def test_distance_grid_reconstructs_marginal_lnL(): assert np.all(grid["dist_weight"] > 0) assert np.isclose(reconstruct_marginal_lnL(grid), lnL_marginal) assert np.all(grid["m1"] == 35.0) - assert np.all(grid["m2"] == 28.0) assert np.all(grid["s1z"] == 0.1) - assert np.all(grid["s2z"] == -0.2) def test_distance_grid_roundtrip_preserves_reconstruction(tmp_path): distance = np.linspace(100.0, 900.0, 21) ln_weights = -0.5 * ((distance - 500.0) / 120.0) ** 2 lnL_marginal = -12.5 - grid = build_distance_grid(distance, ln_weights, lnL_marginal, 0.2, {}, n_grid=10) + grid = build_distance_grid( + distance, ln_weights, lnL_marginal, 0.2, {}, + ln_prior_d_at_samples=_volumetric_log_prior(distance), + n_grid=10, + ) - fname = tmp_path / "event_0_.dgrid" + from pathlib import Path + fname = Path(str(tmp_path)) / "event_0_.dgrid" + from RIFT.misc.distance_grid import save_distance_grid save_distance_grid(fname, grid) loaded = load_distance_grid(fname) @@ -48,6 +58,34 @@ def test_distance_grid_roundtrip_preserves_reconstruction(tmp_path): assert np.isclose(reconstruct_marginal_lnL(loaded), lnL_marginal) +def test_exported_lnL_is_pure_likelihood(): + """exp(lnL) is the pure extrinsic-marginalized likelihood density in d; + integrating it against a different distance prior gives a different + marginal.""" + rng = np.random.default_rng(7) + n = 4000 + d_min, d_max = 100.0, 1500.0 + distance = rng.uniform(d_min, d_max, size=n) + ln_L_pure = -0.5 * ((distance - 600.0)/80.0)**2 + 5.0 + ln_pi = _volumetric_log_prior(distance, d_min, d_max) + ln_q = -np.log(d_max - d_min) + ln_w = ln_L_pure + ln_pi - ln_q + lnL_marg_mc = _logsumexp(ln_w) - np.log(n) + grid = build_distance_grid(distance, ln_w, lnL_marg_mc, 0.0, {}, + ln_prior_d_at_samples=ln_pi, n_grid=40) + # default reconstruction matches the original marginal + assert np.isclose(reconstruct_marginal_lnL(grid), lnL_marg_mc) + # reconstruction with a flat-in-d prior gives the pure-likelihood integral + flat_log_prior = lambda d: np.full_like(np.asarray(d, float), -np.log(d_max - d_min)) + lnL_flat = reconstruct_marginal_lnL(grid, ln_prior_d=flat_log_prior) + expected = np.log(np.sqrt(2*np.pi)*80.0*np.exp(5.0)/(d_max - d_min)) + assert abs(lnL_flat - expected) < 0.1, (lnL_flat, expected) + # and is meaningfully different from the volumetric answer + # closed-form ratio at d~600 over [100,1500]: log(d^2*(d_max-d_min)*3/(d_max^3-d_min^3)) + expected_ratio = np.log(600.0**2 * (d_max-d_min) * 3.0 / (d_max**3 - d_min**3)) + assert abs((lnL_flat - lnL_marg_mc) - (-expected_ratio)) < 0.1 + + def test_legacy_distance_grid_without_weights_uses_trapezoid(): dtype = [("lnL", float), ("dist", float)] grid = np.zeros(5, dtype=dtype) diff --git a/pixi.lock b/pixi.lock index a0ebeba77..33cdd9a5a 100644 --- a/pixi.lock +++ b/pixi.lock @@ -46,9 +46,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-3.0.3-hc31b594_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.6.3-ha0b56bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.6.2-ha0b56bc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.3-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/chealpix-3.31.0-h001b3b8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/chealpix-3.31.0-ha55a0e1_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.14.0-py312h8a5da7c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-48.0.0-py312ha4b625e_0.conda @@ -68,10 +68,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/google-crc32c-1.8.0-py312h03f33d3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha4f8f14_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.13.0-nompi_py312hedeef09_100.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.2.0-h15599e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_106.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/healpy-1.19.0-py312hb99e9eb_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_109.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/healpy-1.18.1-py312he9d304c_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-24.12.4-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-classads-24.12.4-hf1419ba_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-cli-24.12.4-py312h7900ff3_0.conda @@ -86,18 +86,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py312h0a2e395_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lal-7.7.0-fftw_py312h3c92f15_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalapps-10.1.0-py312h8a05548_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalburst-2.0.7-py312h4c3975b_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalframe-3.0.7-py312h4c3975b_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-4.1.9-nompi_py312h1d0e7ed_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-data-4.1.9-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinspiral-5.0.3-py312h4c3975b_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalmetaio-4.0.6-py312h4c3975b_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-7.1.1-py312h14108ff_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-data-7.1.1-ha770c72_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-6.2.0-py312hd1ec2bb_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-data-6.2.0-ha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lal-7.6.1-fftw_py312ha96d5c7_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalapps-10.0.2-py312h760c983_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalburst-2.0.6-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalframe-3.0.6-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-4.1.8-nompi_py312h1d0e7ed_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-data-4.1.8-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinspiral-5.0.2-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalmetaio-4.0.5-py312h66e93f0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-7.1.0-py312he8860a6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-data-7.1.0-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-6.1.0-py312h09b83b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-data-6.1.0-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ldas-tools-al-2.7.0-hd827ec0_3.conda @@ -151,14 +151,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-h174a0a3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblal-7.7.0-fftw_h0eb8034_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalburst-2.0.7-h43c0734_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalframe-3.0.7-hbf9efdd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinference-4.1.9-h3773ae6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinspiral-5.0.3-h43c0734_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalmetaio-4.0.6-hb03c661_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalpulsar-7.1.1-h3c7535d_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalsimulation-6.2.0-py312hd1ec2bb_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblal-7.6.1-fftw_hcbe9c14_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalburst-2.0.6-h3773ae6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalframe-3.0.6-h7c287a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinference-4.1.8-h3773ae6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinspiral-5.0.2-h3773ae6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalmetaio-4.0.5-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalpulsar-7.1.0-h9345056_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalsimulation-6.1.0-py312h09b83b2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h47877c9_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.6-hf7376ad_0.conda @@ -197,7 +197,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ligo-segments-1.4.0-py312h66e93f0_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ligo.skymap-2.5.3-np2h4e6c70c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ligo.skymap-2.3.0-py312h36415c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.47.0-py312h7424e68_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.4.5-py312h3d67a73_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda @@ -210,7 +210,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.65.1-py312hd1dde6f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.5-py312hf79963d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py312h33ff503_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjph-0.27.3-h8d634f6_0.conda @@ -232,14 +232,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.11.1-py312h7cea900_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-htcondor-24.12.4-py312h1e35698_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lal-7.7.0-fftw_py312h26d0d96_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalburst-2.0.7-py312h71fd7f1_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalframe-3.0.7-py312h4f23490_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinference-4.1.9-py312hc0a28a1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinspiral-5.0.3-py312h4f23490_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalmetaio-4.0.6-py312h4f23490_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalpulsar-7.1.1-py312h4f23490_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalsimulation-6.2.0-py312h71fd7f1_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lal-7.6.1-fftw_py312heccaa44_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalburst-2.0.6-py312h3684b61_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalframe-3.0.6-py312hc0a28a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinference-4.1.8-py312hc0a28a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinspiral-5.0.2-py312hc0a28a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalmetaio-4.0.5-py312hc0a28a1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalpulsar-7.1.0-py312hc0a28a1_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalsimulation-6.1.0-py312h09b83b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-ligo-lw-1.8.3-py312h66e93f0_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.1-hca0d9c9_0.conda @@ -288,13 +289,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-0.23.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda @@ -307,7 +303,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda @@ -331,6 +326,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda @@ -343,9 +339,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 @@ -361,7 +355,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptemcee-1.0.0-py_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda @@ -372,7 +368,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda @@ -385,7 +380,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda @@ -395,9 +390,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.9.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - pypi: https://files.pythonhosted.org/packages/00/e2/1cb7cfb88fd3866062977a484bc0dda4e165361e949cc8e270302d05b007/spinsfast-2022.4.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -426,6 +421,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/81/68/dddd76117df2ef14c943c6bbb6618be5c9401280046f4ddfc9fb4596a1b8/statsmodels-0.14.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/f1/2033813456213ecfe8ccab18d78ef7b00af70d049c916cb167d592bdd6da/scri-2022.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl @@ -438,7 +434,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl @@ -452,13 +447,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl osx-64: - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-0.23.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda @@ -471,7 +461,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda @@ -489,6 +478,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda @@ -501,9 +491,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 @@ -519,7 +507,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptemcee-1.0.0-py_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda @@ -530,7 +520,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda @@ -543,7 +532,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda @@ -553,9 +542,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.9.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.conda @@ -591,9 +580,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/c-blosc2-3.0.3-h32e32c0_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cffi-2.0.0-py312he90777b_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.6.3-hf728c8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.6.2-ha7f915d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/charls-2.4.3-hcc62823_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/chealpix-3.31.0-h1535d2a_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/chealpix-3.31.0-h93aae7a_8.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/contourpy-1.3.3-py312hb0c38da_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.14.0-py312heb39f77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cryptography-48.0.0-py312h1af399d_0.conda @@ -608,15 +597,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.1-h2790a97_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/google-crc32c-1.8.0-py312hb9001e9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/gsl-2.7-h93259b0_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.16.0-nompi_py312h53b4df1_102.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.6-nompi_hf563b80_106.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/healpy-1.19.0-py312h5272b37_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.13.0-nompi_py312hea5ca7c_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.3-nompi_h1607680_109.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/healpy-1.18.1-py312h9f11423_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-24.12.4-py312hb401068_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-classads-24.12.4-hf470585_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-cli-24.12.4-py312hb401068_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-utils-24.12.4-h1cc2291_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/htgettoken-2.6-py312hb401068_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/igwn-ligolw-2.1.1-py312h0b9663a_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/igwn-segments-2.1.1-py312h0b9663a_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/imagecodecs-2026.5.10-py312hc8b613d_0.conda @@ -624,18 +613,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/jxrlib-1.1-h10d778d_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/kiwisolver-1.5.0-py312hb1dc2e7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lal-7.7.0-fftw_py312hf555030_101.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalapps-10.1.0-py312h1f55956_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalburst-2.0.7-py312h933eb07_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalframe-3.0.7-py312h933eb07_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-4.1.9-nompi_py312h2269b78_102.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-data-4.1.9-h694c41f_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinspiral-5.0.3-py312h933eb07_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalmetaio-4.0.6-py312h933eb07_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-7.1.1-py312hc6fbf67_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-data-7.1.1-h694c41f_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-6.2.0-py312hd5a5ae5_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-data-6.2.0-h694c41f_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lal-7.6.1-fftw_py312h6f020d4_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalapps-10.0.2-py312h72dd72b_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalburst-2.0.6-py312h01d7ebd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalframe-3.0.6-py312h01d7ebd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-4.1.8-nompi_py312h34ae946_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-data-4.1.8-h694c41f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinspiral-5.0.2-py312h01d7ebd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalmetaio-4.0.5-py312h01d7ebd_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-7.1.0-py312h5a434c1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-data-7.1.0-h694c41f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-6.1.0-py312haa07450_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-data-6.1.0-h694c41f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.19.1-h5ea7634_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ldas-tools-al-2.7.0-hb7f9d93_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ldas-tools-framecpp-2.9.3-hf716561_4.conda @@ -649,8 +638,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-23.0.1-h613493e_4_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libavif16-1.4.1-h9d3eb37_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.11.0-7_he492b99_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-1.88.0-h5950822_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-python-1.88.0-py312h3a26c12_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-1.88.0-hf9ddd82_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-python-1.88.0-py312h83679cb_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda @@ -678,14 +667,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.1.4.1-ha1e9b39_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.11.2-h473410d_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblal-7.7.0-fftw_h11bfb9b_101.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalburst-2.0.7-h0e85ab8_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalframe-3.0.7-hdadb070_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinference-4.1.9-h4325a54_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinspiral-5.0.3-h0e85ab8_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalmetaio-4.0.6-ha1e9b39_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalpulsar-7.1.1-hde9e502_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalsimulation-6.2.0-py312hf591029_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblal-7.6.1-fftw_ha907fd1_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalburst-2.0.6-h8fa4168_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalframe-3.0.6-h6e76fb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinference-4.1.8-h506f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinspiral-5.0.2-h8fa4168_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalmetaio-4.0.5-h6e16a3a_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalpulsar-7.1.0-h0f29fec_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalsimulation-6.1.0-py312h1b08b07_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.11.0-7_h859234e_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libmetaio-8.5.1-h97fe558_1003.conda @@ -698,18 +687,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-6.33.5-h29d92e8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libre2-11-2025.11.05-h6e8c311_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.22-ha3d0635_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.1-h8f8c405_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.1-h77d7759_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.22.0-hebea4ca_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.7.1-ha0a348c_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.11.3-hc282952_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.6.0-hb807250_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.17.0-hf1f96e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.3-h7a90416_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.3-h953d39d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.1-ha1d9b0f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.1-h7b7ecba_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libzopfli-1.0.3-h046ec9c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/ligo.skymap-2.5.3-np2hce383ba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ligo-segments-1.4.0-py312h01d7ebd_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ligo.skymap-2.3.0-py312h2e055c9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-22.1.6-h0d3cbff_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/llvmlite-0.47.0-py312ha5a82fe_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-4.4.5-py312ha706d14_1.conda @@ -722,7 +712,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/nlohmann_json-3.12.0-h06076ce_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/numba-0.65.1-py312h704f9c4_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/numcodecs-0.16.5-py312h86abcb1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.4.6-py312h746d82c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-1.26.4-py312he3a82b2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/oniguruma-6.9.10-h6e16a3a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.4-h52bb76a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openjph-0.27.3-h2c0e27e_0.conda @@ -741,14 +731,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.13-ha9537fe_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python-gssapi-1.11.1-py312h972ca57_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python-htcondor-24.12.4-py312h564a4e3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lal-7.7.0-fftw_py312haa2233f_101.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalburst-2.0.7-py312ha71206d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalframe-3.0.7-py312h469e4ad_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinference-4.1.9-py312h469e4ad_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinspiral-5.0.3-py312h469e4ad_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalmetaio-4.0.6-py312h469e4ad_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalpulsar-7.1.1-py312h469e4ad_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalsimulation-6.2.0-py312hc642aa9_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lal-7.6.1-fftw_py312ha78c7a8_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalburst-2.0.6-py312h44bc254_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalframe-3.0.6-py312h025c719_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinference-4.1.8-py312h025c719_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinspiral-5.0.2-py312h025c719_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalmetaio-4.0.5-py312h025c719_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalpulsar-7.1.0-py312h025c719_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalsimulation-6.1.0-py312h1b08b07_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-ligo-lw-1.8.3-py312h01d7ebd_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.3-py312h51361c1_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/qhull-2020.2-h3c5361c_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/rav1e-0.8.1-h618d828_0.conda @@ -798,6 +789,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/f1/2033813456213ecfe8ccab18d78ef7b00af70d049c916cb167d592bdd6da/scri-2022.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl @@ -811,7 +803,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/ba/b2/138065f2c50fd66b89623a5ee45d43d2341cfede4d7e0f7292075953ff12/numpy_quaternion-2024.0.13-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl @@ -826,13 +817,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-0.23.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda @@ -845,7 +831,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda @@ -863,6 +848,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda @@ -875,9 +861,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 @@ -893,7 +877,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptemcee-1.0.0-py_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda @@ -904,7 +890,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda @@ -917,7 +902,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda @@ -927,9 +912,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.9.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda @@ -965,9 +950,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-3.0.3-hf9886e1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py312h1b4d9a2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.6.3-hb409788_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.6.2-h7200ff5_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.3-hf6b4638_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/chealpix-3.31.0-h6fab0b2_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/chealpix-3.31.0-he71fa57_8.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py312h3093aea_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.14.0-py312h04c11ed_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cryptography-48.0.0-py312h1238841_0.conda @@ -982,15 +967,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/google-crc32c-1.8.0-py312h090f823_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gsl-2.7-h6e638da_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py312hdd01ddf_102.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.6-nompi_had3affe_106.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/healpy-1.19.0-py312h372f765_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.13.0-nompi_py312hd7c5113_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.3-nompi_ha698983_109.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/healpy-1.18.1-py312hb9c4046_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-24.12.4-py312h1f38498_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-classads-24.12.4-h0c2a548_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-cli-24.12.4-py312h81bd7bf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-utils-24.12.4-h9e88eaa_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htgettoken-2.6-py312h81bd7bf_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/igwn-ligolw-2.1.1-py312h8d938ae_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/igwn-segments-2.1.1-py312h8d938ae_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2026.5.10-py312ha5a633e_0.conda @@ -998,18 +983,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py312h3093aea_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lal-7.7.0-fftw_py312h0b98bce_101.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalapps-10.1.0-py312hf84635f_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalburst-2.0.7-py312h76b007c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalframe-3.0.7-py312h76b007c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-4.1.9-nompi_py312h594389e_102.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-data-4.1.9-hce30654_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinspiral-5.0.3-py312h76b007c_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalmetaio-4.0.6-py312h76b007c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-7.1.1-py312h57a7920_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-data-7.1.1-hce30654_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-6.2.0-py312h1ab2389_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-data-6.2.0-hce30654_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lal-7.6.1-fftw_py312h3b12eeb_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalapps-10.0.2-py312he91bef5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalburst-2.0.6-py312h028adb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalframe-3.0.6-py312h028adb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-4.1.8-nompi_py312h7a6eb69_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-data-4.1.8-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinspiral-5.0.2-py312h028adb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalmetaio-4.0.5-py312h028adb6_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-7.1.0-py312hf4cc3a4_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-data-7.1.0-hce30654_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-6.1.0-py312hd4754c9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-data-6.1.0-hce30654_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ldas-tools-al-2.7.0-he7ec6a4_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ldas-tools-framecpp-2.9.3-ha7f91e6_4.conda @@ -1023,8 +1008,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-23.0.1-h05be00f_4_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.4.1-hfce71f6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-7_h51639a9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-1.88.0-h0419b56_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-python-1.88.0-py312hdeff4eb_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-1.88.0-h18cd856_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-python-1.88.0-py312h4c080bd_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda @@ -1052,14 +1037,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.2-h934fa54_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblal-7.7.0-fftw_hebea562_101.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalburst-2.0.7-h957e360_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalframe-3.0.7-h304a64b_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinference-4.1.9-ha9a36a6_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinspiral-5.0.3-h957e360_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalmetaio-4.0.6-h84a0fba_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalpulsar-7.1.1-h43f389f_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalsimulation-6.2.0-py312h593d7fe_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblal-7.6.1-fftw_h8fcc6d2_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalburst-2.0.6-h2786bc8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalframe-3.0.6-h63b17c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinference-4.1.8-h4d5f05e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinspiral-5.0.2-h2786bc8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalmetaio-4.0.5-h5505292_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalpulsar-7.1.0-h8480f09_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalsimulation-6.1.0-py312h0975e73_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-7_hd9741b5_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmetaio-8.5.1-h57f5043_1003.conda @@ -1079,11 +1064,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.11.3-h2431656_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.3-h5ef1a60_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.3-h5654f7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.1-h0ff4647_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.1-h9329255_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzopfli-1.0.3-h9f76cd9_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo.skymap-2.5.3-np2h6a9d7bf_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo-segments-1.4.0-py312hea69d52_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo.skymap-2.3.0-py312hd0a6ca1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.6-hc7d1edf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmlite-0.47.0-py312h7ca588d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.4.5-py312h2b25a0d_1.conda @@ -1096,7 +1082,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nlohmann_json-3.12.0-h784d473_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numba-0.65.1-py312h2d3d6e9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numcodecs-0.16.5-py312h5978115_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.6-py312ha003a3f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.10-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjph-0.27.3-h2a4d681_0.conda @@ -1115,14 +1101,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-gssapi-1.11.1-py312h72ca3cf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-htcondor-24.12.4-py312hd1c112e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lal-7.7.0-fftw_py312he477bca_101.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalburst-2.0.7-py312hd9443c7_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalframe-3.0.7-py312hf57c059_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinference-4.1.9-py312hf57c059_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinspiral-5.0.3-py312hf57c059_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalmetaio-4.0.6-py312hf57c059_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalpulsar-7.1.1-py312hf57c059_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalsimulation-6.2.0-py312h7cf3665_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lal-7.6.1-fftw_py312h0f8b06b_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalburst-2.0.6-py312heec191f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalframe-3.0.6-py312he0011b7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinference-4.1.8-py312he0011b7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinspiral-5.0.2-py312he0011b7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalmetaio-4.0.5-py312he0011b7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalpulsar-7.1.0-py312he0011b7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalsimulation-6.1.0-py312he758b9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-ligo-lw-1.8.3-py312hea69d52_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py312h04c11ed_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.8.1-h8246384_0.conda @@ -1172,6 +1159,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/f1/2033813456213ecfe8ccab18d78ef7b00af70d049c916cb167d592bdd6da/scri-2022.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl @@ -1184,7 +1172,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl @@ -1211,19 +1198,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/astropy-base-7.2.0-py312h4f23490_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/astropy-healpix-1.1.3-py312h4f23490_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.1-ha62d5e7_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.6-hb9c0fe4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.13-h2c9d079_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-h8b1a151_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.7.0-h9b893ba_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.13-h4bacb7b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-hb18f61d_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.15.2-hc1936db_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.12.2-he6ee468_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.9-h841be55_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.10-hf621c6d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.1-hc87160b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.14.0-ha25ca29_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.11.5-h9b5df67_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h8b1a151_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.38.3-h745e52d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.747-h41c0014_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.37.3-hb153662_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.747-h133b1ee_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.16.2-h206d751_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.13.3-hed0cdb0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.16.0-hf824e48_2.conda @@ -1239,15 +1226,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-3.0.3-hc31b594_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.6.3-ha0b56bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.6.2-ha0b56bc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.3-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/chealpix-3.31.0-h001b3b8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/chealpix-3.31.0-ha55a0e1_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.14.0-py312h8a5da7c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-48.0.0-py312ha4b625e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.1.0-py312h4c3975b_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda @@ -1263,16 +1250,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/google-crc32c-1.8.0-py312h03f33d3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha829cd9_102.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.0-h6083320_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_h87a9417_105.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/healpy-1.19.0-py312hb99e9eb_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-25.10.1-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-classads-25.10.1-h793e66c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-cli-25.10.1-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-utils-25.10.1-h8d23d0f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.13.0-nompi_py312hedeef09_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.2.0-h15599e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_109.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/healpy-1.18.1-py312he9d304c_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-25.6.1-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-classads-25.6.1-h793e66c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-cli-25.6.1-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-utils-25.6.1-h41609d3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/htgettoken-2.6-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/igwn-ligolw-2.1.1-py312h53c857e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/igwn-segments-2.1.1-py312h53c857e_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2026.5.10-py312he34094b_0.conda @@ -1280,19 +1267,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py312h0a2e395_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lal-7.7.0-fftw_py312he4eb8fe_104.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalapps-10.1.0-py312h8a05548_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalburst-2.0.7-py312h4c3975b_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalframe-3.0.7-py312h4c3975b_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-4.1.9-nompi_py312h894bbbb_102.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-data-4.1.9-ha770c72_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinspiral-5.0.3-py312h4c3975b_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalmetaio-4.0.6-py312h4c3975b_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-7.1.1-py312h14108ff_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-data-7.1.1-ha770c72_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-6.2.0-py312hd1ec2bb_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-data-6.2.0-ha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lal-7.6.1-fftw_py312ha96d5c7_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalapps-10.0.2-py312h760c983_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalburst-2.0.6-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalframe-3.0.6-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-4.1.8-nompi_py312h1d0e7ed_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-data-4.1.8-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinspiral-5.0.2-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalmetaio-4.0.5-py312h66e93f0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-7.1.0-py312he8860a6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-data-7.1.0-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-6.1.0-py312h09b83b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-data-6.1.0-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ldas-tools-al-2.7.0-hd827ec0_3.conda @@ -1300,28 +1287,28 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-24.0.0-h033f57b_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-24.0.0-h635bf11_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-compute-24.0.0-h53684a4_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-24.0.0-h635bf11_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-24.0.0-hb4dd7c2_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-23.0.1-hf605819_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-23.0.1-h635bf11_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-compute-23.0.1-h53684a4_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-23.0.1-h635bf11_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-23.0.1-hb4dd7c2_4_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.4.1-hcfa2d63_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-7_h4a7cf45_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libboost-1.88.0-hd24cca6_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libboost-1.88.0-hed09d94_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-7_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.6-default_h746c552_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcondor_utils-25.10.1-h4effbbe_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcondor_utils-25.6.1-h9f200e7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.20.0-hcf29cc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.127-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_0.conda @@ -1334,28 +1321,27 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-3.5.0-h25dbb67_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-3.5.0-hdbdcf42_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.39.0-h9d11ab5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.39.0-hdbdcf42_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.78.1-h1d1128b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h10be129_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-h174a0a3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblal-7.7.0-fftw_h9f6c97b_104.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalburst-2.0.7-h43c0734_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalframe-3.0.7-hbf9efdd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinference-4.1.9-h43c0734_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinspiral-5.0.3-h43c0734_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalmetaio-4.0.6-hb03c661_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalpulsar-7.1.1-h3c7535d_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalsimulation-6.2.0-py312hd1ec2bb_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblal-7.6.1-fftw_hcbe9c14_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalburst-2.0.6-h3773ae6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalframe-3.0.6-h7c287a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinference-4.1.8-h3773ae6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinspiral-5.0.2-h3773ae6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalmetaio-4.0.5-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalpulsar-7.1.0-h9345056_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalsimulation-6.1.0-py312h09b83b2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.6-hf7376ad_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmetaio-8.5.1-h0b0be96_1003.conda @@ -1364,12 +1350,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.26.0-h9692893_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.26.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-24.0.0-h7376487_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.21.0-h9692893_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.21.0-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-23.0.1-h7376487_4_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.1-h5c52fec_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.11.05-h0dc7533_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda @@ -1386,12 +1372,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-ha9997c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h26afc86_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/ligo.skymap-2.5.3-np2h4e6c70c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ligo-segments-1.4.0-py312h66e93f0_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ligo.skymap-2.3.0-py312h36415c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.47.0-py312h7424e68_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.4.5-py312h3d67a73_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda @@ -1404,11 +1391,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.65.1-py312hd1dde6f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.5-py312hf79963d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py312h33ff503_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjph-0.27.3-h8d634f6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.3.0-h21090e2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-3.0.3-py312h8ecdadd_0.conda @@ -1418,31 +1405,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-24.0.0-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-24.0.0-py312h2054cf2_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-23.0.1-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-23.0.1-py312h2054cf2_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyerfa-2.0.1.5-py310h32771cd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.6.2-py312hf34ed73_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.1-py312h50ac2ff_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.10.1-py312h9da60e5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.11.1-py312hf9980d4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-htcondor-25.10.1-py312h40fa4ac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lal-7.7.0-fftw_py312hb15a3d9_104.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalburst-2.0.7-py312h71fd7f1_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalframe-3.0.7-py312h4f23490_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinference-4.1.9-py312h4f23490_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinspiral-5.0.3-py312h4f23490_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalmetaio-4.0.6-py312h4f23490_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalpulsar-7.1.1-py312h4f23490_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalsimulation-6.2.0-py312h71fd7f1_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.11.1-py312h7cea900_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-htcondor-25.6.1-py312h40fa4ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lal-7.6.1-fftw_py312heccaa44_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalburst-2.0.6-py312h3684b61_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalframe-3.0.6-py312hc0a28a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinference-4.1.8-py312hc0a28a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinspiral-5.0.2-py312hc0a28a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalmetaio-4.0.5-py312hc0a28a1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalpulsar-7.1.0-py312hc0a28a1_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalsimulation-6.1.0-py312h09b83b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-ligo-lw-1.8.3-py312h66e93f0_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.1-pl5321h16c4a6b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.1-h6f76662_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.8.1-h1fbca29_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2025.11.05-h5301d42_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2026.5.9-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/reproject-0.19.0-py312h4f23490_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.3-hc5a330e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.1-h1cbb8d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.8.0-np2py312h3226591_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scitokens-cpp-1.4.0-h096d96b_0.conda @@ -1477,19 +1465,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h909a3a2_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-0.23.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda @@ -1502,7 +1484,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda @@ -1526,6 +1507,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda @@ -1538,9 +1520,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 @@ -1556,7 +1536,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptemcee-1.0.0-py_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda @@ -1567,7 +1549,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda @@ -1580,7 +1561,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda @@ -1590,9 +1571,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.9.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - pypi: https://files.pythonhosted.org/packages/00/e2/1cb7cfb88fd3866062977a484bc0dda4e165361e949cc8e270302d05b007/spinsfast-2022.4.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -1621,6 +1602,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/81/68/dddd76117df2ef14c943c6bbb6618be5c9401280046f4ddfc9fb4596a1b8/statsmodels-0.14.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/f1/2033813456213ecfe8ccab18d78ef7b00af70d049c916cb167d592bdd6da/scri-2022.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl @@ -1633,7 +1615,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl @@ -1647,13 +1628,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl osx-64: - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-0.23.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda @@ -1666,7 +1642,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda @@ -1684,6 +1659,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda @@ -1696,9 +1672,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 @@ -1714,7 +1688,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptemcee-1.0.0-py_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda @@ -1725,7 +1701,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda @@ -1738,7 +1713,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda @@ -1748,9 +1723,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.9.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.conda @@ -1786,9 +1761,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/c-blosc2-3.0.3-h32e32c0_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cffi-2.0.0-py312he90777b_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.6.4-hd57ea71_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.6.2-ha7f915d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/charls-2.4.3-hcc62823_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/chealpix-3.31.0-he134003_10.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/chealpix-3.31.0-h93aae7a_8.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/contourpy-1.3.3-py312hb0c38da_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.14.0-py312heb39f77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cryptography-48.0.0-py312h1af399d_0.conda @@ -1803,15 +1778,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.1-h2790a97_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/google-crc32c-1.8.0-py312hb9001e9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/gsl-2.7-h93259b0_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.16.0-nompi_py312h82c48cf_102.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-2.1.0-nompi_h650120f_105.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/healpy-1.19.0-py312h84047a7_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.13.0-nompi_py312hea5ca7c_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.3-nompi_h1607680_109.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/healpy-1.18.1-py312h9f11423_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-25.10.1-py312hb401068_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-classads-25.10.1-h4086b99_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-cli-25.10.1-py312hb401068_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-utils-25.10.1-h712aeec_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/htgettoken-2.6-py312hb401068_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/igwn-ligolw-2.1.1-py312h0b9663a_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/igwn-segments-2.1.1-py312h0b9663a_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/imagecodecs-2026.5.10-py312hc8b613d_0.conda @@ -1819,18 +1794,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/jxrlib-1.1-h10d778d_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/kiwisolver-1.5.0-py312hb1dc2e7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h207b36a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lal-7.7.0-fftw_py312h3a6e924_104.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalapps-10.1.0-py312h69f915d_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalburst-2.0.7-py312h933eb07_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalframe-3.0.7-py312h933eb07_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-4.1.9-nompi_py312h2269b78_102.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-data-4.1.9-h694c41f_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinspiral-5.0.3-py312h933eb07_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalmetaio-4.0.6-py312h933eb07_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-7.1.1-py312h0a4f85f_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-data-7.1.1-h694c41f_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-6.2.0-py312hd5a5ae5_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-data-6.2.0-h694c41f_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lal-7.6.1-fftw_py312h6f020d4_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalapps-10.0.2-py312h72dd72b_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalburst-2.0.6-py312h01d7ebd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalframe-3.0.6-py312h01d7ebd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-4.1.8-nompi_py312h34ae946_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-data-4.1.8-h694c41f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinspiral-5.0.2-py312h01d7ebd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalmetaio-4.0.5-py312h01d7ebd_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-7.1.0-py312h5a434c1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-data-7.1.0-h694c41f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-6.1.0-py312haa07450_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-data-6.1.0-h694c41f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.19.1-h5ea7634_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ldas-tools-al-2.7.0-hb7f9d93_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ldas-tools-framecpp-2.9.3-hf716561_4.conda @@ -1844,7 +1819,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-24.0.0-h613493e_2_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libavif16-1.4.1-h9d3eb37_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.11.0-7_he492b99_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-1.88.0-h5950822_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-1.88.0-hf9ddd82_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda @@ -1872,14 +1847,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.1.4.1-ha1e9b39_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.11.2-h473410d_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblal-7.7.0-fftw_he57ba51_104.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalburst-2.0.7-h0e85ab8_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalframe-3.0.7-hdadb070_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinference-4.1.9-h4325a54_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinspiral-5.0.3-h0e85ab8_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalmetaio-4.0.6-ha1e9b39_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalpulsar-7.1.1-ha4006bb_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalsimulation-6.2.0-py312hf591029_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblal-7.6.1-fftw_ha907fd1_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalburst-2.0.6-h8fa4168_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalframe-3.0.6-h6e76fb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinference-4.1.8-h506f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinspiral-5.0.2-h8fa4168_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalmetaio-4.0.5-h6e16a3a_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalpulsar-7.1.0-h0f29fec_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalsimulation-6.1.0-py312h1b08b07_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.11.0-7_h859234e_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libmetaio-8.5.1-h97fe558_1003.conda @@ -1892,18 +1867,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-6.33.5-h29d92e8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libre2-11-2025.11.05-h6e8c311_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.22-ha3d0635_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.1-h8f8c405_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.1-h77d7759_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.22.0-hebea4ca_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.7.1-ha0a348c_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.11.3-hc282952_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.6.0-hb807250_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.17.0-hf1f96e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.3-h7a90416_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.3-h953d39d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.1-ha1d9b0f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.1-h7b7ecba_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libzopfli-1.0.3-h046ec9c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/ligo.skymap-2.5.3-np2hce383ba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ligo-segments-1.4.0-py312h01d7ebd_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ligo.skymap-2.3.0-py312h2e055c9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-22.1.6-h0d3cbff_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/llvmlite-0.47.0-py312ha5a82fe_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-4.4.5-py312ha706d14_1.conda @@ -1916,7 +1892,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/nlohmann_json-3.12.0-h06076ce_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/numba-0.65.1-py312h704f9c4_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/numcodecs-0.16.5-py312h86abcb1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.4.6-py312h746d82c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-1.26.4-py312he3a82b2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/oniguruma-6.9.10-h6e16a3a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.4-h52bb76a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openjph-0.27.3-h2c0e27e_0.conda @@ -1935,14 +1911,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.13-ha9537fe_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python-gssapi-1.11.1-py312h479078b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python-htcondor-25.10.1-py312haf40f37_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lal-7.7.0-fftw_py312h70f41d4_104.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalburst-2.0.7-py312ha71206d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalframe-3.0.7-py312h469e4ad_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinference-4.1.9-py312h469e4ad_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinspiral-5.0.3-py312h469e4ad_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalmetaio-4.0.6-py312h469e4ad_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalpulsar-7.1.1-py312h469e4ad_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalsimulation-6.2.0-py312hc642aa9_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lal-7.6.1-fftw_py312ha78c7a8_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalburst-2.0.6-py312h44bc254_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalframe-3.0.6-py312h025c719_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinference-4.1.8-py312h025c719_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinspiral-5.0.2-py312h025c719_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalmetaio-4.0.5-py312h025c719_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalpulsar-7.1.0-py312h025c719_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalsimulation-6.1.0-py312h1b08b07_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-ligo-lw-1.8.3-py312h01d7ebd_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.3-py312h51361c1_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/qhull-2020.2-h3c5361c_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/rav1e-0.8.1-h618d828_0.conda @@ -1992,6 +1969,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/f1/2033813456213ecfe8ccab18d78ef7b00af70d049c916cb167d592bdd6da/scri-2022.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl @@ -2005,7 +1983,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/ba/b2/138065f2c50fd66b89623a5ee45d43d2341cfede4d7e0f7292075953ff12/numpy_quaternion-2024.0.13-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl @@ -2020,13 +1997,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-0.23.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda @@ -2039,7 +2011,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda @@ -2057,6 +2028,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda @@ -2069,9 +2041,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 @@ -2087,7 +2057,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptemcee-1.0.0-py_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda @@ -2098,7 +2070,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda @@ -2111,7 +2082,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda @@ -2121,9 +2092,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.9.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda @@ -2159,9 +2130,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-3.0.3-hf9886e1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py312h1b4d9a2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.6.4-h29bb15e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.6.2-h7200ff5_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.3-hf6b4638_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/chealpix-3.31.0-h47a9372_10.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/chealpix-3.31.0-he71fa57_8.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py312h3093aea_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.14.0-py312h04c11ed_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cryptography-48.0.0-py312h1238841_0.conda @@ -2176,15 +2147,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/google-crc32c-1.8.0-py312h090f823_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gsl-2.7-h6e638da_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py312h585e8c8_102.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-2.1.0-nompi_he586413_105.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/healpy-1.19.0-py312hc7c58be_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.13.0-nompi_py312hd7c5113_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.3-nompi_ha698983_109.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/healpy-1.18.1-py312hb9c4046_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-25.10.1-py312h1f38498_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-classads-25.10.1-h7a491f7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-cli-25.10.1-py312h81bd7bf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-utils-25.10.1-h91f37e5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htgettoken-2.6-py312h81bd7bf_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/igwn-ligolw-2.1.1-py312h8d938ae_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/igwn-segments-2.1.1-py312h8d938ae_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2026.5.10-py312ha5a633e_0.conda @@ -2192,18 +2163,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py312h3093aea_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lal-7.7.0-fftw_py312h8aca948_104.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalapps-10.1.0-py312hb943a6c_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalburst-2.0.7-py312h76b007c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalframe-3.0.7-py312h76b007c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-4.1.9-nompi_py312h594389e_102.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-data-4.1.9-hce30654_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinspiral-5.0.3-py312h76b007c_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalmetaio-4.0.6-py312h76b007c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-7.1.1-py312h1915c05_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-data-7.1.1-hce30654_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-6.2.0-py312h1ab2389_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-data-6.2.0-hce30654_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lal-7.6.1-fftw_py312h3b12eeb_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalapps-10.0.2-py312he91bef5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalburst-2.0.6-py312h028adb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalframe-3.0.6-py312h028adb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-4.1.8-nompi_py312h7a6eb69_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-data-4.1.8-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinspiral-5.0.2-py312h028adb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalmetaio-4.0.5-py312h028adb6_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-7.1.0-py312hf4cc3a4_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-data-7.1.0-hce30654_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-6.1.0-py312hd4754c9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-data-6.1.0-hce30654_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ldas-tools-al-2.7.0-he7ec6a4_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ldas-tools-framecpp-2.9.3-ha7f91e6_4.conda @@ -2217,7 +2188,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-24.0.0-h05be00f_2_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.4.1-hfce71f6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-7_h51639a9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-1.88.0-h0419b56_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-1.88.0-h18cd856_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda @@ -2245,14 +2216,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.2-h934fa54_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblal-7.7.0-fftw_h4b20030_104.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalburst-2.0.7-h957e360_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalframe-3.0.7-h304a64b_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinference-4.1.9-ha9a36a6_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinspiral-5.0.3-h957e360_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalmetaio-4.0.6-h84a0fba_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalpulsar-7.1.1-h169444b_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalsimulation-6.2.0-py312h593d7fe_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblal-7.6.1-fftw_h8fcc6d2_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalburst-2.0.6-h2786bc8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalframe-3.0.6-h63b17c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinference-4.1.8-h4d5f05e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinspiral-5.0.2-h2786bc8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalmetaio-4.0.5-h5505292_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalpulsar-7.1.0-h8480f09_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalsimulation-6.1.0-py312h0975e73_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-7_hd9741b5_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmetaio-8.5.1-h57f5043_1003.conda @@ -2272,11 +2243,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.11.3-h2431656_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.3-h5ef1a60_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.3-h5654f7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.1-h0ff4647_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.1-h9329255_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzopfli-1.0.3-h9f76cd9_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo.skymap-2.5.3-np2h6a9d7bf_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo-segments-1.4.0-py312hea69d52_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo.skymap-2.3.0-py312hd0a6ca1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.6-hc7d1edf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmlite-0.47.0-py312h7ca588d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.4.5-py312h2b25a0d_1.conda @@ -2289,7 +2261,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nlohmann_json-3.12.0-h784d473_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numba-0.65.1-py312h2d3d6e9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numcodecs-0.16.5-py312h5978115_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.6-py312ha003a3f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.10-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjph-0.27.3-h2a4d681_0.conda @@ -2308,14 +2280,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-gssapi-1.11.1-py312h858ef95_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-htcondor-25.10.1-py312hacc1691_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lal-7.7.0-fftw_py312h2cc9458_104.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalburst-2.0.7-py312hd9443c7_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalframe-3.0.7-py312hf57c059_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinference-4.1.9-py312hf57c059_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinspiral-5.0.3-py312hf57c059_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalmetaio-4.0.6-py312hf57c059_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalpulsar-7.1.1-py312hf57c059_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalsimulation-6.2.0-py312h7cf3665_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lal-7.6.1-fftw_py312h0f8b06b_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalburst-2.0.6-py312heec191f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalframe-3.0.6-py312he0011b7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinference-4.1.8-py312he0011b7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinspiral-5.0.2-py312he0011b7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalmetaio-4.0.5-py312he0011b7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalpulsar-7.1.0-py312he0011b7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalsimulation-6.1.0-py312he758b9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-ligo-lw-1.8.3-py312hea69d52_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py312h04c11ed_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.8.1-h8246384_0.conda @@ -2365,6 +2338,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/f1/2033813456213ecfe8ccab18d78ef7b00af70d049c916cb167d592bdd6da/scri-2022.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl @@ -2377,7 +2351,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl @@ -2434,9 +2407,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-3.0.3-hc31b594_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.6.3-ha0b56bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.6.2-ha0b56bc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.3-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/chealpix-3.31.0-h001b3b8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/chealpix-3.31.0-ha55a0e1_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.14.0-py312h8a5da7c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-48.0.0-py312ha4b625e_0.conda @@ -2456,10 +2429,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/google-crc32c-1.8.0-py312h03f33d3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha4f8f14_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.13.0-nompi_py312hedeef09_100.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.2.0-h15599e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_106.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/healpy-1.19.0-py312hb99e9eb_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_109.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/healpy-1.18.1-py312he9d304c_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-24.12.4-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-classads-24.12.4-hf1419ba_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-cli-24.12.4-py312h7900ff3_0.conda @@ -2474,18 +2447,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py312h0a2e395_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lal-7.7.0-fftw_py312h3c92f15_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalapps-10.1.0-py312h8a05548_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalburst-2.0.7-py312h4c3975b_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalframe-3.0.7-py312h4c3975b_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-4.1.9-nompi_py312h1d0e7ed_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-data-4.1.9-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinspiral-5.0.3-py312h4c3975b_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalmetaio-4.0.6-py312h4c3975b_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-7.1.1-py312h14108ff_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-data-7.1.1-ha770c72_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-6.2.0-py312hd1ec2bb_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-data-6.2.0-ha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lal-7.6.1-fftw_py312ha96d5c7_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalapps-10.0.2-py312h760c983_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalburst-2.0.6-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalframe-3.0.6-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-4.1.8-nompi_py312h1d0e7ed_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-data-4.1.8-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalinspiral-5.0.2-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalmetaio-4.0.5-py312h66e93f0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-7.1.0-py312he8860a6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-data-7.1.0-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-6.1.0-py312h09b83b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-data-6.1.0-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ldas-tools-al-2.7.0-hd827ec0_3.conda @@ -2539,14 +2512,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-h174a0a3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblal-7.7.0-fftw_h0eb8034_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalburst-2.0.7-h43c0734_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalframe-3.0.7-hbf9efdd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinference-4.1.9-h3773ae6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinspiral-5.0.3-h43c0734_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalmetaio-4.0.6-hb03c661_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalpulsar-7.1.1-h3c7535d_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalsimulation-6.2.0-py312hd1ec2bb_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblal-7.6.1-fftw_hcbe9c14_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalburst-2.0.6-h3773ae6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalframe-3.0.6-h7c287a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinference-4.1.8-h3773ae6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinspiral-5.0.2-h3773ae6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalmetaio-4.0.5-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalpulsar-7.1.0-h9345056_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblalsimulation-6.1.0-py312h09b83b2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h47877c9_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.6-hf7376ad_0.conda @@ -2585,7 +2558,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ligo-segments-1.4.0-py312h66e93f0_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ligo.skymap-2.5.3-np2h4e6c70c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ligo.skymap-2.3.0-py312h36415c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.47.0-py312h7424e68_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.4.5-py312h3d67a73_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda @@ -2598,7 +2571,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.65.1-py312hd1dde6f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.5-py312hf79963d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py312h33ff503_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjph-0.27.3-h8d634f6_0.conda @@ -2620,14 +2593,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.11.1-py312h7cea900_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-htcondor-24.12.4-py312h1e35698_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lal-7.7.0-fftw_py312h26d0d96_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalburst-2.0.7-py312h71fd7f1_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalframe-3.0.7-py312h4f23490_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinference-4.1.9-py312hc0a28a1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinspiral-5.0.3-py312h4f23490_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalmetaio-4.0.6-py312h4f23490_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalpulsar-7.1.1-py312h4f23490_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalsimulation-6.2.0-py312h71fd7f1_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lal-7.6.1-fftw_py312heccaa44_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalburst-2.0.6-py312h3684b61_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalframe-3.0.6-py312hc0a28a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinference-4.1.8-py312hc0a28a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinspiral-5.0.2-py312hc0a28a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalmetaio-4.0.5-py312hc0a28a1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalpulsar-7.1.0-py312hc0a28a1_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalsimulation-6.1.0-py312h09b83b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-ligo-lw-1.8.3-py312h66e93f0_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.1-hca0d9c9_0.conda @@ -2676,13 +2650,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-0.23.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda @@ -2695,7 +2664,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda @@ -2719,6 +2687,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda @@ -2731,9 +2700,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 @@ -2749,7 +2716,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptemcee-1.0.0-py_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda @@ -2760,7 +2729,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda @@ -2773,7 +2741,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda @@ -2783,9 +2751,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.9.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - pypi: https://files.pythonhosted.org/packages/00/e2/1cb7cfb88fd3866062977a484bc0dda4e165361e949cc8e270302d05b007/spinsfast-2022.4.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -2814,6 +2782,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/81/68/dddd76117df2ef14c943c6bbb6618be5c9401280046f4ddfc9fb4596a1b8/statsmodels-0.14.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/f1/2033813456213ecfe8ccab18d78ef7b00af70d049c916cb167d592bdd6da/scri-2022.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl @@ -2826,7 +2795,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl @@ -2840,13 +2808,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl osx-64: - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-0.23.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda @@ -2859,7 +2822,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda @@ -2877,6 +2839,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda @@ -2889,9 +2852,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 @@ -2907,7 +2868,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptemcee-1.0.0-py_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda @@ -2918,7 +2881,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda @@ -2931,7 +2893,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda @@ -2941,9 +2903,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.9.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.conda @@ -2979,9 +2941,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/c-blosc2-3.0.3-h32e32c0_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cffi-2.0.0-py312he90777b_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.6.3-hf728c8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.6.2-ha7f915d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/charls-2.4.3-hcc62823_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/chealpix-3.31.0-h1535d2a_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/chealpix-3.31.0-h93aae7a_8.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/contourpy-1.3.3-py312hb0c38da_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.14.0-py312heb39f77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cryptography-48.0.0-py312h1af399d_0.conda @@ -2996,15 +2958,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.1-h2790a97_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/google-crc32c-1.8.0-py312hb9001e9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/gsl-2.7-h93259b0_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.16.0-nompi_py312h53b4df1_102.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.6-nompi_hf563b80_106.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/healpy-1.19.0-py312h5272b37_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.13.0-nompi_py312hea5ca7c_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.3-nompi_h1607680_109.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/healpy-1.18.1-py312h9f11423_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-24.12.4-py312hb401068_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-classads-24.12.4-hf470585_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-cli-24.12.4-py312hb401068_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-utils-24.12.4-h1cc2291_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/htgettoken-2.6-py312hb401068_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/igwn-ligolw-2.1.1-py312h0b9663a_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/igwn-segments-2.1.1-py312h0b9663a_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/imagecodecs-2026.5.10-py312hc8b613d_0.conda @@ -3012,18 +2974,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/jxrlib-1.1-h10d778d_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/kiwisolver-1.5.0-py312hb1dc2e7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lal-7.7.0-fftw_py312hf555030_101.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalapps-10.1.0-py312h1f55956_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalburst-2.0.7-py312h933eb07_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalframe-3.0.7-py312h933eb07_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-4.1.9-nompi_py312h2269b78_102.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-data-4.1.9-h694c41f_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinspiral-5.0.3-py312h933eb07_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalmetaio-4.0.6-py312h933eb07_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-7.1.1-py312hc6fbf67_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-data-7.1.1-h694c41f_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-6.2.0-py312hd5a5ae5_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-data-6.2.0-h694c41f_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lal-7.6.1-fftw_py312h6f020d4_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalapps-10.0.2-py312h72dd72b_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalburst-2.0.6-py312h01d7ebd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalframe-3.0.6-py312h01d7ebd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-4.1.8-nompi_py312h34ae946_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-data-4.1.8-h694c41f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalinspiral-5.0.2-py312h01d7ebd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalmetaio-4.0.5-py312h01d7ebd_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-7.1.0-py312h5a434c1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-data-7.1.0-h694c41f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-6.1.0-py312haa07450_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-data-6.1.0-h694c41f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.19.1-h5ea7634_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ldas-tools-al-2.7.0-hb7f9d93_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ldas-tools-framecpp-2.9.3-hf716561_4.conda @@ -3037,8 +2999,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-23.0.1-h613493e_4_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libavif16-1.4.1-h9d3eb37_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.11.0-7_he492b99_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-1.88.0-h5950822_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-python-1.88.0-py312h3a26c12_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-1.88.0-hf9ddd82_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-python-1.88.0-py312h83679cb_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda @@ -3066,14 +3028,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.1.4.1-ha1e9b39_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.11.2-h473410d_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblal-7.7.0-fftw_h11bfb9b_101.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalburst-2.0.7-h0e85ab8_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalframe-3.0.7-hdadb070_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinference-4.1.9-h4325a54_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinspiral-5.0.3-h0e85ab8_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalmetaio-4.0.6-ha1e9b39_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalpulsar-7.1.1-hde9e502_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalsimulation-6.2.0-py312hf591029_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblal-7.6.1-fftw_ha907fd1_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalburst-2.0.6-h8fa4168_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalframe-3.0.6-h6e76fb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinference-4.1.8-h506f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinspiral-5.0.2-h8fa4168_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalmetaio-4.0.5-h6e16a3a_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalpulsar-7.1.0-h0f29fec_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblalsimulation-6.1.0-py312h1b08b07_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.11.0-7_h859234e_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libmetaio-8.5.1-h97fe558_1003.conda @@ -3086,18 +3048,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-6.33.5-h29d92e8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libre2-11-2025.11.05-h6e8c311_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.22-ha3d0635_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.1-h8f8c405_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.1-h77d7759_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.22.0-hebea4ca_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.7.1-ha0a348c_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.11.3-hc282952_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.6.0-hb807250_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.17.0-hf1f96e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.3-h7a90416_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.3-h953d39d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.1-ha1d9b0f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.1-h7b7ecba_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libzopfli-1.0.3-h046ec9c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/ligo.skymap-2.5.3-np2hce383ba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ligo-segments-1.4.0-py312h01d7ebd_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ligo.skymap-2.3.0-py312h2e055c9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-22.1.6-h0d3cbff_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/llvmlite-0.47.0-py312ha5a82fe_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-4.4.5-py312ha706d14_1.conda @@ -3110,7 +3073,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/nlohmann_json-3.12.0-h06076ce_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/numba-0.65.1-py312h704f9c4_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/numcodecs-0.16.5-py312h86abcb1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.4.6-py312h746d82c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-1.26.4-py312he3a82b2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/oniguruma-6.9.10-h6e16a3a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.4-h52bb76a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openjph-0.27.3-h2c0e27e_0.conda @@ -3129,14 +3092,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.13-ha9537fe_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python-gssapi-1.11.1-py312h972ca57_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python-htcondor-24.12.4-py312h564a4e3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lal-7.7.0-fftw_py312haa2233f_101.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalburst-2.0.7-py312ha71206d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalframe-3.0.7-py312h469e4ad_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinference-4.1.9-py312h469e4ad_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinspiral-5.0.3-py312h469e4ad_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalmetaio-4.0.6-py312h469e4ad_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalpulsar-7.1.1-py312h469e4ad_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalsimulation-6.2.0-py312hc642aa9_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lal-7.6.1-fftw_py312ha78c7a8_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalburst-2.0.6-py312h44bc254_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalframe-3.0.6-py312h025c719_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinference-4.1.8-py312h025c719_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinspiral-5.0.2-py312h025c719_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalmetaio-4.0.5-py312h025c719_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalpulsar-7.1.0-py312h025c719_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalsimulation-6.1.0-py312h1b08b07_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-ligo-lw-1.8.3-py312h01d7ebd_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.3-py312h51361c1_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/qhull-2020.2-h3c5361c_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/rav1e-0.8.1-h618d828_0.conda @@ -3186,6 +3150,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/f1/2033813456213ecfe8ccab18d78ef7b00af70d049c916cb167d592bdd6da/scri-2022.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl @@ -3199,7 +3164,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/ba/b2/138065f2c50fd66b89623a5ee45d43d2341cfede4d7e0f7292075953ff12/numpy_quaternion-2024.0.13-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl @@ -3214,13 +3178,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/86/e74734fcc564c7c9dfb47758ea9699c5294c68979fe0d0017454f3ca3f54/quaternionic-1.0.17-py3-none-any.whl osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-0.23.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.5.25.1.14.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.0-pyhd8ed1ab_0.conda @@ -3233,7 +3192,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/corner-2.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2026.3.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.3.0-pyhc364b38_0.conda @@ -3251,6 +3209,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gwosc-0.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gwpy-4.0.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hydra-core-1.3.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda @@ -3263,9 +3222,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ligotimegps-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 @@ -3281,7 +3238,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptemcee-1.0.0-py_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda @@ -3292,7 +3251,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda @@ -3305,7 +3263,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda @@ -3315,9 +3273,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.4.0-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.9.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda @@ -3353,9 +3311,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-3.0.3-hf9886e1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py312h1b4d9a2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.6.3-hb409788_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.6.2-h7200ff5_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.3-hf6b4638_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/chealpix-3.31.0-h6fab0b2_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/chealpix-3.31.0-he71fa57_8.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py312h3093aea_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.14.0-py312h04c11ed_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cryptography-48.0.0-py312h1238841_0.conda @@ -3370,15 +3328,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/google-crc32c-1.8.0-py312h090f823_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gsl-2.7-h6e638da_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py312hdd01ddf_102.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.6-nompi_had3affe_106.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/healpy-1.19.0-py312h372f765_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.13.0-nompi_py312hd7c5113_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.3-nompi_ha698983_109.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/healpy-1.18.1-py312hb9c4046_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-24.12.4-py312h1f38498_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-classads-24.12.4-h0c2a548_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-cli-24.12.4-py312h81bd7bf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-utils-24.12.4-h9e88eaa_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htgettoken-2.6-py312h81bd7bf_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/igwn-ligolw-2.1.1-py312h8d938ae_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/igwn-segments-2.1.1-py312h8d938ae_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2026.5.10-py312ha5a633e_0.conda @@ -3386,18 +3344,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py312h3093aea_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lal-7.7.0-fftw_py312h0b98bce_101.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalapps-10.1.0-py312hf84635f_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalburst-2.0.7-py312h76b007c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalframe-3.0.7-py312h76b007c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-4.1.9-nompi_py312h594389e_102.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-data-4.1.9-hce30654_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinspiral-5.0.3-py312h76b007c_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalmetaio-4.0.6-py312h76b007c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-7.1.1-py312h57a7920_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-data-7.1.1-hce30654_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-6.2.0-py312h1ab2389_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-data-6.2.0-hce30654_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lal-7.6.1-fftw_py312h3b12eeb_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalapps-10.0.2-py312he91bef5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalburst-2.0.6-py312h028adb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalframe-3.0.6-py312h028adb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-4.1.8-nompi_py312h7a6eb69_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-data-4.1.8-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinspiral-5.0.2-py312h028adb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalmetaio-4.0.5-py312h028adb6_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-7.1.0-py312hf4cc3a4_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-data-7.1.0-hce30654_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-6.1.0-py312hd4754c9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-data-6.1.0-hce30654_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ldas-tools-al-2.7.0-he7ec6a4_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ldas-tools-framecpp-2.9.3-ha7f91e6_4.conda @@ -3411,8 +3369,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-23.0.1-h05be00f_4_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.4.1-hfce71f6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-7_h51639a9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-1.88.0-h0419b56_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-python-1.88.0-py312hdeff4eb_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-1.88.0-h18cd856_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-python-1.88.0-py312h4c080bd_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda @@ -3440,14 +3398,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.2-h934fa54_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblal-7.7.0-fftw_hebea562_101.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalburst-2.0.7-h957e360_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalframe-3.0.7-h304a64b_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinference-4.1.9-ha9a36a6_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinspiral-5.0.3-h957e360_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalmetaio-4.0.6-h84a0fba_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalpulsar-7.1.1-h43f389f_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalsimulation-6.2.0-py312h593d7fe_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblal-7.6.1-fftw_h8fcc6d2_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalburst-2.0.6-h2786bc8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalframe-3.0.6-h63b17c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinference-4.1.8-h4d5f05e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinspiral-5.0.2-h2786bc8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalmetaio-4.0.5-h5505292_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalpulsar-7.1.0-h8480f09_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalsimulation-6.1.0-py312h0975e73_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-7_hd9741b5_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmetaio-8.5.1-h57f5043_1003.conda @@ -3467,11 +3425,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.11.3-h2431656_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.3-h5ef1a60_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.3-h5654f7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.1-h0ff4647_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.1-h9329255_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzopfli-1.0.3-h9f76cd9_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo.skymap-2.5.3-np2h6a9d7bf_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo-segments-1.4.0-py312hea69d52_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo.skymap-2.3.0-py312hd0a6ca1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.6-hc7d1edf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmlite-0.47.0-py312h7ca588d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.4.5-py312h2b25a0d_1.conda @@ -3484,7 +3443,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nlohmann_json-3.12.0-h784d473_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numba-0.65.1-py312h2d3d6e9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numcodecs-0.16.5-py312h5978115_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.6-py312ha003a3f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.10-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjph-0.27.3-h2a4d681_0.conda @@ -3503,14 +3462,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-gssapi-1.11.1-py312h72ca3cf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-htcondor-24.12.4-py312hd1c112e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lal-7.7.0-fftw_py312he477bca_101.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalburst-2.0.7-py312hd9443c7_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalframe-3.0.7-py312hf57c059_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinference-4.1.9-py312hf57c059_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinspiral-5.0.3-py312hf57c059_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalmetaio-4.0.6-py312hf57c059_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalpulsar-7.1.1-py312hf57c059_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalsimulation-6.2.0-py312h7cf3665_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lal-7.6.1-fftw_py312h0f8b06b_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalburst-2.0.6-py312heec191f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalframe-3.0.6-py312he0011b7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinference-4.1.8-py312he0011b7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinspiral-5.0.2-py312he0011b7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalmetaio-4.0.5-py312he0011b7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalpulsar-7.1.0-py312he0011b7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalsimulation-6.1.0-py312he758b9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-ligo-lw-1.8.3-py312hea69d52_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py312h04c11ed_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.8.1-h8246384_0.conda @@ -3560,6 +3520,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/9d/1f4495bf047e61e904a69242941aca04ad3c7453639d9019c5d8facb3862/juliapkg-0.1.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/f1/2033813456213ecfe8ccab18d78ef7b00af70d049c916cb167d592bdd6da/scri-2022.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/97/8d/17e56f2208b885aa8462277ae75a9bc82f7877bb52d88690636246853032/requests_pelican-0.2.0-py3-none-any.whl @@ -3572,7 +3533,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bc/b2/d213f02254956b40f70dfaf2ba21ed0d1b7ed54b7cf361865d9d95fae867/asimov-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/b1/6bc28d9441c48744b6ecfb46af928fca427a3213282efa0faa5bea7eefd8/pesummary-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/9b/7a0e11d7858feac24372ae770575802833436a050f93dfd012d8025e4ae9/deepdish-0.3.7-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/c6/7a6d8f56d3efe2ddb2bc659c2b1f9ba01b8a27174733526b57e181ba23b0/spherical_functions-2023.0.2-py3-none-any.whl @@ -3662,22 +3622,6 @@ packages: - pkg:pypi/astropy-healpix?source=hash-mapping size: 116115 timestamp: 1768880212636 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.1-ha62d5e7_3.conda - sha256: ccbf2cc4bea4aab6e071d67ecc2743197759f6df855787e7a5f57f7973f913a2 - md5: 55eaf7066da1299d217ab32baedc7fa8 - depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - aws-c-io >=0.26.3,<0.26.4.0a0 - - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - aws-c-http >=0.10.13,<0.10.14.0a0 - - aws-c-cal >=0.9.13,<0.9.14.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 134427 - timestamp: 1777489423676 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.6-hb9c0fe4_1.conda sha256: 84f9e2f83d9d93da551e0058c651015dd4bfd84256c6293db01130911c5e0f12 md5: b1143a5b5a03ee174b3f3f7c49df3c09 @@ -3745,21 +3689,6 @@ packages: purls: [] size: 58801 timestamp: 1771380394434 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.7.0-h9b893ba_0.conda - sha256: 9692edaeaf90f7710b7ec49c7ca42961c59344dafa6fadbaec8c283b0606ca68 - md5: 60076118b1579967748f0c9a2912de7c - depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - aws-checksums >=0.2.10,<0.2.11.0a0 - - aws-c-io >=0.26.3,<0.26.4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 59054 - timestamp: 1774479894768 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.10-hf621c6d_0.conda sha256: c61272aaff8aec10bb6a2afa62a7181e4ab00f4577350a8023431c74b9e91a72 md5: 977e7d3cba1ef84fc088869b292672fe @@ -3775,21 +3704,6 @@ packages: purls: [] size: 225671 timestamp: 1771421336421 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.13-h4bacb7b_0.conda - sha256: 38cfc8894db6729770ac18f900296c3f7c20f349a5586a8d8e1a62571fce61d5 - md5: 77f70a9ab785a146dbf66fba00131403 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - aws-c-compression >=0.3.2,<0.3.3.0a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - aws-c-cal >=0.9.13,<0.9.14.0a0 - - aws-c-io >=0.26.3,<0.26.4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 225826 - timestamp: 1774488399486 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.1-hc87160b_2.conda sha256: f224ba83bba90744cb8a85ce63075b2cd940cb8e232bc3e3f32d7aac833ab61c md5: 3a7d90d34895728f0b69107602b6e189 @@ -3804,20 +3718,6 @@ packages: purls: [] size: 181558 timestamp: 1773409398408 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-hb18f61d_2.conda - sha256: eee7f7aa2c5b9e0a31edba7b81482036fbe751c40bc6697fd057fbd2c656406b - md5: d1337309873c443bcc9f118b67eed84e - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - aws-c-cal >=0.9.13,<0.9.14.0a0 - - s2n >=1.7.3,<1.7.4.0a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 181606 - timestamp: 1779133007375 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.14.0-ha25ca29_1.conda sha256: 2e9f2fc6ca8aa993b4962dbae711df69e8091b6a691bdcef8c8398dc81f923d7 md5: a827b063719f5aac504d06ac77cc3125 @@ -3832,20 +3732,6 @@ packages: purls: [] size: 220029 timestamp: 1771458032786 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.15.2-hc1936db_2.conda - sha256: 236ab4138ff4600f95903d2da94125df78577055f6687afa8806db0f6ed2e1a8 - md5: 9120bc47b6f837f3cea90928c3e9a8fa - depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - aws-c-http >=0.10.13,<0.10.14.0a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - aws-c-io >=0.26.3,<0.26.4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 221638 - timestamp: 1777488145895 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.11.5-h9b5df67_3.conda sha256: 4ec226a26aa1971d739f8600310b98f6ce8c24b93d88f8acb8387e9de0f4361e md5: 1f130ac4eb7f1dea1ae4b5f53683e3aa @@ -3864,24 +3750,6 @@ packages: purls: [] size: 151354 timestamp: 1771586299371 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.12.2-he6ee468_1.conda - sha256: 4cecb4d595b7cf558087c37b8131cae5204b2c64d75f6b951dc3731d3f872bb8 - md5: 50ae8372984b8b98e056ac8f6b70ab29 - depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - aws-checksums >=0.2.10,<0.2.11.0a0 - - aws-c-cal >=0.9.13,<0.9.14.0a0 - - aws-c-io >=0.26.3,<0.26.4.0a0 - - openssl >=3.5.6,<4.0a0 - - aws-c-http >=0.10.13,<0.10.14.0a0 - - aws-c-auth >=0.10.1,<0.10.2.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 152657 - timestamp: 1777824812393 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda sha256: 9d62c5029f6f8219368a8665f0a549da572dc777f52413b7d75609cacdbc02cc md5: c7e3e08b7b1b285524ab9d74162ce40b @@ -3927,27 +3795,6 @@ packages: purls: [] size: 410093 timestamp: 1771983327389 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.38.3-h745e52d_1.conda - sha256: 5616649034662ab7846b78b344891f49b895807cabd83918aebb3439aa9ca405 - md5: 6a65b3595a8933808c03ff065dfb7702 - depends: - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - - libgcc >=14 - - aws-c-auth >=0.10.1,<0.10.2.0a0 - - aws-c-cal >=0.9.13,<0.9.14.0a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - aws-c-s3 >=0.12.2,<0.12.3.0a0 - - aws-c-mqtt >=0.15.2,<0.15.3.0a0 - - aws-c-io >=0.26.3,<0.26.4.0a0 - - aws-c-event-stream >=0.7.0,<0.7.1.0a0 - - aws-c-http >=0.10.13,<0.10.14.0a0 - - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 412541 - timestamp: 1778019077033 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.747-h133b1ee_1.conda sha256: ac6090e6ab8cc2c927e7f62d90918de169cdd35e580fab8a95dc5d5ba8515fd0 md5: 36afc05aac7c7f516749cdd3b5e978d9 @@ -3965,23 +3812,6 @@ packages: purls: [] size: 3624539 timestamp: 1772084530342 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.747-h41c0014_4.conda - sha256: f17585991350e00084614faaa704166a07fdcf58e80c76003e35111093c6e5e9 - md5: 169a79ea1127077d8dc36dc963ff55ac - depends: - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - libzlib >=1.3.2,<2.0a0 - - aws-crt-cpp >=0.38.3,<0.38.4.0a0 - - libcurl >=8.20.0,<9.0a0 - - aws-c-event-stream >=0.7.0,<0.7.1.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 3624409 - timestamp: 1778156208464 - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.16.2-h206d751_0.conda sha256: 321d1070905e467b6bc6f5067b97c1868d7345c272add82b82e08a0224e326f0 md5: 5492abf806c45298ae642831c670bba0 @@ -4223,33 +4053,6 @@ packages: purls: [] size: 978114 timestamp: 1741554591855 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda - sha256: 06525fa0c4e4f56e771a3b986d0fdf0f0fc5a3270830ee47e127a5105bde1b9a - md5: bb6c4808bfa69d6f7f6b07e5846ced37 - depends: - - __glibc >=2.17,<3.0.a0 - - fontconfig >=2.15.0,<3.0a0 - - fonts-conda-ecosystem - - icu >=78.1,<79.0a0 - - libexpat >=2.7.3,<3.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - libgcc >=14 - - libglib >=2.86.3,<3.0a0 - - libpng >=1.6.53,<1.7.0a0 - - libstdcxx >=14 - - libxcb >=1.17.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - pixman >=0.46.4,<1.0a0 - - xorg-libice >=1.1.2,<2.0a0 - - xorg-libsm >=1.2.6,<2.0a0 - - xorg-libx11 >=1.8.12,<2.0a0 - - xorg-libxext >=1.3.6,<2.0a0 - - xorg-libxrender >=0.9.12,<0.10.0a0 - license: LGPL-2.1-only or MPL-1.1 - purls: [] - size: 989514 - timestamp: 1766415934926 - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda sha256: 7dafe8173d5f94e46cf9cd597cc8ff476a8357fbbd4433a8b5697b2864845d9c md5: 648ee28dcd4e07a1940a17da62eccd40 @@ -4266,9 +4069,9 @@ packages: - pkg:pypi/cffi?source=hash-mapping size: 295716 timestamp: 1761202958833 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.6.3-ha0b56bc_0.conda - sha256: 31beae4b063f5e39ade020d3ee1ade0fdc8d5556fafac4d004ebe74ffbad44dd - md5: 0fb449e4da07934a40db021c84773ed0 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.6.2-ha0b56bc_1.conda + sha256: 7f36c319c2821b53628a455ecf276bde7b5519f795fdf180c7fad264c7c68744 + md5: f91b4da04d6e52178e420f8dc871bbfc depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 @@ -4277,8 +4080,8 @@ packages: - libzlib >=1.3.1,<2.0a0 license: LicenseRef-fitsio purls: [] - size: 759758 - timestamp: 1759288114492 + size: 765594 + timestamp: 1753286825348 - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.3-hecca717_0.conda sha256: 53504e965499b4845ca3dc63d5905d5a1e686fcb9ab17e83c018efa479e787d0 md5: 937ca49a245fcf2b88d51b6b52959426 @@ -4291,18 +4094,18 @@ packages: purls: [] size: 161768 timestamp: 1772712510770 -- conda: https://conda.anaconda.org/conda-forge/linux-64/chealpix-3.31.0-h001b3b8_9.conda - sha256: 6510379f373f9838b66d6b178715aa2b3deaa38cee465ee83dfe1b3e76ec96a7 - md5: f343aa0bf5d5cb7ceac6229c8d4427ca +- conda: https://conda.anaconda.org/conda-forge/linux-64/chealpix-3.31.0-ha55a0e1_8.conda + sha256: 9a7760fbd4fb74079114e31b1723526474c6e3cc3c4d0915c2e62742a38e1283 + md5: cdc00718e8732ccc223cf95b7323e4fb depends: - __glibc >=2.17,<3.0.a0 - - cfitsio >=4.6.3,<4.6.4.0a0 + - cfitsio >=4.6.2,<4.6.3.0a0 - libgcc >=14 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 40577 - timestamp: 1764670922898 + size: 40483 + timestamp: 1756896844897 - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda sha256: 62447faf7e8eb691e407688c0b4b7c230de40d5ecf95bf301111b4d05c5be473 md5: 43c2bc96af3ae5ed9e8a10ded942aa50 @@ -4352,22 +4155,6 @@ packages: - pkg:pypi/cryptography?source=hash-mapping size: 1912222 timestamp: 1777966300032 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda - sha256: 7684da83306bb69686c0506fb09aa7074e1a55ade50c3a879e4e5df6eebb1009 - md5: af491aae930edc096b58466c51c4126c - depends: - - __glibc >=2.17,<3.0.a0 - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=13 - - libntlm >=1.8,<2.0a0 - - libstdcxx >=13 - - libxcrypt >=4.4.36 - - openssl >=3.5.5,<4.0a0 - license: BSD-3-Clause-Attribution - license_family: BSD - purls: [] - size: 210103 - timestamp: 1771943128249 - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda sha256: ee09ad7610c12c7008262d713416d0b58bf365bc38584dce48950025850bdf3f md5: cae723309a49399d2949362f4ab5c9e4 @@ -4588,40 +4375,23 @@ packages: purls: [] size: 3376423 timestamp: 1626369596591 -- conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha4f8f14_102.conda - sha256: de9ec9b1b01b90f2da2d896a5835a2fd8049859aff0c6331ca4594327ec79a8b - md5: b270340809d19ae40ff9913f277b803a - depends: - - __glibc >=2.17,<3.0.a0 - - cached-property - - hdf5 >=1.14.6,<1.14.7.0a0 - - libgcc >=14 - - numpy >=1.23,<3 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/h5py?source=hash-mapping - size: 1335314 - timestamp: 1775581269364 -- conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha829cd9_102.conda - sha256: 578ab0db104435ac003061e103789299720fc49b8b3e8401dabd5130a1ef8663 - md5: c6e5cf708b01707fe4cd5e4dc56cf4cc +- conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.13.0-nompi_py312hedeef09_100.conda + sha256: 76bb853325f0c756599edb0be014723b01fea61e24817fd2f0b9ddfe4c570c0f + md5: ed73cf6f5e1ce5e823e6efcf54cbdc51 depends: - __glibc >=2.17,<3.0.a0 - cached-property - - hdf5 >=2.1.0,<3.0a0 - - libgcc >=14 - - numpy >=1.23,<3 + - hdf5 >=1.14.3,<1.14.4.0a0 + - libgcc >=13 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/h5py?source=hash-mapping - size: 1339689 - timestamp: 1775581278758 + size: 1388165 + timestamp: 1739952623855 - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.2.0-h15599e2_0.conda sha256: 6bd8b22beb7d40562b2889dc68232c589ff0d11a5ad3addd41a8570d11f039d9 md5: b8690f53007e9b5ee2c2178dd4ac778c @@ -4642,80 +4412,36 @@ packages: purls: [] size: 2411408 timestamp: 1762372726141 -- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.0-h6083320_0.conda - sha256: 232c95b56d16d33d8256026a3b1ad34f7f9a75c179d388854be0fd624ddba9e3 - md5: e194f6a2f498f0c7b1e6498bd0b12645 - depends: - - __glibc >=2.17,<3.0.a0 - - cairo >=1.18.4,<2.0a0 - - graphite2 >=1.3.14,<2.0a0 - - icu >=78.3,<79.0a0 - - libexpat >=2.7.5,<3.0a0 - - libfreetype >=2.14.3 - - libfreetype6 >=2.14.3 - - libgcc >=14 - - libglib >=2.86.4,<3.0a0 - - libstdcxx >=14 - - libzlib >=1.3.2,<2.0a0 - license: MIT - license_family: MIT - purls: [] - size: 2333599 - timestamp: 1776778392713 -- conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_106.conda - sha256: 1fc50ce3b86710fba3ec9c5714f1612b5ffa4230d70bfe43e2a1436eacba1621 - md5: c223ee1429ba538f3e48cfb4a0b97357 +- conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_109.conda + sha256: e8669a6d76d415f4fdbe682507ac3a3b39e8f493d2f2bdc520817f80b7cc0753 + md5: e7a7a6e6f70553a31e6e79c65768d089 depends: - __glibc >=2.17,<3.0.a0 - - libaec >=1.1.5,<2.0a0 - - libcurl >=8.18.0,<9.0a0 - - libgcc >=14 + - libaec >=1.1.3,<2.0a0 + - libcurl >=8.11.1,<9.0a0 + - libgcc >=13 - libgfortran - - libgfortran5 >=14.3.0 - - libstdcxx >=14 + - libgfortran5 >=13.3.0 + - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.5,<4.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 3708864 - timestamp: 1770390337946 -- conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_h87a9417_105.conda - sha256: beb8a2fb18924ca7b5b82cfb50f008f882f577daef2c00ed88022abea35fec76 - md5: 0d0595612fa229dddb5fc565c260a11f - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-auth >=0.10.1,<0.10.2.0a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - aws-c-http >=0.10.13,<0.10.14.0a0 - - aws-c-io >=0.26.3,<0.26.4.0a0 - - aws-c-s3 >=0.12.2,<0.12.3.0a0 - - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 - - libaec >=1.1.5,<2.0a0 - - libcurl >=8.20.0,<9.0a0 - - libgcc >=14 - - libgfortran - - libgfortran5 >=14.3.0 - - libstdcxx >=14 - - libzlib >=1.3.2,<2.0a0 - - openssl >=3.5.6,<4.0a0 + - openssl >=3.4.0,<4.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 4713397 - timestamp: 1777861887131 -- conda: https://conda.anaconda.org/conda-forge/linux-64/healpy-1.19.0-py312hb99e9eb_2.conda - sha256: f65c5c4a0d81feec9fd6676b1edfacff3200106d8113b091e2b773ea251df8c9 - md5: efbe39dbdb4991feb3a20cf927566880 + size: 3930078 + timestamp: 1737516601132 +- conda: https://conda.anaconda.org/conda-forge/linux-64/healpy-1.18.1-py312he9d304c_2.conda + sha256: 7f0663eaa865687d15d661d9ed21fa5d971fd01eb87df7cc94c91a8e0249193e + md5: 7a4d9a6043e509f64995f6ec6bd24ae7 depends: - __glibc >=2.17,<3.0.a0 - astropy-base - - cfitsio >=4.6.3,<4.6.4.0a0 + - cfitsio >=4.6.2,<4.6.3.0a0 - libgcc >=14 - libgfortran - libgfortran5 >=14.3.0 - libstdcxx >=14 - - libzlib >=1.3.2,<2.0a0 + - libzlib >=1.3.1,<2.0a0 - matplotlib-base - numpy >=1.23,<3 - python >=3.12,<3.13.0a0 @@ -4725,8 +4451,8 @@ packages: license_family: GPL purls: - pkg:pypi/healpy?source=hash-mapping - size: 2166869 - timestamp: 1774834007399 + size: 2818682 + timestamp: 1757172185669 - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-24.12.4-py312h7900ff3_0.conda sha256: a75dd3e93e5c9d6e097392adfc0849f4e7639b01a5f19aa88a026dd8d53ee02e md5: 92495faf88b9faf255b9355229216b85 @@ -4743,22 +4469,22 @@ packages: purls: [] size: 23452 timestamp: 1759416970099 -- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-25.10.1-py312h7900ff3_0.conda - sha256: a70ffeffdef4e12da6e703da1de9802f3f45421937a604b54b70f39f81535689 - md5: b658441442ab6c35d45656f87e78e573 - depends: - - htcondor-classads 25.10.1 h793e66c_0 - - htcondor-cli 25.10.1 py312h7900ff3_0 - - htcondor-utils 25.10.1 h8d23d0f_0 - - libcondor_utils 25.10.1 h4effbbe_0 +- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-25.6.1-py312h7900ff3_0.conda + sha256: dd86f67163b26600b5dfbd298181c51544822da196100c2ad114a338a74b1109 + md5: bc786d8b18589585b49da9a56b4dac4e + depends: + - htcondor-classads 25.6.1 h793e66c_0 + - htcondor-cli 25.6.1 py312h7900ff3_0 + - htcondor-utils 25.6.1 h41609d3_0 + - libcondor_utils 25.6.1 h9f200e7_0 - python >=3.12,<3.13.0a0 - - python-htcondor 25.10.1 py312h40fa4ac_0 + - python-htcondor 25.6.1 py312h40fa4ac_0 - python_abi 3.12.* *_cp312 license: Apache-2.0 license_family: APACHE purls: [] - size: 22403 - timestamp: 1778792535321 + size: 22697 + timestamp: 1769821218938 - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-classads-24.12.4-hf1419ba_0.conda sha256: e1dfb61b1b8252ea5451601e9088e0080bd8e2a41aeaccf3b04c6e76cce512a0 md5: 0771e88823ac06decd5b3e3d762202ac @@ -4772,9 +4498,9 @@ packages: purls: [] size: 11890389 timestamp: 1759415794736 -- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-classads-25.10.1-h793e66c_0.conda - sha256: bbbb0f4c72f530e89c12cf85d75f1d05613e308630b7e0608f2aa4bb841e09bf - md5: 3b1b74e1a556ae6d49bfc9a275ff2b15 +- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-classads-25.6.1-h793e66c_0.conda + sha256: f38207b06a5007416838b08d11ec5256669778597311854dc164041ca05e5e0b + md5: 6c3643ee222688f65d61b0d0debd2678 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -4783,8 +4509,8 @@ packages: license: Apache-2.0 license_family: APACHE purls: [] - size: 11957963 - timestamp: 1778792191542 + size: 11933761 + timestamp: 1769820747387 - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-cli-24.12.4-py312h7900ff3_0.conda sha256: 918add18c5a956ede11105bf703f82db6154593145a1114c6dc2656844bb1c93 md5: d3ca4377b069c9e1dd15276595ff2ade @@ -4798,19 +4524,19 @@ packages: - pkg:pypi/htcondor-cli?source=hash-mapping size: 153921 timestamp: 1759416911673 -- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-cli-25.10.1-py312h7900ff3_0.conda - sha256: c34a3db8f8588d18b61b7ae694149c6be11068f4c40d8ebce9047402a9d72d48 - md5: abbe0d39442da1975ee7be3849745f1b +- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-cli-25.6.1-py312h7900ff3_0.conda + sha256: fa5e32900829c8682062ce1d86b28988f2230fc61274237fe8acc408e44217a0 + md5: c3763e69f850d2be9272279b53304bb6 depends: - python >=3.12,<3.13.0a0 - - python-htcondor 25.10.1 py312h40fa4ac_0 + - python-htcondor 25.6.1 py312h40fa4ac_0 - python_abi 3.12.* *_cp312 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/htcondor-cli?source=hash-mapping - size: 174899 - timestamp: 1778792510774 + size: 154972 + timestamp: 1769821144309 - conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-utils-24.12.4-h4a68bad_0.conda sha256: 1f9d644542720037a81bc5b5a31d49b274f67415e80270cdcc8b1975dce2756f md5: 9cbb6b4b95410165adb24090d739bd67 @@ -4829,24 +4555,24 @@ packages: purls: [] size: 25774213 timestamp: 1759415888312 -- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-utils-25.10.1-h8d23d0f_0.conda - sha256: 0fe2a1dcd64b91c493d270a33a600b117cf5d1d9a8d1d1c4048197463fb681a2 - md5: 2ed89ef0c97aea7404330a4f2f986ad1 +- conda: https://conda.anaconda.org/conda-forge/linux-64/htcondor-utils-25.6.1-h41609d3_0.conda + sha256: b28ab849e2b394e52af839965cf8962e13c9ce078cb51be00ec244f7513aa9b6 + md5: 847f563afbc1522cbc55c6456d8ece4a depends: - __glibc >=2.17,<3.0.a0 - - htcondor-classads 25.10.1 h793e66c_0 - - libcondor_utils 25.10.1 h4effbbe_0 - - libcurl >=8.20.0,<9.0a0 + - htcondor-classads 25.6.1 h793e66c_0 + - libcondor_utils 25.6.1 h9f200e7_0 + - libcurl >=8.18.0,<9.0a0 - libgcc >=14 - libstdcxx >=14 - - libuuid >=2.42,<3.0a0 - - openssl >=3.5.6,<4.0a0 - - scitokens-cpp >=1.4.0,<2.0a0 + - libuuid >=2.41.3,<3.0a0 + - openssl >=3.5.5,<4.0a0 + - scitokens-cpp >=1.3.0,<2.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 27667256 - timestamp: 1778792257390 + size: 26837458 + timestamp: 1769820828993 - conda: https://conda.anaconda.org/conda-forge/linux-64/htgettoken-2.6-py312h7900ff3_0.conda sha256: ed166a6c3b811acfd2269a218da9784e718975e6fe48b2fd9411d682c50510ac md5: d341279ba84525b9ac1ea09e28c9022c @@ -4875,18 +4601,6 @@ packages: purls: [] size: 12129203 timestamp: 1720853576813 -- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a - md5: c80d8a3b84358cb967fa81e7075fbc8a - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - purls: [] - size: 12723451 - timestamp: 1773822285671 - conda: https://conda.anaconda.org/conda-forge/linux-64/igwn-ligolw-2.1.1-py312h53c857e_1.conda sha256: c2fbe2a1ed34588dcf251ae4a2d8a74a589ae11ef5816e09e25a2a34f6f4c57c md5: 441adf613cc02135af099f76402829b3 @@ -5029,319 +4743,245 @@ packages: purls: [] size: 1370023 timestamp: 1719463201255 -- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - sha256: 3e307628ca3527448dd1cb14ad7bb9d04d1d28c7d4c5f97ba196ae984571dd25 - md5: fb53fb07ce46a575c5d004bbc96032c2 - depends: - - __glibc >=2.17,<3.0.a0 - - keyutils >=1.6.3,<2.0a0 - - libedit >=3.1.20250104,<3.2.0a0 - - libedit >=3.1.20250104,<4.0a0 - - libgcc >=14 - - libstdcxx >=14 - - openssl >=3.5.5,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 1386730 - timestamp: 1769769569681 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lal-7.7.0-fftw_py312h3c92f15_101.conda - sha256: d1a2e42d18ffac5fff9e73659ea20bd48cebad3fc2aef8fea6e4aeb6283e4378 - md5: b8c7d01aa8c26054751c5d0c18572ef9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lal-7.6.1-fftw_py312ha96d5c7_100.conda + sha256: c70ebfc1f85ff7a09d7667e6784b1c2aad80b70fd79e975e7e28d4dcdaa575fe + md5: 4b4ac92d2ad8037dc2b8bab94911c473 depends: - __glibc >=2.17,<3.0.a0 - fftw >=3.3.10,<4.0a0 - - igwn-ligolw - - igwn-segments - - libgcc >=14 - - liblal 7.7.0 fftw_h0eb8034_101 + - libgcc >=13 + - liblal 7.6.1 fftw_hcbe9c14_100 + - ligo-segments - numpy - python >=3.12,<3.13.0a0 - - python-lal 7.7.0 fftw_py312h26d0d96_101 + - python-lal 7.6.1 fftw_py312heccaa44_100 + - python-ligo-lw - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 85597 - timestamp: 1755600484293 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lal-7.7.0-fftw_py312he4eb8fe_104.conda - sha256: ed81cf0e25934a068526a536854db20e03c46b9517f56ab11cc65799aeaf550d - md5: 38787938a5ee46f0a69070fe5578775e + size: 83058 + timestamp: 1734696072240 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalapps-10.0.2-py312h760c983_2.conda + sha256: 9545e7ce03526625cef73b8ea981d0c7f9273e6870cdb04ec4e8cec9ec07875c + md5: 97d6f5be8467b5cf6ef3d750297968d6 depends: - __glibc >=2.17,<3.0.a0 - - fftw >=3.3.10,<4.0a0 - - igwn-segments - - libgcc >=14 - - liblal 7.7.0 fftw_h9f6c97b_104 - - numpy - - python >=3.12,<3.13.0a0 - - python-lal 7.7.0 fftw_py312hb15a3d9_104 - - python_abi 3.12.* *_cp312 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 86533 - timestamp: 1774637334848 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lalapps-10.1.0-py312h8a05548_2.conda - sha256: 3e9b4073b414435c7f9c9be210a1c3a18d9f1e5b5c608ce7783acb5a0e9f531f - md5: 8784862eb56c6a7a40a5ff540db36f0f - depends: - - cfitsio - - gsl + - cfitsio >=4.6.2,<4.6.3.0a0 + - gsl >=2.7,<2.8.0a0 - h5py - - igwn-ligolw >=2.1.0 - - igwn-segments - - lal >=7.7.0 + - lal >=7.6.0 - lalburst >=2.0.0 - lalframe >=3.0.0 - lalinference >=4.1.0 - lalinspiral >=5.0.0 - lalmetaio >=4.0.0 - lalpulsar >=7.1.0 - - lalsimulation >=6.2.0 + - lalsimulation >=6.1.0 - libframel >=8.39.2 - - libmetaio >=8.2.0 - - numpy - - pillow - - python - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - liblalinspiral >=5.0.3,<6.0a0 - - liblalmetaio >=4.0.6,<5.0a0 - - gsl >=2.7,<2.8.0a0 - - liblalpulsar >=7.1.1,<8.0a0 - - liblalburst >=2.0.7,<3.0a0 - - liblalsimulation >=6.2.0,<7.0a0 - - libmetaio >=8.5.1,<9.0a0 - - liblalinference >=4.1.9,<5.0a0 - - liblal >=7.7.0,<8.0a0 - libframel >=8.41.3,<9.0a0 - - liblalframe >=3.0.7,<4.0a0 - - cfitsio >=4.6.3,<4.6.4.0a0 - - python_abi 3.12.* *_cp312 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 2480748 - timestamp: 1771238025460 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lalburst-2.0.7-py312h4c3975b_2.conda - sha256: fa7ce50107211ff152b3923b184d0701d5216ee3d6b85b6d07e37d1cef672c5f - md5: 7722fd6fd8826e699511eb4a88c7ca67 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalburst 2.0.7 h43c0734_2 + - libgcc >=13 + - liblal >=7.6.1,<8.0a0 + - liblalburst >=2.0.6,<3.0a0 + - liblalframe >=3.0.6,<4.0a0 + - liblalinference >=4.1.8,<5.0a0 + - liblalinspiral >=5.0.2,<6.0a0 + - liblalmetaio >=4.0.5,<5.0a0 + - liblalpulsar >=7.1.0,<8.0a0 + - liblalsimulation >=6.1.0,<7.0a0 + - libmetaio >=8.4.0 + - libmetaio >=8.5.1,<9.0a0 + - ligo-segments + - numpy - pillow - python >=3.12,<3.13.0a0 - - python-lalburst 2.0.7 py312h71fd7f1_2 + - python-ligo-lw >=1.7.0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 56539 - timestamp: 1771409840763 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lalframe-3.0.7-py312h4c3975b_2.conda - sha256: 4fd8dfcfa6e5800cf4c0cc8cd3e4b68f3b9395f4db3de4efe88f3a7dd2947482 - md5: 98e9577d17a9b8bd79eb9c87b0eeb598 + size: 2100126 + timestamp: 1744228831801 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalburst-2.0.6-py312h66e93f0_0.conda + sha256: df82091036013f14425593376e24cad5daf9256c6d9c952a41ba213b96ca49a7 + md5: ddb63c216e5314801600ea0d6f1bbfe4 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - liblal >=7.7.0,<8.0a0 - - liblalframe 3.0.7 hbf9efdd_2 + - libgcc >=13 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 + - liblalburst 2.0.6 h3773ae6_0 + - pillow - python >=3.12,<3.13.0a0 - - python-lalframe 3.0.7 py312h4f23490_2 + - python-lalburst 2.0.6 py312h3684b61_0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 361796 - timestamp: 1774541561700 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-4.1.9-nompi_py312h1d0e7ed_100.conda - sha256: eaa69fa956bd30d79857adeb8b9c45538e3429af38e5ca2de05313a9aab8e1d3 - md5: 818ca24a9ade3c4ab853b2501deea0f6 + size: 55680 + timestamp: 1734709342842 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalframe-3.0.6-py312h66e93f0_0.conda + sha256: 5c0c425a2b7939be2fc1eaf6ce2b4b17e040ce3c8e8e5cfc234fb6b3a16809ad + md5: 4186e287b6755e12d5e3f87c55e3662b depends: - __glibc >=2.17,<3.0.a0 - - astropy-base >=1.1.1 - - h5py - - icu >=75.1,<76.0a0 - - igwn-ligolw >=2.1.0 - libgcc >=13 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalinference 4.1.9 h3773ae6_0 - - ligo-gracedb - - lscsoft-glue >=1.54.1 - - matplotlib-base >=1.2.0 + - liblal >=7.6.0,<8.0a0 + - liblalframe 3.0.6 h7c287a6_0 - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 - - python-lalinference 4.1.9 py312hc0a28a1_0 - - python-lalsimulation >=6.2.0 + - python-lalframe 3.0.6 py312hc0a28a1_0 - python_abi 3.12.* *_cp312 - - scipy >=0.9.0 - - six license: GPL-2.0-or-later license_family: GPL purls: [] - size: 141029 - timestamp: 1748278287353 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-4.1.9-nompi_py312h894bbbb_102.conda - sha256: f280a6d65b8a5e4cb3e3457c45defb8fe2073fb42afb67da338503805686823f - md5: 73f92c14d61863bfe8cc3c8288b05d9a + size: 390097 + timestamp: 1734696415634 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-4.1.8-nompi_py312h1d0e7ed_100.conda + sha256: e663614560c069fac522d854de01828d3268b3a4878a9e284622999ffeaa836e + md5: 4dff3d43fde4faeabd234ac6a6e843eb depends: - __glibc >=2.17,<3.0.a0 - astropy-base >=1.1.1 - h5py - - icu >=78.3,<79.0a0 - - igwn-ligolw >=2.1.0 - - libgcc >=14 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalinference 4.1.9 h43c0734_2 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 + - liblalinference 4.1.8 h3773ae6_0 - ligo-gracedb - lscsoft-glue >=1.54.1 - matplotlib-base >=1.2.0 - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 - - python-lalinference 4.1.9 py312h4f23490_2 - - python-lalsimulation >=6.2.0 + - python-lal >=7.6.0 + - python-lalinference 4.1.8 py312hc0a28a1_0 + - python-lalsimulation >=6.1.0 + - python-ligo-lw >=1.7.0 - python_abi 3.12.* *_cp312 - scipy >=0.9.0 - six license: GPL-2.0-or-later license_family: GPL purls: [] - size: 141431 - timestamp: 1774964216149 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-data-4.1.9-ha770c72_0.conda - sha256: 4ffba18f2f8062df96318e74a71e28cf03a47b4f3aa9557e322a91932b8a9780 - md5: abd584c795b4d779e4a57428b8f1d4ed - constrains: - - liblalinference >=3.0.3 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 32373 - timestamp: 1748277779253 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-data-4.1.9-ha770c72_2.conda - sha256: 6062e5ec27fb6fa4daecb7b9ca65315fd3a992e5c8f4e579159fbf0becafe734 - md5: 94f0af952fdad29716c49d37ac379907 + size: 141220 + timestamp: 1734713000016 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalinference-data-4.1.8-ha770c72_0.conda + sha256: 40983befc7938fdc61421813e86a9994a5630e34c4639cf2f9cb29cf7a2005d7 + md5: eb6caf2436d2d69f3f65550bd6f8c1d2 constrains: - liblalinference >=3.0.3 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 32527 - timestamp: 1774963649603 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lalinspiral-5.0.3-py312h4c3975b_3.conda - sha256: 4835f1c546202d6ed638db8314a977773f21179d4120d38f5f7de7a9b07bde27 - md5: 44759365a85aa59719a68db1d625e465 + size: 31854 + timestamp: 1734712638698 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalinspiral-5.0.2-py312h66e93f0_0.conda + sha256: b0e63d667d2c34aaad9b4124d932c4d1b617b1b425d2d7e048d65547af44dfeb + md5: 5c31999806fe276ee735aab649ed67d2 depends: - __glibc >=2.17,<3.0.a0 - - igwn-segments - - libgcc >=14 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalinspiral 5.0.3 h43c0734_3 + - libgcc >=13 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 + - liblalinspiral 5.0.2 h3773ae6_0 + - ligo-segments - python >=3.12,<3.13.0a0 - - python-lalinspiral 5.0.3 py312h4f23490_3 + - python-lalinspiral 5.0.2 py312hc0a28a1_0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 28812 - timestamp: 1774544057987 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lalmetaio-4.0.6-py312h4c3975b_2.conda - sha256: 60144d7ee6a958da4c70edd07bec8729418cee65b35116dc9490948cff898295 - md5: 14f27dcd7721ce972e2037e78054ba83 + size: 27425 + timestamp: 1734709092019 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalmetaio-4.0.5-py312h66e93f0_2.conda + sha256: a1f6b79764b8b5a89ea5678edbf7a7d072bcf675d1801bdd7aed78c8391a831f + md5: 5dccf786ab17b4a5342621f5184b0aae depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalmetaio 4.0.6 hb03c661_2 + - libgcc >=13 + - liblal >=7.6.0 + - liblal >=7.6.0,<8.0a0 + - liblalmetaio 4.0.5 hb9d3cd8_2 - python >=3.12,<3.13.0a0 - - python-lalmetaio 4.0.6 py312h4f23490_2 + - python-lalmetaio 4.0.5 py312hc0a28a1_2 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 23710 - timestamp: 1774543136676 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-7.1.1-py312h14108ff_2.conda - sha256: e015062f1b476586f72eb6619a73e63ac933212c4fa3886f957817c6d278cd62 - md5: 745221491004b1e21d38cc58058a4ad1 + size: 22779 + timestamp: 1734275397248 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-7.1.0-py312he8860a6_1.conda + sha256: df5689a3cac43d1790c7c0c70152eab7a22d29d90767bb09fb6c6a8c0ebfa7dd + md5: a2ce619f3b4bd911a84f58c61b42c6f5 depends: - __glibc >=2.17,<3.0.a0 - astropy-base - - cfitsio >=4.6.3,<4.6.4.0a0 + - cfitsio >=4.6.2,<4.6.3.0a0 - fftw >=3.3.10,<4.0a0 - gsl >=2.7,<2.8.0a0 - jplephem - lalinference >=4.1.0 - - libgcc >=14 + - libgcc >=13 - liblal >=7.6.0 - - liblal >=7.7.0,<8.0a0 + - liblal >=7.6.1,<8.0a0 - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 + - liblalframe >=3.0.6,<4.0a0 - liblalinference >=4.1.0 - - liblalinference >=4.1.9,<5.0a0 - - liblalpulsar 7.1.1 h3c7535d_2 + - liblalinference >=4.1.8,<5.0a0 + - liblalpulsar 7.1.0 h9345056_1 - liblalsimulation >=6.1.0 - - liblalsimulation >=6.2.0,<7.0a0 - - numpy >=1.23,<3 + - liblalsimulation >=6.1.0,<7.0a0 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python-lal >=7.6.0 - python-lalframe >=3.0.0 - python-lalinference >=4.1.0 - - python-lalpulsar 7.1.1 py312h4f23490_2 + - python-lalpulsar 7.1.0 py312hc0a28a1_1 - python-lalsimulation >=6.1.0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 1731119 - timestamp: 1774627738870 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-data-7.1.1-ha770c72_2.conda - sha256: c387cacc7b6aedaacd4699b4f1c4840f3090afee55c99312e5bd854d940163bd - md5: c76e527f18662948274bf0650213783e + size: 1736691 + timestamp: 1744218602788 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalpulsar-data-7.1.0-ha770c72_1.conda + sha256: 413de5cfcb560f218275ea99dc6b1ace3e2335aa35167c842f5ac6cae51faeae + md5: 8eafdb67f9e00a6ddbf18d3640f970c7 constrains: - liblalpulsar >=4.0.0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 90041050 - timestamp: 1774625764895 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-6.2.0-py312hd1ec2bb_3.conda - sha256: 1a7f985159c6801f4baeaedba6656ab0530912b28841df12799cdc6d58415f15 - md5: 2707df1001cdec205f4e88fbf02f3561 + size: 89997557 + timestamp: 1744215088937 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-6.1.0-py312h09b83b2_0.conda + sha256: 22dee83778bab61f36b2fa079bc266699f0ec79df20a77911f169c4602c8f9b6 + md5: a80afd999f3b7f29ff3f1c257c5ef194 depends: - __glibc >=2.17,<3.0.a0 - gsl >=2.7,<2.8.0a0 - - libgcc >=14 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalsimulation 6.2.0 py312hd1ec2bb_3 + - libgcc >=13 + - liblal >=7.6.0 + - liblal >=7.6.0,<8.0a0 + - liblalsimulation 6.1.0 py312h09b83b2_0 - mpmath >=1.0.0 - python >=3.12,<3.13.0a0 - - python-lalsimulation 6.2.0 py312h71fd7f1_3 + - python-lalsimulation 6.1.0 py312h09b83b2_0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 190327 - timestamp: 1774541332932 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-data-6.2.0-ha770c72_3.conda - sha256: fce82bb619c81f8ebcc5e8cc5c219e154d1c2d20cae861c00a0e9904c281deec - md5: 29aade78133b079c3b73ad042f280676 + size: 187962 + timestamp: 1734695978550 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lalsimulation-data-6.1.0-ha770c72_0.conda + sha256: 7040c7c0ec09a852b61236f7aae2d471f8ae3e2fd092cf1b3c42a5747fa2ef3e + md5: 91ea9f0cdd63b20be4e96e4e43025026 constrains: - liblalsimulation >=3.1.2 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 3642694 - timestamp: 1774541235570 + size: 3662005 + timestamp: 1734695801709 - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_0.conda sha256: eb89c6c39f2f6a93db55723dbb2f6bba8c8e63e6312bf1abf13e6e9ff45849c8 md5: f92f984b558e6e6204014b16d212b271 @@ -5475,44 +5115,6 @@ packages: purls: [] size: 6476655 timestamp: 1773271630169 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-24.0.0-h033f57b_2_cpu.conda - build_number: 2 - sha256: ec054deb459dffd5964a300a2c2b11ea0b30733405cae6879d9276cfc7e43260 - md5: ee6a5c5e61bc7272118a1f15f9a3e823 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.38.3,<0.38.4.0a0 - - aws-sdk-cpp >=1.11.747,<1.11.748.0a0 - - azure-core-cpp >=1.16.2,<1.16.3.0a0 - - azure-identity-cpp >=1.13.3,<1.13.4.0a0 - - azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0 - - azure-storage-files-datalake-cpp >=12.14.0,<12.14.1.0a0 - - bzip2 >=1.0.8,<2.0a0 - - glog >=0.7.1,<0.8.0a0 - - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 - - libbrotlidec >=1.2.0,<1.3.0a0 - - libbrotlienc >=1.2.0,<1.3.0a0 - - libgcc >=14 - - libgoogle-cloud >=3.5.0,<3.6.0a0 - - libgoogle-cloud-storage >=3.5.0,<3.6.0a0 - - libopentelemetry-cpp >=1.26.0,<1.27.0a0 - - libprotobuf >=6.33.5,<6.33.6.0a0 - - libstdcxx >=14 - - libzlib >=1.3.2,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - orc >=2.3.0,<2.3.1.0a0 - - snappy >=1.2.2,<1.3.0a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - apache-arrow-proc =*=cpu - - arrow-cpp <0.0a0 - - parquet-cpp <0.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 6497921 - timestamp: 1779475517197 - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-23.0.1-h635bf11_4_cpu.conda build_number: 4 sha256: 7839fbede8048f23e4ff2af07a9a434b522b5cc80e075e07c276e289d96fdc87 @@ -5528,21 +5130,6 @@ packages: purls: [] size: 608862 timestamp: 1773271881163 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-24.0.0-h635bf11_2_cpu.conda - build_number: 2 - sha256: 9f19abf335f64778a383b3b4e83eb3044deeb8817c4e3c56d7c44577130b6204 - md5: 87104635f538f60afc81b74ce70416a9 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 24.0.0 h033f57b_2_cpu - - libarrow-compute 24.0.0 h53684a4_2_cpu - - libgcc >=14 - - libstdcxx >=14 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 592078 - timestamp: 1779475696276 - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-compute-23.0.1-h53684a4_4_cpu.conda build_number: 4 sha256: 189d3b7f7292f19f37320b016feacd8f3636cc7377c49653da56141b158691ad @@ -5560,23 +5147,6 @@ packages: purls: [] size: 3004719 timestamp: 1773271711321 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-compute-24.0.0-h53684a4_2_cpu.conda - build_number: 2 - sha256: 5dd22caa43bf3dee4fb2d4fcb6ad03b8a904ae78d75b519559789ba403798649 - md5: e2a5ca285941f75273a26c5fd64cc46e - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 24.0.0 h033f57b_2_cpu - - libgcc >=14 - - libre2-11 >=2025.11.5 - - libstdcxx >=14 - - libutf8proc >=2.11.3,<2.12.0a0 - - re2 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 2994826 - timestamp: 1779475580825 - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-23.0.1-h635bf11_4_cpu.conda build_number: 4 sha256: 6b8416458e69697196fd03bbf6642855f32a1735d8bd92127b51634b68b88bf7 @@ -5594,23 +5164,6 @@ packages: purls: [] size: 608094 timestamp: 1773271988669 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-24.0.0-h635bf11_2_cpu.conda - build_number: 2 - sha256: 4d197fce6e34373dd8a2188cfa13927aa04ec4c0ed34be334c63128e9f0185c1 - md5: f6563a2292b54f8e0bca57178394f979 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 24.0.0 h033f57b_2_cpu - - libarrow-acero 24.0.0 h635bf11_2_cpu - - libarrow-compute 24.0.0 h53684a4_2_cpu - - libgcc >=14 - - libparquet 24.0.0 h7376487_2_cpu - - libstdcxx >=14 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 592667 - timestamp: 1779475776850 - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-23.0.1-hb4dd7c2_4_cpu.conda build_number: 4 sha256: bbffc6cc6deafe3993e66d5a7ccfbe520855e7c2e3797e5c54fa3f11cdd46c25 @@ -5630,25 +5183,6 @@ packages: purls: [] size: 518669 timestamp: 1773272024297 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-24.0.0-hb4dd7c2_2_cpu.conda - build_number: 2 - sha256: b01d502e1080ddd6645c15f3ecc1986baac2a684608bf6e9400720f5334044c0 - md5: c5e748d5406229f4c046dedd5ea31723 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 - - libarrow 24.0.0 h033f57b_2_cpu - - libarrow-acero 24.0.0 h635bf11_2_cpu - - libarrow-dataset 24.0.0 h635bf11_2_cpu - - libgcc >=14 - - libprotobuf >=6.33.5,<6.33.6.0a0 - - libstdcxx >=14 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 502082 - timestamp: 1779475803489 - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.4.1-hcfa2d63_0.conda sha256: e29d8ed0334305c6bafecb32f9a1967cfc0a081eac916e947a1f2f7c4bb41947 md5: f79415aee8862b3af85ea55dea37e46b @@ -5682,24 +5216,6 @@ packages: purls: [] size: 18716 timestamp: 1778489854108 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libboost-1.88.0-hd24cca6_7.conda - sha256: dd489228e1916c7720c925248d0ba12803d1dc8b9898be0c51f4ab37bab6ffa5 - md5: d70e4dc6a847d437387d45462fe60cf9 - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - icu >=78.1,<79.0a0 - - libgcc >=14 - - liblzma >=5.8.1,<6.0a0 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - boost-cpp <0.0a0 - license: BSL-1.0 - purls: [] - size: 3072984 - timestamp: 1766347479317 - conda: https://conda.anaconda.org/conda-forge/linux-64/libboost-1.88.0-hed09d94_6.conda sha256: 40b334d77229fcceb51d911a153d7ab9ff4f6a6f90e938387bf29129ab956c58 md5: 70675d70a76e1b5539b1f464fd5f02ba @@ -5833,27 +5349,27 @@ packages: purls: [] size: 28064884 timestamp: 1759415826899 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcondor_utils-25.10.1-h4effbbe_0.conda - sha256: 8708faeae70ed3a6ad4bff2f3fddf5f8585737d18e27c2579a076a7d1e6e1ee2 - md5: ba3fdcc6b33ed8eab01f8f561e1a7005 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcondor_utils-25.6.1-h9f200e7_0.conda + sha256: aef6f663d5e3278de234ffd77e2ac9899800b0b4477f72567dd74e21ee45614f + md5: e0a13fcfec34991a111ccbb19529e5a9 depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 - - htcondor-classads 25.10.1 h793e66c_0 - - krb5 >=1.22.2,<1.23.0a0 + - htcondor-classads 25.6.1 h793e66c_0 + - krb5 >=1.21.3,<1.22.0a0 - libgcc >=14 - libstdcxx >=14 - - libuuid >=2.42,<3.0a0 + - libuuid >=2.41.3,<3.0a0 - munge - - openssl >=3.5.6,<4.0a0 + - openssl >=3.5.5,<4.0a0 - pcre2 >=10.47,<10.48.0a0 - scitokens-cpp >=0.5.0 - - scitokens-cpp >=1.4.0,<2.0a0 + - scitokens-cpp >=1.3.0,<2.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 29267283 - timestamp: 1778792212520 + size: 28775724 + timestamp: 1769820778309 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 sha256: fd1d153962764433fe6233f34a72cdeed5dcf8a883a85769e8295ce940b5b0c5 md5: c965a5aa0d5c1c37ffc62dff36e28400 @@ -5865,20 +5381,6 @@ packages: purls: [] size: 20440 timestamp: 1633683576494 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda - sha256: 205c4f19550f3647832ec44e35e6d93c8c206782bdd620c1d7cf66237580ff9c - md5: 49c553b47ff679a6a1e9fc80b9c5a2d4 - depends: - - __glibc >=2.17,<3.0.a0 - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 4518030 - timestamp: 1770902209173 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda sha256: cb83980c57e311783ee831832eb2c20ecb41e7dee6e86e8b70b8cef0e43eab55 md5: d4a250da4737ee127fb1fa6452a9002e @@ -5910,23 +5412,6 @@ packages: purls: [] size: 462942 timestamp: 1767821743793 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.20.0-hcf29cc6_0.conda - sha256: 75963a5dd913311f59a35dbd307592f4fa754c4808aff9c33edb430c415e38eb - md5: c3cc2864f82a944bc90a7beb4d3b0e88 - depends: - - __glibc >=2.17,<3.0.a0 - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=14 - - libnghttp2 >=1.68.1,<2.0a0 - - libssh2 >=1.11.1,<2.0a0 - - libzlib >=1.3.2,<2.0a0 - - openssl >=3.5.6,<4.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: curl - license_family: MIT - purls: [] - size: 468706 - timestamp: 1777461492876 - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 md5: 6c77a605a7a689d17d4819c0f8ac9a00 @@ -5973,18 +5458,6 @@ packages: purls: [] size: 46500 timestamp: 1779728188901 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_3.conda - sha256: e4b46919c9bb65930bce238bd2736110ed7b8c30e5cd5394e4e1edb48de54843 - md5: 5bc6d55503483aabe8a90c5e7f49a2a4 - depends: - - __glibc >=2.17,<3.0.a0 - - libegl 1.7.0 ha4b6fd6_3 - - libgl-devel 1.7.0 ha4b6fd6_3 - - xorg-libx11 - license: LicenseRef-libglvnd - purls: [] - size: 31718 - timestamp: 1779728222280 - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 md5: 172bf1cd1ff8629f2b1179945ed45055 @@ -6124,17 +5597,6 @@ packages: purls: [] size: 133469 timestamp: 1779728207669 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda - sha256: 41d7d864ad1f199bdb06ff6cc3931455c8af62f1d2071a08c6fa08affbcb678f - md5: 63e43d278ee5084813fe3c2edf4834ce - depends: - - __glibc >=2.17,<3.0.a0 - - libgl 1.7.0 ha4b6fd6_3 - - libglx-devel 1.7.0 ha4b6fd6_3 - license: LicenseRef-libglvnd - purls: [] - size: 115664 - timestamp: 1779728218325 - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.2-h32235b2_0.conda sha256: 918306d6ed211ab483e4e19368e5748b265d24e75c88a1c66a61f72b9fa30b29 md5: 0cb0612bc9cb30c62baf41f9d600611b @@ -6187,18 +5649,6 @@ packages: purls: [] size: 76586 timestamp: 1779728199059 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_3.conda - sha256: a17ae2d4cb2de04a20882ae14ec3cc1958e868a4dec81e3d7eca30115ee50e94 - md5: 16b6330783ce0d1ae8d22782173b32c9 - depends: - - __glibc >=2.17,<3.0.a0 - - libglx 1.7.0 ha4b6fd6_3 - - xorg-libx11 >=1.8.13,<2.0a0 - - xorg-xorgproto - license: LicenseRef-libglvnd - purls: [] - size: 27363 - timestamp: 1779728211402 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda sha256: 5abe4ab9d93f6c9757d654f1969ae2267d4505315c1f2f8fe705fd60af084f1b md5: faac990cb7aedc7f3a2224f2c9b0c26c @@ -6229,27 +5679,6 @@ packages: purls: [] size: 1307253 timestamp: 1770461665848 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-3.5.0-h25dbb67_0.conda - sha256: 45c2b76656e22051b1ef45659c7aace412354d4620eba904c4596fa3160b8ff7 - md5: 1f50095d5260dd7701a6fc6309745f11 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 - - libcurl >=8.20.0,<9.0a0 - - libgcc >=14 - - libgrpc >=1.78.1,<1.79.0a0 - - libopentelemetry-cpp >=1.26.0,<1.27.0a0 - - libprotobuf >=6.33.5,<6.33.6.0a0 - - libstdcxx >=14 - - openssl >=3.5.6,<4.0a0 - constrains: - - libgoogle-cloud 3.5.0 *_0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 2632111 - timestamp: 1779223318268 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.39.0-hdbdcf42_1.conda sha256: 2cce946ebf40b0b5fdb3e82c8a9f90ca28cd62abd281b20713067cc69a75c441 md5: 384a1730ea66a72692e377cb45996d61 @@ -6268,24 +5697,6 @@ packages: purls: [] size: 803453 timestamp: 1770461856392 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-3.5.0-hdbdcf42_0.conda - sha256: a1bb2afef01e907d4c726a4a847638977239e2f2facef87d37f91e0048158a8d - md5: a322823ef3fde4551fda639ed29af98b - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil - - libcrc32c >=1.1.2,<1.2.0a0 - - libcurl - - libgcc >=14 - - libgoogle-cloud 3.5.0 h25dbb67_0 - - libstdcxx >=14 - - libzlib >=1.3.2,<2.0a0 - - openssl - license: Apache-2.0 - license_family: Apache - purls: [] - size: 779650 - timestamp: 1779223515503 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.78.1-h1d1128b_0.conda sha256: 5bb935188999fd70f67996746fd2dca85ec6204289e11695c316772e19451eb8 md5: b5fb6d6c83f63d83ef2721dca6ff7091 @@ -6356,172 +5767,124 @@ packages: purls: [] size: 1846962 timestamp: 1777065125966 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblal-7.7.0-fftw_h0eb8034_101.conda - sha256: 42a2f79c7920d3a8fc49aa23cac13e9011d8c420027402da3c420211d7955a81 - md5: e52b43733b896f6caeafda529baac2c1 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblal-7.6.1-fftw_hcbe9c14_100.conda + sha256: 0fa386ec61e09def59133f2e8dcfe77158eba2756ced6f04843bdeaab68891ab + md5: 554e9aae3a43164b277d33c8ca4158be depends: - __glibc >=2.17,<3.0.a0 - fftw >=3.3.10,<4.0a0 - gsl >=2.7,<2.8.0a0 - - hdf5 >=1.14.6,<1.14.7.0a0 - - libgcc >=14 + - hdf5 >=1.14.3,<1.14.4.0a0 + - libgcc >=13 - libzlib >=1.3.1,<2.0a0 constrains: - - lal >=7.1.1 - python-lal >=7.1.1 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 2302068 - timestamp: 1755599752967 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblal-7.7.0-fftw_h9f6c97b_104.conda - sha256: 7e355f26203923d422d8d3359b317ec4db8d52639d22a4d31a68a6d1e6ee1416 - md5: f15cd90efdd3e048dc1446a62bba344e - depends: - - __glibc >=2.17,<3.0.a0 - - fftw >=3.3.10,<4.0a0 - - gsl >=2.7,<2.8.0a0 - - hdf5 >=2.1.0,<3.0a0 - - libgcc >=14 - - libzlib >=1.3.2,<2.0a0 - constrains: - lal >=7.1.1 - - python-lal >=7.1.1 - - swig >=4.4.1,<4.4.2.0a0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 2305026 - timestamp: 1774636542993 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalburst-2.0.7-h43c0734_2.conda - sha256: 78ec2eff546a55d4ac5ddd83c60023468a4f3f0cf484393e6beb156f61aec7be - md5: 33854cc2ec46129c2ee1d2145ca32b54 + size: 2299753 + timestamp: 1734695039343 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalburst-2.0.6-h3773ae6_0.conda + sha256: 88740674d5886cef146335f32894adaed93ec5ff618e441f2ac1270bce580ac4 + md5: 659626e5a5c67aed774ffd6953ef2aa2 depends: - __glibc >=2.17,<3.0.a0 - gsl >=2.7,<2.8.0a0 - - libgcc >=14 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 + - libgcc >=13 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 - liblalmetaio >=4.0.0 - - liblalmetaio >=4.0.6,<5.0a0 - - liblalsimulation >=6.2.0 - - liblalsimulation >=6.2.0,<7.0a0 + - liblalmetaio >=4.0.5,<5.0a0 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.1.0,<7.0a0 constrains: - python-lalburst >=1.5.7 - lalburst >=1.5.7 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 75724 - timestamp: 1771409408299 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalframe-3.0.7-hbf9efdd_2.conda - sha256: 1415be69cd89258994b7b9efe27e417707e921c00659d68895dd6022fe6858b0 - md5: be064d0a4c05c9b9d513a719396982c1 + size: 74163 + timestamp: 1734708924070 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalframe-3.0.6-h7c287a6_0.conda + sha256: 181648c7be402a4ae7056029b6cde5c1c40da18b4354187dc8f951d669cc56e3 + md5: bd02d9a68d610a4e8f4c3cd620124d04 depends: - __glibc >=2.17,<3.0.a0 - ldas-tools-framecpp >=2.9.3,<2.10.0a0 - libframel >=8.41.3,<9.0a0 - - libgcc >=14 - - liblal >=7.7.0,<8.0a0 + - libgcc >=13 + - liblal >=7.6.0,<8.0a0 constrains: - python-lalframe >=1.5.3 - lalframe >=1.5.3 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 251800 - timestamp: 1774541277420 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinference-4.1.9-h3773ae6_0.conda - sha256: b698db5bec95f7404c3c1a5e1fc25e4249f0a269800bacbaaa45bdeb76f5b579 - md5: 4eeb887359ee4a86e8b7f1f2092b61b3 + size: 251017 + timestamp: 1734696134142 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinference-4.1.8-h3773ae6_0.conda + sha256: c1973fb5c47df8fa8018ea55054f6c4b7219c89bd541fb10724a3be9df4ba1cc + md5: e5b19fb805bd8983dec5bdc7b4a3ad9c depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 - gsl >=2.7,<2.8.0a0 - - lalinference-data 4.1.9 ha770c72_0 + - lalinference-data 4.1.8 ha770c72_0 - libgcc >=13 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalburst >=2.0.0 - - liblalburst >=2.0.7,<3.0a0 - - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 - - liblalinspiral >=5.0.0 - - liblalinspiral >=5.0.3,<6.0a0 - - liblalmetaio >=4.0.0 - - liblalmetaio >=4.0.6,<5.0a0 - - liblalsimulation >=6.2.0 - - liblalsimulation >=6.2.0,<7.0a0 - constrains: - - python-lalinference >=2.0.6 - - lalinference >=2.0.6 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 961885 - timestamp: 1748277813702 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinference-4.1.9-h43c0734_2.conda - sha256: 143865c4ac47d1150ef4536f413b03bc54038163f80d9e6028f1d69108046838 - md5: 8ee21b91a79700e5b903bef7fb4fb4a5 - depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 - - gsl >=2.7,<2.8.0a0 - - lalinference-data 4.1.9 ha770c72_2 - - libgcc >=14 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 - liblalburst >=2.0.0 - - liblalburst >=2.0.7,<3.0a0 + - liblalburst >=2.0.6,<3.0a0 - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 + - liblalframe >=3.0.6,<4.0a0 - liblalinspiral >=5.0.0 - - liblalinspiral >=5.0.3,<6.0a0 + - liblalinspiral >=5.0.2,<6.0a0 - liblalmetaio >=4.0.0 - - liblalmetaio >=4.0.6,<5.0a0 - - liblalsimulation >=6.2.0 - - liblalsimulation >=6.2.0,<7.0a0 + - liblalmetaio >=4.0.5,<5.0a0 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.1.0,<7.0a0 constrains: - lalinference >=2.0.6 - python-lalinference >=2.0.6 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 960730 - timestamp: 1774963680943 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinspiral-5.0.3-h43c0734_3.conda - sha256: e17cf71d5b400d993803d6931920c3f88d21fed7fdf6b0f602e797c11c4c2194 - md5: dfe5f6346b18978b1b448dca96819907 + size: 961882 + timestamp: 1734712662114 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalinspiral-5.0.2-h3773ae6_0.conda + sha256: fc1c3df1394fcf933d56a72a324c59b1e41acc0f9e084c7b86295c18e8afef7e + md5: 3ed9ee3c2cdb2c32d869ec1cb92ed1ff depends: - __glibc >=2.17,<3.0.a0 - gsl >=2.7,<2.8.0a0 - - libgcc >=14 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 + - libgcc >=13 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 - liblalburst >=2.0.0 - - liblalburst >=2.0.7,<3.0a0 + - liblalburst >=2.0.5,<3.0a0 - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 + - liblalframe >=3.0.6,<4.0a0 - liblalmetaio >=4.0.0 - - liblalmetaio >=4.0.6,<5.0a0 - - liblalsimulation >=6.2.0 - - liblalsimulation >=6.2.0,<7.0a0 + - liblalmetaio >=4.0.5,<5.0a0 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.1.0,<7.0a0 constrains: - lalinspiral >=2.0.1 - python-lalinspiral >=2.0.1 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 1199624 - timestamp: 1774543619880 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalmetaio-4.0.6-hb03c661_2.conda - sha256: d836a344bbf93e0bedf662ffba6dab2bf6c52118d8c605dafcd8c4f13c1e66e1 - md5: d243ced74ebaf13c7d01e7fe822f5a36 + size: 1195733 + timestamp: 1734708662377 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalmetaio-4.0.5-hb9d3cd8_2.conda + sha256: 291e16f53a9b7275d844cc34e3af632b139e2242a90f3201263b731e088ad04f + md5: dae474381bb3c92aa62237a15d44d5d3 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 + - libgcc >=13 + - liblal >=7.6.0 + - liblal >=7.6.0,<8.0a0 - libmetaio >=8.4.0 - libmetaio >=8.5.1,<9.0a0 constrains: @@ -6530,46 +5893,46 @@ packages: license: GPL-2.0-or-later license_family: GPL purls: [] - size: 118811 - timestamp: 1774542914612 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalpulsar-7.1.1-h3c7535d_2.conda - sha256: 57a98e0b8a4c76881080e038bdcae6ea92d9131712532862f8b30201354d57a9 - md5: 6e84216b15d3d3dc45ee3ddbac3157ea + size: 117381 + timestamp: 1734275050936 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalpulsar-7.1.0-h9345056_1.conda + sha256: 0c75f743fe9ccad2f70a155a555eb0fbd0df38dfebe1cb5912f71bfc962118ea + md5: 4f28fcb039f20661ae6e7d5f9a4e582d depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 - - cfitsio >=4.6.3,<4.6.4.0a0 + - cfitsio >=4.6.2,<4.6.3.0a0 - fftw - gsl >=2.7,<2.8.0a0 - - lalpulsar-data 7.1.1 ha770c72_2 - - libgcc >=14 + - lalpulsar-data 7.1.0 ha770c72_1 + - libgcc >=13 - liblal >=7.6.0 - - liblal >=7.7.0,<8.0a0 + - liblal >=7.6.1,<8.0a0 - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 + - liblalframe >=3.0.6,<4.0a0 - liblalinference >=4.1.0 - - liblalinference >=4.1.9,<5.0a0 + - liblalinference >=4.1.8,<5.0a0 - liblalsimulation >=6.1.0 - - liblalsimulation >=6.2.0,<7.0a0 + - liblalsimulation >=6.1.0,<7.0a0 constrains: - lalpulsar >=3.0.0 - python-lalpulsar >=3.0.0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 1762705 - timestamp: 1774625816850 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalsimulation-6.2.0-py312hd1ec2bb_3.conda - sha256: 570e56d4bc0e7920e456fa0248025e7f0921000eafa8b153115b7a015eff6a2b - md5: 99b0c9efcb99048f099893cd438ee590 + size: 1761960 + timestamp: 1744215201125 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblalsimulation-6.1.0-py312h09b83b2_0.conda + sha256: c153371f813ab569b802e10f47aeac11d9cad34a3a020af104e586df823be3df + md5: 2f1ae2e5f481f0ce44c44fecf6c198b6 depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 - gsl >=2.7,<2.8.0a0 - - lalsimulation-data 6.2.0 ha770c72_3 - - libgcc >=14 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 + - lalsimulation-data 6.1.0 ha770c72_0 + - libgcc >=13 + - liblal >=7.6.0 + - liblal >=7.6.0,<8.0a0 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 constrains: @@ -6578,8 +5941,8 @@ packages: license: GPL-2.0-or-later license_family: GPL purls: [] - size: 7934645 - timestamp: 1774541272092 + size: 7919946 + timestamp: 1734695922103 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h47877c9_openblas.conda build_number: 7 sha256: 96962084921f197c9ad13fb7f8b324f2351d50ff3d8d962148751ad532f54a01 @@ -6736,26 +6099,6 @@ packages: purls: [] size: 896630 timestamp: 1770452315175 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.26.0-h9692893_0.conda - sha256: 5126b75e7733de31e261aa275c0a1fd38b25fdfff23e7d7056ebd6ca76d11532 - md5: c360be6f9e0947b64427603e91f9651f - depends: - - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 - - libcurl >=8.19.0,<9.0a0 - - libgrpc >=1.78.0,<1.79.0a0 - - libopentelemetry-cpp-headers 1.26.0 ha770c72_0 - - libprotobuf >=6.33.5,<6.33.6.0a0 - - libzlib >=1.3.1,<2.0a0 - - nlohmann_json - - prometheus-cpp >=1.3.0,<1.4.0a0 - constrains: - - cpp-opentelemetry-sdk =1.26.0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 934274 - timestamp: 1774001192674 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.21.0-ha770c72_2.conda sha256: b2b2122f214c417851ba280009aea040e546665c43de737690c2610055a255e3 md5: 253e70376a8ae74f9d99d44712b3e087 @@ -6764,14 +6107,6 @@ packages: purls: [] size: 362214 timestamp: 1770452273268 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.26.0-ha770c72_0.conda - sha256: fec2ba047f7000c213ca7ace5452435197c79fbcb1690da7ce85e99312245984 - md5: cb93c6e226a7bed5557601846555153d - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 396403 - timestamp: 1774001149705 - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-23.0.1-h7376487_4_cpu.conda build_number: 4 sha256: c1c6f612b8cd50abff3ca345d2fb650c621723ceac4a7a98ff059599cf53ecbc @@ -6788,22 +6123,6 @@ packages: purls: [] size: 1390208 timestamp: 1773271844211 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-24.0.0-h7376487_2_cpu.conda - build_number: 2 - sha256: e743bacdcc78738a518ef5be59caa046e85511fa162dd2f81dff90d198962c8e - md5: c45e43b49c31be5f4f3b516d33006278 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 24.0.0 h033f57b_2_cpu - - libgcc >=14 - - libstdcxx >=14 - - libthrift >=0.22.0,<0.22.1.0a0 - - openssl >=3.5.6,<4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 1428655 - timestamp: 1779475666749 - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_0.conda sha256: f41721636a7c2e51bc2c642e1127955ab9c81145470714fdaac44d4d09e4af41 md5: 33082e13b4769b48cfeb648e15bfe3fc @@ -6840,20 +6159,6 @@ packages: purls: [] size: 2711480 timestamp: 1764345810429 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_0.conda - sha256: 076742d4a9fa88711c5fc6726b967e6a03b5060e669aa03288c684a7ae03583b - md5: 2772b7ab7bc43f24e9585a714761a255 - depends: - - __glibc >=2.17,<3.0.a0 - - icu >=78.3,<79.0a0 - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=14 - - openldap >=2.6.13,<2.7.0a0 - - openssl >=3.5.6,<4.0a0 - license: PostgreSQL - purls: [] - size: 2754709 - timestamp: 1778786234149 - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda sha256: afbf195443269ae10a940372c1d37cda749355d2bd96ef9587a962abd87f2429 md5: 11ac478fa72cf12c214199b8a96523f4 @@ -7083,23 +6388,6 @@ packages: purls: [] size: 556302 timestamp: 1761015637262 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda - sha256: 3d44f737c5ae52d5af32682cc1530df433f401f8e58a7533926536244127572a - md5: e79d2c2f24b027aa8d5ab1b1ba3061e7 - depends: - - __glibc >=2.17,<3.0.a0 - - icu >=78.3,<79.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.3,<6.0a0 - - libzlib >=1.3.2,<2.0a0 - constrains: - - libxml2 2.15.3 - license: MIT - license_family: MIT - purls: [] - size: 559775 - timestamp: 1776376739004 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h26afc86_0.conda sha256: ec0735ae56c3549149eebd7dc22c0bed91fd50c02eaa77ff418613ddda190aa8 md5: e512be7dc1f84966d50959e900ca121f @@ -7116,22 +6404,6 @@ packages: purls: [] size: 45283 timestamp: 1761015644057 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda - sha256: 3bc5551720c58591f6ea1146f7d1539c734ed1c40e7b9f5cb8cb7e900c509aba - md5: 995d8c8bad2a3cc8db14675a153dec2b - depends: - - __glibc >=2.17,<3.0.a0 - - icu >=78.3,<79.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.3,<6.0a0 - - libxml2-16 2.15.3 hca6bf5a_0 - - libzlib >=1.3.2,<2.0a0 - license: MIT - license_family: MIT - purls: [] - size: 46810 - timestamp: 1776376751152 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda sha256: 0694760a3e62bdc659d90a14ae9c6e132b525a7900e59785b18a08bb52a5d7e5 md5: 87e6096ec6d542d1c1f8b33245fe8300 @@ -7183,51 +6455,47 @@ packages: - pkg:pypi/ligo-segments?source=hash-mapping size: 78098 timestamp: 1733851880296 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ligo.skymap-2.5.3-np2h4e6c70c_1.conda - noarch: python - sha256: 9a356677ed8158f8dc046cb9ba8d3c9b111cbe8b634c4e31aea73e8c5f55d038 - md5: 5fd9d0be48175a109112ffbe94120ebb +- conda: https://conda.anaconda.org/conda-forge/linux-64/ligo.skymap-2.3.0-py312h36415c3_0.conda + sha256: 4ae12ed4778dcc7e0345bc95f78ddc77f18998cc481e0219077de5a909ba74f9 + md5: d955bf259aef301e37b97e39afe53981 depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 - astroplan >=0.7 - astropy-base >=6.0 - astropy-healpix >=0.3 - - chealpix - - gsl - - healpy + - chealpix >=3.31.0,<3.32.0a0 + - gsl >=2.7,<2.8.0a0 - h5py - - igwn-ligolw - - igwn-segments - - libcblas + - healpy + - libcblas >=3.9.0,<4.0a0 + - libgcc >=13 - ligo-gracedb >=2.0.1 + - ligo-segments >=1.2.0 - matplotlib-base >=3.9.1 - networkx - - numpy >=2.0.0 + - numpy >=1.19,<3 + - numpy >=1.23.0 - pillow >=2.5.0 - - python >=3.11 - - python-lal >=7.7.0 - - python-lalinspiral >=5.0.3 - - python-lalmetaio >=4.0.6 - - python-lalsimulation >=6.2.0 + - ptemcee + - python >=3.12,<3.13.0a0 + - python-lal >=7.6.0 + - python-lalinspiral >=5.0.1 + - python-lalmetaio >=4.0.5 + - python-lalsimulation >=6.0.0 + - python-ligo-lw >=1.8.0 + - python_abi 3.12.* *_cp312 - pytz - reproject >=0.3.2 - - scipy >=1.10.1 + - scipy >=0.14,!=1.10.0 - shapely >=2.0.0 - tqdm >=4.27.0 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 - - libcblas >=3.9.0,<4.0a0 - - gsl >=2.7,<2.8.0a0 - - chealpix >=3.31.0,<3.32.0a0 - - _python_abi3_support 1.* - - cpython >=3.11 - - numpy >=1.23,<3 license: GPL-3.0-or-later license_family: GPL purls: - pkg:pypi/ligo-skymap?source=hash-mapping - size: 1796406 - timestamp: 1775055859500 + size: 1929162 + timestamp: 1745758318090 - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.47.0-py312h7424e68_1.conda sha256: 27b34a24cc4c872d328b07319ae5ab6673d5c94ec923cde5b1f3ac7f59b95dd0 md5: 49f23211559c82cf8c5ffac112fe73b4 @@ -7428,26 +6696,25 @@ packages: - pkg:pypi/numcodecs?source=hash-mapping size: 813229 timestamp: 1764782491676 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py312h33ff503_0.conda - sha256: dfcbeadb3e7ad0da7a55a0525884ca34c19584154e13cc4159396b305d1bd445 - md5: 6e31d55ee1110fda83b4f4045f4d73ff +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda + sha256: fe3459c75cf84dcef6ef14efcc4adb0ade66038ddd27cadb894f34f4797687d8 + md5: d8285bea2a350f63fab23bf460221f3f depends: - - python - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - liblapack >=3.9.0,<4.0a0 - libblas >=3.9.0,<4.0a0 - - python_abi 3.12.* *_cp312 - libcblas >=3.9.0,<4.0a0 + - libgcc-ng >=12 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/numpy?source=compressed-mapping - size: 8759520 - timestamp: 1779169200325 + - pkg:pypi/numpy?source=hash-mapping + size: 7484186 + timestamp: 1707225809722 - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda sha256: bbff8a60f70d5ebab138b564554f28258472e1e63178614562d4feee29d10da2 md5: 6ce853cb231f18576d2db5c2d4cb473e @@ -7502,21 +6769,6 @@ packages: purls: [] size: 780253 timestamp: 1748010165522 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda - sha256: 21c4f6c7f41dc9bec2ea2f9c80440d9a4d45a6f2ac13243e658f10dcf1044146 - md5: 680608784722880fbfe1745067570b00 - depends: - - __glibc >=2.17,<3.0.a0 - - cyrus-sasl >=2.1.28,<3.0a0 - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=14 - - libstdcxx >=14 - - openssl >=3.5.6,<4.0a0 - license: OLDAP-2.8 - license_family: BSD - purls: [] - size: 786149 - timestamp: 1775741359582 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda sha256: c0ef482280e38c71a08ad6d71448194b719630345b0c9c60744a2010e8a8e0cb md5: da1b85b6a87e141f5140bb9924cecab0 @@ -7724,22 +6976,6 @@ packages: purls: [] size: 28639 timestamp: 1771307345680 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-24.0.0-py312h7900ff3_0.conda - sha256: ce11f466f0dcfc41bd0ef3719adb396fbffa6b866aac75c9242938fa58e546d5 - md5: f9ced0be11f0d3120336e4171a121c2a - depends: - - libarrow-acero 24.0.0.* - - libarrow-dataset 24.0.0.* - - libarrow-substrait 24.0.0.* - - libparquet 24.0.0.* - - pyarrow-core 24.0.0 *_0_* - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 26787 - timestamp: 1776927989772 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-23.0.1-py312h2054cf2_0_cpu.conda sha256: e023133b8d24bada11fcf57b80aca98cf253a09ce996393949c006d236ac87b7 md5: 9ad4bfc6f8ca7cdf4acf857fa0c9a91f @@ -7761,27 +6997,6 @@ packages: - pkg:pypi/pyarrow?source=hash-mapping size: 4776752 timestamp: 1771307276253 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-24.0.0-py312h2054cf2_0_cpu.conda - sha256: cb2c89aeb97a97572869200e37c153098c5877c7be4774f045459976e0f70233 - md5: fe5033add07e3cf4876fd091b5fecf31 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 24.0.0.* *cpu - - libarrow-compute 24.0.0.* *cpu - - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.2,<2.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - constrains: - - numpy >=1.23,<3 - - apache-arrow-proc * cpu - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/pyarrow?source=hash-mapping - size: 5401544 - timestamp: 1776927982900 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyerfa-2.0.1.5-py310h32771cd_2.conda noarch: python sha256: a3f25f921be09e15ed6ff46a1ec99ce9cca6affa4a086f6f39ad630e21e48fb7 @@ -7840,31 +7055,6 @@ packages: - pkg:pypi/shiboken6?source=hash-mapping size: 11606305 timestamp: 1765811838817 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.1-py312h50ac2ff_1.conda - sha256: 6f9e4fd9f6aa1d82a524384399c956c0c79c6c5df5ae42e241eb59f42c11ffbf - md5: 90f891bc96f673acbff89f6f405aef10 - depends: - - python - - qt6-main 6.11.1.* - - libgcc >=14 - - libstdcxx >=14 - - __glibc >=2.17,<3.0.a0 - - libopengl >=1.7.0,<2.0a0 - - libclang13 >=22.1.5 - - libxslt >=1.1.43,<2.0a0 - - qt6-main >=6.11.1,<6.12.0a0 - - libvulkan-loader >=1.4.341.0,<2.0a0 - - libegl >=1.7.0,<2.0a0 - - libxml2 - - libxml2-16 >=2.14.6 - - libgl >=1.7.0,<2.0a0 - - python_abi 3.12.* *_cp312 - license: LGPL-3.0-only - license_family: LGPL - purls: - - pkg:pypi/pyside6?source=compressed-mapping - size: 13797566 - timestamp: 1778933891067 - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda sha256: a44655c1c3e1d43ed8704890a91e12afd68130414ea2c0872e154e5633a13d7e md5: 7eccb41177e15cc672e1babe9056018e @@ -7907,21 +7097,6 @@ packages: - pkg:pypi/gssapi?source=hash-mapping size: 559459 timestamp: 1769842649997 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.11.1-py312hf9980d4_1.conda - sha256: 70deb9508f445f75e2e897a7fc069e1d8388712aa5f98cb0636bb35d1b9aa296 - md5: 2c94a14272c456aaa2a024cfa6621c2e - depends: - - __glibc >=2.17,<3.0.a0 - - decorator - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=14 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: ISC - purls: - - pkg:pypi/gssapi?source=hash-mapping - size: 558539 - timestamp: 1770934756531 - conda: https://conda.anaconda.org/conda-forge/linux-64/python-htcondor-24.12.4-py312h1e35698_0.conda sha256: 8908ab85bf345b919b4faa16b07a771a5ca945842cc4e2556e4e46844c52c37c md5: cbd4ef4b341950969d3a776172449fe7 @@ -7940,13 +7115,13 @@ packages: - pkg:pypi/htcondor?source=hash-mapping size: 10307972 timestamp: 1759416481221 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-htcondor-25.10.1-py312h40fa4ac_0.conda - sha256: c91e85ce6073f02527e368196391f00d007569b524c9f3554f6505c184fff6da - md5: 622acb7c619da4a50e8d926f9593ca11 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-htcondor-25.6.1-py312h40fa4ac_0.conda + sha256: 8563d63eba6871f279d0f161c5b80a4d0b0be62c914e43b54ddf812e5100dd42 + md5: 2f01552b30ce7adf8019936863913cd2 depends: - __glibc >=2.17,<3.0.a0 - - htcondor-classads 25.10.1 h793e66c_0 - - libcondor_utils 25.10.1 h4effbbe_0 + - htcondor-classads 25.6.1 h793e66c_0 + - libcondor_utils 25.6.1 h9f200e7_0 - libgcc >=14 - libstdcxx >=14 - python >=3.12,<3.13.0a0 @@ -7955,35 +7130,17 @@ packages: license_family: APACHE purls: - pkg:pypi/htcondor?source=hash-mapping - size: 2005169 - timestamp: 1778792466521 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lal-7.7.0-fftw_py312h26d0d96_101.conda - sha256: adfcceac135c59042917ec2c417d5ad78e2d29cc200c3a78b951e7ad35850dc8 - md5: f24350a1c92284992ff4a5eac9fc5b93 + size: 1826998 + timestamp: 1769820971106 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lal-7.6.1-fftw_py312heccaa44_100.conda + sha256: 1122cd48a8250069b8816686382666d75b9c58544a07e7f44a02ebdc8dfb0893 + md5: 0fff865c055ebdc694627a822b634f88 depends: - __glibc >=2.17,<3.0.a0 - - igwn-segments - - libgcc >=14 - - liblal 7.7.0 fftw_h0eb8034_101 - - numpy >=1.23,<3 - - python >=3.12,<3.13.0a0 - - python-dateutil - - python_abi 3.12.* *_cp312 - - scipy - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 1003061 - timestamp: 1755600394133 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lal-7.7.0-fftw_py312hb15a3d9_104.conda - sha256: d816fee22c8350210720439f24ad6d9715f7111653d98a355ba24c5d97216900 - md5: 357513fdcafecdb37b42e871a6b05105 - depends: - - __glibc >=2.17,<3.0.a0 - - igwn-segments - - libgcc >=14 - - liblal 7.7.0 fftw_h9f6c97b_104 - - numpy >=1.23,<3 + - libgcc >=13 + - liblal 7.6.1 fftw_hcbe9c14_100 + - ligo-segments + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python-dateutil - python_abi 3.12.* *_cp312 @@ -7991,153 +7148,125 @@ packages: license: GPL-2.0-or-later license_family: GPL purls: [] - size: 989631 - timestamp: 1774636817204 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalburst-2.0.7-py312h71fd7f1_2.conda - sha256: 5e4a513157746f781d0799c17c322ac4e56f58235cdaf20c441a7be3a60ad092 - md5: 47d1405f18f4cea7fda334e5e17b5f9e + size: 977688 + timestamp: 1734695257317 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalburst-2.0.6-py312h3684b61_0.conda + sha256: c1a0f90714bae2128e979c0b56c4550fe061f32922901ac077c5c13a3e44cb63 + md5: 9c6426b360a7f3f1e64694513c55ef0d depends: - __glibc >=2.17,<3.0.a0 - gsl >=2.7,<2.8.0a0 - - igwn-ligolw >=2.1.0 - - igwn-segments - - libgcc >=14 - - liblalburst 2.0.7 h43c0734_2 + - libgcc >=13 + - liblalburst 2.0.6 h3773ae6_0 + - ligo-segments - lscsoft-glue - matplotlib-base - - numpy >=1.23,<3 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 + - python-lal >=7.6.0 - python-lalmetaio >=4.0.0 - - python-lalsimulation >=6.2.0 + - python-lalsimulation >=6.1.0 + - python-ligo-lw >=1.7.0 - python_abi 3.12.* *_cp312 - scipy - tqdm license: GPL-2.0-or-later license_family: GPL purls: [] - size: 339230 - timestamp: 1771409727221 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalframe-3.0.7-py312h4f23490_2.conda - sha256: 768b771be89f24e63f81a051f71046ca403d12dc4eb34302d7c26ab37ded9d6e - md5: 0b1a042cecf3e90d8de47bd4f61c5afb - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - liblalframe 3.0.7 hbf9efdd_2 - - numpy >=1.23,<3 - - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 - - python_abi 3.12.* *_cp312 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 741209 - timestamp: 1774541427811 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinference-4.1.9-py312h4f23490_2.conda - sha256: de5a01d49ad169f93a6fab84425d3bf9529175c4a158f2a2f7530c9fe308c2c0 - md5: 1f0a566566ac4de97e25e9514dbacfad + size: 339127 + timestamp: 1734709124792 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalframe-3.0.6-py312hc0a28a1_0.conda + sha256: 52db22f1a08d577e870be5812cffbe81f941c2ad04471464095c91a77daca611 + md5: 83e0a790d1e81548e896ba858587407f depends: - __glibc >=2.17,<3.0.a0 - - astropy-base >=1.1.1 - - h5py - - healpy >=1.17.3 - - igwn-ligolw >=2.1.0 - - igwn-segments - - libgcc >=14 - - liblalinference 4.1.9 h43c0734_2 - - lscsoft-glue >=1.54.1 - - matplotlib-base >=1.2.0 - - numpy >=1.23,<3 + - libgcc >=13 + - liblalframe 3.0.6 h7c287a6_0 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 - - python-lalburst >=2.0.0 - - python-lalinspiral >=5.0.0 - - python-lalmetaio >=4.0.0 - - python-lalsimulation >=6.2.0 + - python-lal >=7.6.0 - python_abi 3.12.* *_cp312 - - scipy >=0.9.0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 849150 - timestamp: 1774963740336 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinference-4.1.9-py312hc0a28a1_0.conda - sha256: 02b85b3f018474dd17c418a38c0084261cca905c21531d7f3c6ec0b9a87030b3 - md5: 89b49352922436b54661185310fa937c + size: 763304 + timestamp: 1734696319935 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinference-4.1.8-py312hc0a28a1_0.conda + sha256: 67f989910970b4494bbdef4dead78501e5a66448a0253a55fc23284acfc1675f + md5: 0788dbc9e7cc85665438c60e47244282 depends: - __glibc >=2.17,<3.0.a0 - astropy-base >=1.1.1 - h5py - healpy >=1.17.3 - - igwn-ligolw >=2.1.0 - libgcc >=13 - - liblalinference 4.1.9 h3773ae6_0 + - liblalinference 4.1.8 h3773ae6_0 - ligo-segments - lscsoft-glue >=1.54.1 - matplotlib-base >=1.2.0 - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 + - python-lal >=7.6.0 - python-lalburst >=2.0.0 - python-lalinspiral >=5.0.0 - python-lalmetaio >=4.0.0 - - python-lalsimulation >=6.2.0 + - python-lalsimulation >=6.1.0 + - python-ligo-lw >=1.7.0 - python_abi 3.12.* *_cp312 - scipy >=0.9.0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 852524 - timestamp: 1748278061390 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinspiral-5.0.3-py312h4f23490_3.conda - sha256: d7813eb52f095f621f9ee2ffacc98180f0407711d15e3342df0587d20954176f - md5: 2dc0ddc4bd480749a17021aea7d45c38 + size: 852173 + timestamp: 1734712848143 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalinspiral-5.0.2-py312hc0a28a1_0.conda + sha256: 482b5c766fb73da9afea65447e36aa49a823528795a9e97b1fb47f6e061500a4 + md5: 1e3b133c631134b5ce62ef9f9367c013 depends: - __glibc >=2.17,<3.0.a0 - - igwn-ligolw - - libgcc >=14 - - liblalinspiral 5.0.3 h43c0734_3 + - libgcc >=13 + - liblalinspiral 5.0.2 h3773ae6_0 - lscsoft-glue - - numpy >=1.23,<3 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 + - python-lal >=7.6.0 - python-lalburst >=2.0.0 - python-lalframe >=3.0.0 - python-lalmetaio >=4.0.0 - - python-lalsimulation >=6.2.0 + - python-lalsimulation >=6.1.0 + - python-ligo-lw - python_abi 3.12.* *_cp312 - tqdm license: GPL-2.0-or-later license_family: GPL purls: [] - size: 61721427 - timestamp: 1774543769661 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalmetaio-4.0.6-py312h4f23490_2.conda - sha256: df79aac2086f33d8368c4a0b96cc6a6147cada68e451698f14a5e5361f407751 - md5: 492cdbf012e0e19d4edbcff24f394e13 + size: 61725079 + timestamp: 1734708922981 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalmetaio-4.0.5-py312hc0a28a1_2.conda + sha256: 0ba0552788165a55e10194b341288552f11506f23c1c93ed8924aa3ed4b5bf7d + md5: e07e287556b3a8d49c999c7fc0b12fd2 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - liblalmetaio 4.0.6 hb03c661_2 - - numpy >=1.23,<3 + - libgcc >=13 + - liblalmetaio 4.0.5 hb9d3cd8_2 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 + - python-lal >=7.6.0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 162733 - timestamp: 1774542953203 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalpulsar-7.1.1-py312h4f23490_2.conda - sha256: b99299edda44f8eec8b757f20e41212e9f356406635cafdf4017340dafa5260f - md5: 64bd69f72658847487a2f1be69117a7a + size: 161685 + timestamp: 1734275293301 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalpulsar-7.1.0-py312hc0a28a1_1.conda + sha256: 1d05958d1cf12ddc3ffb6bf2a405a835d0d22eb457a87b5f96e8f61fd5b117c2 + md5: b4328900fedc8e9ae926604928370433 depends: - __glibc >=2.17,<3.0.a0 - astropy-base - - libgcc >=14 - - liblalpulsar 7.1.1 h3c7535d_2 - - numpy >=1.23,<3 + - libgcc >=13 + - liblalpulsar 7.1.0 h9345056_1 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python-lal >=7.6.0 - python-lalframe >=3.0.0 @@ -8148,32 +7277,54 @@ packages: license: GPL-2.0-or-later license_family: GPL purls: [] - size: 96795951 - timestamp: 1774626285092 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalsimulation-6.2.0-py312h71fd7f1_3.conda - sha256: e111e6b4dc7811b4f75040f0ecff8df709c662596e95e0cd21626914f4e0dd0b - md5: edf8cd1cfa5fb6e585e9136db6226bf8 + size: 96801307 + timestamp: 1744215898111 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-lalsimulation-6.1.0-py312h09b83b2_0.conda + sha256: af389d42ec5a23f119d5e0447d5bbc9e0c5a1ed36deacf0d7b38a53d751364d1 + md5: d05d0a75983655eede7638949a6d4080 depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 - astropy-base - gsl >=2.7,<2.8.0a0 - gwpy - - libgcc >=14 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalsimulation 6.2.0 py312hd1ec2bb_3 + - libgcc >=13 + - liblal >=7.6.0 + - liblal >=7.6.0,<8.0a0 + - liblalsimulation 6.1.0 py312h09b83b2_0 - mpmath >=1.0.0 - - numpy >=1.23,<3 + - numpy - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 + - python-lal >=7.6.0 - python_abi 3.12.* *_cp312 - scipy license: GPL-2.0-or-later license_family: GPL purls: [] - size: 8493302 - timestamp: 1774541308884 + size: 8479505 + timestamp: 1734695954067 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-ligo-lw-1.8.3-py312h66e93f0_4.conda + sha256: c7a772efddc6095c7ef5d2c426f9907af47779b77567167c63cb23253c2ea94b + md5: 1bda2f338b4931db2314d48b76e5861a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - ligo-segments + - lscsoft-glue >=2.0.0 + - numpy + - python >=3.12,<3.13.0a0 + - python-dateutil + - python-lal >=6.19.0 + - python_abi 3.12.* *_cp312 + - pyyaml + - six + - tqdm + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/python-ligo-lw?source=hash-mapping + size: 192801 + timestamp: 1733996334698 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda sha256: cb142bfd92f6e55749365ddc244294fa7b64db6d08c45b018ff1c658907bfcbf md5: 15878599a87992e44c059731771591cb @@ -8200,6 +7351,70 @@ packages: purls: [] size: 552937 timestamp: 1720813982144 +- conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.1-h6f76662_3.conda + sha256: 8269ca1fc02dbd419f77ed30b6ec205897efd12813607ecb0630f075f8c5f01f + md5: f134a496ef494f2b6c5a26e5d739acc6 + depends: + - __glibc >=2.17,<3.0.a0 + - alsa-lib >=1.2.15.1,<1.3.0a0 + - dbus >=1.16.2,<2.0a0 + - double-conversion >=3.4.0,<3.5.0a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - harfbuzz >=12.2.0 + - icu >=75.1,<76.0a0 + - krb5 >=1.21.3,<1.22.0a0 + - libclang-cpp21.1 >=21.1.7,<21.2.0a0 + - libclang13 >=21.1.7 + - libcups >=2.3.3,<2.4.0a0 + - libdrm >=2.4.125,<2.5.0a0 + - libegl >=1.7.0,<2.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libgl >=1.7.0,<2.0a0 + - libglib >=2.86.3,<3.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libllvm21 >=21.1.7,<21.2.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libpq >=18.1,<19.0a0 + - libsqlite >=3.51.1,<4.0a0 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 + - libvulkan-loader >=1.4.328.1,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libxkbcommon >=1.13.1,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.4,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - wayland >=1.24.0,<2.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + - xcb-util-cursor >=0.1.6,<0.2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxcomposite >=0.4.6,<1.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrandr >=1.5.4,<2.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - xorg-libxxf86vm >=1.1.6,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - qt 6.10.1 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 56636216 + timestamp: 1766349442902 - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.1-hca0d9c9_0.conda sha256: 9b6d229110b0af7d80270cd14dc89acb8264128a29079bea58cee3fef0c5f8d3 md5: 2ab549dfb24cfbac4cf53ed9ef3d8dfb @@ -8264,79 +7479,6 @@ packages: purls: [] size: 56495332 timestamp: 1763747754806 -- conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.1-pl5321h16c4a6b_0.conda - sha256: 787d9a8eb7bb993e4a543901b8edade35c1c8e75d67cadb65c56a8f9c38119a5 - md5: cdae26862f9e4c674b8443fd267f2401 - depends: - - libxcb - - xcb-util - - xcb-util-wm - - xcb-util-keysyms - - xcb-util-image - - xcb-util-renderutil - - xcb-util-cursor - - libgl-devel - - libegl-devel - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - - libgcc >=14 - - libjpeg-turbo >=3.1.4.1,<4.0a0 - - alsa-lib >=1.2.15.3,<1.3.0a0 - - xcb-util-renderutil >=0.3.10,<0.4.0a0 - - xorg-libxcursor >=1.2.3,<2.0a0 - - double-conversion >=3.4.0,<3.5.0a0 - - dbus >=1.16.2,<2.0a0 - - libglib >=2.88.1,<3.0a0 - - libsqlite >=3.53.1,<4.0a0 - - xorg-libx11 >=1.8.13,<2.0a0 - - krb5 >=1.22.2,<1.23.0a0 - - libdrm >=2.4.125,<2.5.0a0 - - xorg-libxext >=1.3.7,<2.0a0 - - libwebp-base >=1.6.0,<2.0a0 - - harfbuzz >=14.2.0 - - xorg-libice >=1.1.2,<2.0a0 - - xorg-libxdamage >=1.1.6,<2.0a0 - - libbrotlicommon >=1.2.0,<1.3.0a0 - - libbrotlienc >=1.2.0,<1.3.0a0 - - libbrotlidec >=1.2.0,<1.3.0a0 - - xorg-libxrandr >=1.5.5,<2.0a0 - - xcb-util-image >=0.4.0,<0.5.0a0 - - libfreetype >=2.14.3 - - libfreetype6 >=2.14.3 - - xorg-libxcomposite >=0.4.7,<1.0a0 - - openssl >=3.5.6,<4.0a0 - - xcb-util-cursor >=0.1.6,<0.2.0a0 - - libvulkan-loader >=1.4.341.0,<2.0a0 - - pcre2 >=10.47,<10.48.0a0 - - xorg-libxxf86vm >=1.1.7,<2.0a0 - - icu >=78.3,<79.0a0 - - libxcb >=1.17.0,<2.0a0 - - wayland >=1.25.0,<2.0a0 - - xorg-libsm >=1.2.6,<2.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - libpq >=18.3,<19.0a0 - - libegl >=1.7.0,<2.0a0 - - xcb-util-wm >=0.4.2,<0.5.0a0 - - xcb-util-keysyms >=0.4.1,<0.5.0a0 - - libxkbcommon >=1.13.1,<2.0a0 - - zstd >=1.5.7,<1.6.0a0 - - fontconfig >=2.17.1,<3.0a0 - - fonts-conda-ecosystem - - xorg-libxtst >=1.2.5,<2.0a0 - - libxml2 - - libxml2-16 >=2.14.6 - - libzlib >=1.3.2,<2.0a0 - - libpng >=1.6.58,<1.7.0a0 - - libcups >=2.3.3,<2.4.0a0 - - libgl >=1.7.0,<2.0a0 - - xcb-util >=0.4.1,<0.5.0a0 - constrains: - - qt ==6.11.1 - license: LGPL-3.0-only - license_family: LGPL - purls: [] - size: 60185269 - timestamp: 1778597122245 - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.8.1-h1fbca29_0.conda sha256: cf550bbc8e5ebedb6dba9ccaead3e07bd1cb86b183644a4c853e06e4b3ad5ac7 md5: d83958768626b3c8471ce032e28afcd3 @@ -8424,18 +7566,6 @@ packages: purls: [] size: 395083 timestamp: 1773251675551 -- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.3-hc5a330e_0.conda - sha256: 150a0a5254e8b15ad737549721c7d13406cd96432f3f446e07073dbd98bb2491 - md5: f2bd09e21c5844a12e2f5eefcd075555 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - openssl >=3.5.6,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 388111 - timestamp: 1778113913631 - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.8.0-np2py312h3226591_1.conda sha256: 23c643c37fafa14ba3f2b7a407126ea5e732a3655ea8157cf9f977098f863448 md5: 38decbeae260892040709cafc0514162 @@ -8911,17 +8041,6 @@ packages: purls: [] size: 18701 timestamp: 1769434732453 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hb03c661_0.conda - sha256: 7a8c64938428c2bfd016359f9cb3c44f94acc256c6167dbdade9f2a1f5ca7a36 - md5: aa8d21be4b461ce612d8f5fb791decae - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 570010 - timestamp: 1766154256151 - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad md5: a77f85f77be52ff59391544bfe73390a @@ -8980,17 +8099,6 @@ packages: purls: [] size: 601375 timestamp: 1764777111296 -- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661 - md5: aaa2a381ccc56eac91d63b6c1240312f - depends: - - cpython - - python-gil - license: MIT - license_family: MIT - purls: [] - size: 8191 - timestamp: 1744137672556 - conda: https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2 sha256: b91f8ab4ac2b48972fbee1fc8e092cc452fdf59156e4ff2322c94bbf73650f94 md5: c88eaec8de9ae1fa161205aa18e7a5b1 @@ -9002,81 +8110,30 @@ packages: - pkg:pypi/antlr4-python3-runtime?source=hash-mapping size: 101065 timestamp: 1638309284042 -- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.1.0-pyhc364b38_0.conda - sha256: 97cfef648c974a3dd30817ada5052517b86055565142ac4a77d9a91944c3cbcb - md5: 1bdec040ccaa9e12ccbfebe45c358485 - depends: - - python >=3.12 - - arviz-base >=1.1.0,<1.2.0 - - arviz-stats >=1.1.0,<1.2.0 - - arviz-plots >=1.1.0,<1.2.0 - - matplotlib-base >=3.9 +- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-0.23.4-pyhcf101f3_0.conda + sha256: d4e638ca192077e0dd7f60d33ae416f34d1d2b1f032e775eaeb38f07556b79ed + md5: f64907fda280c6f731d240572ca7956c + depends: + - python >=3.10 + - setuptools >=60.0.0 + - matplotlib-base >=3.8 + - numpy >=1.26.0 + - scipy >=1.11.0 + - packaging + - pandas >=2.1.0 + - xarray >=2023.7.0 + - h5netcdf >=1.0.2 + - typing_extensions >=4.1.0 + - xarray-einstats >=0.3 + - h5py + - platformdirs - python license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/arviz?source=hash-mapping - size: 20579 - timestamp: 1777024093826 -- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.1.0-pyhd8ed1ab_0.conda - sha256: 8e3351000e341f9a8d93488d07448b40065e312a698f9d1c02659dc009281e6f - md5: a94d579ff5f766bbf8b3cea3fed770e9 - depends: - - lazy_loader >=0.4 - - numpy >=2 - - python >=3.12 - - typing_extensions >=3.10 - - xarray >=2024.11.0 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/arviz-base?source=hash-mapping - size: 1381907 - timestamp: 1777009421241 -- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.1.0-pyhc364b38_0.conda - sha256: 4b2dcf51a01523e1b6eaa27b1ec9b3bb1c4163d1f27d2765f6eb885e74fddcb9 - md5: 61026a34eb9dce29cca3f1ddf223f3be - depends: - - python >=3.12 - - arviz-base >=1.1,<1.2 - - arviz-stats >=1.1,<1.2 - - python - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/arviz-plots?source=hash-mapping - size: 137020 - timestamp: 1777017305884 -- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.1.0-pyhd721c7e_0.conda - sha256: 73e9cff67f93ba698c18dd49a11fbd6075af9628e74c5a9e2abdf52e9c2e80cf - md5: 0ad838e88323a0ab00e5c23d73e294c7 - depends: - - python >=3.12 - - arviz-stats-core ==1.1.0 pyhc364b38_0 - - arviz-base >=1.1.0,<1.2.0 - - xarray-einstats - - xarray >=2024.11.0 - - python - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/arviz-stats?source=hash-mapping - size: 142751 - timestamp: 1777012484760 -- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.1.0-pyhc364b38_0.conda - sha256: 8ed0c2728b2c0ec9560ab2fe063f635fb7767718957b0b8481ba11ce7ee44284 - md5: 569718751577f8663a0996cf7303aa87 - depends: - - python >=3.12 - - numpy >=2 - - scipy >=1.13 - - python - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/arviz-stats?source=hash-mapping - size: 142674 - timestamp: 1777012484760 + size: 1499441 + timestamp: 1770281563537 - conda: https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda sha256: cc2ae4924d4ca8e5d411cb40d686c698e570ed80b96f9a3b247e97d85de91182 md5: a1539d8a811402e8f5e1f9ee69197fd4 @@ -9223,17 +8280,6 @@ packages: - pkg:pypi/corner?source=hash-mapping size: 20423 timestamp: 1734278657058 -- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda - noarch: generic - sha256: d3e9bbd7340199527f28bbacf947702368f31de60c433a16446767d3c6aaf6fe - md5: f54c1ffb8ecedb85a8b7fcde3a187212 - depends: - - python >=3.12,<3.13.0a0 - - python_abi * *_cp312 - license: Python-2.0 - purls: [] - size: 46463 - timestamp: 1772728929620 - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda sha256: bb47aec5338695ff8efbddbc669064a3b10fe34ad881fb8ad5d64fbfa6910ed1 md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -9558,6 +8604,20 @@ packages: - pkg:pypi/h2?source=hash-mapping size: 95967 timestamp: 1756364871835 +- conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.8.1-pyhd8ed1ab_0.conda + sha256: 5bf081c0f21a57fc84b5000d53f043d63638b77dcc2137f87511a4581838c9f6 + md5: ca7f9ba8762d3e360e47917a10e23760 + depends: + - h5py + - numpy + - packaging + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/h5netcdf?source=hash-mapping + size: 57732 + timestamp: 1769241877548 - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba md5: 0a802cb9888dd14eeefc611f05c40b6e @@ -9708,49 +8768,26 @@ packages: - pkg:pypi/jplephem?source=hash-mapping size: 41950 timestamp: 1772477050871 -- conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.26-pyhd8ed1ab_0.conda - sha256: fbd26ebb49c4ce186ed428b1528089b1aa40b946e69829718ae6076ebc968c2f - md5: f7b845c0a254c3ec1fecfc1bfae307ad - depends: - - lal 7.7.0.* - - lalapps 10.1.0.* - - lalburst 2.0.7.* - - lalframe 3.0.7.* - - lalinference 4.1.9.* - - lalinspiral 5.0.3.* - - lalmetaio 4.0.6.* - - lalpulsar 7.1.1.* - - lalsimulation 6.2.0.* +- conda: https://conda.anaconda.org/conda-forge/noarch/lalsuite-7.25-pyhd8ed1ab_0.conda + sha256: 2dff776a231ea5416ec88ffb9ac59816e11df0a2ebca960afb0bfca61abb1538 + md5: d655403fd4837dd4a33ae9e780ab6b82 + depends: + - lal 7.6.1.* + - lalapps 10.0.2.* + - lalburst 2.0.6.* + - lalframe 3.0.6.* + - lalinference 4.1.8.* + - lalinspiral 5.0.2.* + - lalmetaio 4.0.5.* + - lalpulsar 7.1.0.* + - lalsimulation 6.1.0.* - python >=3.10 license: GPL-3.0-or-later license_family: GPL purls: - pkg:pypi/lalsuite?source=hash-mapping - size: 16793 - timestamp: 1748464747617 -- conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - sha256: 1a88069ac61d2756ccaf26a6c206ab4d56610fb054bd2fffb5df4cd0744ab78e - md5: 75932da6f03a6bef32b70a51e991f6eb - depends: - - packaging - - python >=3.10 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/lazy-loader?source=hash-mapping - size: 14883 - timestamp: 1772817374026 -- conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.5-pyhd8ed1ab_0.conda - sha256: 42adb08ded0662114a3146627b24d2cd5eba3bfc3ed424374bac869cdc1745a9 - md5: 4c8327180586e7b1cd8b6815fc8827f1 - depends: - - lazy-loader 0.5 pyhd8ed1ab_0 - - python >=3.10 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 7565 - timestamp: 1772817387506 + size: 16292 + timestamp: 1734789301887 - conda: https://conda.anaconda.org/conda-forge/noarch/ligo-gracedb-2.15.7-pyhcf101f3_0.conda sha256: 13efdfebcdbd05b753f0731364200ba34e217211610ed1390e32bb4f228762f8 md5: 495229a27540f4a8a74458d03509ecb6 @@ -9949,6 +8986,18 @@ packages: - pkg:pypi/pip?source=hash-mapping size: 1201616 timestamp: 1777924080196 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda + sha256: 8f29915c172f1f7f4f7c9391cd5dac3ebf5d13745c8b7c8006032615246345a5 + md5: 89c0b6d1793601a2a3a3f7d2d3d8b937 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=hash-mapping + size: 25862 + timestamp: 1775741140609 - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda sha256: e14aafa63efa0528ca99ba568eaf506eb55a0371d12e6250aaaa61718d2eb62e md5: d7585b6550ad04c8c5e21097ada2888e @@ -9961,6 +9010,18 @@ packages: - pkg:pypi/pluggy?source=hash-mapping size: 25877 timestamp: 1764896838868 +- conda: https://conda.anaconda.org/conda-forge/noarch/ptemcee-1.0.0-py_0.tar.bz2 + sha256: 0f76c1869194d3246673361a2f1e21a38ea275609e6d240183bcbc7b32caac8d + md5: d7eb1dc7fb71bbcc6ff3f1f2239f73e2 + depends: + - numpy + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/ptemcee?source=hash-mapping + size: 19208 + timestamp: 1545353618172 - conda: https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda sha256: f232f80b489147cf447bbaa20bf3cf42f6df3059a92f5a4643f7422260e70771 md5: 559e5051ce00d853e61f3f47e0b47115 @@ -10098,16 +9159,6 @@ packages: - pkg:pypi/python-dateutil?source=hash-mapping size: 233310 timestamp: 1751104122689 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda - sha256: 97327b9509ae3aae28d27217a5d7bd31aff0ab61a02041e9c6f98c11d8a53b29 - md5: 32780d6794b8056b78602103a04e90ef - depends: - - cpython 3.12.13.* - - python_abi * *_cp312 - license: Python-2.0 - purls: [] - size: 46449 - timestamp: 1772728979370 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda build_number: 8 sha256: 80677180dd3c22deb7426ca89d6203f1c7f1f256f2d5a94dc210f6e758229809 @@ -10255,21 +9306,21 @@ packages: - pkg:pypi/threadpoolctl?source=hash-mapping size: 23869 timestamp: 1741878358548 -- conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.5.15-pyhd8ed1ab_0.conda - sha256: 697713f87c67560632a8a51d821ace70f5bd5a651f9a15ef626f2bc876fbf71d - md5: 9e1e5fe19dac2c52edb0f9807dba3c4c +- conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.3.3-pyhd8ed1ab_0.conda + sha256: da24795c3000566167fbb51c0933acd7a46fe2661375ad4d8a1748aab2bc9537 + md5: cecacab21bc8f4ed17fac11bc8b08cf0 depends: - - imagecodecs >=2026.3.6 - - numpy >=2.1 - - python >=3.12 + - imagecodecs >=2025.11.11 + - numpy >=1.19.2 + - python >=3.11 constrains: - matplotlib-base >=3.3 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/tifffile?source=compressed-mapping - size: 209283 - timestamp: 1778926406601 + - pkg:pypi/tifffile?source=hash-mapping + size: 193137 + timestamp: 1772701074188 - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda sha256: 91cafdb64268e43e0e10d30bd1bef5af392e69f00edd34dfaf909f69ab2da6bd md5: b5325cf06a000c5b14970462ff5e4d58 @@ -10402,20 +9453,20 @@ packages: - pkg:pypi/xarray?source=hash-mapping size: 1017999 timestamp: 1776122774298 -- conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda - sha256: 02943091700f860bc3fc117deabe5fd609ed7bae64fd97da2f70241167c2719d - md5: b82273c95432c78efe98f14cbc46be7d +- conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.9.1-pyhd8ed1ab_0.conda + sha256: 3fefcdb5520c9f7127d67904894cccdc917449a3376f1ccf84127f02ad3aa61b + md5: 18860b32ac96f7e9d8be1c91eb601462 depends: - - numpy >=2.0 - - python >=3.12 - - scipy >=1.13 - - xarray >=2024.02.0 + - numpy >=1.25 + - python >=3.11 + - scipy >=1.11 + - xarray >=2023.06.0 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/xarray-einstats?source=hash-mapping - size: 38256 - timestamp: 1771933879255 + size: 37867 + timestamp: 1750279091345 - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda sha256: 663ea9b00d68c2da309114923924686ab6d3f59ef1b196c5029ba16799e7bb07 md5: 4487b9c371d0161d54b5c7bbd890c0fc @@ -10427,15 +9478,15 @@ packages: - pkg:pypi/xyzservices?source=hash-mapping size: 51732 timestamp: 1774900074457 -- conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda - sha256: 88716d633ac7fdc896ce7aa00efdfc91df6363d51bebabfb60d34399c023a3d0 - md5: b787cd1f01e24b161261438a5589df51 +- conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.5-pyhcf101f3_0.conda + sha256: c36bec7d02d2f227409fcc4cf586cf3a658af068b58374de7f8f2d0b5c1c84f9 + md5: c1844a94b2be61bb03bbb71574a0abfc depends: - - python >=3.12 + - python >=3.11 - packaging >=22.0 - - numpy >=2 + - numpy >=1.26 - numcodecs >=0.14 - - typing_extensions >=4.13 + - typing_extensions >=4.9 - donfig >=0.8 - google-crc32c >=1.5 - python @@ -10446,8 +9497,8 @@ packages: license_family: MIT purls: - pkg:pypi/zarr?source=hash-mapping - size: 367721 - timestamp: 1777989189792 + size: 305998 + timestamp: 1763742695201 - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda sha256: 5488542dceeb9f2874e726646548ecc5608060934d6f9ceaa7c6a48c61f9cc8d md5: e52c2ef711ccf31bb7f70ca87d144b9e @@ -11038,9 +10089,9 @@ packages: - pkg:pypi/cffi?source=hash-mapping size: 288241 timestamp: 1761203170357 -- conda: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.6.3-hf728c8e_0.conda - sha256: b56de7134f3826d194ad282db0de3f8896c2d98ab8212eafed044170990f804a - md5: 4c9dd7d86df698f38f0a39e87ddcbbcf +- conda: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.6.2-ha7f915d_1.conda + sha256: a1a73d388be57366d056225cfb6551dd65f11b31897e55d5ce671deb87fbecdd + md5: 01d54d9f3d6ccfe0d2b900a73bb72431 depends: - __osx >=10.13 - bzip2 >=1.0.8,<2.0a0 @@ -11048,20 +10099,8 @@ packages: - libzlib >=1.3.1,<2.0a0 license: LicenseRef-fitsio purls: [] - size: 695582 - timestamp: 1759288647997 -- conda: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.6.4-hd57ea71_1.conda - sha256: 067975c0db75bb5f0455574c43917af1075b464fdfb5ff00241313538a208864 - md5: e6cca09478ea60f189ccec950011fcb9 - depends: - - __osx >=11.0 - - bzip2 >=1.0.8,<2.0a0 - - libcurl >=8.20.0,<9.0a0 - - libzlib >=1.3.2,<2.0a0 - license: LicenseRef-fitsio - purls: [] - size: 697925 - timestamp: 1777678815545 + size: 697242 + timestamp: 1753286975548 - conda: https://conda.anaconda.org/conda-forge/osx-64/charls-2.4.3-hcc62823_0.conda sha256: 8755decbc126ed207da4618b104ee2a8a3336c1511264d5549b22dd21d356667 md5: 04d7337a89a1def07cf2b2bd96e2b04a @@ -11073,28 +10112,17 @@ packages: purls: [] size: 135256 timestamp: 1772713129777 -- conda: https://conda.anaconda.org/conda-forge/osx-64/chealpix-3.31.0-h1535d2a_9.conda - sha256: 65c60dee934062a3395cbc9906d3a9ccae61545062e2b9e52fdce19265e6672f - md5: 6560d926ff7379570882fca4f91f78ce +- conda: https://conda.anaconda.org/conda-forge/osx-64/chealpix-3.31.0-h93aae7a_8.conda + sha256: a35e752285e8953f30b1e9200e71985665af7f2754adea28601a6a6a91061d25 + md5: 65b5d5adcfb7758caa9bd6b0c7b37ebe depends: - __osx >=10.13 - - cfitsio >=4.6.3,<4.6.4.0a0 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 36646 - timestamp: 1764671572007 -- conda: https://conda.anaconda.org/conda-forge/osx-64/chealpix-3.31.0-he134003_10.conda - sha256: 2f520a4bf9fd8bc2424cc467a34e3fa1b10e0a9d6370227d1507ddbcb23dbbb0 - md5: dd0cbace181f560e6f2d7bdf669d62ff - depends: - - __osx >=11.0 - - cfitsio >=4.6.4,<4.6.5.0a0 + - cfitsio >=4.6.2,<4.6.3.0a0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 34383 - timestamp: 1778488454431 + size: 36724 + timestamp: 1756897326802 - conda: https://conda.anaconda.org/conda-forge/osx-64/contourpy-1.3.3-py312hb0c38da_4.conda sha256: 6c03943009b07c6deb3a64afa094b6ca694062b58127a4da6f656a13d508c340 md5: 625f08687ba33cc9e57865e7bf8e8123 @@ -11269,111 +10297,51 @@ packages: purls: [] size: 3221488 timestamp: 1626369980688 -- conda: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.16.0-nompi_py312h53b4df1_102.conda - sha256: 632227065f84306b2f5822b22d10ba84fcd6f5b397b2d69a4c36d92e0ca2f31e - md5: 626ce477182eeedea956ea6a2c94ef14 - depends: - - __osx >=11.0 - - cached-property - - hdf5 >=1.14.6,<1.14.7.0a0 - - numpy >=1.23,<3 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/h5py?source=hash-mapping - size: 1183163 - timestamp: 1775582252030 -- conda: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.16.0-nompi_py312h82c48cf_102.conda - sha256: 705c25f8ef6e3795f4add3dd34a0563698b07f5a3d1c6c920d4279a15beb0841 - md5: 52167ce7748139f6ec29d8aa86e0ec38 +- conda: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.13.0-nompi_py312hea5ca7c_100.conda + sha256: 99ef28fdfa99c75f95edebb5d468250e4395a5bc823682ef3542bda19f6f90c2 + md5: 55bc071459c1de6abc4d02133a540021 depends: - - __osx >=11.0 + - __osx >=10.13 - cached-property - - hdf5 >=2.1.0,<3.0a0 - - numpy >=1.23,<3 + - hdf5 >=1.14.3,<1.14.4.0a0 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/h5py?source=hash-mapping - size: 1188195 - timestamp: 1775581932391 -- conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.6-nompi_hf563b80_106.conda - sha256: 4bcc7d54a011f1d515da2fb3406659574bae5f284bced126c756ed9ef151459f - md5: b74e900265ad3808337cd542cfad6733 + size: 1205893 + timestamp: 1739952559909 +- conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.3-nompi_h1607680_109.conda + sha256: b1882c1d26cd854c980dd64f97ed27f55bbbf413b39ade43fe6cdb2514f8a747 + md5: aa2b87330df24a89585b9d3e4d70c4d4 depends: - __osx >=10.13 - - libaec >=1.1.5,<2.0a0 - - libcurl >=8.18.0,<9.0a0 - - libcxx >=19 - - libgfortran - - libgfortran5 >=14.3.0 + - libaec >=1.1.3,<2.0a0 + - libcurl >=8.11.1,<9.0a0 + - libcxx >=18 + - libgfortran >=5 + - libgfortran5 >=13.2.0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.5,<4.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 3526365 - timestamp: 1770391694712 -- conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-2.1.0-nompi_h650120f_105.conda - sha256: 2dd1bf089ed2cd70bd461569ffa53023a8dcdbdf98547f65fe257c93aa1aa9d9 - md5: 215fed8f2ea2f3578416dfadcd25b4a1 - depends: - - __osx >=11.0 - - aws-c-auth >=0.10.1,<0.10.2.0a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - aws-c-http >=0.10.13,<0.10.14.0a0 - - aws-c-io >=0.26.3,<0.26.4.0a0 - - aws-c-s3 >=0.12.2,<0.12.3.0a0 - - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 - - libaec >=1.1.5,<2.0a0 - - libcurl >=8.20.0,<9.0a0 - - libcxx >=19 - - libgfortran - - libgfortran5 >=14.3.0 - - libzlib >=1.3.2,<2.0a0 - - openssl >=3.5.6,<4.0a0 + - openssl >=3.4.0,<4.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 3829796 - timestamp: 1777863753790 -- conda: https://conda.anaconda.org/conda-forge/osx-64/healpy-1.19.0-py312h5272b37_2.conda - sha256: ad8c591842d1eef83db33c512fedfc98bfda4ba0b80e9bdceb101817b6026551 - md5: 6c47b5246a089e13b3b88038fcf0c7e7 - depends: - - __osx >=11.0 - - astropy-base - - cfitsio >=4.6.3,<4.6.4.0a0 - - libcxx >=19 - - libgfortran - - libgfortran5 >=14.3.0 - - libzlib >=1.3.2,<2.0a0 - - matplotlib-base - - numpy >=1.23,<3 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - scipy - license: GPL-2.0-only - license_family: GPL - purls: - - pkg:pypi/healpy?source=hash-mapping - size: 2072981 - timestamp: 1774834735517 -- conda: https://conda.anaconda.org/conda-forge/osx-64/healpy-1.19.0-py312h84047a7_3.conda - sha256: 0109cdba7168f1646e38015d200c3b4d746636c805e52f194e3ee7f3494f0898 - md5: 8bab7ea66a7965f1d2ea6100cc347a15 + size: 3735253 + timestamp: 1737517248573 +- conda: https://conda.anaconda.org/conda-forge/osx-64/healpy-1.18.1-py312h9f11423_2.conda + sha256: a6863f1ea42fa7be18b2d38b93bbd959d0804e1b6bd85ad7955248ef047023c2 + md5: 5933a04052a74ba60dd5035da391d155 depends: - - __osx >=11.0 + - __osx >=10.13 - astropy-base - - cfitsio >=4.6.4,<4.6.5.0a0 + - cfitsio >=4.6.2,<4.6.3.0a0 - libcxx >=19 - libgfortran - libgfortran5 >=14.3.0 - - libzlib >=1.3.2,<2.0a0 + - libgfortran5 >=15.1.0 + - libzlib >=1.3.1,<2.0a0 - matplotlib-base - numpy >=1.23,<3 - python >=3.12,<3.13.0a0 @@ -11383,8 +10351,8 @@ packages: license_family: GPL purls: - pkg:pypi/healpy?source=hash-mapping - size: 2070001 - timestamp: 1777848876087 + size: 2728977 + timestamp: 1757172669294 - conda: https://conda.anaconda.org/conda-forge/osx-64/htcondor-24.12.4-py312hb401068_0.conda sha256: c8b954a80737d8070b4414c74f144ccd57f4edffdc7580221c48e82ffa3707ba md5: 556582715c2dd1495a8c61dff039f640 @@ -11515,16 +10483,16 @@ packages: - pkg:pypi/htgettoken?source=hash-mapping size: 52806 timestamp: 1768653631587 -- conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda - sha256: 1294117122d55246bb83ad5b589e2a031aacdf2d0b1f99fd338aa4394f881735 - md5: 627eca44e62e2b665eeec57a984a7f00 +- conda: https://conda.anaconda.org/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda + sha256: 2e64307532f482a0929412976c8450c719d558ba20c0962832132fd0d07ba7a7 + md5: d68d48a3060eb5abdc1cdc8e2a3a5966 depends: - - __osx >=11.0 + - __osx >=10.13 license: MIT license_family: MIT purls: [] - size: 12273764 - timestamp: 1773822733780 + size: 11761697 + timestamp: 1720853679409 - conda: https://conda.anaconda.org/conda-forge/osx-64/igwn-ligolw-2.1.1-py312h0b9663a_1.conda sha256: 65a72e7dd6333fc207e8155e5994fc6a073bce23ff3d18055431d4dc4b092098 md5: 1d3db82d02712e20c3b18fce291b0573 @@ -11663,339 +10631,236 @@ packages: purls: [] size: 1193620 timestamp: 1769770267475 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lal-7.7.0-fftw_py312h3a6e924_104.conda - sha256: 77cb0ac60f0bde0ef53c2d1700fd0dd6c8bb195fb94b06ca7cbc1db54869dc4f - md5: 0edf0df6e9614f4b1f45706235dbf9cc - depends: - - __osx >=11.0 - - fftw >=3.3.10,<4.0a0 - - igwn-segments - - liblal 7.7.0 fftw_he57ba51_104 - - numpy - - python >=3.12,<3.13.0a0 - - python-lal 7.7.0 fftw_py312h70f41d4_104 - - python_abi 3.12.* *_cp312 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 45343 - timestamp: 1774638882899 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lal-7.7.0-fftw_py312hf555030_101.conda - sha256: 6688ee01df54b5604034ce26dffe854d7606d1112ab7f8537bf8dd6158965f22 - md5: 3b316a983c450dd2d69960dc60fd1f65 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lal-7.6.1-fftw_py312h6f020d4_100.conda + sha256: c581cb8c8d0e9000e06668b1b3bdf2b4d94c2f8a442ccb4cd94e6098a815c891 + md5: d5780addb79aa076c6ca0398d93ef63f depends: - __osx >=10.13 - fftw >=3.3.10,<4.0a0 - - igwn-ligolw - - igwn-segments - - liblal 7.7.0 fftw_h11bfb9b_101 + - liblal 7.6.1 fftw_ha907fd1_100 + - ligo-segments - numpy - python >=3.12,<3.13.0a0 - - python-lal 7.7.0 fftw_py312haa2233f_101 + - python-lal 7.6.1 fftw_py312ha78c7a8_100 + - python-ligo-lw - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 44048 - timestamp: 1755601485660 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lalapps-10.1.0-py312h1f55956_2.conda - sha256: d8861ba473e5a61debcee46fd4fb31df445aacc256d8827462e167e68afc3ed9 - md5: 4a6085e0bc987bd42ad2dfe385337a99 + size: 43445 + timestamp: 1734695921372 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalapps-10.0.2-py312h72dd72b_2.conda + sha256: 88c1fed7afdd1bb95949ee330e99bbea6db6cc9659fa2fa5f63ee506565d9c6a + md5: 48273c706d276e284697d05d06d4c981 depends: - - cfitsio - - gsl - - h5py - - igwn-ligolw >=2.1.0 - - igwn-segments - - lal >=7.7.0 - - lalburst >=2.0.0 - - lalframe >=3.0.0 - - lalinference >=4.1.0 - - lalinspiral >=5.0.0 - - lalmetaio >=4.0.0 - - lalpulsar >=7.1.0 - - lalsimulation >=6.2.0 - - libframel >=8.39.2 - - libmetaio >=8.2.0 - - numpy - - pillow - - python - - __osx >=11.0 - - liblalburst >=2.0.7,<3.0a0 - - liblalsimulation >=6.2.0,<7.0a0 - - cfitsio >=4.6.3,<4.6.4.0a0 - - liblal >=7.7.0,<8.0a0 - - python_abi 3.12.* *_cp312 - - libmetaio >=8.5.1,<9.0a0 - - liblalinference >=4.1.9,<5.0a0 + - __osx >=10.13 + - cfitsio >=4.6.2,<4.6.3.0a0 - gsl >=2.7,<2.8.0a0 - - liblalpulsar >=7.1.1,<8.0a0 - - liblalframe >=3.0.7,<4.0a0 - - liblalmetaio >=4.0.6,<5.0a0 - - liblalinspiral >=5.0.3,<6.0a0 - - libframel >=8.41.3,<9.0a0 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 1652208 - timestamp: 1771238117822 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lalapps-10.1.0-py312h69f915d_3.conda - sha256: d8c8d879d3e5ed6109e71a791dac09e11ec606c166212374392489212bdc0204 - md5: 792feb2dbf80fc0794072143034f9ffe - depends: - - cfitsio - - gsl - h5py - - igwn-ligolw >=2.1.0 - - igwn-segments - - lal >=7.7.0 + - lal >=7.6.0 - lalburst >=2.0.0 - lalframe >=3.0.0 - lalinference >=4.1.0 - lalinspiral >=5.0.0 - lalmetaio >=4.0.0 - lalpulsar >=7.1.0 - - lalsimulation >=6.2.0 + - lalsimulation >=6.1.0 - libframel >=8.39.2 - - libmetaio >=8.2.0 + - libframel >=8.41.3,<9.0a0 + - liblal >=7.6.1,<8.0a0 + - liblalburst >=2.0.6,<3.0a0 + - liblalframe >=3.0.6,<4.0a0 + - liblalinference >=4.1.8,<5.0a0 + - liblalinspiral >=5.0.2,<6.0a0 + - liblalmetaio >=4.0.5,<5.0a0 + - liblalpulsar >=7.1.0,<8.0a0 + - liblalsimulation >=6.1.0,<7.0a0 + - libmetaio >=8.4.0 + - libmetaio >=8.5.1,<9.0a0 + - ligo-segments - numpy - pillow - - python - - __osx >=11.0 - - liblalinference >=4.1.9,<5.0a0 - - liblalmetaio >=4.0.6,<5.0a0 - - liblalinspiral >=5.0.3,<6.0a0 - - liblalburst >=2.0.7,<3.0a0 + - python >=3.12,<3.13.0a0 + - python-ligo-lw >=1.7.0 - python_abi 3.12.* *_cp312 - - liblalpulsar >=7.1.1,<8.0a0 - - liblal >=7.7.0,<8.0a0 - - libmetaio >=8.5.1,<9.0a0 - - liblalsimulation >=6.2.0,<7.0a0 - - gsl >=2.7,<2.8.0a0 - - libframel >=8.41.3,<9.0a0 - - cfitsio >=4.6.4,<4.6.5.0a0 - - liblalframe >=3.0.7,<4.0a0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 1653452 - timestamp: 1777985769166 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lalburst-2.0.7-py312h933eb07_2.conda - sha256: 06fed6f240f5068eef21d1af2ec71b41754c19e4ddb02c17dc4d68bffa35bcae - md5: 0545c89132c843a9bfa56bad1ca67400 + size: 1328048 + timestamp: 1744229130008 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalburst-2.0.6-py312h01d7ebd_0.conda + sha256: 6aeccae4161ea2f90f2677b3e19821ae9606ce4dc6b71e3789fe083e85a072a2 + md5: b233c2c02d4da1fc276403c88747d67a depends: - - __osx >=11.0 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalburst 2.0.7 h0e85ab8_2 + - __osx >=10.13 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 + - liblalburst 2.0.6 h8fa4168_0 - pillow - python >=3.12,<3.13.0a0 - - python-lalburst 2.0.7 py312ha71206d_2 + - python-lalburst 2.0.6 py312h44bc254_0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 51915 - timestamp: 1771410577186 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lalframe-3.0.7-py312h933eb07_2.conda - sha256: 67517b2f4fe77b80b85100fdd24b1b9677efbd711ec8115abe6aa257271ab571 - md5: c2a3c7f73fba190fb7f1afe945434543 + size: 50930 + timestamp: 1734709691522 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalframe-3.0.6-py312h01d7ebd_0.conda + sha256: 1354322fd2b796983cad162b5e8c7e6f63c03f31d2c0c79bf8a6318edec3ab12 + md5: 48396b4e62de09324eefa6cdf06a284a depends: - - __osx >=11.0 - - liblal >=7.7.0,<8.0a0 - - liblalframe 3.0.7 hdadb070_2 + - __osx >=10.13 + - liblal >=7.6.0,<8.0a0 + - liblalframe 3.0.6 h6e76fb1_0 - python >=3.12,<3.13.0a0 - - python-lalframe 3.0.7 py312h469e4ad_2 + - python-lalframe 3.0.6 py312h025c719_0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 290549 - timestamp: 1774543365251 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-4.1.9-nompi_py312h2269b78_102.conda - sha256: 101a734ec2edd1bc5e36738fdd49800d710940db59b20aa2a9d243a5dc81c7ad - md5: 9b6c760429b0e9e1be1ec155bea208b2 + size: 307600 + timestamp: 1734696999191 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-4.1.8-nompi_py312h34ae946_100.conda + sha256: 042e23acfe6306eae46faea15a2357229e4cb0386cda3c1a54e7e23e5ec643b5 + md5: 518b4cfdc80acc1632cb5130f141609a depends: - - __osx >=11.0 + - __osx >=10.13 - astropy-base >=1.1.1 - h5py - - icu >=78.3,<79.0a0 - - igwn-ligolw >=2.1.0 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalinference 4.1.9 h4325a54_2 + - icu >=75.1,<76.0a0 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 + - liblalinference 4.1.8 h506f03e_0 - ligo-gracedb - lscsoft-glue >=1.54.1 - matplotlib-base >=1.2.0 - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 - - python-lalinference 4.1.9 py312h469e4ad_2 - - python-lalsimulation >=6.2.0 + - python-lal >=7.6.0 + - python-lalinference 4.1.8 py312h025c719_0 + - python-lalsimulation >=6.1.0 + - python-ligo-lw >=1.7.0 - python_abi 3.12.* *_cp312 - scipy >=0.9.0 - six license: GPL-2.0-or-later license_family: GPL purls: [] - size: 100346 - timestamp: 1774966039984 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-data-4.1.9-h694c41f_2.conda - sha256: 8f0215f80900ec793a24b6b37bff38ccb3dc432922c5df03e011fe9b06c0ea4d - md5: 7dfbd7e83ca857013652a33affa999e3 + size: 99449 + timestamp: 1734715027565 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalinference-data-4.1.8-h694c41f_0.conda + sha256: 1a5d133d15942e70b58e3f67762c6ff6e1e53507c2c324ad4e0c43903b00f3f5 + md5: f1c8c3c719bcce0eb4ead143e6f63a12 constrains: - liblalinference >=3.0.3 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 32647 - timestamp: 1774964212305 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lalinspiral-5.0.3-py312h933eb07_3.conda - sha256: 5dde62b4801ae820d8ede22c2cd0b2a24a9f597fb89b9065413c63002cd04d96 - md5: edf7d5fef403c4e0bf6cc0838e6c2eb5 - depends: - - __osx >=11.0 - - igwn-segments - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalinspiral 5.0.3 h0e85ab8_3 - - python >=3.12,<3.13.0a0 - - python-lalinspiral 5.0.3 py312h469e4ad_3 - - python_abi 3.12.* *_cp312 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 23743 - timestamp: 1774545603395 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lalmetaio-4.0.6-py312h933eb07_2.conda - sha256: e195f6c3cbef594b092a4f4360453bcbb14bb56e9a64dab27734464bc26a87d2 - md5: 9f3b410dad89ff4cc16c927fa4cea0b0 + size: 32031 + timestamp: 1734712978366 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalinspiral-5.0.2-py312h01d7ebd_0.conda + sha256: a1595df80ef9bc1eddcdb0783ed5b89797d900c095687a0859ce065e52b47718 + md5: 79fdb5dfc49b54c94a410d53ab367226 depends: - - __osx >=11.0 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalmetaio 4.0.6 ha1e9b39_2 + - __osx >=10.13 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 + - liblalinspiral 5.0.2 h8fa4168_0 + - ligo-segments - python >=3.12,<3.13.0a0 - - python-lalmetaio 4.0.6 py312h469e4ad_2 + - python-lalinspiral 5.0.2 py312h025c719_0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 18934 - timestamp: 1774545725153 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-7.1.1-py312h0a4f85f_3.conda - sha256: bc0a2fad1ab03acc22411156b5f166f969199f1f25c17a2e25f2de0b0e4d0adb - md5: 83745e072686ffa5537476d6dada45b1 + size: 22667 + timestamp: 1734709741031 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalmetaio-4.0.5-py312h01d7ebd_2.conda + sha256: 6812c1aacbad482d6495d60002fc2560b4e7f272b000255e5fe5866c0434a41f + md5: bcb9d5cdac51a9ea8495bae7e8844e4c depends: - - __osx >=11.0 - - astropy-base - - cfitsio >=4.6.4,<4.6.5.0a0 - - fftw >=3.3.11,<4.0a0 - - gsl >=2.7,<2.8.0a0 - - jplephem - - lalinference >=4.1.0 + - __osx >=10.13 - liblal >=7.6.0 - - liblal >=7.7.0,<8.0a0 - - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 - - liblalinference >=4.1.0 - - liblalinference >=4.1.9,<5.0a0 - - liblalpulsar 7.1.1 ha4006bb_3 - - liblalsimulation >=6.1.0 - - liblalsimulation >=6.2.0,<7.0a0 - - numpy >=1.23,<3 + - liblal >=7.6.0,<8.0a0 + - liblalmetaio 4.0.5 h6e16a3a_2 - python >=3.12,<3.13.0a0 - - python-lal >=7.6.0 - - python-lalframe >=3.0.0 - - python-lalinference >=4.1.0 - - python-lalpulsar 7.1.1 py312h469e4ad_3 - - python-lalsimulation >=6.1.0 + - python-lalmetaio 4.0.5 py312h025c719_2 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 663813 - timestamp: 1777891203273 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-7.1.1-py312hc6fbf67_2.conda - sha256: 80a67e1f6f6e4044ef9e7b7ff9fe113f43d186e0cdc0d4be6be624b877c3f7ea - md5: 01ab7216801fba556c1973daf69e8d97 + size: 18084 + timestamp: 1734275589330 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-7.1.0-py312h5a434c1_1.conda + sha256: 07f71f7911d71ce1e3eef03c6f72cf322a1c4fe8148887a2672a10ded0344248 + md5: 6dd29b71cc1cb87389f60bedc7dd7062 depends: - - __osx >=11.0 + - __osx >=10.13 - astropy-base - - cfitsio >=4.6.3,<4.6.4.0a0 + - cfitsio >=4.6.2,<4.6.3.0a0 - fftw >=3.3.10,<4.0a0 - gsl >=2.7,<2.8.0a0 - jplephem - lalinference >=4.1.0 - liblal >=7.6.0 - - liblal >=7.7.0,<8.0a0 + - liblal >=7.6.1,<8.0a0 - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 + - liblalframe >=3.0.6,<4.0a0 - liblalinference >=4.1.0 - - liblalinference >=4.1.9,<5.0a0 - - liblalpulsar 7.1.1 hde9e502_2 + - liblalinference >=4.1.8,<5.0a0 + - liblalpulsar 7.1.0 h0f29fec_1 - liblalsimulation >=6.1.0 - - liblalsimulation >=6.2.0,<7.0a0 - - numpy >=1.23,<3 + - liblalsimulation >=6.1.0,<7.0a0 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python-lal >=7.6.0 - python-lalframe >=3.0.0 - python-lalinference >=4.1.0 - - python-lalpulsar 7.1.1 py312h469e4ad_2 + - python-lalpulsar 7.1.0 py312h025c719_1 - python-lalsimulation >=6.1.0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 663135 - timestamp: 1774629746632 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-data-7.1.1-h694c41f_2.conda - sha256: e9083886bb7d316651c27cc51fc543a9638ef88c011d1232465437f8bd27c0fc - md5: 0cd461283013ecf9f8f141f2a1c47711 - constrains: - - liblalpulsar >=4.0.0 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 90052438 - timestamp: 1774626825713 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-data-7.1.1-h694c41f_3.conda - sha256: 1a835285628c058ffe2f84d4704c2c92667d31aaa9adb5252320dc1c6e999e0b - md5: b721d670514ad888837f3f580a7552d2 + size: 660696 + timestamp: 1744217222639 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalpulsar-data-7.1.0-h694c41f_1.conda + sha256: cfb2609026627ee7a2d313a0370ff9df0e1dab2466598a675c3950fe3cbc01f6 + md5: c2fc122252d1a123f3e0bf0c4389118c constrains: - liblalpulsar >=4.0.0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 90038906 - timestamp: 1777888054934 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-6.2.0-py312hd5a5ae5_3.conda - sha256: efc26ccea17107d1dc7da0e762068a2c8df431b7972462c13469c9f7dd5b593b - md5: 987aea2a1d14dc9d08b902407fd606f2 + size: 90029332 + timestamp: 1744215574224 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-6.1.0-py312haa07450_0.conda + sha256: 1f0b4401850b20f2cf0d13f1171448fb2ce95e31c6bbae3aeafc808579e1b66c + md5: 60f80bc7dc35ef3254fd0152bb5e53fa depends: - - __osx >=11.0 + - __osx >=10.13 - gsl >=2.7,<2.8.0a0 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalsimulation 6.2.0 py312hf591029_3 + - liblal >=7.6.0 + - liblal >=7.6.0,<8.0a0 + - liblalsimulation 6.1.0 py312h1b08b07_0 - mpmath >=1.0.0 - python >=3.12,<3.13.0a0 - - python-lalsimulation 6.2.0 py312hc642aa9_3 + - python-lalsimulation 6.1.0 py312h1b08b07_0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 75012 - timestamp: 1774542818114 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-data-6.2.0-h694c41f_3.conda - sha256: 2b8884aa039c610350cc1a3b7490f530f5cda4d340cf0a192231a4bf26194834 - md5: bc64caf590af226f489c4c0294015dad + size: 74079 + timestamp: 1734696422300 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lalsimulation-data-6.1.0-h694c41f_0.conda + sha256: 43a228de459c64486d966ec6713b0c5cdc38796319205c3b9971e50b60cd2938 + md5: 323419c68a641fe57639c4083c5aec9c constrains: - liblalsimulation >=3.1.2 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 3656737 - timestamp: 1774541867788 + size: 3634912 + timestamp: 1734695995163 - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.19.1-h5ea7634_0.conda sha256: af14a2021a151b3bd98e5b40db0762b35ff54e57fa8c1968cca728cef8d13a8a md5: 3ae3b6db0dcada986f1e3b608e1cb0fc @@ -12329,13 +11194,13 @@ packages: purls: [] size: 18868 timestamp: 1778491111970 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-1.88.0-h5950822_7.conda - sha256: 4cf91837a0af26996a43538213abe14adf54e07ac9fc8cb3880185f6e086c5df - md5: de6f7fa28d94fa380024444324b15d5f +- conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-1.88.0-hf9ddd82_6.conda + sha256: 5935c37509140738f979f007de739304734ec223064bc31521c6e0ca560405e5 + md5: c4b1fee2a2d31b87c7e95c9202e68b5c depends: - __osx >=10.13 - bzip2 >=1.0.8,<2.0a0 - - icu >=78.1,<79.0a0 + - icu >=75.1,<76.0a0 - libcxx >=19 - liblzma >=5.8.1,<6.0a0 - libzlib >=1.3.1,<2.0a0 @@ -12344,25 +11209,25 @@ packages: - boost-cpp <0.0a0 license: BSL-1.0 purls: [] - size: 2091448 - timestamp: 1766348915727 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-python-1.88.0-py312h3a26c12_7.conda - sha256: 755b9fbcc1ddb3f3f99b53e6c8de66c435d19acfda83348c978663fc2fc91e09 - md5: 9dd48597e90715887a9dbc5f26f76cc7 + size: 2103604 + timestamp: 1763018953490 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-python-1.88.0-py312h83679cb_6.conda + sha256: 6e8843ace47265a7b2e0769cc34d55c98421d7c14619900d14614ed9aa9eaf9f + md5: 68eafd7bf455a5b3628bb715ab95bfdd depends: - __osx >=10.13 - - libboost 1.88.0 h5950822_7 + - libboost 1.88.0 hf9ddd82_6 - libcxx >=19 - numpy >=1.23,<3 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 constrains: - - boost <0.0a0 - py-boost <0.0a0 + - boost <0.0a0 license: BSL-1.0 purls: [] - size: 108043 - timestamp: 1766349496804 + size: 108301 + timestamp: 1763019253722 - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda sha256: 4c19b211b3095f541426d5a9abac63e96a5045e509b3d11d4f9482de53efe43b md5: f157c098841474579569c85a60ece586 @@ -12767,222 +11632,177 @@ packages: purls: [] size: 1692611 timestamp: 1777065242546 -- conda: https://conda.anaconda.org/conda-forge/osx-64/liblal-7.7.0-fftw_h11bfb9b_101.conda - sha256: 1da531df850531b6430880a28f82ec5a1b9ed01fb90270250776b774558e04b1 - md5: d28e597204c715492543b3ebe58c66bf +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblal-7.6.1-fftw_ha907fd1_100.conda + sha256: 45f32eb2ec6ad863972249aeb0f8cbd4276318f4cb1d50c3498dc89808e6e379 + md5: 321d5e419a1e16e1453a3cdbbef63854 depends: - __osx >=10.13 - fftw >=3.3.10,<4.0a0 - gsl >=2.7,<2.8.0a0 - - hdf5 >=1.14.6,<1.14.7.0a0 + - hdf5 >=1.14.3,<1.14.4.0a0 - libzlib >=1.3.1,<2.0a0 constrains: - - python-lal >=7.1.1 - - lal >=7.1.1 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 807987 - timestamp: 1755600468926 -- conda: https://conda.anaconda.org/conda-forge/osx-64/liblal-7.7.0-fftw_he57ba51_104.conda - sha256: 4cde289e6fb6bf12232abfcbcf05a2d8fe09545eccb37b7e6bba2f4bf317559f - md5: 3856a8f37039281db9797a0e6809c063 - depends: - - __osx >=11.0 - - fftw >=3.3.10,<4.0a0 - - gsl >=2.7,<2.8.0a0 - - hdf5 >=2.1.0,<3.0a0 - - libzlib >=1.3.2,<2.0a0 - constrains: - lal >=7.1.1 - python-lal >=7.1.1 - - swig >=4.4.1,<4.4.2.0a0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 808514 - timestamp: 1774637692052 -- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalburst-2.0.7-h0e85ab8_2.conda - sha256: a8349cc692bde08228c140965a98694344d6ebbb91cafb26c2c8dbe85928fbcc - md5: 4802771dad10ec18432f66790ac93d7f + size: 818243 + timestamp: 1734695134733 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalburst-2.0.6-h8fa4168_0.conda + sha256: 0157ac128c0cdfe6df1655f9fe64d397058f6d30798af0bebf8bfcb2e1e3f8ee + md5: 43390f7c12cc9d0074224c2a1feba977 depends: - - __osx >=11.0 + - __osx >=10.13 - gsl >=2.7,<2.8.0a0 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 - liblalmetaio >=4.0.0 - - liblalmetaio >=4.0.6,<5.0a0 - - liblalsimulation >=6.2.0 - - liblalsimulation >=6.2.0,<7.0a0 + - liblalmetaio >=4.0.5,<5.0a0 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.1.0,<7.0a0 constrains: - lalburst >=1.5.7 - python-lalburst >=1.5.7 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 38923 - timestamp: 1771409841524 -- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalframe-3.0.7-hdadb070_2.conda - sha256: 5b4e8c65384a8cb8d0f2538314a2b11d89555d523adbce987605f5b2eb7ad19d - md5: c1f0e9327196adbf82468fe477b802fb + size: 38141 + timestamp: 1734708907009 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalframe-3.0.6-h6e76fb1_0.conda + sha256: 807f449b18b91d08d6244617d5c8a4c059a9d1e223504964d366a42fbc53dddd + md5: dc8da41b1a46a2128aa25c59699e2869 depends: - - __osx >=11.0 + - __osx >=10.13 - ldas-tools-framecpp >=2.9.3,<2.10.0a0 - libframel >=8.41.3,<9.0a0 - - liblal >=7.7.0,<8.0a0 + - liblal >=7.6.0,<8.0a0 constrains: - - lalframe >=1.5.3 - python-lalframe >=1.5.3 + - lalframe >=1.5.3 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 101538 - timestamp: 1774542247513 -- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinference-4.1.9-h4325a54_2.conda - sha256: c8c1e718209839162725a8e8f0916faf9651f8f7abefd4f301f858b3015d7880 - md5: bbf70421f3e573a5b8c4865a8c3eb6a5 + size: 100322 + timestamp: 1734696330053 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinference-4.1.8-h506f03e_0.conda + sha256: a7db3818f0af0f2a428524c531d152387584cd51f9a82f974413564c14339efa + md5: e6f0300bd87dc118d08f2f474e543dec depends: - - __osx >=11.0 + - __osx >=10.13 - gsl >=2.7,<2.8.0a0 - - lalinference-data 4.1.9 h694c41f_2 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 + - lalinference-data 4.1.8 h694c41f_0 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 - liblalburst >=2.0.0 - - liblalburst >=2.0.7,<3.0a0 + - liblalburst >=2.0.6,<3.0a0 - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 + - liblalframe >=3.0.6,<4.0a0 - liblalinspiral >=5.0.0 - - liblalinspiral >=5.0.3,<6.0a0 + - liblalinspiral >=5.0.2,<6.0a0 - liblalmetaio >=4.0.0 - - liblalmetaio >=4.0.6,<5.0a0 - - liblalsimulation >=6.2.0 - - liblalsimulation >=6.2.0,<7.0a0 - - llvm-openmp >=19.1.7 - - llvm-openmp >=22.1.2 + - liblalmetaio >=4.0.5,<5.0a0 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.1.0,<7.0a0 + - llvm-openmp >=18.1.8 + - llvm-openmp >=19.1.6 constrains: - lalinference >=2.0.6 - python-lalinference >=2.0.6 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 305892 - timestamp: 1774964268258 -- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinspiral-5.0.3-h0e85ab8_3.conda - sha256: a6772fa4aa51afdc2fa06e895945ce75fa4507b30bb83cddc9a59fd0c94b24d1 - md5: 34c3551eb6d44275820d5fd2e1981b4b + size: 305350 + timestamp: 1734713104840 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalinspiral-5.0.2-h8fa4168_0.conda + sha256: 46a5562fd6cc09bac3f6b423255a2dda5cd5d065645ed09e595459daccd6aae5 + md5: 286223906fc39b9222bda4190f940f7d depends: - - __osx >=11.0 + - __osx >=10.13 - gsl >=2.7,<2.8.0a0 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 - liblalburst >=2.0.0 - - liblalburst >=2.0.7,<3.0a0 + - liblalburst >=2.0.5,<3.0a0 - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 + - liblalframe >=3.0.6,<4.0a0 - liblalmetaio >=4.0.0 - - liblalmetaio >=4.0.6,<5.0a0 - - liblalsimulation >=6.2.0 - - liblalsimulation >=6.2.0,<7.0a0 + - liblalmetaio >=4.0.5,<5.0a0 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.1.0,<7.0a0 constrains: - lalinspiral >=2.0.1 - python-lalinspiral >=2.0.1 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 412564 - timestamp: 1774544234288 -- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalmetaio-4.0.6-ha1e9b39_2.conda - sha256: 4923e50a409eba1ac8e80c97388124b7e2b998bb5ac7f3743ffa9b6703df790b - md5: a0febbf3d746f3214560041e99f3abc4 + size: 411255 + timestamp: 1734709079488 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalmetaio-4.0.5-h6e16a3a_2.conda + sha256: 99ed292f32c52ec8cb6efe39633f26f6cc7a58713bfb37c0b3aa6e8f67061e18 + md5: aa8c828c84c28781ae9a689db5a60f4b depends: - - __osx >=11.0 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 + - __osx >=10.13 + - liblal >=7.6.0 + - liblal >=7.6.0,<8.0a0 - libmetaio >=8.4.0 - libmetaio >=8.5.1,<9.0a0 constrains: - - python-lalmetaio >=2.0.1 - lalmetaio >=2.0.1 + - python-lalmetaio >=2.0.1 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 54615 - timestamp: 1774544457207 -- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalpulsar-7.1.1-ha4006bb_3.conda - sha256: 24750f3faea7f584f3d1c498c360b08ae74d2e478acb356f7698726ac7fd40db - md5: f1bcbf87df349991deaca16e49509e8f + size: 53697 + timestamp: 1734275150232 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalpulsar-7.1.0-h0f29fec_1.conda + sha256: dd951d9d458f3ddba5da48c3ce559ef6b15898a6c589a1bc3320cda92993ce57 + md5: 36125546e4d611d4c35e3730c0903978 depends: - - __osx >=11.0 - - cfitsio >=4.6.4,<4.6.5.0a0 + - __osx >=10.13 + - cfitsio >=4.6.2,<4.6.3.0a0 - fftw - gsl >=2.7,<2.8.0a0 - - lalpulsar-data 7.1.1 h694c41f_3 + - lalpulsar-data 7.1.0 h694c41f_1 - liblal >=7.6.0 - - liblal >=7.7.0,<8.0a0 + - liblal >=7.6.1,<8.0a0 - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 + - liblalframe >=3.0.6,<4.0a0 - liblalinference >=4.1.0 - - liblalinference >=4.1.9,<5.0a0 + - liblalinference >=4.1.8,<5.0a0 - liblalsimulation >=6.1.0 - - liblalsimulation >=6.2.0,<7.0a0 - - llvm-openmp >=19.1.7 - - llvm-openmp >=22.1.4 + - liblalsimulation >=6.1.0,<7.0a0 + - llvm-openmp >=18.1.8 + - llvm-openmp >=20.1.2 constrains: - - lalpulsar >=3.0.0 - python-lalpulsar >=3.0.0 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 652688 - timestamp: 1777888123319 -- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalpulsar-7.1.1-hde9e502_2.conda - sha256: 1386516a8fb89e7dc82ebf3c785fac0c0ea628eb7408fae1019210ab5b001661 - md5: 470d4fea71200e4c844ff232ba83103a - depends: - - __osx >=11.0 - - cfitsio >=4.6.3,<4.6.4.0a0 - - fftw - - gsl >=2.7,<2.8.0a0 - - lalpulsar-data 7.1.1 h694c41f_2 - - liblal >=7.6.0 - - liblal >=7.7.0,<8.0a0 - - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 - - liblalinference >=4.1.0 - - liblalinference >=4.1.9,<5.0a0 - - liblalsimulation >=6.1.0 - - liblalsimulation >=6.2.0,<7.0a0 - - llvm-openmp >=19.1.7 - - llvm-openmp >=22.1.1 - constrains: - lalpulsar >=3.0.0 - - python-lalpulsar >=3.0.0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 651908 - timestamp: 1774626977990 -- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalsimulation-6.2.0-py312hf591029_3.conda - sha256: 92dae5b07fdf93319dc54b2f1476e0933b81fcb30c4070cef400d517e390f01d - md5: 54ffe4ca28da9da9913bb1bd5ee0b2d3 + size: 650816 + timestamp: 1744215674845 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblalsimulation-6.1.0-py312h1b08b07_0.conda + sha256: b6a7d296d71f641438ea9f9f4b573ceab6e13ed5300d84b57351385af29d20f6 + md5: 617617aac9b4697dc180a6c67ed79117 depends: - - __osx >=11.0 + - __osx >=10.13 - gsl >=2.7,<2.8.0a0 - - lalsimulation-data 6.2.0 h694c41f_3 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - llvm-openmp >=19.1.7 - - llvm-openmp >=22.1.1 + - lalsimulation-data 6.1.0 h694c41f_0 + - liblal >=7.6.0 + - liblal >=7.6.0,<8.0a0 + - llvm-openmp >=18.1.8 + - llvm-openmp >=19.1.6 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 constrains: - - python-lalsimulation >=2.5.0 - lalsimulation >=2.5.0 + - python-lalsimulation >=2.5.0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 3757610 - timestamp: 1774542591365 + size: 3752219 + timestamp: 1734696240502 - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.11.0-7_h859234e_openblas.conda build_number: 7 sha256: 92fe5e99c1a4dbb53268790ce0b738411f21e0d7ca50dd3ce7a8781f1b03ed95 @@ -13195,17 +12015,16 @@ packages: purls: [] size: 281370 timestamp: 1779164249823 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.1-h8f8c405_0.conda - sha256: 5e964e07a14180ce20decfd4897e8f81d48ec78c1cbf4af85c5520f535d9510c - md5: 9273c877f78b7486b0dfdd9268327a79 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.1-h77d7759_0.conda + sha256: be4257efcf512aa7b58b0afe2c8dce945a014ae3adc7531528d53523d8e35cba + md5: 33cd0cd68a88361e1c328011539cd641 depends: - __osx >=11.0 - - icu >=78.3,<79.0a0 - libzlib >=1.3.2,<2.0a0 license: blessing purls: [] - size: 1007171 - timestamp: 1777987093870 + size: 1002522 + timestamp: 1777986843821 - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda sha256: 00654ba9e5f73aa1f75c1f69db34a19029e970a4aeb0fa8615934d8e9c369c3c md5: a6cb15db1c2dc4d3a5f6cf3772e09e81 @@ -13284,37 +12103,37 @@ packages: purls: [] size: 323770 timestamp: 1727278927545 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.3-h7a90416_0.conda - sha256: 437f003e299d77403db42d17e532d686236f357ac5c3d6bf466558c697902597 - md5: c74ae93cd7876e3a9c4b5569d5e29e34 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.1-ha1d9b0f_0.conda + sha256: e23c5ac1da7b9b65bd18bf32b68717cd9da0387941178cb4d8cc5513eb69a0a9 + md5: 453807a4b94005e7148f89f9327eb1b7 depends: - - __osx >=11.0 - - icu >=78.3,<79.0a0 + - __osx >=10.13 + - icu >=75.1,<76.0a0 - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.3,<6.0a0 - - libzlib >=1.3.2,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 constrains: - - libxml2 2.15.3 + - libxml2 2.15.1 license: MIT license_family: MIT purls: [] - size: 496338 - timestamp: 1776377250079 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.3-h953d39d_0.conda - sha256: 24248928e63b5de45012c8ad3fd6b350ae1fe2fc355613bb89ee5f0a35835bea - md5: 33f30d4878d1f047da82a669c33b307d + size: 494318 + timestamp: 1761015899881 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.1-h7b7ecba_0.conda + sha256: ddf87bf05955d7870a41ca6f0e9fbd7b896b5a26ec1a98cd990883ac0b4f99bb + md5: e7ed73b34f9d43d80b7e80eba9bce9f3 depends: - - __osx >=11.0 - - icu >=78.3,<79.0a0 + - __osx >=10.13 + - icu >=75.1,<76.0a0 - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.3,<6.0a0 - - libxml2-16 2.15.3 h7a90416_0 - - libzlib >=1.3.2,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libxml2-16 2.15.1 ha1d9b0f_0 + - libzlib >=1.3.1,<2.0a0 license: MIT license_family: MIT purls: [] - size: 40836 - timestamp: 1776377277986 + size: 39985 + timestamp: 1761015935429 - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda sha256: 4c6da089952b2d70150c74234679d6f7ac04f4a98f9432dec724968f912691e7 md5: 30439ff30578e504ee5e0b390afc8c65 @@ -13337,50 +12156,60 @@ packages: purls: [] size: 162262 timestamp: 1607309210977 -- conda: https://conda.anaconda.org/conda-forge/osx-64/ligo.skymap-2.5.3-np2hce383ba_1.conda - noarch: python - sha256: e419222c018707b1a1204dce7e68be9f73797470e4a5cc29350267cbaaeb30a9 - md5: 652f9ae30eaafd98b7a904aad02d246d +- conda: https://conda.anaconda.org/conda-forge/osx-64/ligo-segments-1.4.0-py312h01d7ebd_6.conda + sha256: 6649042966cbc2269309bf9a8307949c92609321649a0604f6245e9f6848df51 + md5: e9dc7ca3adc58a6db57092b5ca3ce414 + depends: + - __osx >=10.13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - six + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/ligo-segments?source=hash-mapping + size: 75079 + timestamp: 1733852009867 +- conda: https://conda.anaconda.org/conda-forge/osx-64/ligo.skymap-2.3.0-py312h2e055c9_0.conda + sha256: b31ac49594648f997bc8becd7226de8a2c93aa452040263323f0eb5cad3cc6e7 + md5: 4e0f9733a5e11f9175f100c82e3fadfa depends: + - __osx >=10.13 - astroplan >=0.7 - astropy-base >=6.0 - astropy-healpix >=0.3 - - chealpix - - gsl - - healpy + - chealpix >=3.31.0,<3.32.0a0 + - gsl >=2.7,<2.8.0a0 - h5py - - igwn-ligolw - - igwn-segments - - libcblas + - healpy + - libcblas >=3.9.0,<4.0a0 - ligo-gracedb >=2.0.1 + - ligo-segments >=1.2.0 + - llvm-openmp >=18.1.8 - matplotlib-base >=3.9.1 - networkx - - numpy >=2.0.0 + - numpy >=1.19,<3 + - numpy >=1.23.0 - pillow >=2.5.0 - - python >=3.11 - - python-lal >=7.7.0 - - python-lalinspiral >=5.0.3 - - python-lalmetaio >=4.0.6 - - python-lalsimulation >=6.2.0 + - ptemcee + - python >=3.12,<3.13.0a0 + - python-lal >=7.6.0 + - python-lalinspiral >=5.0.1 + - python-lalmetaio >=4.0.5 + - python-lalsimulation >=6.0.0 + - python-ligo-lw >=1.8.0 + - python_abi 3.12.* *_cp312 - pytz - reproject >=0.3.2 - - scipy >=1.10.1 + - scipy >=0.14,!=1.10.0 - shapely >=2.0.0 - tqdm >=4.27.0 - - __osx >=11.0 - - llvm-openmp >=19.1.7 - - numpy >=1.23,<3 - - _python_abi3_support 1.* - - cpython >=3.11 - - gsl >=2.7,<2.8.0a0 - - libcblas >=3.9.0,<4.0a0 - - chealpix >=3.31.0,<3.32.0a0 license: GPL-3.0-or-later license_family: GPL purls: - pkg:pypi/ligo-skymap?source=hash-mapping - size: 1782541 - timestamp: 1775055974823 + size: 1918619 + timestamp: 1745758339434 - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-22.1.6-h0d3cbff_0.conda sha256: afbea63c0ffed8f150ba41a3e85bd849560f15f879d0f1b5e5fb6b90eca8ea78 md5: b67316dec3b5c028b6b1bb6fd713c14e @@ -13569,24 +12398,24 @@ packages: - pkg:pypi/numcodecs?source=hash-mapping size: 753563 timestamp: 1764782733189 -- conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.4.6-py312h746d82c_0.conda - sha256: e7837f62b874c987c1bd2eda335ae9b977caf61a5227c23e4e8cceef88bb21b6 - md5: 86c91d10224283ed367225057a09e4a3 +- conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-1.26.4-py312he3a82b2_0.conda + sha256: 6152b73fba3e227afa4952df8753128fc9669bbaf142ee8f9972bf9df3bf8856 + md5: 96c61a21c4276613748dba069554846b depends: - - python - - libcxx >=19 - - __osx >=11.0 - - libcblas >=3.9.0,<4.0a0 - - python_abi 3.12.* *_cp312 - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=16 - liblapack >=3.9.0,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 constrains: - numpy-base <0a0 license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/numpy?source=compressed-mapping - size: 7997002 - timestamp: 1779782916096 + - pkg:pypi/numpy?source=hash-mapping + size: 6990646 + timestamp: 1707226178262 - conda: https://conda.anaconda.org/conda-forge/osx-64/oniguruma-6.9.10-h6e16a3a_0.conda sha256: c8ecd1cb39e75677235daddc6ead10055a0ef66b2293118ed77adc621b2ffbcc md5: 1de37bb098b5b39ad79027d1767b02dd @@ -13977,31 +12806,14 @@ packages: - pkg:pypi/htcondor?source=hash-mapping size: 503241 timestamp: 1778793697930 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lal-7.7.0-fftw_py312h70f41d4_104.conda - sha256: fccccf167eb5f27b3c44d9c6c4fe36346dd6f960082d8e09e90e844c2433171c - md5: 3456d56a47ba31e3c8ccf212560eb20e - depends: - - __osx >=11.0 - - igwn-segments - - liblal 7.7.0 fftw_he57ba51_104 - - numpy >=1.23,<3 - - python >=3.12,<3.13.0a0 - - python-dateutil - - python_abi 3.12.* *_cp312 - - scipy - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 902063 - timestamp: 1774637955141 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lal-7.7.0-fftw_py312haa2233f_101.conda - sha256: 91a3584546b5335fca85a7730b79ef13c2c97d7c555e4a092bd6f313de661aa7 - md5: d9d17824c3a2ea03d2a669fb51bb215f +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lal-7.6.1-fftw_py312ha78c7a8_100.conda + sha256: 5cd28a5b37cee7e56aa0665cad304302d86284ce760583ed3dd568818853549d + md5: 9175f7fb7fe0826a8b30ecfbfb8b5f78 depends: - __osx >=10.13 - - igwn-segments - - liblal 7.7.0 fftw_h11bfb9b_101 - - numpy >=1.23,<3 + - liblal 7.6.1 fftw_ha907fd1_100 + - ligo-segments + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python-dateutil - python_abi 3.12.* *_cp312 @@ -14009,139 +12821,119 @@ packages: license: GPL-2.0-or-later license_family: GPL purls: [] - size: 903465 - timestamp: 1755600665238 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalburst-2.0.7-py312ha71206d_2.conda - sha256: f14e9941d43935d2e09da91320624faf8105eb2872a5cae3048c2f9d9a74b705 - md5: 8dcc6e8575559bce612732ce1665bd7b + size: 850028 + timestamp: 1734695620404 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalburst-2.0.6-py312h44bc254_0.conda + sha256: 45a02b6ae62110399f2393ca34693696d59ab4f7713460b4a2e08110ba33a1cd + md5: 0e2b3d44d16c5968973c06df9f4e4d58 depends: - - __osx >=11.0 + - __osx >=10.13 - gsl >=2.7,<2.8.0a0 - - igwn-ligolw >=2.1.0 - - igwn-segments - - liblalburst 2.0.7 h0e85ab8_2 + - liblalburst 2.0.6 h8fa4168_0 + - ligo-segments - lscsoft-glue - matplotlib-base - - numpy >=1.23,<3 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 + - python-lal >=7.6.0 - python-lalmetaio >=4.0.0 - - python-lalsimulation >=6.2.0 + - python-lalsimulation >=6.1.0 + - python-ligo-lw >=1.7.0 - python_abi 3.12.* *_cp312 - scipy - tqdm license: GPL-2.0-or-later license_family: GPL purls: [] - size: 314810 - timestamp: 1771410107471 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalframe-3.0.7-py312h469e4ad_2.conda - sha256: 4446141ae01b9faf4c75d5e184565c820d5d76122f94315d8553835381ab60b2 - md5: ed7c6bdae05d49a2347c1eb8bc4909b7 + size: 312039 + timestamp: 1734709312316 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalframe-3.0.6-py312h025c719_0.conda + sha256: db3ab5adf5ae1ac0b21c26d7fd5cf1a48dd929762331cde257e16d592cbcd016 + md5: f6d0bda9d211848968a758f86dab3f09 depends: - - __osx >=11.0 - - liblalframe 3.0.7 hdadb070_2 - - numpy >=1.23,<3 + - __osx >=10.13 + - liblalframe 3.0.6 h6e76fb1_0 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 + - python-lal >=7.6.0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 723427 - timestamp: 1774542953602 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinference-4.1.9-py312h469e4ad_2.conda - sha256: ad2ecea6d829fa496383d974de3a1b3d0f323fc41586e3738505ebc9f7a45ac9 - md5: bc9e69da5301b5989fe719a2894c6bb7 + size: 708928 + timestamp: 1734696769662 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinference-4.1.8-py312h025c719_0.conda + sha256: 32891899012c61571a3d71ed7b31c33a875dd7e56061188b4d9fc19e34b23e75 + md5: a88c9ff6b9e94ca45f044dbe1a772740 depends: - - __osx >=11.0 + - __osx >=10.13 - astropy-base >=1.1.1 - h5py - healpy >=1.17.3 - - igwn-ligolw >=2.1.0 - - igwn-segments - - liblalinference 4.1.9 h4325a54_2 + - liblalinference 4.1.8 h506f03e_0 + - ligo-segments - lscsoft-glue >=1.54.1 - matplotlib-base >=1.2.0 - - numpy >=1.23,<3 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 + - python-lal >=7.6.0 - python-lalburst >=2.0.0 - python-lalinspiral >=5.0.0 - python-lalmetaio >=4.0.0 - - python-lalsimulation >=6.2.0 + - python-lalsimulation >=6.1.0 + - python-ligo-lw >=1.7.0 - python_abi 3.12.* *_cp312 - scipy >=0.9.0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 807930 - timestamp: 1774964726469 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinspiral-5.0.3-py312h469e4ad_3.conda - sha256: 7db3ddad1ffacf2773ad107598e7bf64de48f1176d1cb04d4bb25272c0d7ccc0 - md5: 0c6fc66008b677026c684bbace404d68 + size: 804026 + timestamp: 1734713277488 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalinspiral-5.0.2-py312h025c719_0.conda + sha256: 8d80d16688d611e958f02ed54b5f465315a3dc38b9d3b42aaa1730b72e2fc5a1 + md5: be660f9e8446540f558cc273f173d317 depends: - - __osx >=11.0 - - igwn-ligolw - - liblalinspiral 5.0.3 h0e85ab8_3 + - __osx >=10.13 + - liblalinspiral 5.0.2 h8fa4168_0 - lscsoft-glue - - numpy >=1.23,<3 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 + - python-lal >=7.6.0 - python-lalburst >=2.0.0 - python-lalframe >=3.0.0 - python-lalmetaio >=4.0.0 - - python-lalsimulation >=6.2.0 + - python-lalsimulation >=6.1.0 + - python-ligo-lw - python_abi 3.12.* *_cp312 - tqdm license: GPL-2.0-or-later license_family: GPL purls: [] - size: 61664492 - timestamp: 1774544363349 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalmetaio-4.0.6-py312h469e4ad_2.conda - sha256: 65a753966ca13729f8c675e4016168dedd3f5ace8c723e15c921301f0d4dbeba - md5: 9ba82c74e7afac60195bd825e7da2957 - depends: - - __osx >=11.0 - - liblalmetaio 4.0.6 ha1e9b39_2 - - numpy >=1.23,<3 - - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 - - python_abi 3.12.* *_cp312 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 144592 - timestamp: 1774545353516 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalpulsar-7.1.1-py312h469e4ad_2.conda - sha256: da68ad424fb3a08f4892747d63d337e8b4cd70b2cd3707c913f30e3136d37cc7 - md5: 6e34217906e82847be8a6162bca48612 + size: 61664188 + timestamp: 1734709229174 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalmetaio-4.0.5-py312h025c719_2.conda + sha256: 99edce6c41b648482f3f64c5c677bfa998f27edb120bee3546f7ec007c64e7e9 + md5: b662ef18c786a9436f0021e0d398b175 depends: - - __osx >=11.0 - - astropy-base - - liblalpulsar 7.1.1 hde9e502_2 - - numpy >=1.23,<3 + - __osx >=10.13 + - liblalmetaio 4.0.5 h6e16a3a_2 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python-lal >=7.6.0 - - python-lalframe >=3.0.0 - - python-lalinference >=4.1.0 - - python-lalsimulation >=6.1.0 - python_abi 3.12.* *_cp312 - - six license: GPL-2.0-or-later license_family: GPL purls: [] - size: 96730795 - timestamp: 1774627441731 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalpulsar-7.1.1-py312h469e4ad_3.conda - sha256: ffca16d39da1c9eb3208e85df9249f4373b5745e78bb2a38e787d9324d076271 - md5: 7a093071dc261b0fdb33b79af68e8e4f + size: 142363 + timestamp: 1734275405378 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalpulsar-7.1.0-py312h025c719_1.conda + sha256: 0f5bbddc047f4116342f3f38abaacadee7b9fbc09cfb8c8780f2edbc334e7a14 + md5: 90f52e49ee6ccd4f8d57091489cf1805 depends: - - __osx >=11.0 + - __osx >=10.13 - astropy-base - - liblalpulsar 7.1.1 ha4006bb_3 - - numpy >=1.23,<3 + - liblalpulsar 7.1.0 h0f29fec_1 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python-lal >=7.6.0 - python-lalframe >=3.0.0 @@ -14152,32 +12944,53 @@ packages: license: GPL-2.0-or-later license_family: GPL purls: [] - size: 96703161 - timestamp: 1777888667423 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalsimulation-6.2.0-py312hc642aa9_3.conda - sha256: 598218b80a727f22739190fe89a7b2bcc1ffca6a69f3efcf00844c2d0ac79e82 - md5: ad5d83128adbff884f293cbea8952cc7 + size: 96736713 + timestamp: 1744215867084 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-lalsimulation-6.1.0-py312h1b08b07_0.conda + sha256: e31700f6d3f3fe8c245cce8da95b1406cb16a3cb57f6e0deeabfe8ca99c16098 + md5: 733897fab6313736f579eb700ce36026 depends: - - __osx >=11.0 + - __osx >=10.13 - astropy-base - gsl >=2.7,<2.8.0a0 - gwpy - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalsimulation 6.2.0 py312hf591029_3 - - llvm-openmp >=19.1.7 - - llvm-openmp >=22.1.1 + - liblal >=7.6.0 + - liblal >=7.6.0,<8.0a0 + - liblalsimulation 6.1.0 py312h1b08b07_0 + - llvm-openmp >=18.1.8 + - llvm-openmp >=19.1.6 - mpmath >=1.0.0 - - numpy >=1.23,<3 + - numpy - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 + - python-lal >=7.6.0 - python_abi 3.12.* *_cp312 - scipy license: GPL-2.0-or-later license_family: GPL purls: [] - size: 4272552 - timestamp: 1774542685088 + size: 4276447 + timestamp: 1734696345259 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-ligo-lw-1.8.3-py312h01d7ebd_4.conda + sha256: 0f1112f9dd41298f7d4693bcf36966a90ea170e42ae9e56a7b83141ebb189b8d + md5: 3f048565d1b9c3b255f775bc5a84aba2 + depends: + - __osx >=10.13 + - ligo-segments + - lscsoft-glue >=2.0.0 + - numpy + - python >=3.12,<3.13.0a0 + - python-dateutil + - python-lal >=6.19.0 + - python_abi 3.12.* *_cp312 + - pyyaml + - six + - tqdm + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/python-ligo-lw?source=hash-mapping + size: 191079 + timestamp: 1733996334301 - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.3-py312h51361c1_1.conda sha256: d85e3be523b7173a194a66ae05a585ac1e14ccfbe81a9201b8047d6e45f2f7d9 md5: 9029301bf8a667cf57d6e88f03a6726b @@ -15091,9 +13904,9 @@ packages: - pkg:pypi/cffi?source=hash-mapping size: 288080 timestamp: 1761203317419 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.6.3-hb409788_0.conda - sha256: 98eec929c3ecfa154418ce4b0445228edf885f98206e7d0acdf1d59a9ad30372 - md5: f46edcf9db6bb793c34af6c18cb22ebc +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.6.2-h7200ff5_1.conda + sha256: 726c574996c1f61f6adc9d452ad1dae225c2a60aeacace7822b909918544960c + md5: 328455d5425d05bb8ee6171d45dad583 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 @@ -15101,20 +13914,8 @@ packages: - libzlib >=1.3.1,<2.0a0 license: LicenseRef-fitsio purls: [] - size: 603272 - timestamp: 1759288490003 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.6.4-h29bb15e_1.conda - sha256: f54e91c2c1d3571fb91302a3b10bd0c3d9bf5de66af83e35ee1de759a0925a5d - md5: 0240dfbed60b00a028c0a5325269f8bf - depends: - - __osx >=11.0 - - bzip2 >=1.0.8,<2.0a0 - - libcurl >=8.20.0,<9.0a0 - - libzlib >=1.3.2,<2.0a0 - license: LicenseRef-fitsio - purls: [] - size: 604254 - timestamp: 1777679084571 + size: 603304 + timestamp: 1753287023695 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.3-hf6b4638_0.conda sha256: 1009bd6c2bb26e41dada4015793a1edf44d1320c7ca14fc646f89b0b51236e20 md5: 91f1daf22f72792e11382938bb0dd9ac @@ -15126,28 +13927,17 @@ packages: purls: [] size: 118790 timestamp: 1772712898684 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/chealpix-3.31.0-h47a9372_10.conda - sha256: ac468fcb05c88187d087f34d49bc763556a8080c98cc7f4f0c31e5029d9ca0c6 - md5: 62290acbd36b96e70481f746a2d7b94f - depends: - - __osx >=11.0 - - cfitsio >=4.6.4,<4.6.5.0a0 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 34711 - timestamp: 1778488354943 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/chealpix-3.31.0-h6fab0b2_9.conda - sha256: 7b7d964946892d0843b114356cad6fe0f11c63eacfd9190f5640e0caba85e257 - md5: f4572e560fbb2c31fd5e4ea7d52558a6 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/chealpix-3.31.0-he71fa57_8.conda + sha256: 51728bc948b9ff27cb5db7784e6058a70ee592680422e8f3cf3871ac612be4d3 + md5: d22ed62b9d072d554952364986ac9002 depends: - __osx >=11.0 - - cfitsio >=4.6.3,<4.6.4.0a0 + - cfitsio >=4.6.2,<4.6.3.0a0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 36512 - timestamp: 1764671333900 + size: 36439 + timestamp: 1756897559387 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py312h3093aea_4.conda sha256: fa1b3967c644c1ffaf8beba3d7aee2301a8db32c0e9a56649a0e496cf3abd27c md5: f9cce0bc86b46533489a994a47d3c7d2 @@ -15327,31 +14117,14 @@ packages: purls: [] size: 2734398 timestamp: 1626369562748 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py312h585e8c8_102.conda - sha256: 2ac08cff564c3b49f8a7f21eb9abdb81cad2fe2270ed1d48a5be05416d99f40c - md5: d5c7d8decb6113045ac8168f66ad1de2 - depends: - - __osx >=11.0 - - cached-property - - hdf5 >=2.1.0,<3.0a0 - - numpy >=1.23,<3 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/h5py?source=hash-mapping - size: 1186119 - timestamp: 1775583048662 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py312hdd01ddf_102.conda - sha256: 68bf1ed50a983c4eea17bab8cb91e7b2bfd19b92f3846e2a057ab1bb78b5b1cd - md5: d6561da751793e9f534b175e070b19d3 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.13.0-nompi_py312hd7c5113_100.conda + sha256: 1cfd7bd567c2d8cd4c532f88c342f9346867ef52dab9d65ec1089c90eb94b6e4 + md5: 227b0c53bc3d4131996bf7de479fe185 depends: - __osx >=11.0 - cached-property - - hdf5 >=1.14.6,<1.14.7.0a0 - - numpy >=1.23,<3 + - hdf5 >=1.14.3,<1.14.4.0a0 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 @@ -15359,82 +14132,37 @@ packages: license_family: BSD purls: - pkg:pypi/h5py?source=hash-mapping - size: 1180081 - timestamp: 1775582311942 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.6-nompi_had3affe_106.conda - sha256: e91c2b8fe62d73bb56bdb9b5adcdcbedbd164ced288e0f361b8eb3f017ddcd7b - md5: 2d1270d283403c542680e969bea70355 + size: 1237897 + timestamp: 1739953225445 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.3-nompi_ha698983_109.conda + sha256: daba95bd449b77c8d092458f8561d79ef96f790b505c69c17f5425c16ee16eca + md5: be8bf1f5aabe7b5486ccfe5a3cc8bbfe depends: - __osx >=11.0 - - libaec >=1.1.5,<2.0a0 - - libcurl >=8.18.0,<9.0a0 - - libcxx >=19 - - libgfortran - - libgfortran5 >=14.3.0 + - libaec >=1.1.3,<2.0a0 + - libcurl >=8.11.1,<9.0a0 + - libcxx >=18 + - libgfortran >=5 + - libgfortran5 >=13.2.0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.5,<4.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 3299759 - timestamp: 1770390513189 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-2.1.0-nompi_he586413_105.conda - sha256: 518237c7e1e1f1f2d98f0283a483571b2d62c5c71b455a0ad0f0cc40087bb939 - md5: deb297adb6083474bb8b75b92172fb95 - depends: - - __osx >=11.0 - - aws-c-auth >=0.10.1,<0.10.2.0a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - aws-c-http >=0.10.13,<0.10.14.0a0 - - aws-c-io >=0.26.3,<0.26.4.0a0 - - aws-c-s3 >=0.12.2,<0.12.3.0a0 - - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 - - libaec >=1.1.5,<2.0a0 - - libcurl >=8.20.0,<9.0a0 - - libcxx >=19 - - libgfortran - - libgfortran5 >=14.3.0 - - libzlib >=1.3.2,<2.0a0 - - openssl >=3.5.6,<4.0a0 + - openssl >=3.4.0,<4.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 3319915 - timestamp: 1777861894583 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/healpy-1.19.0-py312h372f765_2.conda - sha256: a2ba1aab6492f29d773a2136f807a95aaddaeb62184feda29c9019aed3bff6ed - md5: bd83153bfc02ebac7384eaae2f43059e - depends: - - __osx >=11.0 - - astropy-base - - cfitsio >=4.6.3,<4.6.4.0a0 - - libcxx >=19 - - libgfortran - - libgfortran5 >=14.3.0 - - libzlib >=1.3.2,<2.0a0 - - matplotlib-base - - numpy >=1.23,<3 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - - scipy - license: GPL-2.0-only - license_family: GPL - purls: - - pkg:pypi/healpy?source=hash-mapping - size: 2016274 - timestamp: 1774834589297 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/healpy-1.19.0-py312hc7c58be_3.conda - sha256: 65926d286d4b2b8d3e61ace74ed6d954b3c9c01dbc5106d2ae641a907aa477b1 - md5: cb732aa92892e2f8538a0cf8c47197a5 + size: 3483256 + timestamp: 1737516321575 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/healpy-1.18.1-py312hb9c4046_2.conda + sha256: ba0d6a163e563318bcd4a4af3e43ca25c8a0dc4a547b9e95abaec366a57cd5a2 + md5: 2fd5a29c42ecd67947508a983320d732 depends: - __osx >=11.0 - astropy-base - - cfitsio >=4.6.4,<4.6.5.0a0 + - cfitsio >=4.6.2,<4.6.3.0a0 - libcxx >=19 - libgfortran - libgfortran5 >=14.3.0 - - libzlib >=1.3.2,<2.0a0 + - libgfortran5 >=15.1.0 + - libzlib >=1.3.1,<2.0a0 - matplotlib-base - numpy >=1.23,<3 - python >=3.12,<3.13.0a0 @@ -15445,8 +14173,8 @@ packages: license_family: GPL purls: - pkg:pypi/healpy?source=hash-mapping - size: 2013588 - timestamp: 1777848822457 + size: 2673601 + timestamp: 1757172667824 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/htcondor-24.12.4-py312h1f38498_0.conda sha256: 63fed07cf9d3acb89e50ccc2d8431e24bf4288077ace111e6e4ccee0c3e96b83 md5: fae86127c716727738212baa03336609 @@ -15580,16 +14308,16 @@ packages: - pkg:pypi/htgettoken?source=hash-mapping size: 53052 timestamp: 1768653800550 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - sha256: 3a7907a17e9937d3a46dfd41cffaf815abad59a569440d1e25177c15fd0684e5 - md5: f1182c91c0de31a7abd40cedf6a5ebef +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 depends: - __osx >=11.0 license: MIT license_family: MIT purls: [] - size: 12361647 - timestamp: 1773822915649 + size: 11857802 + timestamp: 1720853997952 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/igwn-ligolw-2.1.1-py312h8d938ae_1.conda sha256: 401c6eaf3696a6123a50d9e1f9b1fc610f8593194ff4797271f0fcf3432251e9 md5: 001055872cdbc6a9f946f875e18e4903 @@ -15731,343 +14459,239 @@ packages: license_family: MIT purls: [] size: 1160828 - timestamp: 1769770119811 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lal-7.7.0-fftw_py312h0b98bce_101.conda - sha256: 650e91e51ba9bacf1788bdf4f618f0b35651042689571caa0b28a237b7ebaad1 - md5: 588fcddc15efc696b66e4d79235ce989 - depends: - - __osx >=11.0 - - fftw >=3.3.10,<4.0a0 - - igwn-ligolw - - igwn-segments - - liblal 7.7.0 fftw_hebea562_101 - - numpy - - python >=3.12,<3.13.0a0 - - python-lal 7.7.0 fftw_py312he477bca_101 - - python_abi 3.12.* *_cp312 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 43586 - timestamp: 1755601176127 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lal-7.7.0-fftw_py312h8aca948_104.conda - sha256: 1e38945d750b5cd9950ca3fe9e0e4a4b8a8a794b636a9ea747008a8311ccb5ea - md5: 4f9637fbbcb99a4ca2edcc3ffdc28900 + timestamp: 1769770119811 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lal-7.6.1-fftw_py312h3b12eeb_100.conda + sha256: 14884ed07d8ab02d54147e43d046a49da9e1b8b082eef5bebead22c4e1b22088 + md5: 0510b0a2d869f03e59d1aec2da647564 depends: - __osx >=11.0 - fftw >=3.3.10,<4.0a0 - - igwn-segments - - liblal 7.7.0 fftw_h4b20030_104 + - liblal 7.6.1 fftw_h8fcc6d2_100 + - ligo-segments - numpy - python >=3.12,<3.13.0a0 - - python-lal 7.7.0 fftw_py312h2cc9458_104 + - python-lal 7.6.1 fftw_py312h0f8b06b_100 + - python-ligo-lw - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 44655 - timestamp: 1774638627399 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalapps-10.1.0-py312hb943a6c_3.conda - sha256: 2147dfd214479e06312a768ed75bdc6b7814d87d5bddefb7c6fb042990bb1cf9 - md5: ae3b2af08004b888974b91d3a4b1d7d3 + size: 42812 + timestamp: 1734696174074 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalapps-10.0.2-py312he91bef5_2.conda + sha256: 3058537f364b7681266063ba95d327363216866a310b91b0e57558b59308989a + md5: 9a48d8d33b912e28bc5bb1b92cfd909c depends: - - cfitsio - - gsl - - h5py - - igwn-ligolw >=2.1.0 - - igwn-segments - - lal >=7.7.0 - - lalburst >=2.0.0 - - lalframe >=3.0.0 - - lalinference >=4.1.0 - - lalinspiral >=5.0.0 - - lalmetaio >=4.0.0 - - lalpulsar >=7.1.0 - - lalsimulation >=6.2.0 - - libframel >=8.39.2 - - libmetaio >=8.2.0 - - numpy - - pillow - - python - __osx >=11.0 - - python 3.12.* *_cpython - - liblalsimulation >=6.2.0,<7.0a0 - - liblalburst >=2.0.7,<3.0a0 - - liblalframe >=3.0.7,<4.0a0 - - libmetaio >=8.5.1,<9.0a0 - - liblalmetaio >=4.0.6,<5.0a0 - - libframel >=8.41.3,<9.0a0 - - liblal >=7.7.0,<8.0a0 - - liblalinference >=4.1.9,<5.0a0 - - cfitsio >=4.6.4,<4.6.5.0a0 + - cfitsio >=4.6.2,<4.6.3.0a0 - gsl >=2.7,<2.8.0a0 - - liblalpulsar >=7.1.1,<8.0a0 - - liblalinspiral >=5.0.3,<6.0a0 - - python_abi 3.12.* *_cp312 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 1420079 - timestamp: 1777985834945 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalapps-10.1.0-py312hf84635f_2.conda - sha256: d021d8520a0993d53d8aba606405f5d4ef5ab2c653c9766de5afe14e62b91160 - md5: 668af39d14f03a5a9901d463e42ae510 - depends: - - cfitsio - - gsl - h5py - - igwn-ligolw >=2.1.0 - - igwn-segments - - lal >=7.7.0 + - lal >=7.6.0 - lalburst >=2.0.0 - lalframe >=3.0.0 - lalinference >=4.1.0 - lalinspiral >=5.0.0 - lalmetaio >=4.0.0 - lalpulsar >=7.1.0 - - lalsimulation >=6.2.0 + - lalsimulation >=6.1.0 - libframel >=8.39.2 - - libmetaio >=8.2.0 + - libframel >=8.41.3,<9.0a0 + - liblal >=7.6.1,<8.0a0 + - liblalburst >=2.0.6,<3.0a0 + - liblalframe >=3.0.6,<4.0a0 + - liblalinference >=4.1.8,<5.0a0 + - liblalinspiral >=5.0.2,<6.0a0 + - liblalmetaio >=4.0.5,<5.0a0 + - liblalpulsar >=7.1.0,<8.0a0 + - liblalsimulation >=6.1.0,<7.0a0 + - libmetaio >=8.4.0 + - libmetaio >=8.5.1,<9.0a0 + - ligo-segments - numpy - pillow - - python - - __osx >=11.0 - - python 3.12.* *_cpython - - gsl >=2.7,<2.8.0a0 - - liblalburst >=2.0.7,<3.0a0 - - libmetaio >=8.5.1,<9.0a0 - - liblalpulsar >=7.1.1,<8.0a0 - - liblalsimulation >=6.2.0,<7.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-ligo-lw >=1.7.0 - python_abi 3.12.* *_cp312 - - liblalframe >=3.0.7,<4.0a0 - - libframel >=8.41.3,<9.0a0 - - liblal >=7.7.0,<8.0a0 - - cfitsio >=4.6.3,<4.6.4.0a0 - - liblalmetaio >=4.0.6,<5.0a0 - - liblalinspiral >=5.0.3,<6.0a0 - - liblalinference >=4.1.9,<5.0a0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 1418785 - timestamp: 1771238118697 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalburst-2.0.7-py312h76b007c_2.conda - sha256: d859b4cc401405cc66f037e8afc1cb3704db42e17eb26519e10544377b116514 - md5: 4b1dad6a9e10dd005b30ff81166436c2 + size: 1322073 + timestamp: 1744228891647 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalburst-2.0.6-py312h028adb6_0.conda + sha256: 8e28495392bfc5ed7548b38c095971bfd84f26cd7cb8b0bea82996230abad376 + md5: 56a0d78b7dc88c2936fbd731d2d4cc28 depends: - __osx >=11.0 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalburst 2.0.7 h957e360_2 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 + - liblalburst 2.0.6 h2786bc8_0 - pillow - python >=3.12,<3.13.0a0 - - python-lalburst 2.0.7 py312hd9443c7_2 + - python-lalburst 2.0.6 py312heec191f_0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 50279 - timestamp: 1771411869709 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalframe-3.0.7-py312h76b007c_2.conda - sha256: 45c438518bcaad286ef73e7f77a23b96f93a33ce9853ba7bf4b13ca057d0352f - md5: 3ac504fd9e1dab84237835df90cb21ca + size: 49537 + timestamp: 1734709596122 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalframe-3.0.6-py312h028adb6_0.conda + sha256: f7dd96310aa41565b6e4fce4c2b1191cfe955781f9722f7036100ebd37a13f44 + md5: 4d86373b3509a0990fc3494b05d86c7e depends: - __osx >=11.0 - - liblal >=7.7.0,<8.0a0 - - liblalframe 3.0.7 h304a64b_2 + - liblal >=7.6.0,<8.0a0 + - liblalframe 3.0.6 h63b17c2_0 - python >=3.12,<3.13.0a0 - - python-lalframe 3.0.7 py312hf57c059_2 + - python-lalframe 3.0.6 py312he0011b7_0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 292521 - timestamp: 1774544321017 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-4.1.9-nompi_py312h594389e_102.conda - sha256: 0bc7e5411b835d7e7ed0a858c8f3f0122afbe0c0474ae5c419fee1e4a89e1bd6 - md5: fe16638b85f4f152886dba6d5c43f461 + size: 308737 + timestamp: 1734697021711 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-4.1.8-nompi_py312h7a6eb69_100.conda + sha256: 03408cb82906fe75c6806afb234398c7a0302719081db232d38d3f7997eb7918 + md5: 083daf6498eb015a6a6359f715e2900e depends: - __osx >=11.0 - astropy-base >=1.1.1 - h5py - - icu >=78.3,<79.0a0 - - igwn-ligolw >=2.1.0 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalinference 4.1.9 ha9a36a6_2 + - icu >=75.1,<76.0a0 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 + - liblalinference 4.1.8 h4d5f05e_0 - ligo-gracedb - lscsoft-glue >=1.54.1 - matplotlib-base >=1.2.0 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - - python-lal >=7.7.0 - - python-lalinference 4.1.9 py312hf57c059_2 - - python-lalsimulation >=6.2.0 + - python-lal >=7.6.0 + - python-lalinference 4.1.8 py312he0011b7_0 + - python-lalsimulation >=6.1.0 + - python-ligo-lw >=1.7.0 - python_abi 3.12.* *_cp312 - scipy >=0.9.0 - six license: GPL-2.0-or-later license_family: GPL purls: [] - size: 103066 - timestamp: 1774966858123 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-data-4.1.9-hce30654_2.conda - sha256: c9b94c68a71c5074d01dddfad1334ddc1cc3cf2686e25e697c098a5f914e5fa4 - md5: e46d2e9798a7d852771f2f09d4ad3a71 + size: 101447 + timestamp: 1734715099879 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinference-data-4.1.8-hce30654_0.conda + sha256: 7ef6596c565ec69447010f699e8b9ef55a0a35f2ed170a0c96015cf4677b9303 + md5: 2b82445d316e9f22313d2ffc0f183e17 constrains: - liblalinference >=3.0.3 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 32808 - timestamp: 1774965053995 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinspiral-5.0.3-py312h76b007c_3.conda - sha256: 487e56cb3635f1438b55bd7ea55f89ad148b670bd05364bbe7a550983002caff - md5: 5d82ce17830d5a8baaa2c0e34a6ced83 - depends: - - __osx >=11.0 - - igwn-segments - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalinspiral 5.0.3 h957e360_3 - - python >=3.12,<3.13.0a0 - - python-lalinspiral 5.0.3 py312hf57c059_3 - - python_abi 3.12.* *_cp312 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 23575 - timestamp: 1774546545051 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalmetaio-4.0.6-py312h76b007c_2.conda - sha256: 3fe16f4f1dc0413c6809ab5b5c44199ad6edd968130d245ed9b4169039452856 - md5: 166f99ab6047412f272de52d4932bb20 + size: 32108 + timestamp: 1734713004583 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalinspiral-5.0.2-py312h028adb6_0.conda + sha256: fe398f3ee67a51aebbb1c882cdd75764a9c2b5361d3df688a21f23b9425d6629 + md5: a525c908ada3defa68e5a48149ae01cb depends: - __osx >=11.0 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalmetaio 4.0.6 h84a0fba_2 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 + - liblalinspiral 5.0.2 h2786bc8_0 + - ligo-segments - python >=3.12,<3.13.0a0 - - python-lalmetaio 4.0.6 py312hf57c059_2 + - python-lalinspiral 5.0.2 py312he0011b7_0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 19089 - timestamp: 1774544998542 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-7.1.1-py312h1915c05_3.conda - sha256: babd0243d53a7e10d7799b51a703e603352e6aa47c12d07de1c319f3b4cf82ab - md5: b17b261701ebd1b446cefa98c4298470 + size: 22614 + timestamp: 1734710613786 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalmetaio-4.0.5-py312h028adb6_2.conda + sha256: f6aa0e2b9c005979015df9010e677d17d54f053454523880dd7f98ddabe70930 + md5: a3163013d4affadfa028e578f674fe1c depends: - __osx >=11.0 - - astropy-base - - cfitsio >=4.6.4,<4.6.5.0a0 - - fftw >=3.3.11,<4.0a0 - - gsl >=2.7,<2.8.0a0 - - jplephem - - lalinference >=4.1.0 - liblal >=7.6.0 - - liblal >=7.7.0,<8.0a0 - - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 - - liblalinference >=4.1.0 - - liblalinference >=4.1.9,<5.0a0 - - liblalpulsar 7.1.1 h169444b_3 - - liblalsimulation >=6.1.0 - - liblalsimulation >=6.2.0,<7.0a0 - - numpy >=1.23,<3 + - liblal >=7.6.1,<8.0a0 + - liblalmetaio 4.0.5 h5505292_2 - python >=3.12,<3.13.0a0 - - python-lal >=7.6.0 - - python-lalframe >=3.0.0 - - python-lalinference >=4.1.0 - - python-lalpulsar 7.1.1 py312hf57c059_3 - - python-lalsimulation >=6.1.0 + - python-lalmetaio 4.0.5 py312he0011b7_2 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 653317 - timestamp: 1777888975865 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-7.1.1-py312h57a7920_2.conda - sha256: eaead9a939a3df85add591b22587c86577108a521a01025738571c6bed48c043 - md5: d584bc6861236e11a9e56988a36f57e9 + size: 18308 + timestamp: 1736418219629 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-7.1.0-py312hf4cc3a4_1.conda + sha256: 7f82d724a3b621a98c3095ccbbb58ac675904e0939993c322f5e209abbaba580 + md5: 8fadeded4c0a24b9c9ec9b5e9b196d4c depends: - __osx >=11.0 - astropy-base - - cfitsio >=4.6.3,<4.6.4.0a0 + - cfitsio >=4.6.2,<4.6.3.0a0 - fftw >=3.3.10,<4.0a0 - gsl >=2.7,<2.8.0a0 - jplephem - lalinference >=4.1.0 - liblal >=7.6.0 - - liblal >=7.7.0,<8.0a0 + - liblal >=7.6.1,<8.0a0 - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 + - liblalframe >=3.0.6,<4.0a0 - liblalinference >=4.1.0 - - liblalinference >=4.1.9,<5.0a0 - - liblalpulsar 7.1.1 h43f389f_2 + - liblalinference >=4.1.8,<5.0a0 + - liblalpulsar 7.1.0 h8480f09_1 - liblalsimulation >=6.1.0 - - liblalsimulation >=6.2.0,<7.0a0 - - numpy >=1.23,<3 + - liblalsimulation >=6.1.0,<7.0a0 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python-lal >=7.6.0 - python-lalframe >=3.0.0 - python-lalinference >=4.1.0 - - python-lalpulsar 7.1.1 py312hf57c059_2 + - python-lalpulsar 7.1.0 py312he0011b7_1 - python-lalsimulation >=6.1.0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 654603 - timestamp: 1774627905603 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-data-7.1.1-hce30654_2.conda - sha256: 403207aedfe9d99d87a46314a803e61c0d15f983825cdd78a7abd572e6f431bb - md5: f4a724b91230d43c2f69250b6dc9815e - constrains: - - liblalpulsar >=4.0.0 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 90043358 - timestamp: 1774626009237 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-data-7.1.1-hce30654_3.conda - sha256: 5dfe300a2fa4d9dae7fa05d0546d6ce4c2cc82e2b9e6ade03194f4524f3e9061 - md5: 6f8b9a77ff0f83454cb57f603a9d27cf + size: 653367 + timestamp: 1744215378338 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalpulsar-data-7.1.0-hce30654_1.conda + sha256: 80acda84aaaea5045486111c4bec60cc9e22bd3c7fa5eba01e1c98052e6406aa + md5: 34b154e4bc255a942c1f3fe53e9efa8e constrains: - liblalpulsar >=4.0.0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 90035864 - timestamp: 1777887525526 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-6.2.0-py312h1ab2389_3.conda - sha256: ad036337ad5df19dae68b91fd099a9b69e261ee97bc3dc5c18d41f15420f53eb - md5: 26aac4300c80033e7c5e8d9c994279bd + size: 90030025 + timestamp: 1744214436352 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-6.1.0-py312hd4754c9_0.conda + sha256: 70d542489f864b087044934aa45f3971851a268dfc8564bb1cdec2db2544c8d8 + md5: d0b8abfd975ece415a345bc330bf8d6f depends: - __osx >=11.0 - gsl >=2.7,<2.8.0a0 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalsimulation 6.2.0 py312h593d7fe_3 + - liblal >=7.6.0 + - liblal >=7.6.0,<8.0a0 + - liblalsimulation 6.1.0 py312h0975e73_0 - mpmath >=1.0.0 - python >=3.12,<3.13.0a0 - - python-lalsimulation 6.2.0 py312h7cf3665_3 + - python-lalsimulation 6.1.0 py312he758b9a_0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 72223 - timestamp: 1774542207675 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-data-6.2.0-hce30654_3.conda - sha256: 40aa5e3dd1dad08d77611d7a43b3309f7445a5605e3e6506f6987167464960ed - md5: 0cf513617f6097fb4c178a35c9305d64 + size: 71296 + timestamp: 1734696545599 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lalsimulation-data-6.1.0-hce30654_0.conda + sha256: b4026b84c03559d4d8343bf8978833bcb431b02e563f06e46e78e1aaa3cebd2d + md5: 8f7cbff88ba74ed2437cf57902a84eb4 constrains: - liblalsimulation >=3.1.2 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 3635046 - timestamp: 1774541915235 + size: 3673142 + timestamp: 1734695809215 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_0.conda sha256: d589ff5294e42576563b22bdea0860cb80b0cbe0f3852836eddaadedf6eec4ef md5: e5ba982008c0ac1a1c0154617371bab5 @@ -16401,13 +15025,13 @@ packages: purls: [] size: 18783 timestamp: 1778489983152 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-1.88.0-h0419b56_7.conda - sha256: d3872915a43512b0404e131d965e6e8c1e2546b13ccfd2463ef72fbfe1456afc - md5: 34e8ce0732bb254bd17f0b9ecea788c2 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-1.88.0-h18cd856_6.conda + sha256: 717fbfa249f14fb1c6ce564cd0f242460cbc1703b584ad4063366ee349b22325 + md5: 605e24dba1de926ae54fc01ab557dfa8 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - - icu >=78.1,<79.0a0 + - icu >=75.1,<76.0a0 - libcxx >=19 - liblzma >=5.8.1,<6.0a0 - libzlib >=1.3.1,<2.0a0 @@ -16416,14 +15040,14 @@ packages: - boost-cpp <0.0a0 license: BSL-1.0 purls: [] - size: 1992135 - timestamp: 1766348005115 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-python-1.88.0-py312hdeff4eb_7.conda - sha256: e2cacd2816859f5c73acd6e125d8a87362d324fa6dbde7d4973f9d42bde15fc0 - md5: ddee8cd9d4ccaf5df49944264b56c88b + size: 1954928 + timestamp: 1763019429173 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-python-1.88.0-py312h4c080bd_6.conda + sha256: 9d87069c3d7e620adeea40e37571615b55aa89f9764391a2dd8b1feb8db196ff + md5: 26ae282b8a00ce47f039d58c4a6df53d depends: - __osx >=11.0 - - libboost 1.88.0 h0419b56_7 + - libboost 1.88.0 h18cd856_6 - libcxx >=19 - numpy >=1.23,<3 - python >=3.12,<3.13.0a0 @@ -16434,8 +15058,8 @@ packages: - boost <0.0a0 license: BSL-1.0 purls: [] - size: 107200 - timestamp: 1766348442415 + size: 107106 + timestamp: 1763020313841 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda sha256: a7cb9e660531cf6fbd4148cff608c85738d0b76f0975c5fc3e7d5e92840b7229 md5: 006e7ddd8a110771134fcc4e1e3a6ffa @@ -16840,32 +15464,14 @@ packages: purls: [] size: 1032419 timestamp: 1777065264956 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblal-7.7.0-fftw_h4b20030_104.conda - sha256: a5eab6e5f482a1988936a64acd1403f2dbefa8575ddb59328c754b9365b378f5 - md5: 7cf8168ad627299ad2deb16aaf9d3ed2 - depends: - - __osx >=11.0 - - fftw >=3.3.10,<4.0a0 - - gsl >=2.7,<2.8.0a0 - - hdf5 >=2.1.0,<3.0a0 - - libzlib >=1.3.2,<2.0a0 - constrains: - - python-lal >=7.1.1 - - lal >=7.1.1 - - swig >=4.4.1,<4.4.2.0a0 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 752465 - timestamp: 1774637379051 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblal-7.7.0-fftw_hebea562_101.conda - sha256: fe8297db83b4ad883914917ae3b6ea8f72e374e8330a443c239b09a76c542601 - md5: 17dbb61e41d5b2000be5d891925ee32b +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblal-7.6.1-fftw_h8fcc6d2_100.conda + sha256: dae82010eb705bf779c2b6117f615aae5e65d19fef30a124c274d127574af0cf + md5: 81844edb7e7b657e7ee5f7c8a7bc323a depends: - __osx >=11.0 - fftw >=3.3.10,<4.0a0 - gsl >=2.7,<2.8.0a0 - - hdf5 >=1.14.6,<1.14.7.0a0 + - hdf5 >=1.14.3,<1.14.4.0a0 - libzlib >=1.3.1,<2.0a0 constrains: - python-lal >=7.1.1 @@ -16873,189 +15479,162 @@ packages: license: GPL-2.0-or-later license_family: GPL purls: [] - size: 751847 - timestamp: 1755600054361 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalburst-2.0.7-h957e360_2.conda - sha256: 6a169cc9ce7e83af9b691762bb0569b848ea589550cb8e62097b7da849c6e0f5 - md5: d0d539410c43f9e3c4a9557af5f615fc + size: 752709 + timestamp: 1734695092130 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalburst-2.0.6-h2786bc8_0.conda + sha256: dcd5a9dce7519aca4ae6a4d7f5a7f62f69fe61e635efac3e2069a4ebaee77812 + md5: 42d03ef4cf7c1b941c7985274e30d94e depends: - __osx >=11.0 - gsl >=2.7,<2.8.0a0 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 - liblalmetaio >=4.0.0 - - liblalmetaio >=4.0.6,<5.0a0 - - liblalsimulation >=6.2.0 - - liblalsimulation >=6.2.0,<7.0a0 + - liblalmetaio >=4.0.5,<5.0a0 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.1.0,<7.0a0 constrains: - python-lalburst >=1.5.7 - lalburst >=1.5.7 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 38663 - timestamp: 1771410459722 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalframe-3.0.7-h304a64b_2.conda - sha256: 251473768849e6911555aeca629702e7f31beed8c641f3478077723c80bad3ab - md5: d1e9534dd7baa34b0decc586c427fb04 + size: 37876 + timestamp: 1734708926283 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalframe-3.0.6-h63b17c2_0.conda + sha256: 5bd7171b58750abe98b37b0ce87d1ab0e860e4f0ac42bb571e127eadd0471653 + md5: 9416eeb29c217946b6a242ddd75cbbac depends: - __osx >=11.0 - ldas-tools-framecpp >=2.9.3,<2.10.0a0 - libframel >=8.41.3,<9.0a0 - - liblal >=7.7.0,<8.0a0 + - liblal >=7.6.0,<8.0a0 constrains: - - python-lalframe >=1.5.3 - lalframe >=1.5.3 + - python-lalframe >=1.5.3 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 102142 - timestamp: 1774542891656 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinference-4.1.9-ha9a36a6_2.conda - sha256: c82c433a5121e4036fe116817165cd2dcf1ba51cf12a2bdfbc16b5c7ec1c3aed - md5: 6a050dad84fd99cdb500e16fc9b400ff + size: 101511 + timestamp: 1734696361703 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinference-4.1.8-h4d5f05e_0.conda + sha256: 68a96d4890299e1ea0f727d7c1d4b4d741a1a25548ccc3cd6a7dbe6e7a05e807 + md5: b4b890398dbbedc0c0038677769995a4 depends: - __osx >=11.0 - gsl >=2.7,<2.8.0a0 - - lalinference-data 4.1.9 hce30654_2 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 + - lalinference-data 4.1.8 hce30654_0 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 - liblalburst >=2.0.0 - - liblalburst >=2.0.7,<3.0a0 + - liblalburst >=2.0.6,<3.0a0 - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 + - liblalframe >=3.0.6,<4.0a0 - liblalinspiral >=5.0.0 - - liblalinspiral >=5.0.3,<6.0a0 + - liblalinspiral >=5.0.2,<6.0a0 - liblalmetaio >=4.0.0 - - liblalmetaio >=4.0.6,<5.0a0 - - liblalsimulation >=6.2.0 - - liblalsimulation >=6.2.0,<7.0a0 - - llvm-openmp >=19.1.7 - - llvm-openmp >=22.1.2 + - liblalmetaio >=4.0.5,<5.0a0 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.1.0,<7.0a0 + - llvm-openmp >=18.1.8 + - llvm-openmp >=19.1.6 constrains: - - python-lalinference >=2.0.6 - lalinference >=2.0.6 + - python-lalinference >=2.0.6 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 286407 - timestamp: 1774965134322 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinspiral-5.0.3-h957e360_3.conda - sha256: 61a7810b0777910dff29deafd85637841ac93fe8d96838bd81be4382ccfe08da - md5: d2de2a46be51f0d8d820fef04e09174a + size: 285907 + timestamp: 1734713095002 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalinspiral-5.0.2-h2786bc8_0.conda + sha256: 216db3cff92c91f3ba780b6a99e25ba942827cb59db3c3f8561b9e8daaa7fb4f + md5: ed53f908dc7538ee4771ae47047a4de6 depends: - __osx >=11.0 - gsl >=2.7,<2.8.0a0 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 - liblalburst >=2.0.0 - - liblalburst >=2.0.7,<3.0a0 + - liblalburst >=2.0.5,<3.0a0 - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 + - liblalframe >=3.0.6,<4.0a0 - liblalmetaio >=4.0.0 - - liblalmetaio >=4.0.6,<5.0a0 - - liblalsimulation >=6.2.0 - - liblalsimulation >=6.2.0,<7.0a0 + - liblalmetaio >=4.0.5,<5.0a0 + - liblalsimulation >=6.1.0 + - liblalsimulation >=6.1.0,<7.0a0 constrains: - lalinspiral >=2.0.1 - python-lalinspiral >=2.0.1 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 377957 - timestamp: 1774544731606 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalmetaio-4.0.6-h84a0fba_2.conda - sha256: 4f6a9bde5337184f90645755ff68ba5e998564e167253a4d70ed3b14a38e43ea - md5: 58a0836f877b30cd37648f70a45c82a8 + size: 378031 + timestamp: 1734709396322 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalmetaio-4.0.5-h5505292_2.conda + sha256: d9eee370b5f4fbc466129b6e5435981490120ed086bccb44de107a1c16812a7c + md5: 7507d1ecdcb60174715ab734c0e9ec1b depends: - __osx >=11.0 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 + - liblal >=7.6.0 + - liblal >=7.6.1,<8.0a0 - libmetaio >=8.4.0 - libmetaio >=8.5.1,<9.0a0 constrains: - - lalmetaio >=2.0.1 - python-lalmetaio >=2.0.1 + - lalmetaio >=2.0.1 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 57186 - timestamp: 1774543909804 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalpulsar-7.1.1-h169444b_3.conda - sha256: a8d1f8bf53bd3d9f97f885e1cb646237bfdbaa989d466bebc630a199c0532a8a - md5: 618c54f51e1c2f18004f3be182d531b3 + size: 55805 + timestamp: 1736417471577 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalpulsar-7.1.0-h8480f09_1.conda + sha256: 5f45c9b8c064644cdf1077a2b16ac0956089e4543e9d1eecb1c953a106e25d89 + md5: 17ae6c3fd86d8da9eec8fdf93343d0d0 depends: - __osx >=11.0 - - cfitsio >=4.6.4,<4.6.5.0a0 + - cfitsio >=4.6.2,<4.6.3.0a0 - fftw - gsl >=2.7,<2.8.0a0 - - lalpulsar-data 7.1.1 hce30654_3 + - lalpulsar-data 7.1.0 hce30654_1 - liblal >=7.6.0 - - liblal >=7.7.0,<8.0a0 + - liblal >=7.6.1,<8.0a0 - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 + - liblalframe >=3.0.6,<4.0a0 - liblalinference >=4.1.0 - - liblalinference >=4.1.9,<5.0a0 + - liblalinference >=4.1.8,<5.0a0 - liblalsimulation >=6.1.0 - - liblalsimulation >=6.2.0,<7.0a0 - - llvm-openmp >=19.1.7 - - llvm-openmp >=22.1.4 + - liblalsimulation >=6.1.0,<7.0a0 + - llvm-openmp >=18.1.8 + - llvm-openmp >=20.1.2 constrains: - python-lalpulsar >=3.0.0 - lalpulsar >=3.0.0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 623846 - timestamp: 1777887639014 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalpulsar-7.1.1-h43f389f_2.conda - sha256: 65467606fe73f3b2cbc4240ae8383c99a3ef8a490d61a0b9df9afd8f6daa21ae - md5: c691472d2d6471b18df0bbac1334e31e + size: 624107 + timestamp: 1744214500157 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalsimulation-6.1.0-py312h0975e73_0.conda + sha256: bbc2ad36e048db5f4bf27d057ed1526b058888f192069c9e07f3dc256e1b6d15 + md5: 07b65909c6c67ad009bbbbd4eb87a05c depends: - __osx >=11.0 - - cfitsio >=4.6.3,<4.6.4.0a0 - - fftw - gsl >=2.7,<2.8.0a0 - - lalpulsar-data 7.1.1 hce30654_2 + - lalsimulation-data 6.1.0 hce30654_0 - liblal >=7.6.0 - - liblal >=7.7.0,<8.0a0 - - liblalframe >=3.0.0 - - liblalframe >=3.0.7,<4.0a0 - - liblalinference >=4.1.0 - - liblalinference >=4.1.9,<5.0a0 - - liblalsimulation >=6.1.0 - - liblalsimulation >=6.2.0,<7.0a0 - - llvm-openmp >=19.1.7 - - llvm-openmp >=22.1.1 - constrains: - - lalpulsar >=3.0.0 - - python-lalpulsar >=3.0.0 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 622240 - timestamp: 1774626123962 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblalsimulation-6.2.0-py312h593d7fe_3.conda - sha256: d5ca8ff0908e91d6d61edd4a5c65015d17ae13aaa1b9a2c3f8f4415c61b98084 - md5: f1963b3e7d5913aabc1e6870c07613ca - depends: - - __osx >=11.0 - - gsl >=2.7,<2.8.0a0 - - lalsimulation-data 6.2.0 hce30654_3 - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - llvm-openmp >=19.1.7 - - llvm-openmp >=22.1.1 + - liblal >=7.6.0,<8.0a0 + - llvm-openmp >=18.1.8 + - llvm-openmp >=19.1.6 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 constrains: - - lalsimulation >=2.5.0 - python-lalsimulation >=2.5.0 + - lalsimulation >=2.5.0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 3552422 - timestamp: 1774542083775 + size: 3545985 + timestamp: 1734696382770 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-7_hd9741b5_openblas.conda build_number: 7 sha256: ff3018918ca8b22173dcb231842e819767fd05a08df61483eb5f3e9f2895d114 @@ -17355,37 +15934,37 @@ packages: purls: [] size: 323658 timestamp: 1727278733917 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.3-h5ef1a60_0.conda - sha256: ff75b84cdb9e8d123db2fa694a8ac2c2059516b6cbc98ac21fb68e235d0fd354 - md5: 19edaa53885fc8205614b03da2482282 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.1-h0ff4647_0.conda + sha256: ebe2dd9da94280ad43da936efa7127d329b559f510670772debc87602b49b06d + md5: 438c97d1e9648dd7342f86049dd44638 depends: - __osx >=11.0 - - icu >=78.3,<79.0a0 + - icu >=75.1,<76.0a0 - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.3,<6.0a0 - - libzlib >=1.3.2,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 constrains: - - libxml2 2.15.3 + - libxml2 2.15.1 license: MIT license_family: MIT purls: [] - size: 466360 - timestamp: 1776377102261 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.3-h5654f7c_0.conda - sha256: 2fe1d8de0854342ae9cabe408b476935f82f5636e153b3b497456264dc8ff3a1 - md5: 8e037d73747d6fe34e12d7bcac10cf21 + size: 464952 + timestamp: 1761016087733 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.1-h9329255_0.conda + sha256: c409e384ddf5976a42959265100d6b2c652017d250171eb10bae47ef8166193f + md5: fb5ce61da27ee937751162f86beba6d1 depends: - __osx >=11.0 - - icu >=78.3,<79.0a0 + - icu >=75.1,<76.0a0 - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.3,<6.0a0 - - libxml2-16 2.15.3 h5ef1a60_0 - - libzlib >=1.3.2,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libxml2-16 2.15.1 h0ff4647_0 + - libzlib >=1.3.1,<2.0a0 license: MIT license_family: MIT purls: [] - size: 41102 - timestamp: 1776377119495 + size: 40607 + timestamp: 1761016108361 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda sha256: 361415a698514b19a852f5d1123c5da746d4642139904156ddfca7c922d23a05 md5: bc5a5721b6439f2f62a84f2548136082 @@ -17408,50 +15987,62 @@ packages: purls: [] size: 147901 timestamp: 1607309166373 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo.skymap-2.5.3-np2h6a9d7bf_1.conda - noarch: python - sha256: d05e842b5848efaf4768ada7e37865e5b1864ec0534a378837823deed22f4d15 - md5: 60ce344e98f69e5515004e9adf05fea9 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo-segments-1.4.0-py312hea69d52_6.conda + sha256: 1b3679d240cb2f427f32133dc7756c2ff06dcbaa44b366c43e7188b91565208e + md5: 2b9f4e5f404d5acd85efdf5b127151e7 depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - six + license: GPL-3.0-or-later + license_family: GPL + purls: + - pkg:pypi/ligo-segments?source=hash-mapping + size: 74969 + timestamp: 1733851948998 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ligo.skymap-2.3.0-py312hd0a6ca1_0.conda + sha256: a213a2d1f7617224e2e6d5c5d7933ae39142efe8158ca178d0cb04d3a956c80a + md5: 916df1503a16a30d99022a5e041fb256 + depends: + - __osx >=11.0 - astroplan >=0.7 - astropy-base >=6.0 - astropy-healpix >=0.3 - - chealpix - - gsl - - healpy + - chealpix >=3.31.0,<3.32.0a0 + - gsl >=2.7,<2.8.0a0 - h5py - - igwn-ligolw - - igwn-segments - - libcblas + - healpy + - libcblas >=3.9.0,<4.0a0 - ligo-gracedb >=2.0.1 + - ligo-segments >=1.2.0 + - llvm-openmp >=18.1.8 - matplotlib-base >=3.9.1 - networkx - - numpy >=2.0.0 + - numpy >=1.19,<3 + - numpy >=1.23.0 - pillow >=2.5.0 - - python >=3.11 - - python-lal >=7.7.0 - - python-lalinspiral >=5.0.3 - - python-lalmetaio >=4.0.6 - - python-lalsimulation >=6.2.0 + - ptemcee + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-lal >=7.6.0 + - python-lalinspiral >=5.0.1 + - python-lalmetaio >=4.0.5 + - python-lalsimulation >=6.0.0 + - python-ligo-lw >=1.8.0 + - python_abi 3.12.* *_cp312 - pytz - reproject >=0.3.2 - - scipy >=1.10.1 + - scipy >=0.14,!=1.10.0 - shapely >=2.0.0 - tqdm >=4.27.0 - - __osx >=11.0 - - llvm-openmp >=19.1.7 - - _python_abi3_support 1.* - - cpython >=3.11 - - numpy >=1.23,<3 - - libcblas >=3.9.0,<4.0a0 - - gsl >=2.7,<2.8.0a0 - - chealpix >=3.31.0,<3.32.0a0 license: GPL-3.0-or-later license_family: GPL purls: - pkg:pypi/ligo-skymap?source=hash-mapping - size: 1779402 - timestamp: 1775055991453 + size: 1912189 + timestamp: 1745758375183 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.6-hc7d1edf_0.conda sha256: 12d3652549a9abd30f3cc14797715327b86e91001d11865106eb3e02c40be9da md5: b8cf70b77b2ed10d5f82e367c327b76b @@ -17647,25 +16238,25 @@ packages: - pkg:pypi/numcodecs?source=hash-mapping size: 660694 timestamp: 1764782989453 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.6-py312ha003a3f_0.conda - sha256: b09e03dace335a6f303352fc4e167243e04d7026d55008546fa643d224fb0bad - md5: 9f554fdfa902971390975b489e678c03 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda + sha256: c8841d6d6f61fd70ca80682efbab6bdb8606dc77c68d8acabfbd7c222054f518 + md5: d83fc83d589e2625a3451c9a7e21047c depends: - - python - - __osx >=11.0 - - libcxx >=19 - - python_abi 3.12.* *_cp312 - - liblapack >=3.9.0,<4.0a0 - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 + - libcxx >=16 + - liblapack >=3.9.0,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/numpy?source=compressed-mapping - size: 6843172 - timestamp: 1779169213435 + - pkg:pypi/numpy?source=hash-mapping + size: 6073136 + timestamp: 1707226249608 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.10-h5505292_0.conda sha256: cedcd880e316240cbb35a1275990bfed1da36dba4a4f714edf95237f03d48665 md5: 045afd0b8e35a71bfbe95345146592c4 @@ -18064,32 +16655,14 @@ packages: - pkg:pypi/htcondor?source=hash-mapping size: 505934 timestamp: 1778794246872 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lal-7.7.0-fftw_py312h2cc9458_104.conda - sha256: 725e8af17447df0de194bff88196114ec6637e10e2a62534328a35c3a4da2fbc - md5: 77bae30e703073b033d0d0f7d4e06193 - depends: - - __osx >=11.0 - - igwn-segments - - liblal 7.7.0 fftw_h4b20030_104 - - numpy >=1.23,<3 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python-dateutil - - python_abi 3.12.* *_cp312 - - scipy - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 849272 - timestamp: 1774637608407 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lal-7.7.0-fftw_py312he477bca_101.conda - sha256: b1c761fd97762ecdb78222965d86233818bb1d6890b8be23dcd8c00d2b1d263d - md5: 93428ebf6d08b5e95353956213da7a87 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lal-7.6.1-fftw_py312h0f8b06b_100.conda + sha256: 53fb1b683ae7e4615e5f11c6a3a7b402793466fa5bf6aa918f167dcc3b69794f + md5: f5972581f437cbe05421aa6bfc0511c3 depends: - __osx >=11.0 - - igwn-segments - - liblal 7.7.0 fftw_hebea562_101 - - numpy >=1.23,<3 + - liblal 7.6.1 fftw_h8fcc6d2_100 + - ligo-segments + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - python-dateutil @@ -18098,124 +16671,124 @@ packages: license: GPL-2.0-or-later license_family: GPL purls: [] - size: 850173 - timestamp: 1755600783452 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalburst-2.0.7-py312hd9443c7_2.conda - sha256: 7a13ab235ef5d4229be301930857711648bae741a6e9c064b4650119476b7d2a - md5: 59e45e5fc3cce1ec287dc594c9d4b5cb + size: 798310 + timestamp: 1734695835019 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalburst-2.0.6-py312heec191f_0.conda + sha256: 76b35ec460ead89af9fde5dae9095cfbca556a2ad40c7bb0ed8400dc71661d1c + md5: f721f4a8a6c607275e6d76fb3a94a87c depends: - __osx >=11.0 - gsl >=2.7,<2.8.0a0 - - igwn-ligolw >=2.1.0 - - igwn-segments - - liblalburst 2.0.7 h957e360_2 + - liblalburst 2.0.6 h2786bc8_0 + - ligo-segments - lscsoft-glue - matplotlib-base - - numpy >=1.23,<3 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - - python-lal >=7.7.0 + - python-lal >=7.6.0 - python-lalmetaio >=4.0.0 - - python-lalsimulation >=6.2.0 + - python-lalsimulation >=6.1.0 + - python-ligo-lw >=1.7.0 - python_abi 3.12.* *_cp312 - scipy - tqdm license: GPL-2.0-or-later license_family: GPL purls: [] - size: 315920 - timestamp: 1771411447208 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalframe-3.0.7-py312hf57c059_2.conda - sha256: 6e2b7af6e01d32e1db06dcc244f9e15071205a837db5df18d33d1f3ed9fa047b - md5: c1011015121cee02cc80d202e95aa00c + size: 314046 + timestamp: 1734709412793 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalframe-3.0.6-py312he0011b7_0.conda + sha256: 5d74ffc908ca4f45f7222c3566a4a59b2d2349b16e34aa6e01dc490117b9e8cc + md5: 66e9b6c1baa768805f8e976f769d08d4 depends: - __osx >=11.0 - - liblalframe 3.0.7 h304a64b_2 - - numpy >=1.23,<3 + - liblalframe 3.0.6 h63b17c2_0 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - - python-lal >=7.7.0 + - python-lal >=7.6.0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 753175 - timestamp: 1774543366517 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinference-4.1.9-py312hf57c059_2.conda - sha256: 7fca54a44bce711d7c6da3678c776dbc2972f8f418c6344339fb121a0e7fc157 - md5: 52acb78043fc9563ed61427f3ae93953 + size: 739027 + timestamp: 1734696549991 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinference-4.1.8-py312he0011b7_0.conda + sha256: 558f07197c5ffbe30fd4e0aad3db112b914174fe943cb6b27bb20b331e5e666a + md5: 237b8a8b666995ede9bad35cc54de638 depends: - __osx >=11.0 - astropy-base >=1.1.1 - h5py - healpy >=1.17.3 - - igwn-ligolw >=2.1.0 - - igwn-segments - - liblalinference 4.1.9 ha9a36a6_2 + - liblalinference 4.1.8 h4d5f05e_0 + - ligo-segments - lscsoft-glue >=1.54.1 - matplotlib-base >=1.2.0 - - numpy >=1.23,<3 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - - python-lal >=7.7.0 + - python-lal >=7.6.0 - python-lalburst >=2.0.0 - python-lalinspiral >=5.0.0 - python-lalmetaio >=4.0.0 - - python-lalsimulation >=6.2.0 + - python-lalsimulation >=6.1.0 + - python-ligo-lw >=1.7.0 - python_abi 3.12.* *_cp312 - scipy >=0.9.0 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 810668 - timestamp: 1774965664350 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinspiral-5.0.3-py312hf57c059_3.conda - sha256: 134f18d35de4ab259d22d09b1ff378c80d9fae15ed44d248e8399dfbad47e13c - md5: 18a4ed4be2ae11ebf9cad2d295cbcc39 + size: 807142 + timestamp: 1734713244369 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalinspiral-5.0.2-py312he0011b7_0.conda + sha256: ef22e941b69ce0f79657ad22b7f2a1b46ec0e804fdaf0b283efce38e02eca824 + md5: 5117ae7ef0919138027fca7284eef633 depends: - __osx >=11.0 - - igwn-ligolw - - liblalinspiral 5.0.3 h957e360_3 + - liblalinspiral 5.0.2 h2786bc8_0 - lscsoft-glue - - numpy >=1.23,<3 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - - python-lal >=7.7.0 + - python-lal >=7.6.0 - python-lalburst >=2.0.0 - python-lalframe >=3.0.0 - python-lalmetaio >=4.0.0 - - python-lalsimulation >=6.2.0 + - python-lalsimulation >=6.1.0 + - python-ligo-lw - python_abi 3.12.* *_cp312 - tqdm license: GPL-2.0-or-later license_family: GPL purls: [] - size: 61658305 - timestamp: 1774545308064 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalmetaio-4.0.6-py312hf57c059_2.conda - sha256: ac2d32d8a1333a7d32ef12c3efe4e70cd17b7adb9893f3cf64e05764676b361a - md5: 54953cd279270d32fde352dd0303fd18 + size: 61662448 + timestamp: 1734710223688 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalmetaio-4.0.5-py312he0011b7_2.conda + sha256: 74de958d36c048c1a38f478de9d780a24c5585e8debb42c809db61714eb9267b + md5: 269b7b2c7d77b86d12993631f10096b0 depends: - __osx >=11.0 - - liblalmetaio 4.0.6 h84a0fba_2 - - numpy >=1.23,<3 + - liblalmetaio 4.0.5 h5505292_2 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - - python-lal >=7.7.0 + - python-lal >=7.6.0 - python_abi 3.12.* *_cp312 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 146708 - timestamp: 1774544139673 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalpulsar-7.1.1-py312hf57c059_2.conda - sha256: 9bfcc06d6f39c26be73270ad57bb3ff9eaef3b8931cee83f8f7c1ae968f0cebf - md5: f550f312512805c7f8e49f64263c19bb + size: 144585 + timestamp: 1736417741326 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalpulsar-7.1.0-py312he0011b7_1.conda + sha256: 3891a0ac3b03b4d2447a791e8b5b913b3ed26954c49606cfcb14582eb5ffe4a0 + md5: 6ca4ed5c100a39e45c064b96d00a0929 depends: - __osx >=11.0 - astropy-base - - liblalpulsar 7.1.1 h43f389f_2 - - numpy >=1.23,<3 + - liblalpulsar 7.1.0 h8480f09_1 + - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - python-lal >=7.6.0 @@ -18227,53 +16800,54 @@ packages: license: GPL-2.0-or-later license_family: GPL purls: [] - size: 96710153 - timestamp: 1774626912460 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalpulsar-7.1.1-py312hf57c059_3.conda - sha256: 57cc3343ca724a92022cccd1df7019b3af6a623c15b7d9490f7e8799de3aa1e9 - md5: 6027c14cb75ba034238e1da2474dda33 + size: 96730459 + timestamp: 1744214795094 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalsimulation-6.1.0-py312he758b9a_0.conda + sha256: 91f99a157763eba6bd71ce65aad9e874483ca336cfd3b99387f27479534b0df8 + md5: 03da7e906a89a103ec5c9cd55c4c41bb depends: - __osx >=11.0 - astropy-base - - liblalpulsar 7.1.1 h169444b_3 - - numpy >=1.23,<3 + - gsl >=2.7,<2.8.0a0 + - gwpy + - liblal >=7.6.0 + - liblal >=7.6.0,<8.0a0 + - liblalsimulation 6.1.0 py312h0975e73_0 + - llvm-openmp >=18.1.8 + - llvm-openmp >=19.1.6 + - mpmath >=1.0.0 + - numpy - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - python-lal >=7.6.0 - - python-lalframe >=3.0.0 - - python-lalinference >=4.1.0 - - python-lalsimulation >=6.1.0 - python_abi 3.12.* *_cp312 - - six + - scipy license: GPL-2.0-or-later license_family: GPL purls: [] - size: 96699529 - timestamp: 1777887960340 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-lalsimulation-6.2.0-py312h7cf3665_3.conda - sha256: 6545a7bab2b808bfe09d86fa00921823ff3d060695b54127a901ffe7252bd92b - md5: 4ed5e1415b33c5e553c68964526725e8 + size: 3984127 + timestamp: 1734696469407 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-ligo-lw-1.8.3-py312hea69d52_4.conda + sha256: 89c3fd3461044d9aee2d4dc537dafd8bbbe64fb0d558519c38afb2b7ba1dc5c2 + md5: 65940c93b9e017cc8a135c7fb11357d1 depends: - __osx >=11.0 - - astropy-base - - gsl >=2.7,<2.8.0a0 - - gwpy - - liblal >=7.7.0 - - liblal >=7.7.0,<8.0a0 - - liblalsimulation 6.2.0 py312h593d7fe_3 - - llvm-openmp >=19.1.7 - - llvm-openmp >=22.1.1 - - mpmath >=1.0.0 - - numpy >=1.23,<3 + - ligo-segments + - lscsoft-glue >=2.0.0 + - numpy - python >=3.12,<3.13.0a0 - - python-lal >=7.7.0 + - python >=3.12,<3.13.0a0 *_cpython + - python-dateutil + - python-lal >=6.19.0 - python_abi 3.12.* *_cp312 - - scipy - license: GPL-2.0-or-later + - pyyaml + - six + - tqdm + license: GPL-3.0-or-later license_family: GPL - purls: [] - size: 4008822 - timestamp: 1774542143901 + purls: + - pkg:pypi/python-ligo-lw?source=hash-mapping + size: 191541 + timestamp: 1733996421860 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py312h04c11ed_1.conda sha256: 737959262d03c9c305618f2d48c7f1691fb996f14ae420bfd05932635c99f873 md5: 95a5f0831b5e0b1075bbd80fcffc52ac @@ -19095,6 +17669,21 @@ packages: - tomlkit>=0.13.3,<0.15 - click>=8.0,<9.0 ; extra == 'cli' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/88/f1/2033813456213ecfe8ccab18d78ef7b00af70d049c916cb167d592bdd6da/scri-2022.9.0-py3-none-any.whl + name: scri + version: 2022.9.0 + sha256: 8ce8dfa40cdf20f8b8b009e9cc5ab0da638ccf679dcd9e1d01d17fc374db4588 + requires_dist: + - h5py>=3 + - numba>=0.55 + - numpy-quaternion>=2022.4 + - numpy>=1.20,<2 + - scipy>=1.12 + - spherical-functions>=2022.4 + - spinsfast>=2022.4 + - sxs>=2022.4.0 + - tqdm>=4.63.1 + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl name: plotly version: 6.7.0 @@ -19357,21 +17946,6 @@ packages: - requests ; extra == 'test' - testfixtures ; extra == 'test' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/be/f6/0f98dece8730d459fc01710edb279ed0e642b66dc426ad2ed7a71c4daf9a/scri-2024.0.11-py3-none-any.whl - name: scri - version: 2024.0.11 - sha256: ff640c6dde5a7dd41cc85c24243f3e6c01cbd66b3115ecc0a3c5c09c012a9228 - requires_dist: - - h5py>=3 - - numba>=0.60.0 - - numpy-quaternion>=2024.0.2 - - numpy>=2.0 - - scipy>=1.13 - - spherical-functions>=2022.4 - - spinsfast>=2022.4 - - sxs>=2022.4.0 - - tqdm>=4.63.1 - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl name: smmap version: 5.0.3 diff --git a/pixi.toml b/pixi.toml index 02eb796c4..ed59bdf85 100644 --- a/pixi.toml +++ b/pixi.toml @@ -37,7 +37,8 @@ pandas = "*" corner = "*" scikit-learn = "*" matplotlib = "*" -lalsuite = ">=7.26" +lalsuite = "==7.25" +lalmetaio = "<=4.0.5" gwdatafind = ">=1.2" igwn-segments = "*" igwn-ligolw = "*" From 83467c60e99ded4ea003ab63e3ee523d14c3f6c9 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Thu, 28 May 2026 17:23:28 -0400 Subject: [PATCH 14/32] distance-slice (Plan B): per-intrinsic K-fixed-d marginal exports ILE batchmode now optionally emits a .dslice file per intrinsic point containing K independent extrinsic-marginalized likelihoods at K distance slice centers (quantile centers of the posterior in d). The estimator is importance-reweighting of the main run's Omega samples at each slice distance, re-using the cached likelihood machinery -- no waveform or PSD regeneration, no extra worker spin-up. With K~=10 the artifact stays within the user's <~10x .composite size budget. * RIFT/misc/distance_slices.py: importance_reweight_slices, quantile_slice_centers, table builder/loader, and reconstruct_marginal_lnL that takes an optional custom distance prior. Schema (DISTANCE_SLICE_FIELDS) deliberately mirrors .composite for downstream CIP integration. * integrate_likelihood_extrinsic_batchmode: new --export-distance-slices K and --distance-slice-method flags; threaded into analyze_event after the main integration. Reuses sampler._rvs and like_to_integrate. Emits a runtime warning when GMM + low main n_eff, since B2-reweight silently biases in that regime. * demo/rift/add_distance_grids/validate_distance_slices.py: synthetic stress harness with a known closed-form marginal and an adjustable d-Omega coupling. Confirms B2-reweight matches truth to <0.1 nat over a wide coupling range when main n_eff is healthy. * demo/rift/add_distance_grids/PLAN_B_DESIGN.md: design notes covering the math, the GMM-vs-AV finding, the (recommended) non-destructive workflow integration plan, and the deferred B2-fresh cross-check path. End-to-end check on the fake-data demo (AV sampler, main n_eff ~6): B2 marginal reconstructs the main log_res within sigmaL; per-slice n_eff 7-28; .dslice 10 rows x 19 columns per event. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../Code/RIFT/misc/distance_slices.py | 264 ++++++++++++++++++ .../integrate_likelihood_extrinsic_batchmode | 94 ++++++- .../rift/add_distance_grids/PLAN_B_DESIGN.md | 227 +++++++++++++++ .../validate_distance_slices.py | 117 ++++++++ 4 files changed, 701 insertions(+), 1 deletion(-) create mode 100644 MonteCarloMarginalizeCode/Code/RIFT/misc/distance_slices.py create mode 100644 MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md create mode 100644 MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/validate_distance_slices.py diff --git a/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_slices.py b/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_slices.py new file mode 100644 index 000000000..e5670c267 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_slices.py @@ -0,0 +1,264 @@ +"""Plan-B distance-slice export for ILE. + +After ILE finishes its normal extrinsic integration at one intrinsic point, +this module produces K independent fixed-distance integrals: for each slice +d_k, an estimate of + + L_pure(d_k) = integral L(d_k, Omega) pi_Omega(Omega) dOmega + +i.e. the extrinsic-marginalized likelihood at distance d_k, with the +distance prior divided out. These can be re-marginalized against any prior +downstream and (because they are independent integrals, not bin +re-weightings of one shared sampler state) the *shape* L_pure(d) is honest +at the n_eff RIFT routinely uses. + +Two estimators are provided: + +* ``importance_reweight_slices`` -- reuses the Omega samples from the main + integration and re-evaluates ``like_to_integrate`` at each slice distance. + Cost: K * N likelihood evaluations using the already-precomputed + rholms_intp / cross_terms (cheap). Best when the Omega posterior is + close to d-independent (typical: sky/inclination weakly couple to d + except via the overall amplitude). + +* ``fresh_sample_slices`` -- builds a fresh, low-dim sampler over Omega + only at fixed d_k. More expensive but doesn't assume the main run's + Omega proposal is good for d_k. Intended primarily as a cross-check. + +The output schema is one row per (intrinsic, d_slice) pair so the file is +the natural Plan-B analogue of ``.composite``. Target size: <~ 10x the +original ``.composite`` (K=10 by default). +""" +import numpy as np + + +DISTANCE_SLICE_FIELDS = ( + "lnL", # extrinsic-marginalized lnL at d=dist (pure likelihood, + # i.e. distance sampling prior divided out) + "sigmaL", # log-space uncertainty on the slice integral + "neff", # effective sample count contributing to the slice + "ntotal", # total samples consumed by the slice estimator + "method", # 0 = importance_reweight, 1 = fresh_sample + "m1", + "m2", + "s1x", + "s1y", + "s1z", + "s2x", + "s2y", + "s2z", + "lambda1", + "lambda2", + "eccentricity", + "meanPerAno", + "eos_index", + "dist", + "ln_prior_d_sampling", # log pi_d(d_k) under the ILE sampling prior, + # so default reconstruction reproduces log_res +) + + +METHOD_REWEIGHT = 0 +METHOD_FRESH = 1 + + +def _logsumexp(x): + x = np.asarray(x, dtype=float) + m = np.max(x) + if not np.isfinite(m): + return m + return m + np.log(np.sum(np.exp(x - m))) + + +def quantile_slice_centers(distance_samples, ln_weights, n_slices): + """Choose K slice centers as equi-probable quantiles of the posterior in d. + + Falls back to uniform-in-log-d if the posterior is degenerate (n_eff < 2). + """ + distance_samples = np.asarray(distance_samples, float) + ln_weights = np.asarray(ln_weights, float) + finite = np.isfinite(ln_weights) & np.isfinite(distance_samples) + d = distance_samples[finite] + lw = ln_weights[finite] + if len(d) == 0: + raise ValueError("no finite samples to choose slice centers from") + p = np.exp(lw - _logsumexp(lw)) + n_eff = 1.0 / np.sum(p**2) + if n_eff < 2.0: + # degenerate posterior; cover the sample range uniformly in log d + d_lo, d_hi = float(d.min()), float(d.max()) + d_lo = max(d_lo, 1e-3) + return np.exp(np.linspace(np.log(d_lo), np.log(d_hi), n_slices)) + order = np.argsort(d) + d_sorted = d[order] + cdf = np.cumsum(p[order]) + cdf /= cdf[-1] + quant = (np.arange(n_slices) + 0.5) / n_slices + return np.interp(quant, cdf, d_sorted) + + +def _ln_omega_iw_factor(rvs, ln_prior_d_at_samples, ln_proposal_d_at_samples): + """log( pi_Omega(Omega_i) / q_Omega(Omega_i) ) per sample. + + Decomposes the stored joint weight ln(pi_joint/q_joint) into a distance + piece and an Omega piece, returning the Omega piece. + """ + # Pull joint prior / proposal ratio + if "joint_prior" in rvs and "joint_s_prior" in rvs: + jp = np.asarray(rvs["joint_prior"], float) + jsp = np.asarray(rvs["joint_s_prior"], float) + with np.errstate(divide="ignore"): + ln_pi_over_q_joint = np.log(np.maximum(jp, np.finfo(float).tiny)) \ + - np.log(np.maximum(jsp, np.finfo(float).tiny)) + elif "log_joint_prior" in rvs and "log_joint_s_prior" in rvs: + ln_pi_over_q_joint = np.asarray(rvs["log_joint_prior"], float) \ + - np.asarray(rvs["log_joint_s_prior"], float) + else: + raise KeyError("sampler._rvs missing joint prior/proposal columns") + return ln_pi_over_q_joint - (np.asarray(ln_prior_d_at_samples, float) + - np.asarray(ln_proposal_d_at_samples, float)) + + +def importance_reweight_slices( + sampler, like_to_integrate, d_slices, + ln_prior_d_at_samples, ln_proposal_d_at_samples, + manual_overflow=0.0, return_lnL=True, +): + """Importance-reweight existing Omega samples at K slice distances. + + Returns + ------- + lnL_slices : (K,) array + Extrinsic-marginalized lnL at each d_k (pure likelihood, with + ``manual_overflow`` restored so the value is directly comparable + to ILE's reported ``log_res``). + sigmaL_slices : (K,) array + Per-slice 1-sigma uncertainty in lnL (Monte Carlo standard error). + neff_slices : (K,) array + Effective sample count at each slice. + ntotal : int + Total samples consumed (same for all slices: it is N). + """ + rvs = sampler._rvs + if "distance" not in rvs: + raise KeyError("sampler._rvs has no 'distance' samples") + N = len(rvs["distance"]) + ln_omega_iw = _ln_omega_iw_factor(rvs, ln_prior_d_at_samples, + ln_proposal_d_at_samples) + + # Identify the param signature of like_to_integrate + arg_names = like_to_integrate.__code__.co_varnames[ + :like_to_integrate.__code__.co_argcount] + + # Build per-arg arrays from the sampler's stored samples; distance gets + # broadcast per slice below. + fixed_inputs = {} + for a in arg_names: + if a == "distance": + continue + if a not in rvs: + raise KeyError("sampler._rvs missing required column {!r} for " + "slice reweighting".format(a)) + fixed_inputs[a] = np.asarray(rvs[a]) + + K = len(d_slices) + lnL_out = np.empty(K) + sigmaL_out = np.empty(K) + neff_out = np.empty(K) + for k, d_k in enumerate(d_slices): + like_inputs = [] + for a in arg_names: + if a == "distance": + like_inputs.append(np.full(N, float(d_k))) + else: + like_inputs.append(fixed_inputs[a]) + lnL_at = like_to_integrate(*like_inputs) + lnL_at = np.asarray(lnL_at, dtype=np.float64) + if not return_lnL: + # function returned exp(lnL - overflow); take log + with np.errstate(divide="ignore"): + lnL_at = np.log(np.maximum(lnL_at, np.finfo(float).tiny)) + # ln L_k(Omega_i) was returned with manual_overflow subtracted; add + # it back so the slice marginal matches log_res's overflow scaling. + ln_terms = lnL_at + manual_overflow + ln_omega_iw + lnL_marg = _logsumexp(ln_terms) - np.log(N) + # Slice n_eff in the importance sample + m = np.max(ln_terms) + if not np.isfinite(m): + neff_out[k] = 0.0 + else: + w = np.exp(ln_terms - m) + neff_out[k] = (w.sum())**2 / np.sum(w**2) + # MC std error of the log of the mean: approx by w-std / w-mean + # std(lnI) ~ sqrt(var(w)/mean(w)^2 / N) + if np.isfinite(m) and neff_out[k] > 1: + mean_w = np.mean(np.exp(ln_terms - m)) + var_w = np.var(np.exp(ln_terms - m)) + with np.errstate(invalid="ignore"): + sigmaL_out[k] = np.sqrt(var_w / (N * max(mean_w, np.finfo(float).tiny)**2)) + else: + sigmaL_out[k] = np.inf + lnL_out[k] = lnL_marg + + return lnL_out, sigmaL_out, neff_out, N + + +def build_distance_slice_table(d_slices, lnL_slices, sigmaL_slices, + neff_slices, ntotal, method_code, + params, ln_prior_d_at_slices): + """Assemble the K-row slice table for one intrinsic point.""" + d_slices = np.asarray(d_slices, float) + K = len(d_slices) + dtype = [(name, float) for name in DISTANCE_SLICE_FIELDS] + table = np.zeros(K, dtype=dtype) + table["lnL"] = lnL_slices + table["sigmaL"] = sigmaL_slices + table["neff"] = neff_slices + table["ntotal"] = float(ntotal) + table["method"] = float(method_code) + table["dist"] = d_slices + table["ln_prior_d_sampling"] = ln_prior_d_at_slices + for name in DISTANCE_SLICE_FIELDS: + if name in {"lnL", "sigmaL", "neff", "ntotal", "method", "dist", + "ln_prior_d_sampling"}: + continue + table[name] = float(params.get(name, 0.0)) + return table + + +def save_distance_slice_table(fname, table): + header = " ".join(table.dtype.names) + np.savetxt(fname, np.column_stack([table[n] for n in table.dtype.names]), + header=header) + + +def load_distance_slice_table(fname): + return np.genfromtxt(fname, names=True) + + +def reconstruct_marginal_lnL(table, ln_prior_d=None): + """Re-marginalize the slice table over distance with the given prior. + + Default (``ln_prior_d=None``): use ``ln_prior_d_sampling`` stored in the + table -- reproduces ILE's reported ``log_res`` up to MC noise. + + Pass a callable ``ln_prior_d(d)`` to integrate against a custom prior. + + Uses the trapezoid rule on the K slice points -- the slices were placed + at equi-probable quantiles, so this gives a moderate-K decent integral. + """ + order = np.argsort(table["dist"]) + d = table["dist"][order] + lnL = table["lnL"][order] + if ln_prior_d is None: + ln_pi = table["ln_prior_d_sampling"][order] + else: + ln_pi = np.asarray(ln_prior_d(d), float) + log_integrand = lnL + ln_pi + # logsumexp trapezoid + m = np.max(log_integrand) + if not np.isfinite(m): + return m + integrand = np.exp(log_integrand - m) + trap = np.trapezoid if hasattr(np, "trapezoid") else np.trapz + return m + np.log(trap(integrand, d)) diff --git a/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode b/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode index 15fc14a35..30fe86935 100755 --- a/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode +++ b/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode @@ -315,6 +315,8 @@ intrinsic_params.add_option("--eff-lambda", type=float, help="Value of effective intrinsic_params.add_option("--deff-lambda", type=float, help="Value of second effective tidal parameter. Optional, ignored if not given") intrinsic_params.add_option("--export-eos-index",action='store_true') intrinsic_params.add_option("--export-marginal-distance-grid",action='store_true') +intrinsic_params.add_option("--export-distance-slices",type=int,default=0,help="If >0, run K independent fixed-distance integrals after the main extrinsic integration and write a per-event .dslice file with one row per slice (K rows total). Requires --internal-use-lnL and no --distance-marginalization. Pure-likelihood schema; see RIFT.misc.distance_slices.") +intrinsic_params.add_option("--distance-slice-method",default="reweight",help="How to estimate L(d_k) at each slice. 'reweight' (default) importance-reweights Omega samples from the main run; 'fresh' would build an independent Omega sampler per slice (not yet implemented).") optp.add_option_group(intrinsic_params) @@ -2070,7 +2072,97 @@ def analyze_event(P_list, indx_event, data_dict, psd_dict, fmax, opts,inv_spec_t n_grid=opts.n_eff, ) save_distance_grid(fname_output_dgrid, dgrid) - + + # Plan-B distance slices: K independent fixed-d extrinsic integrals. + # Produces a (K rows x intrinsic cols) table per ILE job; target size + # ~10x .composite when K~=10. See RIFT/misc/distance_slices.py. + if (opts.output_file and opts.export_distance_slices and opts.export_distance_slices > 0 + and not(opts.distance_marginalization) and opts.internal_use_lnL): + from RIFT.misc import distance_slices + fname_output_dslice = opts.output_file + "_" + str(indx_event) + "_" + ".dslice" + K = int(opts.export_distance_slices) + # B2-reweight relies on a healthy main n_eff so that Omega samples + # are a good importance sample at every slice distance. GMM at low + # n_eff biases the reweighting silently; flag it so the user knows + # to switch sampler or raise n-max. + if opts.sampler_method == "GMM" and neff < 50: + print(" WARNING: --export-distance-slices with --sampler-method GMM at main n_eff={:.1f} (<50). ".format(neff) + + "B2-reweight may be biased; prefer --sampler-method AV or raise --n-max.") + dL_samp = np.array(sampler._rvs["distance"]) + # ln(pi_d) at samples uses the actual sampler prior (volumetric or + # pseudo-cosmo, whichever was registered). + prior_pdf_d = sampler.prior_pdf["distance"] + pi_d_samp = np.asarray(prior_pdf_d(dL_samp), float) + pi_d_samp = np.where(pi_d_samp > 0, pi_d_samp, np.finfo(float).tiny) + ln_pi_d_samp = np.log(pi_d_samp) + # ln(q_d) at samples; for the standard ILE path the proposal is the + # normalized sampler.pdf['distance'] divided by sampler._pdf_norm + # (for the basic mcsampler) or applied directly (Ensemble normalizes + # internally). For our purposes the joint_prior/joint_s_prior column + # already encodes the ratio across all dims, so we only need pi_d + # and q_d at the SAMPLES to isolate the Omega-only factor. Compute + # q_d as a normalized 1-D density on the supported range. + try: + q_d_raw = np.asarray(sampler.pdf["distance"](dL_samp), float) + except Exception: + q_d_raw = np.ones_like(dL_samp) + q_d_norm = float(getattr(sampler, "_pdf_norm", {}).get("distance", 1.0)) or 1.0 + q_d_samp = q_d_raw / q_d_norm + q_d_samp = np.where(q_d_samp > 0, q_d_samp, np.finfo(float).tiny) + ln_q_d_samp = np.log(q_d_samp) + # Pick slice centers from the full posterior on d. Recover the + # log-importance weights with the same fallback chain we use for + # .dgrid. + rvs = sampler._rvs + if 'log_weights' in rvs: + ln_w_full = np.array(rvs['log_weights']) + elif 'log_integrand' in rvs: + ln_w_full = np.array(rvs['log_integrand'] + rvs['log_joint_prior'] - rvs['log_joint_s_prior']) + else: + integrand = np.asarray(rvs['integrand']) + jp = np.asarray(rvs['joint_prior']); jsp = np.asarray(rvs['joint_s_prior']) + keep = (integrand > 0) & (jp > 0) & (jsp > 0) + ln_w_full = np.full(len(integrand), -np.inf) + ln_w_full[keep] = np.log(integrand[keep]) + np.log(jp[keep]) - np.log(jsp[keep]) + d_slices = distance_slices.quantile_slice_centers(dL_samp, ln_w_full, K) + + method_arg = (opts.distance_slice_method or "reweight").lower() + if method_arg != "reweight": + print(" warning: distance-slice-method={} not yet implemented; falling back to reweight".format(method_arg)) + method_arg = "reweight" + lnL_k_pure, sigmaL_k, neff_k, ntotal = distance_slices.importance_reweight_slices( + sampler, like_to_integrate, d_slices, + ln_prior_d_at_samples=ln_pi_d_samp, + ln_proposal_d_at_samples=ln_q_d_samp, + manual_overflow=manual_avoid_overflow_logarithm, + return_lnL=return_lnL, + ) + # importance_reweight_slices already returns the pure extrinsic- + # marginalized lnL (no distance prior baked in). Save the sampling + # prior at slice centers in a separate column so the default + # reconstruction can reproduce log_res. + ln_pi_d_slices = np.log(np.maximum(prior_pdf_d(d_slices), np.finfo(float).tiny)) + method_code = distance_slices.METHOD_REWEIGHT + # Re-use the same intrinsic params dict we built for .dgrid; if .dgrid + # was disabled, build it now. + try: + params_out # noqa: F823 + except NameError: + params_out = { + "m1": P.m1/lal.MSUN_SI, "m2": P.m2/lal.MSUN_SI, + "s1x": P.s1x, "s1y": P.s1y, "s1z": P.s1z, + "s2x": P.s2x, "s2y": P.s2y, "s2z": P.s2z, + "lambda1": P.lambda1, "lambda2": P.lambda2, + "eccentricity": P.eccentricity, "meanPerAno": P.meanPerAno, + "eos_index": getattr(P, "eos_table_index", 0), + } + slice_table = distance_slices.build_distance_slice_table( + d_slices, lnL_k_pure, sigmaL_k, neff_k, ntotal, method_code, + params_out, ln_prior_d_at_slices=ln_pi_d_slices, + ) + distance_slices.save_distance_slice_table(fname_output_dslice, slice_table) + print(" : wrote distance slices to {}".format(fname_output_dslice)) + # Comprehensive output (not yet provided) # Convert declination, inclination parameters in sampler if needed if opts.save_samples and opts.output_file: diff --git a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md new file mode 100644 index 000000000..8611e3b84 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md @@ -0,0 +1,227 @@ +# Plan B: distance-as-parameter ILE export + +## Goal + +After a normal RIFT extrinsic run, for each intrinsic point produce a usable +estimate of + + L_pure(d) = integral L(d, Omega) pi_Omega(Omega) dOmega + +as a function of luminosity distance, populated densely enough that downstream +CIP can fit (intrinsic, d) jointly. Plan A (density-histogram export, the +existing `.dgrid` pathway) reconstructs the marginal but not the curve at +the n_eff RIFT typically runs at; Plan B instead does K independent +fixed-distance integrals per intrinsic point so each slice is its own +honest extrinsic-marginalized lnL. + +Deliverable target: <~10x the size of `.composite` files. K = 10 slices +per intrinsic point and ~20 columns per row hits that budget. + +## Two estimators (cross-check) + +### B2-reweight (implemented) + +After the main `sampler.integrate(...)` call in `analyze_event`: + +1. Choose K slice centers `d_1, ..., d_K` from the posterior in d + (equi-probable quantiles; uniform-in-log-d fallback for degenerate + posteriors). +2. For each `d_k`, *re-evaluate* the existing `like_to_integrate` at + `(Omega_i, d_k)` for every sample i, using the already-precomputed + `rholms_intp` / `cross_terms`. Cost: K * N likelihood evaluations of + the cheap cached function; no waveform regeneration, no PSD reload. +3. Importance reweight to estimate the slice marginal: + + L(d_k) ~= (1/N) sum_i L(d_k, Omega_i) * pi_Omega(Omega_i) / q_Omega(Omega_i) + + The Omega-only IW factor `pi_Omega/q_Omega` is extracted from the + stored joint prior/proposal ratio with the distance piece divided out. + +Why this works well: for typical CBC events the Omega posterior is nearly +d-independent (d enters mostly through amplitude), so the Omega samples +drawn during the main run are good importance samples at every slice +distance. When that assumption breaks (e.g. precessing systems where +sky/inclination couples strongly to d), `neff` at the slice drops and the +slice's `sigmaL` blows up -- that's the signal to fall back to B2-fresh. + +Code: +- `MonteCarloMarginalizeCode/Code/RIFT/misc/distance_slices.py` -- + estimators and file I/O. +- `bin/integrate_likelihood_extrinsic_batchmode` -- + `--export-distance-slices K` flag; emits one `.dslice` per ILE job. + +### B2-fresh (designed, not yet implemented) + +For each `d_k`, build a fresh basic mcsampler over Omega only with +distance pinned to `d_k`, then call `sampler.integrate(like_to_integrate, +*omega_args, distance=d_k, ...)`. More expensive (K independent +adaptive integrations) but doesn't rely on the Omega-quasi-independence +assumption. + +Why deferred: the existing sampler-construction code in batchmode (lines +~945-1199) is straight-line, not factored. Cleanly implementing B2-fresh +needs that block extracted into a helper, which is a larger refactor than +the user asked for in the prototype scope. Skeleton in the same module. + +When to implement B2-fresh: +- B2-reweight's per-slice `neff` drops below O(10) on real events. +- Cross-check disagreement between B2-reweight and B2-fresh exceeds the + reported `sigmaL`. + +## Output format: `.dslice` + +One file per ILE job, K rows per intrinsic point. See +`DISTANCE_SLICE_FIELDS` in `distance_slices.py`. Key columns: + +| column | meaning | +| --- | --- | +| `lnL` | extrinsic-marginalized lnL at this `dist`, pure (no distance prior baked in) | +| `sigmaL` | per-slice MC standard error of lnL | +| `neff` | effective sample count contributing to this slice | +| `ntotal` | total samples consumed by the slice estimator | +| `method` | 0 = reweight, 1 = fresh | +| `dist` | slice center (Mpc) | +| `ln_prior_d_sampling` | log of the distance prior at `dist` under the ILE sampling prior | +| intrinsic columns | m1, m2, s1x..s2z, lambda1, lambda2, eccentricity, meanPerAno, eos_index | + +Re-marginalization: +```python +from RIFT.misc.distance_slices import load_distance_slice_table, reconstruct_marginal_lnL +table = load_distance_slice_table("CME_0_.dslice") +# Reproduce ILE's reported log_res (using stored sampling prior): +reconstruct_marginal_lnL(table) +# Or re-marginalize against any other prior: +reconstruct_marginal_lnL(table, ln_prior_d=lambda d: 2*np.log(d) - C) +``` + +## Workflow integration (non-destructive) + +The user's preferred path is to add a follow-on stage after a normal RIFT +run, **without** making `create_event_parameter_pipeline_BasicIteration` +("CEPP_basic") more baroque. Recommendation: + +### Recommended (no DAG changes) + +1. Enable `--export-distance-slices K` on the **last iteration only** of an + otherwise-normal RIFT run. `util_RIFT_pseudo_pipe.py` already threads + `--last-iteration-export-marginal-distance-grid` for the Plan-A flag; + add a sibling `--last-iteration-export-distance-slices K` that follows + the same path. This is the cheapest change to `util_RIFT_pseudo_pipe` + (one extra option) and zero change to CEPP_basic. + +2. Add a consolidation step that concatenates `.dslice` files into a + single table per iteration -- mirror what `util_CleanILE.py` does for + `.composite`. The natural drop-in is a tiny wrapper script + `util_CleanILE_dslice.py` that just concatenates with header dedup. + Add one extra `unify_dslice.sub`/`unify_dslice.sh` pair to the existing + subdag emitted by CEPP_basic; it depends on the same `ile` job set + that produced the `.dslice` files. + +3. (Optional, deferred) Teach CIP to ingest the `.dslice` table jointly: + either fit `lnL(intrinsic, dist)` directly, or marginalize over `dist` + per intrinsic point with a configurable prior and feed the marginal + into the existing intrinsic-only fitter. No change to RIFT structure + needed for the export deliverable -- the `.dslice` file *is* the + deliverable. + +### Why not "another CEPP_basic" call + +A second CEPP_basic invocation with an expanded sim_inspiral table +(K * N_intrinsic events, each pinned via `--pin-distance-to-sim`) was +considered. Costs: +- K x more ILE workers spun up (K x worker startup, PSD load, frame + read, waveform setup). RIFT already pays a fixed worker cost + dominated by setup at low n_eff; a Kx blowup is wasteful. +- Doubles the bookkeeping (two CEPP_basic invocations, two DAG roots, + two output trees to keep aligned with intrinsic ids). +- Requires generating the expanded sim_inspiral, which is itself + brittle (`xml_to_ChooseWaveformParams_array` is the very code path + that issue #136 has been biting). + +The B2-reweight pathway in-process pays only the K extra likelihood +evaluations per existing ILE job -- the expensive setup is reused. +Estimated cost: ~10% on top of a normal ILE job at K=10 (the main +integration uses ~50,000 likelihood evals; K=10 slice integrations on +the same sample set are ~10 * N_samples = ~5000 evaluations of the +*already cached* factored likelihood, dwarfed by the original +integration cost). + +### Lower-level pipeline extension (only if needed) + +If a `.dslice`-only iteration is needed (run the slice pass but skip a +fresh extrinsic integration -- say, because a prior run has good +adapted GMMs that we want to reuse), then we extend the low-level +pipeline with one new job class. The least baroque approach: + +- A new helper `util_RIFT_distance_slice_pass.py` that: + 1. Reads an existing `.composite` (intrinsic + ILE state) + 2. Builds a small sub-DAG of ILE jobs, each re-running on one + intrinsic point with `--export-distance-slices K --n-max `. + (Or, if we keep adapted-state pickles per intrinsic from the + parent run, restore those and skip the main integration.) + 3. Has its own unify step to concatenate the resulting `.dslice` files. +- This is a peer of `util_RIFT_pseudo_pipe.py` and shares its subdag + machinery, not embedded into CEPP_basic. + +Land that only if the recommended path can't carry the workflow. + +## Sampler choice: use AV (or any sampler with high main n_eff) + +B2-reweight relies on the existing Omega samples being a good importance +sample at every slice distance. The synthetic stress-test +(`validate_distance_slices.py`) confirms this works to <0.1 nat even with +strong d-Omega coupling, **provided the main run's n_eff is well above +~50**. + +Empirical findings on the fake-data demo (single ILE call, +`--n-max 50000`, n_eff target 100): + +| sampler | main n_eff | B2 reconstruct vs log_res | per-slice n_eff | +| --- | --- | --- | --- | +| GMM (`--sampler-method GMM`) | 1-2 | +2.7 nat bias | 16-25 (looks fine but isn't) | +| AV (`--sampler-method AV`) | 2.6-6.5 | within `sigmaL` (-0.3 to -1.0 nat) | 7-28 | + +GMM at default settings on this event ran out at n_eff=2 and B2-reweight +returned biased slice integrals without warning -- the per-slice n_eff +looked healthy because the same handful of high-weight samples dominate +every slice. **AV is the recommended default for runs that enable +distance slices.** GMM still works at high main n_eff (the synthetic +test confirms it); the issue is that GMM is unreliable at the n_eff +ranges RIFT routinely terminates at. + +## Validation strategy + +For a single ILE call (already wired into the demo): + +1. Run with `--export-distance-slices K --export-marginal-distance-grid` + so both Plan A and Plan B outputs exist side by side. +2. Check `reconstruct_marginal_lnL(slice_table)` agrees with `log_res` + from the `.dat` row within `sigmaL`. If yes, the slice + re-marginalization is unbiased. +3. Plot `lnL` from `.dslice` (K honest fixed-d integrals) vs + `lnL` reconstructed from `.dgrid` (the density histogram). The + slice version should be smoother and tighter at the same K. +4. If the main run's n_eff is below ~50 with GMM, fall back to AV (or + raise n-max) before trusting B2 output. + +`validate_distance_slices.py` provides a synthetic stress-test with a +known closed-form answer and an adjustable d-Omega coupling, so we can +keep the math honest as the prototype evolves. + +## Known limitations / follow-ups + +* **Slice center placement**: quantile centers of the posterior cluster + where the likelihood already lives. For re-marginalization against a + prior with significant weight *outside* the posterior support (e.g. + cosmologically-motivated priors that look very different from the + volumetric default), additional slices in the prior's mass region may + be needed. Configurable via a future `--distance-slice-centers + {quantile,log-uniform,custom}` flag. +* **B2-fresh** (independent integrations per slice) remains a useful + cross-check, especially for events with extreme d-Omega coupling that + the synthetic harness might miss. The cleanest implementation needs + the per-event sampler setup factored out of batchmode into a helper, + which is the right next refactor when B2-fresh becomes a priority. +* **GMM warning**: consider emitting a runtime warning if + `--export-distance-slices` is set together with `--sampler-method GMM` + and the main n_eff falls below a threshold, pointing the user at AV. diff --git a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/validate_distance_slices.py b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/validate_distance_slices.py new file mode 100644 index 000000000..c7bb16367 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/validate_distance_slices.py @@ -0,0 +1,117 @@ +"""Synthetic stress-test for the B2 distance-slice estimator. + +We synthesize an ILE-like Monte Carlo with two parameters: distance d and a +single Omega-proxy x. Sample (d, x) from a known proposal q_joint(d, x) = +q_d(d) q_x(x); evaluate the joint likelihood L(d, x) = exp(-0.5*((d - d0(x))/ +sigma_d)^2 + lnL_peak); record per-sample integrand and the joint prior / +proposal arrays exactly as ILE's mcsamplerEnsemble does. Then run the +importance-reweight slice estimator and compare to the closed-form + + L_pure(d_target) = integral L(d_target, x) pi_x(x) dx + +For a Gaussian in d with mean d0(x) = d0_const + alpha * x and sigma_d +small, increasing alpha makes Omega couple more strongly to d -- that's the +regime where reweighting is expected to break, and where the bias should +appear. +""" +import numpy as np + +# Stand-in for sampler._rvs we'll mock up +class MockSampler: + pass + + +def _logsumexp(x): + m = np.max(x) + return m + np.log(np.sum(np.exp(x - m))) if np.isfinite(m) else m + + +def synth_run(N, alpha, sigma_d=80.0, d0_const=400.0, lnL_peak=30.0, + d_min=1.0, d_max=4000.0, x_min=-2.0, x_max=2.0, rng=None): + rng = rng or np.random.default_rng() + # Proposals: q_d uniform on [d_min,d_max], q_x uniform on [x_min,x_max] + d = rng.uniform(d_min, d_max, size=N) + x = rng.uniform(x_min, x_max, size=N) + q_d = 1.0/(d_max - d_min) * np.ones(N) + q_x = 1.0/(x_max - x_min) * np.ones(N) + # Priors: pi_d volumetric (d^2/(d_max^3/3)), pi_x uniform on [-2,2] + norm_d = (d_max**3 - d_min**3)/3.0 + pi_d = d**2 / norm_d + pi_x = 1.0/(x_max - x_min) * np.ones(N) + # Likelihood (no prior): peaks at d=d0(x) for each x + d0 = d0_const + alpha*x + lnL_at_sample = lnL_peak - 0.5 * ((d - d0)/sigma_d)**2 + integrand = np.exp(lnL_at_sample) + joint_prior = pi_d * pi_x + joint_s_prior = q_d * q_x + # Standard MC estimator of marg likelihood: + w_full = integrand * joint_prior / joint_s_prior + lnL_marg_mc = np.log(np.mean(w_full)) + # Closed-form marg (over both d and x): + # integral L(d,x) pi_d pi_x dd dx = (1/norm_d)(1/range_x) integral d^2 exp(-0.5((d-d0(x))/sigma_d)^2) dx dd + # for sigma_d much less than range, gaussian in d concentrates near d0(x); + # integrate d^2 against gaussian at d0(x) ~ (d0(x)^2 + sigma_d^2)*sqrt(2pi)*sigma_d. + # Then average over x uniform on [-2,2]: E[(d0_const + alpha*x)^2 + sigma_d^2] = d0_const^2 + alpha^2*var_x + sigma_d^2 + var_x_uniform = (x_max-x_min)**2 / 12.0 + E_d2 = d0_const**2 + alpha**2 * var_x_uniform + sigma_d**2 + marg_truth = np.exp(lnL_peak) * np.sqrt(2*np.pi) * sigma_d * E_d2 / norm_d + lnL_marg_truth = np.log(marg_truth) + + # For B2-slice we need a "like_to_integrate"-compatible function that + # takes (x, distance) arrays and returns lnL (mocking return_lnL=True) + def like_to_integrate(x, distance): + d0_arr = d0_const + alpha * np.asarray(x) + return lnL_peak - 0.5*((np.asarray(distance) - d0_arr)/sigma_d)**2 + + rvs = dict(distance=d, x=x, integrand=integrand, + joint_prior=joint_prior, joint_s_prior=joint_s_prior) + sampler = MockSampler() + sampler._rvs = rvs + sampler.prior_pdf = {"distance": lambda dd: dd**2 / norm_d} + sampler.pdf = {"distance": lambda dd: np.ones_like(dd) / (d_max - d_min)} + sampler._pdf_norm = {"distance": 1.0} + return sampler, like_to_integrate, lnL_marg_mc, lnL_marg_truth, dict( + d_min=d_min, d_max=d_max, sigma_d=sigma_d, d0_const=d0_const, + alpha=alpha, lnL_peak=lnL_peak, + ) + + +def main(): + from RIFT.misc import distance_slices + rng = np.random.default_rng(20260528) + print("Mock 1-Omega problem: L(d, x) = peak exp(-0.5*((d - d0(x))/sigma)^2)") + print("'alpha' is the d-Omega coupling. alpha=0: separable. alpha=80: peak shifts ~1 sigma per unit x.") + print(f"\n{'alpha':>7} {'N':>6} {'lnL_truth':>10} {'lnL_mc':>10} " + f"{'B2_marg':>10} {'diff':>8} {'med slice n_eff':>16}") + for alpha in (0.0, 10.0, 40.0, 80.0, 160.0): + for N in (2000, 20000): + sampler, like, lnL_mc, lnL_truth, meta = synth_run(N, alpha, rng=rng) + # Run B2 slice + dL_samp = sampler._rvs["distance"] + # ln_w_full + rvs = sampler._rvs + keep = (rvs['integrand'] > 0) + ln_w_full = np.full(N, -np.inf) + ln_w_full[keep] = np.log(rvs['integrand'][keep]) + np.log(rvs['joint_prior'][keep]) - np.log(rvs['joint_s_prior'][keep]) + d_slices = distance_slices.quantile_slice_centers(dL_samp, ln_w_full, 20) + ln_pi_d_samp = np.log(sampler.prior_pdf['distance'](dL_samp)) + ln_q_d_samp = np.log(sampler.pdf['distance'](dL_samp)) + lnL_k, sigmaL_k, neff_k, _ = distance_slices.importance_reweight_slices( + sampler, like, d_slices, ln_pi_d_samp, ln_q_d_samp, + manual_overflow=0.0, return_lnL=True, + ) + # Build slice table to reconstruct marginal + ln_pi_d_slices = np.log(sampler.prior_pdf['distance'](d_slices)) + t = distance_slices.build_distance_slice_table( + d_slices, lnL_k, sigmaL_k, neff_k, N, + distance_slices.METHOD_REWEIGHT, {}, ln_pi_d_slices, + ) + lnL_marg_b2 = distance_slices.reconstruct_marginal_lnL(t) + med_neff = np.median(neff_k) + diff = lnL_marg_b2 - lnL_truth + print(f"{alpha:7.1f} {N:6d} {lnL_truth:10.4f} {lnL_mc:10.4f} " + f"{lnL_marg_b2:10.4f} {diff:+8.3f} {med_neff:16.1f}") + + +if __name__ == "__main__": + main() From 224b54313154abeeb0aed4ae25c1e83447c051fb Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Thu, 28 May 2026 20:26:49 -0400 Subject: [PATCH 15/32] distance-slice: hybrid core (reweight) + wings (fresh) per intrinsic Reweight alone breaks in the tails: Omega samples drawn during the main run have no support at distances far from the posterior peak, so the slice estimator silently biases or returns garbage there. Switch to a hybrid scheme where core slices stay reweight (cheap, accurate inside the posterior) and wing slices are fresh Omega-only AdaptiveVolume integrations at the pinned distance (correct, expensive only on the few points we need them). * RIFT/misc/distance_slices.py: - fresh_sample_slices builds a fresh AV sampler over Omega only, clones the main sampler's per-param (pdf, prior, llim, rlim) config, wraps like_to_integrate to pin distance and defensively clip Omega values inside [llim, rlim] (avoids arccos NaN at boundary). - pick_wing_centers places K_wing centers log-uniformly in [d_min, d_core_lo] union [d_core_hi, d_max], evenly split. - is_uninformative detects a flat-in-d core so wings are skipped on events where the distance posterior carries no information. - sigma_lnL conversion for fresh slices: AV returns log(rel_var) + 2*log_int; we report sqrt(rel_var) so the column is on the same scale as the reweight branch and the main run's sigmaL_main. * integrate_likelihood_extrinsic_batchmode: split --export-distance-slices K into --n-distance-slice-core (reweight) + --n-distance-slice-wing (fresh). Default 60/40 split. New flags --distance-slice-wing-nmax, --distance-slice-wing-neff, --distance-slice-skip-threshold. Per-row method column (reweight=0, fresh=1) marks which estimator produced each slice. * PLAN_B_DESIGN.md: documents the architecture and the empirical wing reach on the demo event (~30 nats below peak with sigmaL ~0.1-0.2, well past the ~7-nat-target for 10^{-3} prior weight outside). End-to-end on the fake-data demo (AV, --n-distance-slice-core 6 --n-distance-slice-wing 4): main log_res 59.09 +/- 0.30, n_eff 4.4 core slices: lnL 60.8-62.3 (peak-lnL 0-1.4 nat), sigmaL 0.19-0.55 wing slices at 23/376/613 Mpc: lnL 59/51/34 (peak-lnL 3/11/29 nat), sigmaL 0.10-0.22, neff 9-24 far wing at 5 Mpc: lnL -100 (signal off), correctly flagged low neff Co-Authored-By: Claude Opus 4.7 (1M context) --- .../Code/RIFT/misc/distance_slices.py | 155 ++++++++++++++++++ .../integrate_likelihood_extrinsic_batchmode | 98 ++++++++--- .../rift/add_distance_grids/PLAN_B_DESIGN.md | 100 ++++++----- 3 files changed, 293 insertions(+), 60 deletions(-) diff --git a/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_slices.py b/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_slices.py index e5670c267..b5a05d18a 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_slices.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_slices.py @@ -203,6 +203,161 @@ def importance_reweight_slices( return lnL_out, sigmaL_out, neff_out, N +def is_uninformative(lnL_core, threshold=1.0): + """Detect a flat / non-informative distance profile from the core slices. + + If the spread in core slice lnL is below ``threshold`` nats, the run has + essentially no distance information and there is nothing for wing + integrations to learn -- skip them. + """ + finite = np.isfinite(lnL_core) + if not np.any(finite): + return True + if np.sum(finite) < 2: + return True + return (np.max(lnL_core[finite]) - np.min(lnL_core[finite])) < threshold + + +def pick_wing_centers(d_min, d_max, d_core, n_wing, + min_log_gap=0.05): + """Place K_wing slice centers log-uniformly outside the core span. + + Half go below the core, half above (rounded so the lower half gets the + extra when K_wing is odd). Returns a sorted array of distances. + """ + n_wing = int(n_wing) + if n_wing <= 0: + return np.array([]) + d_core = np.asarray(d_core, float) + finite = np.isfinite(d_core) & (d_core > 0) + d_core_lo = float(np.min(d_core[finite])) if np.any(finite) else d_min + d_core_hi = float(np.max(d_core[finite])) if np.any(finite) else d_max + + n_low = (n_wing + 1) // 2 + n_high = n_wing - n_low + wings = [] + if d_core_lo > d_min * np.exp(min_log_gap) and n_low > 0: + wings.append(np.exp(np.linspace(np.log(d_min), + np.log(d_core_lo), + n_low + 2)[1:-1])) + if d_max > d_core_hi * np.exp(min_log_gap) and n_high > 0: + wings.append(np.exp(np.linspace(np.log(d_core_hi), + np.log(d_max), + n_high + 2)[1:-1])) + if not wings: + return np.array([]) + return np.sort(np.concatenate(wings)) + + +def fresh_sample_slices(reference_sampler, like_to_integrate, d_slices, + n_max=20000, n_eff_target=30, n_chunk=2000, + return_lnL=True, verbose=False): + """Independent Omega-only integration at each pinned distance d_k. + + Build a fresh AdaptiveVolume sampler for the Omega parameters by + cloning the reference sampler's per-parameter (pdf, prior, bounds) + config, then integrate the cached likelihood with distance pinned to + each slice. Cost per slice: up to ``n_max`` cached-likelihood + evaluations (no waveform/PSD regeneration). + + Returns the same (lnL, sigmaL, neff, ntotal_array) tuple shape as + ``importance_reweight_slices``. + """ + from RIFT.integrators import mcsamplerAdaptiveVolume + + arg_names = like_to_integrate.__code__.co_varnames[ + :like_to_integrate.__code__.co_argcount] + if "distance" not in arg_names: + raise ValueError("like_to_integrate has no 'distance' arg; fresh " + "slice integration not applicable") + omega_params = [a for a in arg_names if a != "distance"] + missing = [p for p in omega_params + if p not in reference_sampler.params_ordered] + if missing: + raise KeyError("reference_sampler missing Omega params {!r} needed " + "for fresh slice integration".format(missing)) + + K = len(d_slices) + lnL_out = np.full(K, -np.inf) + sigmaL_out = np.full(K, np.inf) + neff_out = np.zeros(K) + ntotal_out = np.zeros(K, dtype=int) + + for k, d_k in enumerate(d_slices): + sampler = mcsamplerAdaptiveVolume.MCSampler() + for p in omega_params: + sampler.add_parameter( + p, + pdf=reference_sampler.pdf[p], + prior_pdf=reference_sampler.prior_pdf[p], + left_limit=float(reference_sampler.llim[p]), + right_limit=float(reference_sampler.rlim[p]), + adaptive_sampling=True, + ) + + d_fixed = float(d_k) + # Per-Omega-param bounds, used to clip values defensively against + # boundary noise (e.g. np.random.uniform can return rlim - 1ULP which + # makes downstream arccos(...) NaN). + omega_bounds = {p: (float(reference_sampler.llim[p]), + float(reference_sampler.rlim[p])) + for p in omega_params} + + def like_at_pinned_d(**kw): + # AV's integrate_log passes Omega params as kwargs by name. + sample = next(iter(kw.values())) + N_eval = len(sample) + d_arr = np.full(N_eval, d_fixed) + full = {} + for p, arr in kw.items(): + lo, hi = omega_bounds.get(p, (-np.inf, np.inf)) + # nudge inward by a tiny epsilon relative to range, so arccos + # and friends never see the exact boundary + eps = 1e-12 * max(abs(hi - lo), 1.0) + full[p] = np.clip(np.asarray(arr, float), lo + eps, hi - eps) + full["distance"] = d_arr + return like_to_integrate(*(full[a] for a in arg_names)) + + try: + res = sampler.integrate_log( + like_at_pinned_d, + *omega_params, + nmax=int(n_max), neff=int(n_eff_target), n=int(n_chunk), + tempering_exp=0.1, n_adapt=10, + verbose=verbose, + ) + except Exception as e: + print(" fresh slice d={:.2f} failed: {!r}".format(d_k, e)) + continue + # AV's integrate_log returns (log_int, log(rel_var) + 2*log_int, + # eff_samp, dict). Convert to sigma_lnL ~ sqrt(rel_var). + if isinstance(res, tuple): + lnI = float(res[0]) + if len(res) > 1: + log_abs_var = float(res[1]) + ln_rel_var = log_abs_var - 2.0 * lnI + sigma = float(np.exp(0.5 * ln_rel_var)) if np.isfinite(ln_rel_var) else np.inf + else: + sigma = np.nan + neff_val = float(res[2]) if len(res) > 2 else np.nan + else: + lnI = float(res) + sigma = np.nan + neff_val = np.nan + # When return_lnL=True the cached like_to_integrate returned + # lnL - manual_overflow, so integrate_log's lnI is log of the integral + # of exp(lnL - overflow). We restore the overflow OUTSIDE this helper + # (caller knows manual_avoid_overflow_logarithm). + lnL_out[k] = lnI + if not(np.isnan(sigma)): + sigmaL_out[k] = sigma + if not(np.isnan(neff_val)): + neff_out[k] = neff_val + ntotal_out[k] = int(getattr(sampler, "ntotal", 0)) + + return lnL_out, sigmaL_out, neff_out, ntotal_out + + def build_distance_slice_table(d_slices, lnL_slices, sigmaL_slices, neff_slices, ntotal, method_code, params, ln_prior_d_at_slices): diff --git a/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode b/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode index 30fe86935..c00915223 100755 --- a/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode +++ b/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode @@ -315,8 +315,12 @@ intrinsic_params.add_option("--eff-lambda", type=float, help="Value of effective intrinsic_params.add_option("--deff-lambda", type=float, help="Value of second effective tidal parameter. Optional, ignored if not given") intrinsic_params.add_option("--export-eos-index",action='store_true') intrinsic_params.add_option("--export-marginal-distance-grid",action='store_true') -intrinsic_params.add_option("--export-distance-slices",type=int,default=0,help="If >0, run K independent fixed-distance integrals after the main extrinsic integration and write a per-event .dslice file with one row per slice (K rows total). Requires --internal-use-lnL and no --distance-marginalization. Pure-likelihood schema; see RIFT.misc.distance_slices.") -intrinsic_params.add_option("--distance-slice-method",default="reweight",help="How to estimate L(d_k) at each slice. 'reweight' (default) importance-reweights Omega samples from the main run; 'fresh' would build an independent Omega sampler per slice (not yet implemented).") +intrinsic_params.add_option("--export-distance-slices",type=int,default=0,help="If >0, after main extrinsic integration emit a per-event .dslice file with rows of fixed-d extrinsic-marginalized likelihoods. Total rows = --n-distance-slice-core + --n-distance-slice-wing. Requires --internal-use-lnL and no --distance-marginalization.") +intrinsic_params.add_option("--n-distance-slice-core",type=int,default=0,help="Core slices via importance-reweight on existing Omega samples (cheap). If 0 and --export-distance-slices>0, defaults to ceil(K*0.6).") +intrinsic_params.add_option("--n-distance-slice-wing",type=int,default=0,help="Wing slices via fresh Omega-only integrations at pinned distance (covers tails ~7 nats below peak). If 0 and --export-distance-slices>0, defaults to K - core.") +intrinsic_params.add_option("--distance-slice-wing-nmax",type=int,default=20000,help="Max samples per wing fresh integration.") +intrinsic_params.add_option("--distance-slice-wing-neff",type=int,default=30,help="n_eff target per wing fresh integration.") +intrinsic_params.add_option("--distance-slice-skip-threshold",type=float,default=1.0,help="If the lnL spread across core slices is below this many nats, treat the distance posterior as non-informative and skip wing integrations.") optp.add_option_group(intrinsic_params) @@ -2124,27 +2128,73 @@ def analyze_event(P_list, indx_event, data_dict, psd_dict, fmax, opts,inv_spec_t keep = (integrand > 0) & (jp > 0) & (jsp > 0) ln_w_full = np.full(len(integrand), -np.inf) ln_w_full[keep] = np.log(integrand[keep]) + np.log(jp[keep]) - np.log(jsp[keep]) - d_slices = distance_slices.quantile_slice_centers(dL_samp, ln_w_full, K) - - method_arg = (opts.distance_slice_method or "reweight").lower() - if method_arg != "reweight": - print(" warning: distance-slice-method={} not yet implemented; falling back to reweight".format(method_arg)) - method_arg = "reweight" - lnL_k_pure, sigmaL_k, neff_k, ntotal = distance_slices.importance_reweight_slices( - sampler, like_to_integrate, d_slices, + # Split K into core (reweight) and wing (fresh) slices. + n_core = int(opts.n_distance_slice_core) or int(np.ceil(0.6 * K)) + n_wing = int(opts.n_distance_slice_wing) or (K - n_core) + n_core = max(1, min(n_core, K)) + n_wing = max(0, min(n_wing, K - n_core)) + + # Core: importance-reweight at quantile centers of the posterior. + d_core = distance_slices.quantile_slice_centers(dL_samp, ln_w_full, n_core) + lnL_core, sigmaL_core, neff_core, ntotal_core = distance_slices.importance_reweight_slices( + sampler, like_to_integrate, d_core, ln_prior_d_at_samples=ln_pi_d_samp, ln_proposal_d_at_samples=ln_q_d_samp, manual_overflow=manual_avoid_overflow_logarithm, return_lnL=return_lnL, ) - # importance_reweight_slices already returns the pure extrinsic- - # marginalized lnL (no distance prior baked in). Save the sampling - # prior at slice centers in a separate column so the default - # reconstruction can reproduce log_res. - ln_pi_d_slices = np.log(np.maximum(prior_pdf_d(d_slices), np.finfo(float).tiny)) - method_code = distance_slices.METHOD_REWEIGHT - # Re-use the same intrinsic params dict we built for .dgrid; if .dgrid - # was disabled, build it now. + ln_pi_d_core = np.log(np.maximum(prior_pdf_d(d_core), np.finfo(float).tiny)) + + if opts.sampler_method == "GMM" and neff < 50: + print(" WARNING: --export-distance-slices with --sampler-method GMM at main n_eff={:.1f} (<50). ".format(neff) + + "B2-reweight may be biased; prefer --sampler-method AV or raise --n-max.") + + # Wings: only run if (a) we asked for any, (b) core suggests a + # real distance posterior shape worth probing. Otherwise the + # likelihood is flat in d and fresh wings are wasted compute. + d_wings = np.array([]) + lnL_wings = np.array([]); sigmaL_wings = np.array([]); neff_wings = np.array([]); ntotal_wings = np.array([], dtype=int) + if n_wing > 0: + if distance_slices.is_uninformative(lnL_core, threshold=opts.distance_slice_skip_threshold): + print(" : core lnL spread < {:.2f} nats; skipping {} wing fresh integrations".format( + opts.distance_slice_skip_threshold, n_wing)) + else: + d_wings = distance_slices.pick_wing_centers( + float(sampler.llim["distance"]), + float(sampler.rlim["distance"]), + d_core, n_wing, + ) + if len(d_wings) == 0: + print(" : no room outside core for wing slices; skipping") + else: + print(" : running {} wing fresh integrations".format(len(d_wings))) + lnL_wings_raw, sigmaL_wings, neff_wings, ntotal_wings = distance_slices.fresh_sample_slices( + sampler, like_to_integrate, d_wings, + n_max=int(opts.distance_slice_wing_nmax), + n_eff_target=int(opts.distance_slice_wing_neff), + return_lnL=return_lnL, + ) + # fresh_sample_slices returns ln integral of L_with_overflow; + # restore the overflow scale so wing lnL is on the same axis + # as the core slice (and as log_res). + lnL_wings = lnL_wings_raw + manual_avoid_overflow_logarithm + + # Combine core + wings, sort by distance. + d_all = np.concatenate([np.asarray(d_core, float), np.asarray(d_wings, float)]) + lnL_all = np.concatenate([lnL_core, lnL_wings]) + sigmaL_all = np.concatenate([sigmaL_core, sigmaL_wings]) + neff_all = np.concatenate([neff_core, neff_wings]) + ntotal_all = np.concatenate([ + np.full(len(d_core), ntotal_core, dtype=int), + np.asarray(ntotal_wings, dtype=int), + ]) + method_all = np.concatenate([ + np.full(len(d_core), distance_slices.METHOD_REWEIGHT, dtype=int), + np.full(len(d_wings), distance_slices.METHOD_FRESH, dtype=int), + ]) + ln_pi_d_all = np.log(np.maximum(prior_pdf_d(d_all), np.finfo(float).tiny)) + order = np.argsort(d_all) + try: params_out # noqa: F823 except NameError: @@ -2156,12 +2206,18 @@ def analyze_event(P_list, indx_event, data_dict, psd_dict, fmax, opts,inv_spec_t "eccentricity": P.eccentricity, "meanPerAno": P.meanPerAno, "eos_index": getattr(P, "eos_table_index", 0), } + # Pass per-row method (build_distance_slice_table accepts a scalar + # method; we extend by writing the method field directly after). slice_table = distance_slices.build_distance_slice_table( - d_slices, lnL_k_pure, sigmaL_k, neff_k, ntotal, method_code, - params_out, ln_prior_d_at_slices=ln_pi_d_slices, + d_all[order], lnL_all[order], sigmaL_all[order], neff_all[order], + 0, distance_slices.METHOD_REWEIGHT, params_out, + ln_prior_d_at_slices=ln_pi_d_all[order], ) + slice_table["ntotal"] = ntotal_all[order].astype(float) + slice_table["method"] = method_all[order].astype(float) distance_slices.save_distance_slice_table(fname_output_dslice, slice_table) - print(" : wrote distance slices to {}".format(fname_output_dslice)) + print(" : wrote distance slices to {} ({} core + {} wings)".format( + fname_output_dslice, len(d_core), len(d_wings))) # Comprehensive output (not yet provided) # Convert declination, inclination parameters in sampler if needed diff --git a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md index 8611e3b84..ada8e385d 100644 --- a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md +++ b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md @@ -17,56 +17,78 @@ honest extrinsic-marginalized lnL. Deliverable target: <~10x the size of `.composite` files. K = 10 slices per intrinsic point and ~20 columns per row hits that budget. -## Two estimators (cross-check) +## Hybrid core+wings architecture -### B2-reweight (implemented) +A single ILE job emits two kinds of slice rows in one `.dslice` file, +distinguished by the `method` column: -After the main `sampler.integrate(...)` call in `analyze_event`: +* **Core (method = 0, reweight)** at the heart of the posterior, where + reweighting the main run's Omega samples is cheap and accurate. +* **Wings (method = 1, fresh)** in the low-probability tails, where + reweighting fails because the main Omega samples don't cover the + optimal Omega at far-from-peak distances. Each wing is its own fresh + AdaptiveVolume integration over Omega with distance pinned. -1. Choose K slice centers `d_1, ..., d_K` from the posterior in d - (equi-probable quantiles; uniform-in-log-d fallback for degenerate - posteriors). -2. For each `d_k`, *re-evaluate* the existing `like_to_integrate` at - `(Omega_i, d_k)` for every sample i, using the already-precomputed - `rholms_intp` / `cross_terms`. Cost: K * N likelihood evaluations of - the cheap cached function; no waveform regeneration, no PSD reload. -3. Importance reweight to estimate the slice marginal: +### Core: B2-reweight + +After the main `sampler.integrate(...)` call: + +1. Choose `K_core` slice centers from equi-probable quantiles of the + posterior in d (uniform-in-log-d fallback for degenerate posteriors). +2. For each `d_k`, re-evaluate the existing `like_to_integrate` at + `(Omega_i, d_k)` for every sample i, reusing the already-precomputed + `rholms_intp` / `cross_terms`. Cost: `K_core * N` likelihood + evaluations on cached data; no waveform regeneration, no PSD reload. +3. Importance reweight: L(d_k) ~= (1/N) sum_i L(d_k, Omega_i) * pi_Omega(Omega_i) / q_Omega(Omega_i) The Omega-only IW factor `pi_Omega/q_Omega` is extracted from the stored joint prior/proposal ratio with the distance piece divided out. -Why this works well: for typical CBC events the Omega posterior is nearly -d-independent (d enters mostly through amplitude), so the Omega samples -drawn during the main run are good importance samples at every slice -distance. When that assumption breaks (e.g. precessing systems where -sky/inclination couples strongly to d), `neff` at the slice drops and the -slice's `sigmaL` blows up -- that's the signal to fall back to B2-fresh. +This works well inside the posterior: Omega samples there are good +importance samples at every nearby slice distance. Falls apart in the +tails -- which is exactly where the wings step in. + +### Wings: B2-fresh + +For each wing slice `d_k`: + +1. Construct a fresh `mcsamplerAdaptiveVolume.MCSampler` over only the + Omega parameters by cloning the main sampler's per-parameter + `(pdf, prior, llim, rlim)` config. No distance dimension. +2. Wrap `like_to_integrate` so distance is fixed to `d_k`; Omega values + are clipped inward by ~1e-12 of their range to dodge boundary + `arccos(1+eps) = NaN` failures. +3. Call `sampler.integrate_log(...)` with a modest budget + (`--distance-slice-wing-nmax`, default 20k; `--distance-slice-wing-neff`, + default 30). AV is the canonical choice here -- it gives a real + adapted proposal in the wings without relying on the main run's + Omega samples. + +Wing centers are placed log-uniformly in `[d_min, d_core_lo]` and +`[d_core_hi, d_max]`, half-and-half, so coverage extends from the +sampler's support boundary all the way back to the core. Empirically +this reaches at least ~30 nats below peak on the demo event (vs the +user's ~7 nat target for 10^{-3} prior weight outside). + +### Skip non-informative events + +If the lnL spread across the core slices is below +`--distance-slice-skip-threshold` (default 1.0 nat), the distance +posterior is essentially flat and wing integrations have nothing to +learn -- they are skipped and only the core rows are written. This +guards the user's directive to "not waste time on noninformative +likelihoods". Code: -- `MonteCarloMarginalizeCode/Code/RIFT/misc/distance_slices.py` -- - estimators and file I/O. -- `bin/integrate_likelihood_extrinsic_batchmode` -- - `--export-distance-slices K` flag; emits one `.dslice` per ILE job. - -### B2-fresh (designed, not yet implemented) - -For each `d_k`, build a fresh basic mcsampler over Omega only with -distance pinned to `d_k`, then call `sampler.integrate(like_to_integrate, -*omega_args, distance=d_k, ...)`. More expensive (K independent -adaptive integrations) but doesn't rely on the Omega-quasi-independence -assumption. - -Why deferred: the existing sampler-construction code in batchmode (lines -~945-1199) is straight-line, not factored. Cleanly implementing B2-fresh -needs that block extracted into a helper, which is a larger refactor than -the user asked for in the prototype scope. Skeleton in the same module. - -When to implement B2-fresh: -- B2-reweight's per-slice `neff` drops below O(10) on real events. -- Cross-check disagreement between B2-reweight and B2-fresh exceeds the - reported `sigmaL`. +- `MonteCarloMarginalizeCode/Code/RIFT/misc/distance_slices.py`: + `importance_reweight_slices`, `fresh_sample_slices`, + `quantile_slice_centers`, `pick_wing_centers`, `is_uninformative`. +- `bin/integrate_likelihood_extrinsic_batchmode`: new flags + `--export-distance-slices K`, `--n-distance-slice-core`, + `--n-distance-slice-wing`, `--distance-slice-wing-nmax`, + `--distance-slice-wing-neff`, `--distance-slice-skip-threshold`. ## Output format: `.dslice` From 53bb1a1f43b8724671860e127b78367aac16078b Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Thu, 28 May 2026 20:35:36 -0400 Subject: [PATCH 16/32] distance-slice: breadcrumb next-session work into PLAN_B_DESIGN Two follow-ups left for the next session, called out as breadcrumbs rather than implemented now: 1. Skip threshold should be an absolute lnL scale. lnL is already a likelihood ratio with absolute meaning; the current relative spread test will misfire on high-SNR events whose distance posterior happens to be flat. 2. Wing centers from a parabolic-in-1/dist fit of the core, solved for the 1/dist values where lnL drops by ~7 nats from peak (probability outside ~10^{-3}). Marginalized-lnL caveat (the inclination-distance ridge can extend further toward small d than a simple parabola predicts) documented inline. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../rift/add_distance_grids/PLAN_B_DESIGN.md | 94 +++++++++++++++---- 1 file changed, 77 insertions(+), 17 deletions(-) diff --git a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md index ada8e385d..9f366c25d 100644 --- a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md +++ b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md @@ -230,20 +230,80 @@ For a single ILE call (already wired into the demo): known closed-form answer and an adjustable d-Omega coupling, so we can keep the math honest as the prototype evolves. -## Known limitations / follow-ups - -* **Slice center placement**: quantile centers of the posterior cluster - where the likelihood already lives. For re-marginalization against a - prior with significant weight *outside* the posterior support (e.g. - cosmologically-motivated priors that look very different from the - volumetric default), additional slices in the prior's mass region may - be needed. Configurable via a future `--distance-slice-centers - {quantile,log-uniform,custom}` flag. -* **B2-fresh** (independent integrations per slice) remains a useful - cross-check, especially for events with extreme d-Omega coupling that - the synthetic harness might miss. The cleanest implementation needs - the per-event sampler setup factored out of batchmode into a helper, - which is the right next refactor when B2-fresh becomes a priority. -* **GMM warning**: consider emitting a runtime warning if - `--export-distance-slices` is set together with `--sampler-method GMM` - and the main n_eff falls below a threshold, pointing the user at AV. +## Breadcrumbs for the next session + +These are deliberate next changes, not unknowns. Each one has a clear +spec; pick up here when work on `.dslice` resumes. + +### 1. Skip threshold should be an absolute lnL scale + +**Status**: bug. `--distance-slice-skip-threshold` currently compares +`max(core_lnL) - min(core_lnL)` against the threshold (a *relative* +measure of how peaked the distance profile is). But in RIFT's framing +lnL is already a likelihood ratio relative to the noise hypothesis, so +it has an absolute scale. + +**What to change**: + +* `is_uninformative(lnL_core, threshold)` in + `RIFT/misc/distance_slices.py` should test whether the *peak* lnL + across core slices exceeds the threshold, not whether the spread does. +* Default threshold should be the lnL value below which we consider an + event undetected -- something like 1.0 to start, tunable per + search-tier convention. +* `--distance-slice-skip-threshold` help text needs updating to reflect + the absolute interpretation. + +**Why this matters**: events with low SNR have low peak lnL *and* flat +distance posteriors; spending fresh-wing budget on them is wasteful. +Events with high SNR but a flat distance profile (well-constrained +inclination, distance unconstrained: a rare regime that does occur) +*do* need wings -- the current relative threshold would incorrectly +skip them. + +### 2. Wing-center placement via lnL ~ parabola in 1/dist + +**Status**: improvement. Wings are currently placed log-uniformly in +`[d_min, d_core_lo] union [d_core_hi, d_max]` -- agnostic of the +likelihood shape. We can do much better. + +**The model**: near the peak, the extrinsic-marginalized lnL is well +approximated by a parabola in `1/dist`: + + lnL(d) ~= lnL_peak - 0.5 * A^2 * (1/d - 1/d_peak)^2 + +where `A` is the effective SNR amplitude. This follows from the linear +amplitude scaling of the inner product with distance. Fit `(lnL_core, +1/d_core)` from the core to a quadratic in `1/d`, then solve for the +two `1/d` values where `lnL = lnL_peak - delta_lnL_target`. Set +`delta_lnL_target` to ~7 (probability < 10^{-3} outside) by default. +Place wing centers spaced log-uniformly between the core edge and the +solved boundary, on each side. + +**Caveat the user flagged**: this is the *marginalized* lnL. At the +full-likelihood level there are degeneracies where very nearby sources +fit reasonably well via fine-tuning of inclination + polarization + +phase (the so-called distance-inclination ridge). The parabolic +extrapolation can under-estimate how far the likelihood ridge extends +toward small `d`. Mitigation: clamp the extrapolated boundary to no +closer than `d_min_prior` and no further than `d_max_prior`, and let +the fresh integration honestly report low neff on any wing that +catches an unanticipated ridge. + +**Where to land it**: replace `pick_wing_centers` in +`RIFT/misc/distance_slices.py` with a version that takes +`(d_core, lnL_core, lnL_peak, delta_lnL_target, d_min, d_max, +n_wing)`. The current log-uniform version becomes the fallback when +the parabolic fit is degenerate (fewer than 3 core points, or all core +lnL equal, etc.). + +**Side benefit**: the parabolic fit also gives a direct estimate of +`A^2` (the effective Fisher in `1/d`), which is itself worth recording +in `.dslice` metadata for downstream CIP to use as a sanity check on +its own distance-distance covariance. + +## Older limitations (not high priority) + +* **GMM at low main n_eff** silently biases the reweight estimator. + The runtime warning is in place; the long-term fix is to default + RIFT to AV for any run that turns on `--export-distance-slices`. From 7b20ba0aa27b9beb4043b380c8d76c160d117d0d Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Thu, 28 May 2026 22:20:10 -0400 Subject: [PATCH 17/32] distance-slice: absolute-lnL skip cut + parabolic wing placement Implements the two PLAN_B_DESIGN breadcrumbs: 1. is_uninformative now applies an absolute lnL detectability cut (peak core lnL < threshold) instead of a relative max-min spread test. lnL is a likelihood ratio vs noise, so this correctly skips undetected low-SNR events while keeping high-SNR events with a flat distance profile. ILE skip message and --distance-slice-skip-threshold help updated. 2. pick_wing_centers fits the core (lnL, 1/d) points to a parabola in 1/d (fit_lnL_parabola_in_inv_d) and spans each wing from the core edge out to where the model drops --distance-slice-wing-delta-lnL nats below peak (default 7), via _parabolic_wing_bounds. Bounds are clamped to the sampler's distance support; degenerate fits fall back to the original log-uniform full-range placement. New ILE flag --distance-slice-wing-delta-lnL threads the target. Adds a regression test (test_wing_placement_and_skip) to validate_distance_slices.py; verified end-to-end on the fake-data demo (AV sampler): wings concentrate near the core instead of the prior edges, and reconstruct_marginal_lnL matches log_res within sigmaL. Co-Authored-By: Claude Opus 4.8 --- .../Code/RIFT/misc/distance_slices.py | 153 ++++++++++++++++-- .../integrate_likelihood_extrinsic_batchmode | 10 +- .../rift/add_distance_grids/PLAN_B_DESIGN.md | 135 ++++++++-------- .../validate_distance_slices.py | 33 ++++ 4 files changed, 242 insertions(+), 89 deletions(-) diff --git a/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_slices.py b/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_slices.py index b5a05d18a..cc124a137 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_slices.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/misc/distance_slices.py @@ -204,26 +204,135 @@ def importance_reweight_slices( def is_uninformative(lnL_core, threshold=1.0): - """Detect a flat / non-informative distance profile from the core slices. - - If the spread in core slice lnL is below ``threshold`` nats, the run has - essentially no distance information and there is nothing for wing - integrations to learn -- skip them. + """Detect a non-detectable event from the core slices via an absolute lnL. + + In RIFT's framing lnL is a likelihood ratio relative to the noise + hypothesis, so it carries an absolute scale. If the *peak* lnL across the + core slices does not exceed ``threshold`` nats, the event is effectively + undetected -- its distance posterior carries no information worth probing, + so wing integrations are wasted compute and we skip them. + + This intentionally does NOT key off the spread ``max - min``: a high-SNR + event with a flat distance profile (e.g. well-constrained inclination but + unconstrained distance) has a small spread yet a large peak lnL, and *does* + deserve wings. A relative-spread test would wrongly skip it. """ finite = np.isfinite(lnL_core) if not np.any(finite): return True - if np.sum(finite) < 2: - return True - return (np.max(lnL_core[finite]) - np.min(lnL_core[finite])) < threshold + return np.max(lnL_core[finite]) < threshold + + +def _log_uniform_wings(d_min, d_max, d_core_lo, d_core_hi, n_wing, min_log_gap): + """Log-uniform wing placement across the full spans outside the core. + + Half below the core, half above (lower half gets the extra when n_wing is + odd). This is the likelihood-shape-agnostic fallback used whenever the + parabolic fit is degenerate. + """ + n_low = (n_wing + 1) // 2 + n_high = n_wing - n_low + wings = [] + if d_core_lo > d_min * np.exp(min_log_gap) and n_low > 0: + wings.append(np.exp(np.linspace(np.log(d_min), + np.log(d_core_lo), + n_low + 2)[1:-1])) + if d_max > d_core_hi * np.exp(min_log_gap) and n_high > 0: + wings.append(np.exp(np.linspace(np.log(d_core_hi), + np.log(d_max), + n_high + 2)[1:-1])) + if not wings: + return np.array([]) + return np.sort(np.concatenate(wings)) + + +def fit_lnL_parabola_in_inv_d(d_core, lnL_core): + """Fit lnL_core to a quadratic in u = 1/dist. + + Near the peak the extrinsic-marginalized lnL is well modeled by + + lnL(d) ~= lnL_peak - 0.5 * A^2 * (1/d - 1/d_peak)^2 + + which is a downward parabola in u = 1/d. Returns ``(a, b, c)`` from + ``lnL ~= a u^2 + b u + c`` (so ``A^2 = -2 a`` and the vertex sits at + ``u_peak = -b/2a``), or ``None`` if the fit is degenerate (fewer than 3 + distinct finite core points, no lnL variation, or a non-downward fit). + """ + d_core = np.asarray(d_core, float) + lnL_core = np.asarray(lnL_core, float) + finite = np.isfinite(d_core) & (d_core > 0) & np.isfinite(lnL_core) + if np.sum(finite) < 3: + return None + u = 1.0 / d_core[finite] + y = lnL_core[finite] + if np.ptp(u) <= 0 or np.ptp(y) <= 0: + return None + try: + a, b, c = np.polyfit(u, y, 2) + except Exception: + return None + if not (np.isfinite(a) and np.isfinite(b) and np.isfinite(c)) or a >= 0: + return None + return float(a), float(b), float(c) + + +def _parabolic_wing_bounds(d_core, lnL_core, lnL_peak, delta_lnL_target, + d_min, d_max): + """Boundary distances where the lnL parabola drops ``delta_lnL_target``. + + Solves the fitted ``lnL(u) = a u^2 + b u + c`` (u = 1/dist) for the two + u where lnL equals ``(lnL_peak or fitted vertex) - delta_lnL_target``, + then maps back to distance and clamps to ``[d_min, d_max]``. + + Returns ``(d_small_bound, d_large_bound)`` or ``None`` if the fit is + degenerate (caller falls back to log-uniform). + """ + fit = fit_lnL_parabola_in_inv_d(d_core, lnL_core) + if fit is None: + return None + a, b, c = fit + vertex_u = -b / (2.0 * a) + vertex_val = c - b * b / (4.0 * a) + target = (vertex_val if lnL_peak is None else float(lnL_peak)) \ + - float(delta_lnL_target) + disc = b * b - 4.0 * a * (c - target) + if disc > 0: + sq = np.sqrt(disc) + r1 = (-b - sq) / (2.0 * a) + r2 = (-b + sq) / (2.0 * a) + u_lo, u_hi = min(r1, r2), max(r1, r2) + else: + # target above the fitted vertex (observed peak exceeds the fit, or + # delta too small): fall back to the vertex-symmetric half-width, + # which always yields real roots for a downward parabola. + half_width = np.sqrt(-float(delta_lnL_target) / a) + u_lo, u_hi = vertex_u - half_width, vertex_u + half_width + # u_lo -> larger distance boundary; u_hi -> smaller distance boundary. + d_large = 1.0 / u_lo if u_lo > 0 else d_max + d_small = 1.0 / u_hi if u_hi > 0 else d_min + d_small = float(np.clip(d_small, d_min, d_max)) + d_large = float(np.clip(d_large, d_min, d_max)) + if not (d_large > d_small): + return None + return d_small, d_large def pick_wing_centers(d_min, d_max, d_core, n_wing, + lnL_core=None, lnL_peak=None, delta_lnL_target=7.0, min_log_gap=0.05): - """Place K_wing slice centers log-uniformly outside the core span. - - Half go below the core, half above (rounded so the lower half gets the - extra when K_wing is odd). Returns a sorted array of distances. + """Place K_wing slice centers outside the core span. + + When ``lnL_core`` is supplied and a quadratic fit of lnL vs 1/dist is + non-degenerate, the wing span on each side is bounded by the parabolic + model: wings extend from the core edge out to where lnL drops + ``delta_lnL_target`` nats below the peak (default 7, i.e. prior weight + < ~10^-3 outside). This concentrates wing compute where the likelihood + actually has support instead of spreading it across the whole prior range. + + Falls back to ``_log_uniform_wings`` (likelihood-agnostic, full-range) + whenever the fit is degenerate or leaves no room outside the core. Half + the wings go below the core, half above (lower half gets the extra when + n_wing is odd). Returns a sorted array of distances. """ n_wing = int(n_wing) if n_wing <= 0: @@ -233,19 +342,29 @@ def pick_wing_centers(d_min, d_max, d_core, n_wing, d_core_lo = float(np.min(d_core[finite])) if np.any(finite) else d_min d_core_hi = float(np.max(d_core[finite])) if np.any(finite) else d_max + bounds = None + if lnL_core is not None: + bounds = _parabolic_wing_bounds(d_core, lnL_core, lnL_peak, + delta_lnL_target, d_min, d_max) + if bounds is None: + return _log_uniform_wings(d_min, d_max, d_core_lo, d_core_hi, + n_wing, min_log_gap) + + d_small_bound, d_large_bound = bounds n_low = (n_wing + 1) // 2 n_high = n_wing - n_low wings = [] - if d_core_lo > d_min * np.exp(min_log_gap) and n_low > 0: - wings.append(np.exp(np.linspace(np.log(d_min), + if d_core_lo > d_small_bound * np.exp(min_log_gap) and n_low > 0: + wings.append(np.exp(np.linspace(np.log(d_small_bound), np.log(d_core_lo), n_low + 2)[1:-1])) - if d_max > d_core_hi * np.exp(min_log_gap) and n_high > 0: + if d_large_bound > d_core_hi * np.exp(min_log_gap) and n_high > 0: wings.append(np.exp(np.linspace(np.log(d_core_hi), - np.log(d_max), + np.log(d_large_bound), n_high + 2)[1:-1])) if not wings: - return np.array([]) + return _log_uniform_wings(d_min, d_max, d_core_lo, d_core_hi, + n_wing, min_log_gap) return np.sort(np.concatenate(wings)) diff --git a/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode b/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode index c00915223..64c9e88d0 100755 --- a/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode +++ b/MonteCarloMarginalizeCode/Code/bin/integrate_likelihood_extrinsic_batchmode @@ -320,7 +320,8 @@ intrinsic_params.add_option("--n-distance-slice-core",type=int,default=0,help="C intrinsic_params.add_option("--n-distance-slice-wing",type=int,default=0,help="Wing slices via fresh Omega-only integrations at pinned distance (covers tails ~7 nats below peak). If 0 and --export-distance-slices>0, defaults to K - core.") intrinsic_params.add_option("--distance-slice-wing-nmax",type=int,default=20000,help="Max samples per wing fresh integration.") intrinsic_params.add_option("--distance-slice-wing-neff",type=int,default=30,help="n_eff target per wing fresh integration.") -intrinsic_params.add_option("--distance-slice-skip-threshold",type=float,default=1.0,help="If the lnL spread across core slices is below this many nats, treat the distance posterior as non-informative and skip wing integrations.") +intrinsic_params.add_option("--distance-slice-skip-threshold",type=float,default=1.0,help="Absolute lnL scale: if the PEAK lnL across core slices is below this many nats, treat the event as effectively undetected and skip wing integrations. (lnL is a likelihood ratio vs noise, so this is an absolute detectability cut, not a relative-spread test.)") +intrinsic_params.add_option("--distance-slice-wing-delta-lnL",type=float,default=7.0,help="Target lnL drop below peak used to place wing slice centers: wings span from the core edge out to where the parabolic lnL(1/d) model falls this many nats below peak (default 7 ~ prior weight <1e-3 outside). Falls back to log-uniform full-range placement if the parabolic fit is degenerate.") optp.add_option_group(intrinsic_params) @@ -2156,13 +2157,18 @@ def analyze_event(P_list, indx_event, data_dict, psd_dict, fmax, opts,inv_spec_t lnL_wings = np.array([]); sigmaL_wings = np.array([]); neff_wings = np.array([]); ntotal_wings = np.array([], dtype=int) if n_wing > 0: if distance_slices.is_uninformative(lnL_core, threshold=opts.distance_slice_skip_threshold): - print(" : core lnL spread < {:.2f} nats; skipping {} wing fresh integrations".format( + print(" : peak core lnL < {:.2f} nats (effectively undetected); skipping {} wing fresh integrations".format( opts.distance_slice_skip_threshold, n_wing)) else: + # Place wings via the parabolic lnL(1/d) model fit to the core, + # so wing budget concentrates where the likelihood has support. + lnL_peak_core = float(np.nanmax(lnL_core)) if np.any(np.isfinite(lnL_core)) else None d_wings = distance_slices.pick_wing_centers( float(sampler.llim["distance"]), float(sampler.rlim["distance"]), d_core, n_wing, + lnL_core=lnL_core, lnL_peak=lnL_peak_core, + delta_lnL_target=opts.distance_slice_wing_delta_lnL, ) if len(d_wings) == 0: print(" : no room outside core for wing slices; skipping") diff --git a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md index 9f366c25d..fea46f27c 100644 --- a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md +++ b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md @@ -66,19 +66,27 @@ For each wing slice `d_k`: adapted proposal in the wings without relying on the main run's Omega samples. -Wing centers are placed log-uniformly in `[d_min, d_core_lo]` and -`[d_core_hi, d_max]`, half-and-half, so coverage extends from the -sampler's support boundary all the way back to the core. Empirically -this reaches at least ~30 nats below peak on the demo event (vs the -user's ~7 nat target for 10^{-3} prior weight outside). +Wing centers are placed by fitting the core `(lnL, 1/d)` points to a +parabola in `1/d` (the natural form of the marginalized lnL near peak) +and spanning each side from the core edge out to where the model drops +`--distance-slice-wing-delta-lnL` nats below peak (default 7, i.e. +prior weight < 10^{-3} outside). This concentrates wing budget where +the likelihood actually has support. When the parabolic fit is +degenerate (fewer than 3 core points, no lnL variation, or a +non-downward fit) it falls back to log-uniform placement across the +full `[d_min, d_core_lo]` and `[d_core_hi, d_max]` spans. ### Skip non-informative events -If the lnL spread across the core slices is below -`--distance-slice-skip-threshold` (default 1.0 nat), the distance -posterior is essentially flat and wing integrations have nothing to -learn -- they are skipped and only the core rows are written. This -guards the user's directive to "not waste time on noninformative +`--distance-slice-skip-threshold` (default 1.0 nat) is an **absolute** +lnL cut: lnL is a likelihood ratio against the noise hypothesis, so if +the *peak* lnL across the core slices is below the threshold the event +is effectively undetected and wing integrations have nothing to learn +-- they are skipped and only the core rows are written. This is a +detectability cut, not a relative-spread test: a high-SNR event with a +flat distance profile (well-constrained inclination, unconstrained +distance) has a small spread but a large peak lnL and *does* get wings. +This guards the user's directive to "not waste time on noninformative likelihoods". Code: @@ -88,7 +96,8 @@ Code: - `bin/integrate_likelihood_extrinsic_batchmode`: new flags `--export-distance-slices K`, `--n-distance-slice-core`, `--n-distance-slice-wing`, `--distance-slice-wing-nmax`, - `--distance-slice-wing-neff`, `--distance-slice-skip-threshold`. + `--distance-slice-wing-neff`, `--distance-slice-skip-threshold`, + `--distance-slice-wing-delta-lnL`. ## Output format: `.dslice` @@ -235,72 +244,58 @@ keep the math honest as the prototype evolves. These are deliberate next changes, not unknowns. Each one has a clear spec; pick up here when work on `.dslice` resumes. -### 1. Skip threshold should be an absolute lnL scale +### 1. Skip threshold should be an absolute lnL scale -- DONE -**Status**: bug. `--distance-slice-skip-threshold` currently compares -`max(core_lnL) - min(core_lnL)` against the threshold (a *relative* -measure of how peaked the distance profile is). But in RIFT's framing -lnL is already a likelihood ratio relative to the noise hypothesis, so -it has an absolute scale. +**Status**: landed. `--distance-slice-skip-threshold` is now an +absolute cut. `is_uninformative(lnL_core, threshold)` returns True iff +the *peak* core lnL is below the threshold (default 1.0 nat); the old +`max - min` spread test is gone. Help text and the ILE skip message +("peak core lnL < ... (effectively undetected)") were updated to match. -**What to change**: +This skips undetected low-SNR events (low peak, flat profile) while +correctly *keeping* high-SNR events with a flat distance profile +(small spread but large peak lnL) -- exactly the case the relative +test got wrong. -* `is_uninformative(lnL_core, threshold)` in - `RIFT/misc/distance_slices.py` should test whether the *peak* lnL - across core slices exceeds the threshold, not whether the spread does. -* Default threshold should be the lnL value below which we consider an - event undetected -- something like 1.0 to start, tunable per - search-tier convention. -* `--distance-slice-skip-threshold` help text needs updating to reflect - the absolute interpretation. +### 2. Wing-center placement via lnL ~ parabola in 1/dist -- DONE -**Why this matters**: events with low SNR have low peak lnL *and* flat -distance posteriors; spending fresh-wing budget on them is wasteful. -Events with high SNR but a flat distance profile (well-constrained -inclination, distance unconstrained: a rare regime that does occur) -*do* need wings -- the current relative threshold would incorrectly -skip them. - -### 2. Wing-center placement via lnL ~ parabola in 1/dist - -**Status**: improvement. Wings are currently placed log-uniformly in -`[d_min, d_core_lo] union [d_core_hi, d_max]` -- agnostic of the -likelihood shape. We can do much better. - -**The model**: near the peak, the extrinsic-marginalized lnL is well -approximated by a parabola in `1/dist`: +**Status**: landed. `pick_wing_centers` now accepts +`(d_min, d_max, d_core, n_wing, lnL_core=None, lnL_peak=None, +delta_lnL_target=7.0)`. When `lnL_core` is supplied it fits the core +`(lnL, 1/d)` points to a parabola in `1/d` lnL(d) ~= lnL_peak - 0.5 * A^2 * (1/d - 1/d_peak)^2 -where `A` is the effective SNR amplitude. This follows from the linear -amplitude scaling of the inner product with distance. Fit `(lnL_core, -1/d_core)` from the core to a quadratic in `1/d`, then solve for the -two `1/d` values where `lnL = lnL_peak - delta_lnL_target`. Set -`delta_lnL_target` to ~7 (probability < 10^{-3} outside) by default. -Place wing centers spaced log-uniformly between the core edge and the -solved boundary, on each side. - -**Caveat the user flagged**: this is the *marginalized* lnL. At the -full-likelihood level there are degeneracies where very nearby sources -fit reasonably well via fine-tuning of inclination + polarization + -phase (the so-called distance-inclination ridge). The parabolic -extrapolation can under-estimate how far the likelihood ridge extends -toward small `d`. Mitigation: clamp the extrapolated boundary to no -closer than `d_min_prior` and no further than `d_max_prior`, and let -the fresh integration honestly report low neff on any wing that -catches an unanticipated ridge. - -**Where to land it**: replace `pick_wing_centers` in -`RIFT/misc/distance_slices.py` with a version that takes -`(d_core, lnL_core, lnL_peak, delta_lnL_target, d_min, d_max, -n_wing)`. The current log-uniform version becomes the fallback when -the parabolic fit is degenerate (fewer than 3 core points, or all core -lnL equal, etc.). - -**Side benefit**: the parabolic fit also gives a direct estimate of -`A^2` (the effective Fisher in `1/d`), which is itself worth recording -in `.dslice` metadata for downstream CIP to use as a sanity check on -its own distance-distance covariance. +(`fit_lnL_parabola_in_inv_d`), solves for the two `1/d` where lnL drops +`delta_lnL_target` nats below peak (`_parabolic_wing_bounds`), and +spaces wings log-uniformly between the core edge and that boundary on +each side. The ILE binary passes `lnL_core`, the observed peak, and +`--distance-slice-wing-delta-lnL` (default 7.0). + +Robustness implemented: + +* Boundaries are clamped to `[d_min, d_max]` (the sampler's distance + support), honoring the distance-inclination-ridge caveat: the fresh + integration will honestly report low neff on any wing that catches an + unanticipated ridge. +* When the fit is degenerate (fewer than 3 finite core points, no lnL + variation, non-downward fit) or leaves no room outside the core, it + falls back to the original log-uniform full-range placement + (`_log_uniform_wings`). +* If the requested target lnL sits above the fitted vertex (observed + peak exceeds the fit), it uses the vertex-symmetric half-width + `sqrt(-delta/a)`, which always yields real roots for a downward + parabola. + +**Verified**: synthetic parabola recovers `A^2` exactly and places +wings inside the solved `[d_small, d_large]` bounds rather than spread +across the full prior range; degenerate inputs fall back cleanly. + +**Side benefit still open (deferred)**: `fit_lnL_parabola_in_inv_d` +exposes `A^2 = -2a` (the effective Fisher in `1/d`). Recording it in +`.dslice` metadata for downstream CIP would require a schema/header +addition to `DISTANCE_SLICE_FIELDS`; not done yet since it touches the +load/save/reconstruct path. ## Older limitations (not high priority) diff --git a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/validate_distance_slices.py b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/validate_distance_slices.py index c7bb16367..0cd0f2412 100644 --- a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/validate_distance_slices.py +++ b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/validate_distance_slices.py @@ -76,8 +76,41 @@ def like_to_integrate(x, distance): ) +def test_wing_placement_and_skip(): + """Unit-check the absolute skip cut and the parabolic wing placement.""" + from RIFT.misc import distance_slices as ds + print("\n-- is_uninformative (absolute peak cut) --") + assert ds.is_uninformative(np.array([0.1, 0.3, 0.4, 0.2])) # undetected + assert not ds.is_uninformative(np.array([49.8, 50.0, 49.9, 49.85])) # hi-SNR flat + assert ds.is_uninformative(np.array([np.nan, np.nan])) # all nan + print(" ok: undetected skipped, high-SNR-flat kept, nan skipped") + + print("-- parabolic wing placement --") + A2, dpeak, peak = 8.0e6, 400.0, 30.0 + d_core = np.array([300., 350., 400., 450., 500.]) + lnL_core = peak - 0.5 * A2 * (1.0/d_core - 1.0/dpeak)**2 + a, b, c = ds.fit_lnL_parabola_in_inv_d(d_core, lnL_core) + assert abs(-2*a - A2) / A2 < 1e-6, "A^2 mis-recovered" + d_min, d_max = 1.0, 4000.0 + w = ds.pick_wing_centers(d_min, d_max, d_core, 6, lnL_core=lnL_core, + lnL_peak=peak, delta_lnL_target=7.0) + hw = np.sqrt(14.0 / A2) + d_small, d_large = 1.0/(1.0/dpeak + hw), 1.0/(1.0/dpeak - hw) + assert w.min() >= d_small - 1e-6 and w.max() <= d_large + 1e-6, \ + "wings escaped parabolic bounds" + assert np.all((w < d_core.min()) | (w > d_core.max())), "wing inside core" + print(" ok: A^2 recovered, wings within [{:.1f},{:.1f}] outside core".format( + d_small, d_large)) + + # degenerate -> log-uniform fallback spans the full prior range + w_fb = ds.pick_wing_centers(d_min, d_max, d_core, 6) + assert w_fb.min() < d_small and w_fb.max() > d_large, "fallback not full-range" + print(" ok: degenerate input falls back to full-range log-uniform") + + def main(): from RIFT.misc import distance_slices + test_wing_placement_and_skip() rng = np.random.default_rng(20260528) print("Mock 1-Omega problem: L(d, x) = peak exp(-0.5*((d - d0(x))/sigma)^2)") print("'alpha' is the d-Omega coupling. alpha=0: separable. alpha=80: peak shifts ~1 sigma per unit x.") From 6146592c3939a085729a032ae3864754b055656a Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Thu, 28 May 2026 22:53:33 -0400 Subject: [PATCH 18/32] distance-export: thread Plan-A grid + Plan-B slices through the pipeline builder Threads per-distance likelihood export from util_RIFT_pseudo_pipe.py through create_event_parameter_pipeline_* onto the ILE extrinsic stage (ILE_extr.sub), with an end-to-end pipeline-build test/demo. CEPP (Basic/Alternate/BasicMultiApprox): - New flags --last-iteration-export-distance-slices K plus -n-core/-n-wing/-wing-delta-lnL/-skip-threshold passthroughs. When set, the extrinsic stage gets --export-distance-slices K (+ the tunables + --internal-use-lnL) and --distance-marginalization is stripped, mirroring the existing grid export. - AlternateIteration and BasicMultiApproxIteration previously lacked the grid flag entirely; added both the grid and slice args + the ile_args_extr handling so the subdags/multi-approx CEPP variants accept the flags pseudo_pipe now routes to them. util_RIFT_pseudo_pipe.py: - New --export-distance-slices K (+ tunables), sibling to --export-marginal-distance-grid. - When either export is requested: force ILE lnL mode, disable distance marginalization (sane auto-config instead of erroring), and warn if --add-extrinsic is absent (the export is emitted there). - Fix: the --last-iteration-export-* flags are pipeline-builder flags, not ILE flags. They were being appended to args_ile.txt (the ILE argument string), where they would have been passed to the ILE executable and rejected. Move them to the CEPP command; keep only the ILE-side hygiene (lnL mode, no distance marginalization) in args_ile. Make the three create_event_parameter_pipeline_* scripts executable (100644 -> 100755), matching their sibling bin scripts: pseudo_pipe invokes them by bare name, so editable/source/pixi installs need +x. Validation: - New demo MonteCarloMarginalizeCode/Code/demo/pipeline (Makefile + README): builds baseline/grid/slices pipelines from the reference ini and asserts the flags land in ILE_extr.sub (and not in the intrinsic ILE.sub), with no distance marginalization. All pass. - Expanded .travis/test-build.sh with the same grid + slice build assertions (run in GitLab and GitHub CI). Co-Authored-By: Claude Opus 4.8 --- .travis/test-build.sh | 52 ++++++++- ...vent_parameter_pipeline_AlternateIteration | 22 ++++ ...te_event_parameter_pipeline_BasicIteration | 21 ++++ ...rameter_pipeline_BasicMultiApproxIteration | 22 ++++ .../Code/bin/util_RIFT_pseudo_pipe.py | 50 +++++++-- .../Code/demo/pipeline/.gitignore | 5 + .../Code/demo/pipeline/Makefile | 101 ++++++++++++++++++ .../Code/demo/pipeline/README.md | 54 ++++++++++ 8 files changed, 319 insertions(+), 8 deletions(-) mode change 100644 => 100755 MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_AlternateIteration mode change 100644 => 100755 MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration mode change 100644 => 100755 MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicMultiApproxIteration create mode 100644 MonteCarloMarginalizeCode/Code/demo/pipeline/.gitignore create mode 100644 MonteCarloMarginalizeCode/Code/demo/pipeline/Makefile create mode 100644 MonteCarloMarginalizeCode/Code/demo/pipeline/README.md diff --git a/.travis/test-build.sh b/.travis/test-build.sh index d2f97c94d..6e8cf1b9c 100755 --- a/.travis/test-build.sh +++ b/.travis/test-build.sh @@ -1,5 +1,13 @@ #! /bin/bash -# This is just a pipeline build test. The coinc file is from a synthetic event. +# Pipeline build test. The coinc file is from a synthetic event. +# +# Builds (does not submit) RIFT DAGs from a reference ini + coinc using fake +# data, and verifies that the per-distance likelihood export flags (Plan A +# density grid, Plan B fixed-distance slices) thread through +# util_RIFT_pseudo_pipe.py -> create_event_parameter_pipeline_* and land in the +# correct condor submit file (ILE_extr.sub, the extrinsic stage). + +set -e export RIFT_LOWLATENCY=True export SINGULARITY_RIFT_IMAGE=foo @@ -7,4 +15,44 @@ export SINGULARITY_RIFT_IMAGE=foo export SINGULARITY_BASE_EXE_DIR=/usr/bin/ alias gw_data_find=/bin/true # don't want to reall do the datafind job touch foo.cache -util_RIFT_pseudo_pipe.py --use-ini `pwd`/.travis/ref_ini/GW150914.ini --use-coinc `pwd`/.travis/ref_ini/coinc.xml --use-rundir `pwd`/test_build_pipe --fake-data-cache `pwd`/foo.cache + +REF_INI=`pwd`/.travis/ref_ini/GW150914.ini +COINC=`pwd`/.travis/ref_ini/coinc.xml + +# require a flag to be present in a file +assert_has() { # file pattern + if ! grep -q -- "$2" "$1"; then + echo "FAIL: expected '$2' in $1"; exit 1 + fi +} +# require a flag to be absent from a file +assert_absent() { # file pattern + if grep -q -- "$2" "$1"; then + echo "FAIL: did not expect '$2' in $1"; exit 1 + fi +} + +# --- 1. baseline build (original smoke test) --- +util_RIFT_pseudo_pipe.py --use-ini $REF_INI --use-coinc $COINC --use-rundir `pwd`/test_build_pipe --fake-data-cache `pwd`/foo.cache + +# --- 2. Plan-A distance-grid export, threaded onto the extrinsic stage --- +util_RIFT_pseudo_pipe.py --use-ini $REF_INI --use-coinc $COINC --use-rundir `pwd`/test_build_grid --fake-data-cache `pwd`/foo.cache --add-extrinsic --export-marginal-distance-grid +assert_has `pwd`/test_build_grid/ILE_extr.sub "--export-marginal-distance-grid" +assert_has `pwd`/test_build_grid/ILE_extr.sub "--internal-use-lnL" +assert_absent `pwd`/test_build_grid/ILE_extr.sub "--distance-marginalization" +assert_absent `pwd`/test_build_grid/args_ile.txt "--distance-marginalization" +assert_absent `pwd`/test_build_grid/ILE.sub "--export-marginal-distance-grid" +echo "OK: Plan-A distance-grid export threaded into ILE_extr.sub" + +# --- 3. Plan-B distance-slice export, threaded onto the extrinsic stage --- +util_RIFT_pseudo_pipe.py --use-ini $REF_INI --use-coinc $COINC --use-rundir `pwd`/test_build_slices --fake-data-cache `pwd`/foo.cache --add-extrinsic --export-distance-slices 10 --export-distance-slices-wing-delta-lnL 7.0 --export-distance-slices-skip-threshold 1.0 +assert_has `pwd`/test_build_slices/ILE_extr.sub "--export-distance-slices 10" +assert_has `pwd`/test_build_slices/ILE_extr.sub "--distance-slice-wing-delta-lnL 7.0" +assert_has `pwd`/test_build_slices/ILE_extr.sub "--distance-slice-skip-threshold 1.0" +assert_has `pwd`/test_build_slices/ILE_extr.sub "--internal-use-lnL" +assert_absent `pwd`/test_build_slices/ILE_extr.sub "--distance-marginalization" +assert_absent `pwd`/test_build_slices/args_ile.txt "--distance-marginalization" +assert_absent `pwd`/test_build_slices/ILE.sub "--export-distance-slices" +echo "OK: Plan-B distance-slice export threaded into ILE_extr.sub" + +echo "test-build.sh: all pipeline-build checks passed" diff --git a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_AlternateIteration b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_AlternateIteration old mode 100644 new mode 100755 index 10b549cae..479ce384e --- a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_AlternateIteration +++ b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_AlternateIteration @@ -192,6 +192,12 @@ parser.add_argument("--puff-cadence",default=None,type=int,help="Every n iterati parser.add_argument("--puff-max-it",default=-1,type=int,help="Maximum iteration number that puffball is applied. If negative, puffball is not applied ") parser.add_argument("--last-iteration-extrinsic",action='store_true',help="Configure last iteration to extract *one* set of extrinsic parameters from each intrinsic point. [This is highly inefficient, but people like having one extrinsic point per intrinsic point.] Requires --convert-args") parser.add_argument("--last-iteration-extrinsic-nsamples",default=3000,type=int,help="Construct this number of extrinsic samples") +parser.add_argument("--last-iteration-export-marginal-distance-grid", action='store_true', help="Add argument to ILE_extr") +parser.add_argument("--last-iteration-export-distance-slices", default=0, type=int, help="If >0, the ILE_extr (extrinsic) stage exports K-row .dslice files: Plan-B fixed-distance extrinsic-marginalized likelihoods. Adds --export-distance-slices K (+ --internal-use-lnL) to ILE_extr and strips --distance-marginalization.") +parser.add_argument("--last-iteration-export-distance-slices-n-core", default=0, type=int, help="Passthrough to ILE --n-distance-slice-core for the extrinsic-stage .dslice export (0 = ILE default).") +parser.add_argument("--last-iteration-export-distance-slices-n-wing", default=0, type=int, help="Passthrough to ILE --n-distance-slice-wing for the extrinsic-stage .dslice export (0 = ILE default).") +parser.add_argument("--last-iteration-export-distance-slices-wing-delta-lnL", default=None, type=float, help="Passthrough to ILE --distance-slice-wing-delta-lnL for the extrinsic-stage .dslice export.") +parser.add_argument("--last-iteration-export-distance-slices-skip-threshold", default=None, type=float, help="Passthrough to ILE --distance-slice-skip-threshold for the extrinsic-stage .dslice export.") parser.add_argument("--ile-args",default=None,help="filename of args_ile.txt file which holds ILE arguments. Should NOT conflict with arguments auto-set by this DAG ... in particular, i/o arguments will be modified") parser.add_argument("--ile-exe",default=None,help="filename of ILE or equivalent executable. Will default to `which integrate_likelihood_extrinsic` in low-level code") parser.add_argument("--subdag-exe",default=None,help="filename of subdag writing command (e.g., create_event_dag_via_grid). Very restrictive arguments, should only use standard code unless you are an expert!") @@ -617,6 +623,22 @@ if (opts.last_iteration_extrinsic): ile_args_extr = ile_args + " --save-P 0.01 --save-samples --n-eff " +str(2*n_points_per_ILE) # modify convergence criteria so output of reasonable size # - note we *disable* --no-adapt-after-first (if present), so each point is independent (e.g., in sky location) ile_args_extr = ile_args_extr.replace('--no-adapt-after-first','') + if opts.last_iteration_export_marginal_distance_grid: + ile_args_extr += " --export-marginal-distance-grid " + ile_args_extr = ile_args_extr.replace("--distance-marginalization ", ' ') + if opts.last_iteration_export_distance_slices and opts.last_iteration_export_distance_slices > 0: + ile_args_extr += " --export-distance-slices {} ".format(opts.last_iteration_export_distance_slices) + if opts.last_iteration_export_distance_slices_n_core: + ile_args_extr += " --n-distance-slice-core {} ".format(opts.last_iteration_export_distance_slices_n_core) + if opts.last_iteration_export_distance_slices_n_wing: + ile_args_extr += " --n-distance-slice-wing {} ".format(opts.last_iteration_export_distance_slices_n_wing) + if opts.last_iteration_export_distance_slices_wing_delta_lnL is not None: + ile_args_extr += " --distance-slice-wing-delta-lnL {} ".format(opts.last_iteration_export_distance_slices_wing_delta_lnL) + if opts.last_iteration_export_distance_slices_skip_threshold is not None: + ile_args_extr += " --distance-slice-skip-threshold {} ".format(opts.last_iteration_export_distance_slices_skip_threshold) + if "--internal-use-lnL" not in ile_args_extr: + ile_args_extr += " --internal-use-lnL " + ile_args_extr = ile_args_extr.replace("--distance-marginalization ", ' ') ileExtr_job, ileExtr_job_name = dag_utils.write_ILE_sub_simple(tag='ILE_extr',log_dir=None,arg_str=ile_args_extr,output_file="EXTR_out.xml",simple_unique=True,ncopies=1,exe=ile_exe,transfer_files=transfer_file_names,request_memory=opts.request_memory_ILE*2,request_gpu=opts.request_gpu_ILE,use_cvmfs_frames=opts.use_cvmfs_frames,request_disk=request_disk) ileExtr_job.add_condor_cmd("initialdir",opts.working_directory+"/iteration_$(macroiteration)_ile") ileExtr_job.set_log_file(opts.working_directory+"/iteration_$(macroiteration)_ile/logs/ILEextr-$(macroevent)-$(cluster)-$(process).log") diff --git a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration old mode 100644 new mode 100755 index f3026afce..b1637db07 --- a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration +++ b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration @@ -247,6 +247,11 @@ parser.add_argument("--last-iteration-extrinsic-samples-per-ile-internal",defaul parser.add_argument("--last-iteration-extrinsic-batched-convert",action='store_true',help="Used batched converter for output of extrinsic samples") parser.add_argument("--last-iteration-extrinsic-time-resampling",action='store_true',help="Last iterations use time resampling (+ the fairdraw is done inside ILE itself), so different code path for final stages") parser.add_argument("--last-iteration-export-marginal-distance-grid", action='store_true', help="Add argument to ILE_extr") +parser.add_argument("--last-iteration-export-distance-slices", default=0, type=int, help="If >0, the ILE_extr (extrinsic) stage exports K-row .dslice files: Plan-B fixed-distance extrinsic-marginalized likelihoods. Adds --export-distance-slices K (+ --internal-use-lnL) to ILE_extr and strips --distance-marginalization.") +parser.add_argument("--last-iteration-export-distance-slices-n-core", default=0, type=int, help="Passthrough to ILE --n-distance-slice-core for the extrinsic-stage .dslice export (0 = ILE default).") +parser.add_argument("--last-iteration-export-distance-slices-n-wing", default=0, type=int, help="Passthrough to ILE --n-distance-slice-wing for the extrinsic-stage .dslice export (0 = ILE default).") +parser.add_argument("--last-iteration-export-distance-slices-wing-delta-lnL", default=None, type=float, help="Passthrough to ILE --distance-slice-wing-delta-lnL for the extrinsic-stage .dslice export.") +parser.add_argument("--last-iteration-export-distance-slices-skip-threshold", default=None, type=float, help="Passthrough to ILE --distance-slice-skip-threshold for the extrinsic-stage .dslice export.") parser.add_argument("--ile-args",default=None,help="filename of args_ile.txt file which holds ILE arguments. Should NOT conflict with arguments auto-set by this DAG ... in particular, i/o arguments will be modified") parser.add_argument("--ile-exe",default=None,help="filename of ILE or equivalent executable. Will default to `which integrate_likelihood_extrinsic` in low-level code") parser.add_argument("--ile-retries",default=0,type=int,help="Number of retry attempts for ILE jobs. (These can fail)") @@ -776,6 +781,22 @@ if (opts.last_iteration_extrinsic): if opts.last_iteration_export_marginal_distance_grid: ile_args_extr += " --export-marginal-distance-grid " ile_args_extr = ile_args_extr.replace("--distance-marginalization ", ' ') # *currently* cannot use distance marginalization in the last step if we want distance grid output + if opts.last_iteration_export_distance_slices and opts.last_iteration_export_distance_slices > 0: + # Plan-B distance slices: K independent fixed-d extrinsic integrals per + # intrinsic point, emitted as a .dslice file. Requires lnL mode and no + # distance marginalization (same constraints as the grid export above). + ile_args_extr += " --export-distance-slices {} ".format(opts.last_iteration_export_distance_slices) + if opts.last_iteration_export_distance_slices_n_core: + ile_args_extr += " --n-distance-slice-core {} ".format(opts.last_iteration_export_distance_slices_n_core) + if opts.last_iteration_export_distance_slices_n_wing: + ile_args_extr += " --n-distance-slice-wing {} ".format(opts.last_iteration_export_distance_slices_n_wing) + if opts.last_iteration_export_distance_slices_wing_delta_lnL is not None: + ile_args_extr += " --distance-slice-wing-delta-lnL {} ".format(opts.last_iteration_export_distance_slices_wing_delta_lnL) + if opts.last_iteration_export_distance_slices_skip_threshold is not None: + ile_args_extr += " --distance-slice-skip-threshold {} ".format(opts.last_iteration_export_distance_slices_skip_threshold) + if "--internal-use-lnL" not in ile_args_extr: + ile_args_extr += " --internal-use-lnL " + ile_args_extr = ile_args_extr.replace("--distance-marginalization ", ' ') if opts.last_iteration_extrinsic_time_resampling: ile_args_extr += " --resample-time-marginalization --fairdraw-extrinsic-output --fairdraw-extrinsic-output-n-max {} ".format(n_points_per_ILE) print(" Time resampling in extraction iteration: **DISABLING** distance marginalization if present ") diff --git a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicMultiApproxIteration b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicMultiApproxIteration old mode 100644 new mode 100755 index 82c064979..c60b0d331 --- a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicMultiApproxIteration +++ b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicMultiApproxIteration @@ -187,6 +187,12 @@ parser.add_argument("--puff-cadence",default=None,type=int,help="Every n iterati parser.add_argument("--puff-max-it",default=-1,type=int,help="Maximum iteration number that puffball is applied. If negative, puffball is not applied ") parser.add_argument("--last-iteration-extrinsic",action='store_true',help="Configure last iteration to extract *one* set of extrinsic parameters from each intrinsic point. [This is highly inefficient, but people like having one extrinsic point per intrinsic point.] Requires --convert-args") parser.add_argument("--last-iteration-extrinsic-nsamples",default=3000,type=int,help="Construct this number of extrinsic samples") +parser.add_argument("--last-iteration-export-marginal-distance-grid", action='store_true', help="Add argument to ILE_extr") +parser.add_argument("--last-iteration-export-distance-slices", default=0, type=int, help="If >0, the ILE_extr (extrinsic) stage exports K-row .dslice files: Plan-B fixed-distance extrinsic-marginalized likelihoods. Adds --export-distance-slices K (+ --internal-use-lnL) to ILE_extr and strips --distance-marginalization.") +parser.add_argument("--last-iteration-export-distance-slices-n-core", default=0, type=int, help="Passthrough to ILE --n-distance-slice-core for the extrinsic-stage .dslice export (0 = ILE default).") +parser.add_argument("--last-iteration-export-distance-slices-n-wing", default=0, type=int, help="Passthrough to ILE --n-distance-slice-wing for the extrinsic-stage .dslice export (0 = ILE default).") +parser.add_argument("--last-iteration-export-distance-slices-wing-delta-lnL", default=None, type=float, help="Passthrough to ILE --distance-slice-wing-delta-lnL for the extrinsic-stage .dslice export.") +parser.add_argument("--last-iteration-export-distance-slices-skip-threshold", default=None, type=float, help="Passthrough to ILE --distance-slice-skip-threshold for the extrinsic-stage .dslice export.") parser.add_argument("--ile-args",default=None,help="filename of args_ile.txt file which holds ILE arguments. Should NOT conflict with arguments auto-set by this DAG ... in particular, i/o arguments will be modified") parser.add_argument("--ile-exe",default=None,help="filename of ILE or equivalent executable. Will default to `which integrate_likelihood_extrinsic` in low-level code") parser.add_argument("--ile-retries",default=0,type=int,help="Number of retry attempts for ILE jobs. (These can fail)") @@ -542,6 +548,22 @@ if (opts.last_iteration_extrinsic): ile_args_extr = ile_args + " --save-P 0.01 --save-samples --n-eff " +str(2*n_points_per_ILE) # modify convergence criteria so output of reasonable size # - note we *disable* --no-adapt-after-first (if present), so each point is independent (e.g., in sky location) ile_args_extr = ile_args_extr.replace('--no-adapt-after-first','') + if opts.last_iteration_export_marginal_distance_grid: + ile_args_extr += " --export-marginal-distance-grid " + ile_args_extr = ile_args_extr.replace("--distance-marginalization ", ' ') + if opts.last_iteration_export_distance_slices and opts.last_iteration_export_distance_slices > 0: + ile_args_extr += " --export-distance-slices {} ".format(opts.last_iteration_export_distance_slices) + if opts.last_iteration_export_distance_slices_n_core: + ile_args_extr += " --n-distance-slice-core {} ".format(opts.last_iteration_export_distance_slices_n_core) + if opts.last_iteration_export_distance_slices_n_wing: + ile_args_extr += " --n-distance-slice-wing {} ".format(opts.last_iteration_export_distance_slices_n_wing) + if opts.last_iteration_export_distance_slices_wing_delta_lnL is not None: + ile_args_extr += " --distance-slice-wing-delta-lnL {} ".format(opts.last_iteration_export_distance_slices_wing_delta_lnL) + if opts.last_iteration_export_distance_slices_skip_threshold is not None: + ile_args_extr += " --distance-slice-skip-threshold {} ".format(opts.last_iteration_export_distance_slices_skip_threshold) + if "--internal-use-lnL" not in ile_args_extr: + ile_args_extr += " --internal-use-lnL " + ile_args_extr = ile_args_extr.replace("--distance-marginalization ", ' ') ileExtr_job, ileExtr_job_name = dag_utils.write_ILE_sub_simple(tag='ILE_extr',log_dir=None,arg_str=ile_args_extr,output_file="EXTR_out.xml",simple_unique=True,ncopies=1,exe=ile_exe,transfer_files=transfer_file_names,request_memory=opts.request_memory_ILE*2,request_gpu=opts.request_gpu_ILE,use_cvmfs_frames=opts.use_cvmfs_frames) ileExtr_job.add_condor_cmd("initialdir",opts.working_directory+"/approx_$(macroapprox)_iteration_$(macroiteration)_ile") ileExtr_job.set_log_file(opts.working_directory+"/approx_$(macroapprox)_iteration_$(macroiteration)_ile/logs/ILEextr-$(macroevent)-$(cluster)-$(process).log") diff --git a/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py b/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py index 9fc4bed82..bb1a583b2 100755 --- a/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py +++ b/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py @@ -294,7 +294,12 @@ def unsafe_parse_arg_string_dict(my_argstr): parser.add_argument("--internal-ile-adapt-log",action='store_true',help="Passthrough to ILE ") parser.add_argument("--internal-ile-auto-logarithm-offset",action='store_true',help="Passthrough to ILE") parser.add_argument("--internal-ile-use-lnL",action='store_true',help="Passthrough to ILE via helper. Will DISABLE auto-logarithm-offset and manual-logarithm-offset for ILE") -parser.add_argument("--export-marginal-distance-grid",action='store_true',help="Ask ILE workers to export per-intrinsic likelihood density grids in luminosity distance. Requires ILE lnL mode and non-marginalized distance.") +parser.add_argument("--export-marginal-distance-grid",action='store_true',help="Ask the ILE extrinsic stage to export per-intrinsic likelihood density grids in luminosity distance. Forces ILE lnL mode and disables distance marginalization. Requires the extrinsic stage (--add-extrinsic).") +parser.add_argument("--export-distance-slices",default=0,type=int,help="If >0, ask the ILE extrinsic stage to export K-row .dslice files (Plan-B fixed-distance extrinsic-marginalized likelihoods). Forces ILE lnL mode and disables distance marginalization. Requires the extrinsic stage (--add-extrinsic).") +parser.add_argument("--export-distance-slices-n-core",default=0,type=int,help="Passthrough: --n-distance-slice-core for the .dslice export.") +parser.add_argument("--export-distance-slices-n-wing",default=0,type=int,help="Passthrough: --n-distance-slice-wing for the .dslice export.") +parser.add_argument("--export-distance-slices-wing-delta-lnL",default=None,type=float,help="Passthrough: --distance-slice-wing-delta-lnL for the .dslice export (target lnL drop below peak for wing placement).") +parser.add_argument("--export-distance-slices-skip-threshold",default=None,type=float,help="Passthrough: --distance-slice-skip-threshold for the .dslice export (absolute peak-lnL detectability cut).") parser.add_argument("--ile-additional-files-to-transfer",default=None,help="Comma-separated list of filenames. To append to the transfer file list for ILE jobs (only). Intended for surrogates in LAL_DATA_PATH for wide-ranging use") parser.add_argument("--internal-cip-use-lnL",action='store_true') parser.add_argument("--manual-initial-grid",default=None,type=str,help="Filename (full path) to initial grid. Copied into proposed-grid.xml.gz, overwriting any grid assignment done here") @@ -741,10 +746,19 @@ def unsafe_parse_arg_string_dict(my_argstr): if opts.internal_ile_use_lnL: cmd+= " --internal-ile-use-lnL " -if opts.export_marginal_distance_grid: +if opts.export_marginal_distance_grid or (opts.export_distance_slices and opts.export_distance_slices > 0): + # Distance grid/slice export needs ILE lnL mode and is incompatible with + # distance marginalization. Force lnL mode and disable distance + # marginalization here (before the helper command is assembled), so the + # helper does not request a marginalized-distance ILE configuration. opts.internal_ile_use_lnL = True if "--internal-ile-use-lnL" not in cmd: cmd += " --internal-ile-use-lnL " + if opts.internal_marginalize_distance: + print(" ==> Distance grid/slice export requested: disabling distance marginalization (incompatible with per-distance likelihood export) <== ") + opts.internal_marginalize_distance = False + if not opts.add_extrinsic: + print(" ==> WARNING: distance grid/slice export is emitted by the ILE extrinsic stage, but --add-extrinsic is not set; no per-distance output will be produced. <== ") if opts.internal_cip_use_lnL: cmd += " --internal-cip-use-lnL " if opts.internal_ile_data_tukey_window_time: @@ -974,10 +988,17 @@ def unsafe_parse_arg_string_dict(my_argstr): line = line.replace('--declination-cosine-sampler', '') if opts.internal_ile_force_adapt_all: line += " --force-adapt-all " -if opts.export_marginal_distance_grid: +if opts.export_marginal_distance_grid or (opts.export_distance_slices and opts.export_distance_slices > 0): + # NOTE: the --last-iteration-export-* flags are *pipeline-builder* flags + # (consumed by create_event_parameter_pipeline_*), NOT ILE flags, so they + # are added to the CEPP command below -- not to this ILE argument string. + # Here we only enforce the ILE-side requirements in args_ile.txt: lnL mode + # and no distance marginalization. if "--distance-marginalization" in line: - raise Exception("--export-marginal-distance-grid requires ILE runs without distance marginalization") - line += " --last-iteration-export-marginal-distance-grid --internal-use-lnL " + line = line.replace("--distance-marginalization-lookup-table ", ' ') + line = line.replace("--distance-marginalization ", ' ') + if "--internal-use-lnL" not in line: + line += " --internal-use-lnL " if not(opts.ile_sampler_method is None): line += " --sampler-method {} ".format(opts.ile_sampler_method) if opts.internal_ile_sky_network_coordinates: @@ -1679,7 +1700,24 @@ def unsafe_parse_arg_string_dict(my_argstr): for key, val in ile_condor_commands: f.write(key+ ' ' + val + '\n') cmd += " --ile-condor-commands `pwd`/ile_condor_commands.txt " - + +# Per-distance likelihood export on the extrinsic stage. These are +# pipeline-builder flags consumed by create_event_parameter_pipeline_*, so +# they are added to the CEPP command (not the ILE args). They only take effect +# when the extrinsic stage exists (--add-extrinsic). +if opts.export_marginal_distance_grid: + cmd += " --last-iteration-export-marginal-distance-grid " +if opts.export_distance_slices and opts.export_distance_slices > 0: + cmd += " --last-iteration-export-distance-slices {} ".format(opts.export_distance_slices) + if opts.export_distance_slices_n_core: + cmd += " --last-iteration-export-distance-slices-n-core {} ".format(opts.export_distance_slices_n_core) + if opts.export_distance_slices_n_wing: + cmd += " --last-iteration-export-distance-slices-n-wing {} ".format(opts.export_distance_slices_n_wing) + if opts.export_distance_slices_wing_delta_lnL is not None: + cmd += " --last-iteration-export-distance-slices-wing-delta-lnL {} ".format(opts.export_distance_slices_wing_delta_lnL) + if opts.export_distance_slices_skip_threshold is not None: + cmd += " --last-iteration-export-distance-slices-skip-threshold {} ".format(opts.export_distance_slices_skip_threshold) + print(cmd) os.system(cmd) diff --git a/MonteCarloMarginalizeCode/Code/demo/pipeline/.gitignore b/MonteCarloMarginalizeCode/Code/demo/pipeline/.gitignore new file mode 100644 index 000000000..8666d8346 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/demo/pipeline/.gitignore @@ -0,0 +1,5 @@ +rundir_baseline/ +rundir_grid/ +rundir_slices/ +fake.cache +*.cache diff --git a/MonteCarloMarginalizeCode/Code/demo/pipeline/Makefile b/MonteCarloMarginalizeCode/Code/demo/pipeline/Makefile new file mode 100644 index 000000000..7f3f9bd28 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/demo/pipeline/Makefile @@ -0,0 +1,101 @@ +# Standard pipeline-build demos for util_RIFT_pseudo_pipe.py +# +# These targets BUILD (do not submit) a RIFT DAG from a reference .ini + coinc +# using fake data, then verify the generated condor submit files. They are +# fast, need no real frames/GPUs, and double as regression tests that the +# per-distance likelihood export flags (Plan A grid, Plan B slices) thread all +# the way through util_RIFT_pseudo_pipe.py -> create_event_parameter_pipeline_* +# -> the ILE_extr submit file. +# +# Run inside the RIFT environment, e.g. +# pixi run --manifest-path ../../../../../pixi.toml make all +# or, with a pip-installed RIFT on PATH, +# make all + +RIFT_CODE_ROOT := $(abspath ../..) +REPO_ROOT := $(abspath ../../../..) + +REF_INI ?= $(REPO_ROOT)/.travis/ref_ini/GW150914.ini +COINC ?= $(REPO_ROOT)/.travis/ref_ini/coinc.xml +FAKE_CACHE ?= $(CURDIR)/fake.cache + +# Build-only environment: pretend we have a singularity image + datafind, use +# fake data, and put the in-tree bin/ on PATH so the pipeline builder and ILE +# executable resolve. +ENV = RIFT_LOWLATENCY=True \ + SINGULARITY_RIFT_IMAGE=foo \ + SINGULARITY_BASE_EXE_DIR=/usr/bin/ \ + GW_SURROGATE='' \ + PATH=$(RIFT_CODE_ROOT)/bin:$${PATH} \ + PYTHONPATH=$(RIFT_CODE_ROOT):$${PYTHONPATH:-} + +PIPE = util_RIFT_pseudo_pipe.py \ + --use-ini $(REF_INI) \ + --use-coinc $(COINC) \ + --fake-data-cache $(FAKE_CACHE) \ + --add-extrinsic + +.PHONY: help inputs baseline grid slices validate-grid validate-slices all clean + +help: + @echo "Targets:" + @echo " make inputs - verify reference ini/coinc are available" + @echo " make baseline - build a standard pipeline (no per-distance export)" + @echo " make grid - build + validate Plan-A distance-grid export" + @echo " make slices - build + validate Plan-B distance-slice export" + @echo " make all - run baseline, grid, and slices" + @echo " make clean - remove generated run directories" + +inputs: + @test -s "$(REF_INI)" || (echo "missing $(REF_INI)" && false) + @test -s "$(COINC)" || (echo "missing $(COINC)" && false) + @touch "$(FAKE_CACHE)" + @echo "Using ini: $(REF_INI)" + @echo "Using coinc: $(COINC)" + +baseline: inputs + rm -rf "$(CURDIR)/rundir_baseline" + $(ENV) $(PIPE) --use-rundir "$(CURDIR)/rundir_baseline" + @test -s "$(CURDIR)/rundir_baseline/ILE_extr.sub" + @! grep -q -- "--export-marginal-distance-grid" "$(CURDIR)/rundir_baseline/ILE_extr.sub" + @! grep -q -- "--export-distance-slices" "$(CURDIR)/rundir_baseline/ILE_extr.sub" + @echo "OK: baseline pipeline built; no per-distance export leaked into ILE_extr.sub" + +grid: inputs + rm -rf "$(CURDIR)/rundir_grid" + $(ENV) $(PIPE) --use-rundir "$(CURDIR)/rundir_grid" --export-marginal-distance-grid + $(MAKE) validate-grid + +validate-grid: + @test -s "$(CURDIR)/rundir_grid/ILE_extr.sub" + @grep -q -- "--export-marginal-distance-grid" "$(CURDIR)/rundir_grid/ILE_extr.sub" + @grep -q -- "--internal-use-lnL" "$(CURDIR)/rundir_grid/ILE_extr.sub" + @! grep -q -- "--distance-marginalization" "$(CURDIR)/rundir_grid/ILE_extr.sub" + @! grep -q -- "--distance-marginalization" "$(CURDIR)/rundir_grid/args_ile.txt" + @! grep -q -- "--export-marginal-distance-grid" "$(CURDIR)/rundir_grid/ILE.sub" + @echo "OK: Plan-A distance-grid export threaded into ILE_extr.sub only (no distance marginalization)" + +slices: inputs + rm -rf "$(CURDIR)/rundir_slices" + $(ENV) $(PIPE) --use-rundir "$(CURDIR)/rundir_slices" \ + --export-distance-slices 10 \ + --export-distance-slices-wing-delta-lnL 7.0 \ + --export-distance-slices-skip-threshold 1.0 + $(MAKE) validate-slices + +validate-slices: + @test -s "$(CURDIR)/rundir_slices/ILE_extr.sub" + @grep -q -- "--export-distance-slices 10" "$(CURDIR)/rundir_slices/ILE_extr.sub" + @grep -q -- "--distance-slice-wing-delta-lnL 7.0" "$(CURDIR)/rundir_slices/ILE_extr.sub" + @grep -q -- "--distance-slice-skip-threshold 1.0" "$(CURDIR)/rundir_slices/ILE_extr.sub" + @grep -q -- "--internal-use-lnL" "$(CURDIR)/rundir_slices/ILE_extr.sub" + @! grep -q -- "--distance-marginalization" "$(CURDIR)/rundir_slices/ILE_extr.sub" + @! grep -q -- "--distance-marginalization" "$(CURDIR)/rundir_slices/args_ile.txt" + @! grep -q -- "--export-distance-slices" "$(CURDIR)/rundir_slices/ILE.sub" + @echo "OK: Plan-B distance-slice export threaded into ILE_extr.sub only (no distance marginalization)" + +all: baseline grid slices + @echo "All pipeline-build demos passed." + +clean: + rm -rf "$(CURDIR)/rundir_baseline" "$(CURDIR)/rundir_grid" "$(CURDIR)/rundir_slices" "$(FAKE_CACHE)" diff --git a/MonteCarloMarginalizeCode/Code/demo/pipeline/README.md b/MonteCarloMarginalizeCode/Code/demo/pipeline/README.md new file mode 100644 index 000000000..84fb21575 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/demo/pipeline/README.md @@ -0,0 +1,54 @@ +# Pipeline-build demos (`util_RIFT_pseudo_pipe.py`) + +Fast, submission-free smoke tests of the end-to-end pipeline builder. Each +target runs `util_RIFT_pseudo_pipe.py` against a reference `.ini` + `coinc.xml` +with **fake data**, producing a complete RIFT run directory (helper output, +`args_*.txt`, and condor `*.sub` files) **without** submitting anything or +needing real frames, PSDs, or GPUs. + +These double as regression tests for argument threading: a flag set on +`util_RIFT_pseudo_pipe.py` must survive through +`create_event_parameter_pipeline_BasicIteration` (CEPP) and land in the correct +condor submit file. + +## Running + +Inside the RIFT environment: + +```bash +# with pixi +pixi run --manifest-path ../../../../../pixi.toml make all +# or, with a pip-installed RIFT on PATH +make all +``` + +Targets: + +| target | what it builds / checks | +| --- | --- | +| `baseline` | a standard pipeline; asserts no per-distance export leaks into `ILE_extr.sub` | +| `grid` | `--export-marginal-distance-grid` (Plan A); asserts `--export-marginal-distance-grid --internal-use-lnL` land in `ILE_extr.sub`, no `--distance-marginalization` anywhere, and the flag does **not** appear in the intrinsic `ILE.sub` | +| `slices` | `--export-distance-slices 10 ...` (Plan B); asserts `--export-distance-slices 10`, `--distance-slice-wing-delta-lnL`, `--distance-slice-skip-threshold`, `--internal-use-lnL` land in `ILE_extr.sub`, no `--distance-marginalization`, and nothing leaks into `ILE.sub` | +| `all` | all three | +| `clean` | remove generated `rundir_*` and the fake cache | + +Inputs default to `.travis/ref_ini/GW150914.ini` and `.travis/ref_ini/coinc.xml`; +override with `make REF_INI=... COINC=... all`. + +## Why the extrinsic stage + +Per-distance likelihood export (both Plan A density grids and Plan B fixed-`d` +slices) is emitted by the **last-iteration extrinsic** ILE stage (`ILE_extr`), +not by the intrinsic ILE jobs that run every iteration. `util_RIFT_pseudo_pipe.py` +therefore: + +1. forces ILE `lnL` mode and **disables distance marginalization** (the export + integrates the pure likelihood vs distance, which is incompatible with a + distance-marginalized ILE configuration), and +2. passes the corresponding `--last-iteration-export-*` flag to CEPP, which + appends the ILE-level export flags to the `ILE_extr` argument string only. + +These export flags require `--add-extrinsic` (so the extrinsic stage exists); +the demo passes it explicitly. See +`demo/rift/add_distance_grids/PLAN_B_DESIGN.md` for the Plan-B design and the +`.dslice` re-marginalization API. From 69b61f2cc67dc9cbb2f2982c5f14247ac2d55093 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Thu, 28 May 2026 22:54:40 -0400 Subject: [PATCH 19/32] distance-slice: mark workflow-integration step 1 (pipeline threading) done in PLAN_B_DESIGN Co-Authored-By: Claude Opus 4.8 --- .../rift/add_distance_grids/PLAN_B_DESIGN.md | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md index fea46f27c..2aaf17958 100644 --- a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md +++ b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md @@ -131,14 +131,28 @@ The user's preferred path is to add a follow-on stage after a normal RIFT run, **without** making `create_event_parameter_pipeline_BasicIteration` ("CEPP_basic") more baroque. Recommendation: -### Recommended (no DAG changes) - -1. Enable `--export-distance-slices K` on the **last iteration only** of an - otherwise-normal RIFT run. `util_RIFT_pseudo_pipe.py` already threads - `--last-iteration-export-marginal-distance-grid` for the Plan-A flag; - add a sibling `--last-iteration-export-distance-slices K` that follows - the same path. This is the cheapest change to `util_RIFT_pseudo_pipe` - (one extra option) and zero change to CEPP_basic. +### Recommended (no DAG changes) -- step 1 DONE + +1. **DONE.** Enable `--export-distance-slices K` on the **last iteration + only** of an otherwise-normal RIFT run. `util_RIFT_pseudo_pipe.py` now + exposes `--export-distance-slices K` (plus + `--export-distance-slices-{n-core,n-wing,wing-delta-lnL,skip-threshold}`), + sibling to `--export-marginal-distance-grid`. When set it forces ILE + lnL mode, disables distance marginalization, and routes + `--last-iteration-export-distance-slices K ...` to the pipeline builder + (`create_event_parameter_pipeline_{Basic,Alternate,BasicMultiApprox}Iteration`), + which appends the ILE-level export flags to the **extrinsic** stage + (`ILE_extr.sub`) only. Requires `--add-extrinsic`. + + While landing this we also fixed a latent bug: the Plan-A grid flag had + been appended to `args_ile.txt` (the ILE argument string) instead of the + CEPP command, so it would have been handed to the ILE executable and + rejected; both grid and slice flags now go to the CEPP command. + + End-to-end coverage: `demo/pipeline/` (Makefile + README) builds + baseline/grid/slices pipelines and asserts the flags land in + `ILE_extr.sub` (not the intrinsic `ILE.sub`) with no distance + marginalization; `.travis/test-build.sh` runs the same checks in CI. 2. Add a consolidation step that concatenates `.dslice` files into a single table per iteration -- mirror what `util_CleanILE.py` does for From 5c9545216cd6754c61ea7946160ceb37df108e49 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Thu, 28 May 2026 23:12:40 -0400 Subject: [PATCH 20/32] distance-export: disable distance marginalization only at the extrinsic stage Fix the per-distance export threading so distance marginalization is kept for the intrinsic ILE iterations (a large speedup) and removed ONLY on the final extrinsic stage that emits the per-distance output. Previously util_RIFT_pseudo_pipe.py set opts.internal_marginalize_distance = False and stripped --distance-marginalization from args_ile.txt, which disabled it for every ILE job in every iteration. Now pseudo_pipe only forces ILE lnL mode globally (clean lnL-scaled helper args) and leaves distance marginalization in place; create_event_parameter_pipeline_* already strips the standalone --distance-marginalization flag from the ILE_extr argument string, so the disable is confined to the export stage. Make util_InitMargTable executable (100644 -> 100755): the helper invokes it at build time to generate the distance-marginalization lookup table, which is now needed again because the intrinsic stage keeps distance marginalization. Validation updated to prove the last-stage-only invariant: demo/pipeline and .travis/test-build.sh now assert the standalone --distance-marginalization flag is present on the intrinsic ILE.sub / args_ile.txt but absent from ILE_extr.sub (matching the standalone flag via a trailing space, so the harmless leftover --distance-marginalization-lookup-table arg is not counted). All three demo targets pass. Co-Authored-By: Claude Opus 4.8 --- .travis/test-build.sh | 18 ++++++---- .../Code/bin/util_InitMargTable | 0 .../Code/bin/util_RIFT_pseudo_pipe.py | 35 +++++++++---------- .../Code/demo/pipeline/Makefile | 14 ++++---- .../Code/demo/pipeline/README.md | 15 ++++---- 5 files changed, 46 insertions(+), 36 deletions(-) mode change 100644 => 100755 MonteCarloMarginalizeCode/Code/bin/util_InitMargTable diff --git a/.travis/test-build.sh b/.travis/test-build.sh index 6e8cf1b9c..f1dae7d7c 100755 --- a/.travis/test-build.sh +++ b/.travis/test-build.sh @@ -36,13 +36,18 @@ assert_absent() { # file pattern util_RIFT_pseudo_pipe.py --use-ini $REF_INI --use-coinc $COINC --use-rundir `pwd`/test_build_pipe --fake-data-cache `pwd`/foo.cache # --- 2. Plan-A distance-grid export, threaded onto the extrinsic stage --- +# Distance marginalization must stay ON for the intrinsic ILE jobs (speedup) +# and be disabled ONLY at the extrinsic export stage. The trailing space in +# the pattern matches the standalone --distance-marginalization flag but not +# --distance-marginalization-lookup-table. util_RIFT_pseudo_pipe.py --use-ini $REF_INI --use-coinc $COINC --use-rundir `pwd`/test_build_grid --fake-data-cache `pwd`/foo.cache --add-extrinsic --export-marginal-distance-grid assert_has `pwd`/test_build_grid/ILE_extr.sub "--export-marginal-distance-grid" assert_has `pwd`/test_build_grid/ILE_extr.sub "--internal-use-lnL" -assert_absent `pwd`/test_build_grid/ILE_extr.sub "--distance-marginalization" -assert_absent `pwd`/test_build_grid/args_ile.txt "--distance-marginalization" assert_absent `pwd`/test_build_grid/ILE.sub "--export-marginal-distance-grid" -echo "OK: Plan-A distance-grid export threaded into ILE_extr.sub" +assert_has `pwd`/test_build_grid/args_ile.txt "--distance-marginalization " +assert_has `pwd`/test_build_grid/ILE.sub "--distance-marginalization " +assert_absent `pwd`/test_build_grid/ILE_extr.sub "--distance-marginalization " +echo "OK: Plan-A grid export only on ILE_extr.sub; distance marginalization disabled only at the extrinsic stage" # --- 3. Plan-B distance-slice export, threaded onto the extrinsic stage --- util_RIFT_pseudo_pipe.py --use-ini $REF_INI --use-coinc $COINC --use-rundir `pwd`/test_build_slices --fake-data-cache `pwd`/foo.cache --add-extrinsic --export-distance-slices 10 --export-distance-slices-wing-delta-lnL 7.0 --export-distance-slices-skip-threshold 1.0 @@ -50,9 +55,10 @@ assert_has `pwd`/test_build_slices/ILE_extr.sub "--export-distance-slices 10" assert_has `pwd`/test_build_slices/ILE_extr.sub "--distance-slice-wing-delta-lnL 7.0" assert_has `pwd`/test_build_slices/ILE_extr.sub "--distance-slice-skip-threshold 1.0" assert_has `pwd`/test_build_slices/ILE_extr.sub "--internal-use-lnL" -assert_absent `pwd`/test_build_slices/ILE_extr.sub "--distance-marginalization" -assert_absent `pwd`/test_build_slices/args_ile.txt "--distance-marginalization" assert_absent `pwd`/test_build_slices/ILE.sub "--export-distance-slices" -echo "OK: Plan-B distance-slice export threaded into ILE_extr.sub" +assert_has `pwd`/test_build_slices/args_ile.txt "--distance-marginalization " +assert_has `pwd`/test_build_slices/ILE.sub "--distance-marginalization " +assert_absent `pwd`/test_build_slices/ILE_extr.sub "--distance-marginalization " +echo "OK: Plan-B slice export only on ILE_extr.sub; distance marginalization disabled only at the extrinsic stage" echo "test-build.sh: all pipeline-build checks passed" diff --git a/MonteCarloMarginalizeCode/Code/bin/util_InitMargTable b/MonteCarloMarginalizeCode/Code/bin/util_InitMargTable old mode 100644 new mode 100755 diff --git a/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py b/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py index bb1a583b2..410d6094e 100755 --- a/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py +++ b/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py @@ -747,16 +747,17 @@ def unsafe_parse_arg_string_dict(my_argstr): if opts.internal_ile_use_lnL: cmd+= " --internal-ile-use-lnL " if opts.export_marginal_distance_grid or (opts.export_distance_slices and opts.export_distance_slices > 0): - # Distance grid/slice export needs ILE lnL mode and is incompatible with - # distance marginalization. Force lnL mode and disable distance - # marginalization here (before the helper command is assembled), so the - # helper does not request a marginalized-distance ILE configuration. + # Per-distance likelihood export needs ILE lnL mode (forced here for the + # whole run, giving clean lnL-scaled helper args) and, *only at the export + # stage*, no distance marginalization. We deliberately do NOT disable + # distance marginalization globally: the intrinsic iterations keep it (it + # is a large speedup). Only the final extrinsic stage that emits the + # per-distance output has --distance-marginalization stripped, and that + # stripping is done by create_event_parameter_pipeline_* on the ILE_extr + # argument string -- not here. opts.internal_ile_use_lnL = True if "--internal-ile-use-lnL" not in cmd: cmd += " --internal-ile-use-lnL " - if opts.internal_marginalize_distance: - print(" ==> Distance grid/slice export requested: disabling distance marginalization (incompatible with per-distance likelihood export) <== ") - opts.internal_marginalize_distance = False if not opts.add_extrinsic: print(" ==> WARNING: distance grid/slice export is emitted by the ILE extrinsic stage, but --add-extrinsic is not set; no per-distance output will be produced. <== ") if opts.internal_cip_use_lnL: @@ -988,17 +989,15 @@ def unsafe_parse_arg_string_dict(my_argstr): line = line.replace('--declination-cosine-sampler', '') if opts.internal_ile_force_adapt_all: line += " --force-adapt-all " -if opts.export_marginal_distance_grid or (opts.export_distance_slices and opts.export_distance_slices > 0): - # NOTE: the --last-iteration-export-* flags are *pipeline-builder* flags - # (consumed by create_event_parameter_pipeline_*), NOT ILE flags, so they - # are added to the CEPP command below -- not to this ILE argument string. - # Here we only enforce the ILE-side requirements in args_ile.txt: lnL mode - # and no distance marginalization. - if "--distance-marginalization" in line: - line = line.replace("--distance-marginalization-lookup-table ", ' ') - line = line.replace("--distance-marginalization ", ' ') - if "--internal-use-lnL" not in line: - line += " --internal-use-lnL " +# NOTE on per-distance export (grid/slices): the --last-iteration-export-* +# flags are *pipeline-builder* flags (consumed by +# create_event_parameter_pipeline_*), NOT ILE flags, so they are added to the +# CEPP command below -- not to this ILE argument string (args_ile.txt). The +# args_ile.txt here is the *intrinsic* ILE configuration and intentionally +# keeps --distance-marginalization (a speedup); lnL mode was already forced +# above, so --internal-use-lnL is present. create_event_parameter_pipeline_* +# strips --distance-marginalization only from the extrinsic (ILE_extr) stage +# that emits the per-distance output. if not(opts.ile_sampler_method is None): line += " --sampler-method {} ".format(opts.ile_sampler_method) if opts.internal_ile_sky_network_coordinates: diff --git a/MonteCarloMarginalizeCode/Code/demo/pipeline/Makefile b/MonteCarloMarginalizeCode/Code/demo/pipeline/Makefile index 7f3f9bd28..81d2c8492 100644 --- a/MonteCarloMarginalizeCode/Code/demo/pipeline/Makefile +++ b/MonteCarloMarginalizeCode/Code/demo/pipeline/Makefile @@ -70,10 +70,11 @@ validate-grid: @test -s "$(CURDIR)/rundir_grid/ILE_extr.sub" @grep -q -- "--export-marginal-distance-grid" "$(CURDIR)/rundir_grid/ILE_extr.sub" @grep -q -- "--internal-use-lnL" "$(CURDIR)/rundir_grid/ILE_extr.sub" - @! grep -q -- "--distance-marginalization" "$(CURDIR)/rundir_grid/ILE_extr.sub" - @! grep -q -- "--distance-marginalization" "$(CURDIR)/rundir_grid/args_ile.txt" @! grep -q -- "--export-marginal-distance-grid" "$(CURDIR)/rundir_grid/ILE.sub" - @echo "OK: Plan-A distance-grid export threaded into ILE_extr.sub only (no distance marginalization)" + @grep -q -- "--distance-marginalization " "$(CURDIR)/rundir_grid/args_ile.txt" + @grep -q -- "--distance-marginalization " "$(CURDIR)/rundir_grid/ILE.sub" + @! grep -q -- "--distance-marginalization " "$(CURDIR)/rundir_grid/ILE_extr.sub" + @echo "OK: Plan-A grid export only on ILE_extr.sub; distance marginalization kept on intrinsic ILE.sub, disabled only at the extrinsic stage" slices: inputs rm -rf "$(CURDIR)/rundir_slices" @@ -89,10 +90,11 @@ validate-slices: @grep -q -- "--distance-slice-wing-delta-lnL 7.0" "$(CURDIR)/rundir_slices/ILE_extr.sub" @grep -q -- "--distance-slice-skip-threshold 1.0" "$(CURDIR)/rundir_slices/ILE_extr.sub" @grep -q -- "--internal-use-lnL" "$(CURDIR)/rundir_slices/ILE_extr.sub" - @! grep -q -- "--distance-marginalization" "$(CURDIR)/rundir_slices/ILE_extr.sub" - @! grep -q -- "--distance-marginalization" "$(CURDIR)/rundir_slices/args_ile.txt" @! grep -q -- "--export-distance-slices" "$(CURDIR)/rundir_slices/ILE.sub" - @echo "OK: Plan-B distance-slice export threaded into ILE_extr.sub only (no distance marginalization)" + @grep -q -- "--distance-marginalization " "$(CURDIR)/rundir_slices/args_ile.txt" + @grep -q -- "--distance-marginalization " "$(CURDIR)/rundir_slices/ILE.sub" + @! grep -q -- "--distance-marginalization " "$(CURDIR)/rundir_slices/ILE_extr.sub" + @echo "OK: Plan-B slice export only on ILE_extr.sub; distance marginalization kept on intrinsic ILE.sub, disabled only at the extrinsic stage" all: baseline grid slices @echo "All pipeline-build demos passed." diff --git a/MonteCarloMarginalizeCode/Code/demo/pipeline/README.md b/MonteCarloMarginalizeCode/Code/demo/pipeline/README.md index 84fb21575..1f872eeac 100644 --- a/MonteCarloMarginalizeCode/Code/demo/pipeline/README.md +++ b/MonteCarloMarginalizeCode/Code/demo/pipeline/README.md @@ -27,8 +27,8 @@ Targets: | target | what it builds / checks | | --- | --- | | `baseline` | a standard pipeline; asserts no per-distance export leaks into `ILE_extr.sub` | -| `grid` | `--export-marginal-distance-grid` (Plan A); asserts `--export-marginal-distance-grid --internal-use-lnL` land in `ILE_extr.sub`, no `--distance-marginalization` anywhere, and the flag does **not** appear in the intrinsic `ILE.sub` | -| `slices` | `--export-distance-slices 10 ...` (Plan B); asserts `--export-distance-slices 10`, `--distance-slice-wing-delta-lnL`, `--distance-slice-skip-threshold`, `--internal-use-lnL` land in `ILE_extr.sub`, no `--distance-marginalization`, and nothing leaks into `ILE.sub` | +| `grid` | `--export-marginal-distance-grid` (Plan A); asserts `--export-marginal-distance-grid --internal-use-lnL` land in `ILE_extr.sub`, the flag does **not** appear in the intrinsic `ILE.sub`, and that distance marginalization is **kept on `ILE.sub` but stripped from `ILE_extr.sub`** | +| `slices` | `--export-distance-slices 10 ...` (Plan B); asserts `--export-distance-slices 10`, `--distance-slice-wing-delta-lnL`, `--distance-slice-skip-threshold`, `--internal-use-lnL` land in `ILE_extr.sub`, nothing leaks into `ILE.sub`, and distance marginalization is **kept on `ILE.sub` but stripped from `ILE_extr.sub`** | | `all` | all three | | `clean` | remove generated `rundir_*` and the fake cache | @@ -42,11 +42,14 @@ slices) is emitted by the **last-iteration extrinsic** ILE stage (`ILE_extr`), not by the intrinsic ILE jobs that run every iteration. `util_RIFT_pseudo_pipe.py` therefore: -1. forces ILE `lnL` mode and **disables distance marginalization** (the export - integrates the pure likelihood vs distance, which is incompatible with a - distance-marginalized ILE configuration), and +1. forces ILE `lnL` mode (for the whole run), and 2. passes the corresponding `--last-iteration-export-*` flag to CEPP, which - appends the ILE-level export flags to the `ILE_extr` argument string only. + appends the ILE-level export flags to the `ILE_extr` argument string only + **and strips `--distance-marginalization` from that extrinsic stage only**. + +Distance marginalization is *not* disabled globally: the intrinsic iterations +keep it (a large speedup). Only the final extrinsic stage that integrates the +pure likelihood vs distance has it removed. These export flags require `--add-extrinsic` (so the extrinsic stage exists); the demo passes it explicitly. See From 618640a12fbd449cf842095dbebceab59bf0e10b Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Thu, 28 May 2026 23:13:09 -0400 Subject: [PATCH 21/32] distance-slice: clarify in PLAN_B_DESIGN that distance marginalization is disabled only at the extrinsic stage Co-Authored-By: Claude Opus 4.8 --- .../Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md index 2aaf17958..3eb256e5b 100644 --- a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md +++ b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md @@ -138,11 +138,14 @@ run, **without** making `create_event_parameter_pipeline_BasicIteration` exposes `--export-distance-slices K` (plus `--export-distance-slices-{n-core,n-wing,wing-delta-lnL,skip-threshold}`), sibling to `--export-marginal-distance-grid`. When set it forces ILE - lnL mode, disables distance marginalization, and routes + lnL mode (whole run) and routes `--last-iteration-export-distance-slices K ...` to the pipeline builder (`create_event_parameter_pipeline_{Basic,Alternate,BasicMultiApprox}Iteration`), which appends the ILE-level export flags to the **extrinsic** stage - (`ILE_extr.sub`) only. Requires `--add-extrinsic`. + (`ILE_extr.sub`) only. Distance marginalization is **not** disabled + globally -- the intrinsic iterations keep it (a speedup); the pipeline + builder strips `--distance-marginalization` from the extrinsic stage only. + Requires `--add-extrinsic`. While landing this we also fixed a latent bug: the Plan-A grid flag had been appended to `args_ile.txt` (the ILE argument string) instead of the From bc2358de1c845a709dfa8ebb461753199643884e Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Thu, 28 May 2026 23:57:00 -0400 Subject: [PATCH 22/32] distance-export: .dgrid/.dslice consolidation + end-to-end posterior validation demo Adds the consolidation step the previous threading work was missing, plus a self-contained zero-spin IMRPhenomD demo that runs the whole chain (pipeline build -> ILE_extr -> consolidate -> posterior) end-to-end without condor. Pipeline: - New util_ConsolidateDistanceGrids.py: concatenates per-event .dgrid/.dslice files (header-checked) into a single net intrinsic+distance table. - New write_consolidate_distance_grids_sub in RIFT.misc.dag_utils_generic: mirrors write_cat_sub (extrinsic posterior samples) so the consolidation plugs into the same post-extrinsic part of the DAG. - create_event_parameter_pipeline_BasicIteration: when the last-iteration per-distance export is on, emit consolidate_dgrid.sub / consolidate_dslice.sub gated on the corresponding flag, build a DAG node, and chain it as a child of every ILE_extr job (.dgrid / .dslice come directly off ILE with no convert/resample step, so the consolidation node parents the ILE_extr nodes, not the cat_node downstream). Output: all_dgrid.dat / all_dslice.dat at the run root. Demo + validation: - demo/pipeline/Makefile: updated grid/slices assertions to require the consolidation sub-file and DAG references. - demo/pipeline/zero_spin_phenomD/: new end-to-end test. Uses the .travis/ILE-GPU-Paper zero-noise BBH fake data, IMRPhenomD with --assume-nospin, AV sampler. Steps: build -> util_RIFT_pseudo_pipe.py constructs the pipeline and asserts the extrinsic stage carries grid export + AV + IMRPhenomD + lnL mode, distance marg only off at the extrinsic stage, consolidate_dgrid in the DAG. run-extr -> bypass condor; invoke ILE_extr directly on N_EVENTS grid rows -> per-event .dgrid files. consolidate -> util_ConsolidateDistanceGrids.py -> all_dgrid.dat. posterior -> util_ConstructEOSPosterior.py with --parameter m1 -m2 -dist reconstructs the joint (intrinsic+distance) posterior. Whole chain in ~45 s on a laptop core. Ships a minimal zero_spin_phenomD.ini whose [rift-pseudo-pipe] section deliberately omits approx / ile-sampler-method so the CLI overrides win (the ini section parser otherwise overrides the command line). Drive-by fix needed for the demo: - util_ConstructEOSPosterior.py had CRLF line endings, breaking its /usr/bin/env shebang ("python\r" not found). Converted to LF. Co-Authored-By: Claude Opus 4.8 --- .../Code/RIFT/misc/dag_utils_generic.py | 50 + ...te_event_parameter_pipeline_BasicIteration | 61 + .../Code/bin/util_ConsolidateDistanceGrids.py | 123 ++ .../Code/bin/util_ConstructEOSPosterior.py | 1804 ++++++++--------- .../Code/demo/pipeline/Makefile | 33 +- .../pipeline/zero_spin_phenomD/.gitignore | 3 + .../demo/pipeline/zero_spin_phenomD/Makefile | 165 ++ .../demo/pipeline/zero_spin_phenomD/README.md | 81 + .../zero_spin_phenomD/zero_spin_phenomD.ini | 63 + 9 files changed, 1472 insertions(+), 911 deletions(-) create mode 100755 MonteCarloMarginalizeCode/Code/bin/util_ConsolidateDistanceGrids.py create mode 100644 MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/.gitignore create mode 100644 MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/Makefile create mode 100644 MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/README.md create mode 100644 MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/zero_spin_phenomD.ini diff --git a/MonteCarloMarginalizeCode/Code/RIFT/misc/dag_utils_generic.py b/MonteCarloMarginalizeCode/Code/RIFT/misc/dag_utils_generic.py index 53edce805..d9a459f13 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/misc/dag_utils_generic.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/misc/dag_utils_generic.py @@ -3493,6 +3493,56 @@ def write_cat_sub(tag='cat', exe=None, file_prefix=None,file_postfix=None,file_o +def write_consolidate_distance_grids_sub(tag='consolidate_dgrid', exe=None, + input_glob=None, file_output=None, + search_dir='.', universe='local', + log_dir=None, no_grid=False, **kwargs): + """Consolidate per-event .dgrid (Plan A) / .dslice (Plan B) files. + + Wraps ``util_ConsolidateDistanceGrids.py``: writes a thin shell driver + that runs the consolidator over ``input_glob`` (a find-style pattern, e.g. + ``EXTR_out.xml_*_.dgrid``) in ``search_dir`` and emits the concatenated + table at ``file_output``. Mirrors ``write_cat_sub`` so it slots into the + same post-extrinsic part of the DAG. + """ + exe = exe or which("util_ConsolidateDistanceGrids.py") + if not exe: + exe = "util_ConsolidateDistanceGrids.py" + + cmdname = tag + '.sh' + with open(cmdname, 'w') as f: + f.write("#! /bin/bash\n") + f.write("set -e\n") + f.write("cd " + search_dir + "\n") + # --allow-empty keeps the post-extrinsic job from failing the DAG if a + # re-run already consumed the per-event files or none were produced. + f.write(exe + " --input-glob '" + input_glob + "'" + " --output " + file_output + " --allow-empty\n") + os.system("chmod a+x " + cmdname) + + ile_job = CondorDAGJob(universe=universe, executable=cmdname) + if no_grid: + ile_job.add_condor_cmd("MY.DESIRED_SITES", '"nogrid"') + ile_job.add_condor_cmd("MY.flock_local", 'true') + + ile_sub_name = tag + '.sub' + ile_job.set_sub_file(ile_sub_name) + + uniq_str = "$(cluster)-$(process)" + ile_job.set_log_file("%s%s-%s.log" % (log_dir, tag, uniq_str)) + ile_job.set_stderr_file("%s%s-%s.err" % (log_dir, tag, uniq_str)) + ile_job.set_stdout_file("%s%s-%s.out" % (log_dir, tag, uniq_str)) + + ile_job.add_condor_cmd('getenv', default_getenv_value) + try: + ile_job.add_condor_cmd('accounting_group', os.environ['LIGO_ACCOUNTING']) + ile_job.add_condor_cmd('accounting_group_user', os.environ['LIGO_USER_NAME']) + except: + print(" LIGO accounting information not available. You must add this manually to integrate.sub !") + + return ile_job, ile_sub_name + + def write_convertpsd_sub(tag='convert_psd', exe=None, ifo=None,file_input=None,target_dir=None,arg_str='',log_dir=None, universe='local',**kwargs): """ Write script to convert PSD from one format to another. Needs to be called once per PSD file being used. diff --git a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration index b1637db07..0a33946e2 100755 --- a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration +++ b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicIteration @@ -917,6 +917,43 @@ sed 1d ./tmp_converted.dat {extra_shuffle_command} >> ./extrinsic_posterior_sam cat_job.set_sub_file(fname) cat_job.write_sub_file() + # Per-distance likelihood export: consolidate per-event .dgrid (Plan A) + # and/or .dslice (Plan B) files into a single table at the run root. The + # consolidated file is the "net" intrinsic+distance grid downstream tools + # like util_ConstructEOSPosterior.py consume. Each consolidation is + # gated on the corresponding --last-iteration-export-* flag so we never + # emit an empty sub for runs that did not request the export. + if opts.last_iteration_export_marginal_distance_grid: + dgrid_job, dgrid_job_name = dag_utils.write_consolidate_distance_grids_sub( + tag='consolidate_dgrid', + input_glob='EXTR_out.xml_*_.dgrid', + file_output=opts.working_directory + '/all_dgrid.dat', + search_dir=opts.working_directory + '/iteration_$(macroiteration)_ile', + log_dir=opts.working_directory + '/iteration_$(macroiteration)_ile/logs/', + universe=local_worker_universe, no_grid=no_worker_grid, + ) + dgrid_job.add_condor_cmd("initialdir", opts.working_directory) + dgrid_job.add_condor_cmd('request_disk', opts.general_request_disk) + if opts.use_full_submit_paths: + fname = opts.working_directory + "/" + dgrid_job.get_sub_file() + dgrid_job.set_sub_file(fname) + dgrid_job.write_sub_file() + if opts.last_iteration_export_distance_slices and opts.last_iteration_export_distance_slices > 0: + dslice_job, dslice_job_name = dag_utils.write_consolidate_distance_grids_sub( + tag='consolidate_dslice', + input_glob='EXTR_out.xml_*_.dslice', + file_output=opts.working_directory + '/all_dslice.dat', + search_dir=opts.working_directory + '/iteration_$(macroiteration)_ile', + log_dir=opts.working_directory + '/iteration_$(macroiteration)_ile/logs/', + universe=local_worker_universe, no_grid=no_worker_grid, + ) + dslice_job.add_condor_cmd("initialdir", opts.working_directory) + dslice_job.add_condor_cmd('request_disk', opts.general_request_disk) + if opts.use_full_submit_paths: + fname = opts.working_directory + "/" + dslice_job.get_sub_file() + dslice_job.set_sub_file(fname) + dslice_job.write_sub_file() + ## Consolidate job(s) # - consolidate output of single previous job @@ -1881,6 +1918,19 @@ if opts.last_iteration_extrinsic: cat_node = pipeline.CondorDAGNode(cat_job) cat_node.add_macro("macroiteration", it) # needed to identify log file location + # Per-distance likelihood export consolidation nodes (depend directly on + # ILE_extr, since .dgrid / .dslice are emitted by ILE itself with no + # convert/resample step in between). + dgrid_node = dslice_node = None + if opts.last_iteration_export_marginal_distance_grid: + dgrid_node = pipeline.CondorDAGNode(dgrid_job) + dgrid_node.add_macro("macroiteration", it) + dgrid_node.set_retry(opts.ile_retries) + if opts.last_iteration_export_distance_slices and opts.last_iteration_export_distance_slices > 0: + dslice_node = pipeline.CondorDAGNode(dslice_job) + dslice_node.add_macro("macroiteration", it) + dslice_node.set_retry(opts.ile_retries) + # Perform final ILE run on all points, saving samples # Need to perform number of events CONSISTENT WITH TARGET SAMPLE SIZE # - *not* always same as number of ILE events being analyzed @@ -1906,6 +1956,13 @@ if opts.last_iteration_extrinsic: dag.add_node(ile_node) # ile_node_list_per_iteration[it].append(ile_node) + # Distance-grid / -slice consolidation runs after EVERY ILE_extr + # finishes, since each ILE_extr emits one .dgrid / .dslice file. + if dgrid_node is not None: + dgrid_node.add_parent(ile_node) + if dslice_node is not None: + dslice_node.add_parent(ile_node) + # Add convert and resample task *for each output file* if opts.last_iteration_extrinsic_time_resampling: # establish parent-child relationship @@ -1949,6 +2006,10 @@ if opts.last_iteration_extrinsic: else: dag.add_node(convert_node) # this is the time resampling task last_node=convert_node + if dgrid_node is not None: + dag.add_node(dgrid_node) + if dslice_node is not None: + dag.add_node(dslice_node) # Create rotation job (if extrinsic available) if opts.frame_rotation and opts.last_iteration_extrinsic: diff --git a/MonteCarloMarginalizeCode/Code/bin/util_ConsolidateDistanceGrids.py b/MonteCarloMarginalizeCode/Code/bin/util_ConsolidateDistanceGrids.py new file mode 100755 index 000000000..006855947 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/bin/util_ConsolidateDistanceGrids.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python +"""Consolidate per-event .dgrid (Plan A) or .dslice (Plan B) files. + +The ILE extrinsic stage emits one file per intrinsic point (e.g. +``EXTR_out.xml_0_.dgrid``, ``..._1_.dgrid`` ...). Each is a small ASCII +table with a ``# col1 col2 ...`` header line and one row per distance +sample/slice. Downstream tools (notably ``util_ConstructEOSPosterior.py``) +want a single concatenated table with one shared header. + +This script: +- reads each input file, +- verifies the headers match, +- writes one header line followed by the data rows from all files. + +Usage: + util_ConsolidateDistanceGrids.py --output all_dgrid.dat + util_ConsolidateDistanceGrids.py --output all_dgrid.dat --input-glob '*.dgrid' +""" +import argparse +import glob +import os +import sys + + +def _read_split(fname): + """Read a file, return (header_line, [data_lines]). + + ``header_line`` is the first line stripped of a leading ``#`` (or None if + the file has no header). Blank lines and other comment lines are + skipped in the data. + """ + with open(fname, 'r') as f: + lines = f.readlines() + if not lines: + return None, [] + header = None + data = [] + started = False + for line in lines: + s = line.strip() + if not s: + continue + if s.startswith('#'): + if not started and header is None: + header = s.lstrip('#').strip() + # subsequent comments are ignored + continue + started = True + data.append(line.rstrip('\n')) + return header, data + + +def main(argv=None): + p = argparse.ArgumentParser(description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("inputs", nargs='*', help="input files (.dgrid or .dslice)") + p.add_argument("--input-glob", default=None, + help="glob pattern for inputs (e.g. '*.dgrid')") + p.add_argument("--output", required=True, + help="output consolidated .dat file") + p.add_argument("--allow-empty", action='store_true', + help="exit 0 (writing a header-only output) if no inputs match") + opts = p.parse_args(argv) + + files = list(opts.inputs) + if opts.input_glob: + files += sorted(glob.glob(opts.input_glob)) + # preserve order, drop duplicates + seen = set() + files = [f for f in files if not (f in seen or seen.add(f))] + if not files: + msg = "no input files provided" + if opts.allow_empty: + print("util_ConsolidateDistanceGrids.py: {}; writing empty output".format(msg), + file=sys.stderr) + with open(opts.output, 'w') as f: + pass + return 0 + print("util_ConsolidateDistanceGrids.py: ERROR: {}".format(msg), + file=sys.stderr) + return 2 + + header = None + all_data = [] + n_files_used = 0 + for fname in files: + if not os.path.isfile(fname) or os.path.getsize(fname) == 0: + continue + h, d = _read_split(fname) + if h is None: + print("util_ConsolidateDistanceGrids.py: WARNING: no header in {} " + "(skipping)".format(fname), file=sys.stderr) + continue + if header is None: + header = h + elif h != header: + print("util_ConsolidateDistanceGrids.py: ERROR: header mismatch in {}\n" + " expected: {}\n got: {}".format(fname, header, h), + file=sys.stderr) + return 3 + all_data.extend(d) + n_files_used += 1 + + if header is None: + if opts.allow_empty: + with open(opts.output, 'w') as f: + pass + return 0 + print("util_ConsolidateDistanceGrids.py: ERROR: no usable inputs found", + file=sys.stderr) + return 2 + + with open(opts.output, 'w') as f: + f.write("# " + header + "\n") + for line in all_data: + f.write(line + "\n") + print("util_ConsolidateDistanceGrids.py: wrote {} rows from {} files to {}".format( + len(all_data), n_files_used, opts.output), file=sys.stderr) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/MonteCarloMarginalizeCode/Code/bin/util_ConstructEOSPosterior.py b/MonteCarloMarginalizeCode/Code/bin/util_ConstructEOSPosterior.py index 30cfcf0fb..45b49e2c4 100755 --- a/MonteCarloMarginalizeCode/Code/bin/util_ConstructEOSPosterior.py +++ b/MonteCarloMarginalizeCode/Code/bin/util_ConstructEOSPosterior.py @@ -1,902 +1,902 @@ -#!/usr/bin/env python -# -# util_ConstructEOSPosterior.py -# - takes in *generic-format* hyperparameter likelihood data -# - uses *uniform* prior on hyperparameters. [non-uniform priors can be applied by the user with a supplementary function] -# - generates posterior distribution by weighted Monte Carlo -# -# EXAMPLE: -# python `which util_ConstructEOSPosterior.py` --fname fake_int_grid.dat --parameter gamma1 --parameter gamma2 --lnL-offset 50 - -import RIFT.interpolators.BayesianLeastSquares as BayesianLeastSquares - -import argparse -import sys -import numpy as np -import numpy.lib.recfunctions -import scipy -import scipy.stats -import functools -import itertools - -import joblib # http://scikit-learn.org/stable/modules/model_persistence.html - -# GPU acceleration: NOT YET, just do usual -xpy_default=numpy # just in case, to make replacement clear and to enable override -identity_convert = lambda x: x # trivial return itself -cupy_success=False - -no_plots = True -internal_dtype = np.float32 # only use 32 bit storage! Factor of 2 memory savings for GP code in high dimensions - - -try: - import matplotlib.pyplot as plt - from mpl_toolkits.mplot3d import Axes3D - import matplotlib.lines as mlines - import corner - - no_plots=False -except ImportError: - print(" - no matplotlib - ") - - -from sklearn.preprocessing import PolynomialFeatures -if True: -#try: - import RIFT.misc.ModifiedScikitFit as msf # altenative polynomialFeatures -else: -#except: - print(" - Faiiled ModifiedScikitFit : No polynomial fits - ") -from sklearn import linear_model - -from igwn_ligolw import lsctables, utils, ligolw -lsctables.use_in(ligolw.LIGOLWContentHandler) - -import RIFT.integrators.mcsampler as mcsampler -try: - import RIFT.integrators.mcsamplerEnsemble as mcsamplerEnsemble - mcsampler_gmm_ok = True -except: - print(" No mcsamplerEnsemble ") - mcsampler_gmm_ok = False -try: - import RIFT.integrators.mcsamplerGPU as mcsamplerGPU - mcsampler_gpu_ok = True - mcsamplerGPU.xpy_default =xpy_default # force consistent, in case GPU present - mcsamplerGPU.identity_convert = identity_convert -except: - print( " No mcsamplerGPU ") - mcsampler_gpu_ok = False -try: - import RIFT.integrators.mcsamplerAdaptiveVolume as mcsamplerAdaptiveVolume - mcsampler_AV_ok = True -except: - print(" No mcsamplerAV ") - mcsampler_AV_ok = False -try: - import RIFT.integrators.mcsamplerPortfolio as mcsamplerPortfolio - mcsampler_Portfolio_ok = True -except: - print(" No mcsamplerPortolfio ") - - - - - -def add_field(a, descr): - """Return a new array that is like "a", but has additional fields. - - Arguments: - a -- a structured numpy array - descr -- a numpy type description of the new fields - - The contents of "a" are copied over to the appropriate fields in - the new array, whereas the new fields are uninitialized. The - arguments are not modified. - - >>> sa = numpy.array([(1, 'Foo'), (2, 'Bar')], \ - dtype=[('id', int), ('name', 'S3')]) - >>> sa.dtype.descr == numpy.dtype([('id', int), ('name', 'S3')]) - True - >>> sb = add_field(sa, [('score', float)]) - >>> sb.dtype.descr == numpy.dtype([('id', int), ('name', 'S3'), \ - ('score', float)]) - True - >>> numpy.all(sa['id'] == sb['id']) - True - >>> numpy.all(sa['name'] == sb['name']) - True - """ - if a.dtype.fields is None: - raise ValueError("`A' must be a structured numpy array") - b = numpy.empty(a.shape, dtype=a.dtype.descr + descr) - for name in a.dtype.names: - b[name] = a[name] - return b - - -parser = argparse.ArgumentParser() -parser.add_argument("--fname",help="filename of *.dat file (EOS-format: lnL sigma_lnL p1 p2 ... . ASSUME any stacking over events already performed.") -parser.add_argument("--fname-output-samples",default="output-EOS-samples",help="output grid") -parser.add_argument("--fname-output-integral",default="output-EOS-integral",help="for evidencees and pipeline compatibility") -parser.add_argument("--n-output-samples",default=2000,type=int,help="output posterior samples (default 3000)") -parser.add_argument("--eos-param", type=str, default=None, help="parameterization of equation of state [spectral only, for now]") -parser.add_argument("--parameter", action='append', help="Parameters used as fitting parameters AND varied at a low level to make a posterior. Currently can only specify gamma1,gamma2, ..., and these MUST be columns in --fname. IF NOT PROVIDED, DEFAULTS TO LIST IN FILE. ") -parser.add_argument("--parameter-implied", action='append', help="Parameter used in fit, but not independently varied for Monte Carlo. For EOS objects, only possible for physical quantities like R1.4, etc. NOT YET PROVIDED") -#parser.add_argument("--no-adapt-parameter",action='append',help="Disable adaptive sampling in a parameter. Useful in cases where a parameter is not well-constrained, and the a prior sampler is well-chosen.") -parser.add_argument("--parameter-nofit", action='append', help="Parameter used to initialize the implied parameters, and varied at a low level, but NOT the fitting parameters.") -parser.add_argument("--integration-parameter-range",action='append', help="Integration parameter ranges. Syntax is name:[a,b]") -parser.add_argument("--downselect-parameter",action='append', help='Name of parameter to be used to eliminate grid points ') -parser.add_argument("--downselect-parameter-range",action='append',type=str) -parser.add_argument("--no-downselect",action='store_true') -parser.add_argument("--aligned-prior", default="uniform",help="Options are 'uniform', 'volumetric', and 'alignedspin-zprior'") -parser.add_argument("--cap-points",default=-1,type=int,help="Maximum number of points in the sample, if positive. Useful to cap the number of points ued for GP. See also lnLoffset. Note points are selected AT RANDOM") -parser.add_argument("--lambda-max", default=4000,type=float,help="Maximum range of 'Lambda' allowed. Minimum value is ZERO, not negative.") -parser.add_argument("--lnL-shift-prevent-overflow",default=None,type=float,help="Define this quantity to be a large positive number to avoid overflows. Note that we do *not* define this dynamically based on sample values, to insure reproducibility and comparable integral results. BEWARE: If you shift the result to be below zero, because the GP relaxes to 0, you will get crazy answers.") -parser.add_argument("--lnL-offset",type=float,default=np.inf,help="lnL offset") -parser.add_argument("--lnL-cut",type=float,default=None,help="lnL cut [MANUAL]") -parser.add_argument("--sigma-cut",type=float,default=0.6,help="Eliminate points with large error from the fit.") -parser.add_argument("--ignore-errors-in-data",action='store_true',help='Ignore reported error in lnL. Helpful for testing purposes (i.e., if the error is zero)') -parser.add_argument("--lnL-peak-insane-cut",type=float,default=np.inf,help="Throw away lnL greater than this value. Should not be necessary") -parser.add_argument("--verbose", action="store_true",default=False, help="Required to build post-frame-generating sanity-test plots") -parser.add_argument("--save-plots",default=False,action='store_true', help="Write plots to file (only useful for OSX, where interactive is default") -parser.add_argument("--n-max",default=3e5,type=float) -parser.add_argument("--n-step",default=1e5,type=int) -parser.add_argument("--n-eff",default=3e3,type=int) -parser.add_argument("--pool-size",default=3,type=int,help="Integer. Number of GPs to use (result is averaged)") -parser.add_argument("--fit-method",default="rf",help="rf (default) : rf|gp|quadratic|polynomial|gp_hyper|gp_lazy|cov|kde. Note 'polynomial' with --fit-order 0 will fit a constant") -parser.add_argument("--fit-load-gp",default=None,type=str,help="Filename of GP fit to load. Overrides fitting process, but user MUST correctly specify coordinate system to interpret the fit with. Does not override loading and converting the data.") -parser.add_argument("--fit-save-gp",default=None,type=str,help="Filename of GP fit to save. ") -parser.add_argument("--fit-order",type=int,default=2,help="Fit order (polynomial case: degree)") -parser.add_argument("--no-plots",action='store_true') -parser.add_argument("--using-eos-type", type=str, default=None, help="Name of EOS parameterization (must match what is used for inputs). Will use EOS parameterization to identify appropriate field headers") -parser.add_argument("--sampler-method",default="adaptive_cartesian",help="adaptive_cartesian|GMM|adaptive_cartesian_gpu") -parser.add_argument("--sampler-portfolio",default=None,action='append',type=str,help="comma-separated strings, matching sampler methods other than portfolio") -parser.add_argument("--sampler-portfolio-args",default=None, action='append', type=str, help='eval-able dictionary to be passed to that sampler_') -parser.add_argument("--internal-use-lnL",action='store_true',help="integrator internally manipulates lnL.. ") -parser.add_argument("--internal-correlate-parameters",default=None,type=str,help="comman-separated string indicating parameters that should be sampled allowing for correlations. Must be sampling parameters. Only implemented for gmm. If string is 'all', correlate *all* parameters") -parser.add_argument("--internal-n-comp",default=1,type=int,help="number of components to use for GMM sampling. Default is 1, because we expect a unimodal posterior in well-adapted coordinates. If you have crappy coordinates, use more") -parser.add_argument("--force-no-adapt",action='store_true',help="Disable adaptation, both of the tempering exponent *and* the individual sampling prior(s)") -parser.add_argument("--tripwire-fraction",default=0.05,type=float,help="Fraction of nmax of iterations after which n_eff needs to be greater than 1+epsilon for a small number epsilon") - -# Supplemental likelihood factors: convenient way to effectively change the mass/spin prior in arbitrary ways for example -# Note this supplemental factor is passed the *fitting* arguments, directly. Use with extreme caution, since we often change the dimension in a DAG -parser.add_argument("--supplementary-likelihood-factor-code", default=None,type=str,help="Import a module (in your pythonpath!) containing a supplementary factor for the likelihood. Used to impose supplementary external priors of arbitrary complexity and external dependence (e.g., imposing alternate EOS priors)") -parser.add_argument("--supplementary-likelihood-factor-function", default=None,type=str,help="With above option, specifies the specific function used as an external likelihood. EXPERTS ONLY") -parser.add_argument("--supplementary-likelihood-factor-ini", default=None,type=str,help="With above option, specifies an ini file that is parsed (here) and passed to the preparation code, called when the module is first loaded, to configure the module. EXPERTS ONLY") -parser.add_argument("--supplementary-coordinate-code", default=None,type=str,help="Coordinate conversion/prior code. Accepts: the literal 'rift_default' (use RIFT.lalsimutils.convert_waveform_coordinates plus RIFT-standard priors); a filesystem path ending in .py (loaded as a plugin); or any importable dotted module name. See RIFT.misc.coordinate_plugin for the interface plugins must implement.") -parser.add_argument("--supplementary-coordinate-function", default=None, type=str, help="Name of the entry-point callable inside the module named by --supplementary-coordinate-code. Defaults to 'convert_coordinates'.") -parser.add_argument("--supplementary-coordinate-ini", default=None, type=str, help="Optional ini file parsed and handed to the coordinate plugin's prepare() hook so it can read its own configuration block(s).") -parser.add_argument("--supplementary-coordinate-chart", default=None, type=str, help="Which chart (coordinate system) defined by the plugin to use for this run. Required when the plugin's CHARTS dict has more than one entry; ignored when the plugin doesn't define CHARTS. Different charts can share parameter names but imply different priors -- the chart name disambiguates which (name -> prior) mapping is installed.") -opts= parser.parse_args() - -#print(" WARNING: Always use internal_use_lnL for now ") -#opts.internal_use_lnL=True - -no_plots = no_plots | opts.no_plots -lnL_shift = 0 -lnL_default_large_negative = -500 -if opts.lnL_shift_prevent_overflow: - lnL_shift = opts.lnL_shift_prevent_overflow - - - -### Comparison data (from LI) -### - -downselect_dict = {} -dlist = [] -dlist_ranges=[] -if opts.downselect_parameter: - dlist = opts.downselect_parameter - dlist_ranges = map(eval,opts.downselect_parameter_range) -else: - dlist = [] - dlist_ranges = [] -if len(dlist) != len(dlist_ranges): - print(" downselect parameters inconsistent", dlist, dlist_ranges) -for indx in np.arange(len(dlist_ranges)): - downselect_dict[dlist[indx]] = dlist_ranges[indx] - -if opts.no_downselect: - downselect_dict={} - - -test_converged={} - -### -### Retrieve data -### -# int_sig sigma/L gamma1 gamma2 ... -col_lnL = 0 -dat_orig = dat = np.loadtxt(opts.fname) -dat_orig = dat[dat[:,col_lnL].argsort()] # sort http://stackoverflow.com/questions/2828059/sorting-arrays-in-numpy-by-column -print(" Original data size = ", len(dat), dat.shape) -dat_orig_names = None -with open(opts.fname,'r') as f: - header_str = f.readline() - header_str = header_str.rstrip() -dat_orig_names = header_str.replace('#','').split()[2:] - -### -### Parameters in use -### - -coord_names = opts.parameter # Used in fit -if coord_names is None: - coord_names = dat_orig_names -low_level_coord_names = coord_names # Used for Monte Carlo -if opts.parameter_implied: - coord_names = coord_names+opts.parameter_implied -if opts.parameter_nofit: - if opts.parameter is None: - low_level_coord_names = opts.parameter_nofit # Used for Monte Carlo - else: - low_level_coord_names = opts.parameter+opts.parameter_nofit # Used for Monte Carlo -error_factor = len(coord_names) -name_index_dict ={} -for name in dat_orig_names: - try: - name_index_dict[name] = 2+dat_orig_names.index(name) - except: - raise Exception(" Currently fitting parameter names must match columns in data file ") -# TeX dictionary -print(" Coordinate names for fit :, ", coord_names, " from ", dat_orig_names, " indexed as ", name_index_dict) -print(" Coordinate names for Monte Carlo :, ", low_level_coord_names) - - -### -### Integration ranges -### - -param_ranges = {} -for range_code in opts.integration_parameter_range: - name, range_str = range_code.split(':') - range_expr = eval(range_str) # define. Better to split on , for example - param_ranges[name] = np.array(range_expr) - -# Add in integration range for everything else, if nothing specified -for name in dat_orig_names: - if not name in param_ranges: - vals = dat_orig[:,name_index_dict[name]] - param_ranges[name] = [np.min(vals), np.max(vals)] - -### -### Prior functions : default is UNIFORM, since it is unmodeled and generic -### - -def uniform_prior(x): - return np.ones(x.shape) - -prior_map = {} -for name in low_level_coord_names: - prior_map[name] = uniform_prior - if not(name in param_ranges): - raise Exception(" {} not provided a parameter range ".format(name)) # change later, should fall back to using prior range from above - - -prior_range_map = param_ranges - -# prior_map = { 'gamma1':eos_param_uniform_prior, 'gamma2':eos_param_uniform_prior, -# } -# # Les: somewhat more aggressive: -# # gamma1: 0.2,2 -# # gamma2: -1.67, 1.7 -# prior_range_map = { 'gamma1': [0.707899,1.31], 'gamma2':[-1.6,1.7], 'gamma3':[-0.6,0.6], 'gamma4':[-0.02,0.02] -# } - - -### -### Supplemental likelihood: load (as in ILE) -### -supplemental_ln_likelihood= None -supplemental_ln_likelihood_prep =None -supplemental_ln_likelihood_parsed_ini=None -# Supplemental likelihood factor. Must have identical call sequence to 'likelihood_function'. Called with identical raw inputs (including cosines/etc) -if opts.supplementary_likelihood_factor_code and opts.supplementary_likelihood_factor_function: - print(" EXTERNAL SUPPLEMENTARY LIKELIHOOD FACTOR : {}.{} ".format(opts.supplementary_likelihood_factor_code,opts.supplementary_likelihood_factor_function)) - __import__(opts.supplementary_likelihood_factor_code) - external_likelihood_module = sys.modules[opts.supplementary_likelihood_factor_code] - supplemental_ln_likelihood = getattr(external_likelihood_module,opts.supplementary_likelihood_factor_function) - name_prep = "prepare_"+opts.supplementary_likelihood_factor_function - if hasattr(external_likelihood_module,name_prep): - supplemental_ln_likelhood_prep=getattr(external_likelihood_module,name_prep) - # Check for and load in ini file associated with external library - if opts.supplementary_likelihood_factor_ini: - import configparser as ConfigParser - config = ConfigParser.ConfigParser() - config.optionxform=str # force preserve case! - config.read(opts.supplementary_likelihood_factor_ini) - supplemental_ln_likelhood_parsed_ini=config - - # Call the ini file, tell it what coordinates we are using by name - supplemental_ln_likelihood_prep(config=supplemental_ln_likelihood_parsed_ini,coords=coord_names) - -supplemental_coordinate_convert = None -if opts.supplementary_coordinate_code: - # Resolve the user-supplied coordinate-convert plugin. The loader - # accepts three forms in --supplementary-coordinate-code: the literal - # 'rift_default', a filesystem path to a .py file, or an importable - # dotted module name. The plugin must expose a callable named by - # --supplementary-coordinate-function (default 'convert_coordinates') - # with the signature (x_in, coord_names, low_level_coord_names, **kwargs) - # returning a 2-D ndarray of shape (N, len(coord_names)). Plugins may - # optionally define prepare() (one-shot setup, gets the parsed ini and - # the active coord-name lists) and register_priors() (mutate prior_map - # in place). See RIFT.misc.coordinate_plugin for the full contract. - from RIFT.misc.coordinate_plugin import load_coordinate_converter - supplemental_coordinate_convert, _coord_plugin_module = load_coordinate_converter( - spec=opts.supplementary_coordinate_code, - function_name=opts.supplementary_coordinate_function, - ini_path=opts.supplementary_coordinate_ini, - coord_names=coord_names, - low_level_coord_names=low_level_coord_names, - chart=opts.supplementary_coordinate_chart, - opts=opts, - prior_map=prior_map, - prior_range_map=prior_range_map, - ) - -from sklearn.gaussian_process import GaussianProcessRegressor -from sklearn.gaussian_process.kernels import RBF, WhiteKernel, ConstantKernel as C - -def adderr(y): - val,err = y - return val+error_factor*err - -def fit_gp(x,y,x0=None,symmetry_list=None,y_errors=None,hypercube_rescale=False,fname_export="gp_fit"): - """ - x = array so x[0] , x[1], x[2] are points. - """ - - # If we are loading a fit, override everything else - if opts.fit_load_gp: - print(" WARNING: Do not re-use fits across architectures or versions : pickling is not transferrable ") - my_gp=joblib.load(opts.fit_load_gp) - return lambda x:my_gp.predict(x) - - # Amplitude: - # - We are fitting lnL. - # - We know the scale more or less: more than 2 in the log is bad - # Scale - # - because of strong correlations with chirp mass, the length scales can be very short - # - they are rarely very long, but at high mass can be long - # - I need to allow for a RANGE - - length_scale_est = [] - length_scale_bounds_est = [] - for indx in np.arange(len(x[0])): - # These length scales have been tuned by expereience - length_scale_est.append( 2*np.std(x[:,indx]) ) # auto-select range based on sampling retained - length_scale_min_here= np.max([1e-3,0.2*np.std(x[:,indx]/np.sqrt(len(x)))]) - length_scale_bounds_est.append( (length_scale_min_here , 5*np.std(x[:,indx]) ) ) # auto-select range based on sampling *RETAINED* (i.e., passing cut). Note that for the coordinates I usually use, it would be nonsensical to make the range in coordinate too small, as can occasionally happens - - print(" GP: Input sample size ", len(x), len(y)) - print(" GP: Estimated length scales ") - print(length_scale_est) - print(length_scale_bounds_est) - - if not (hypercube_rescale): - # These parameters have been hand-tuned by experience to try to set to levels comparable to typical lnL Monte Carlo error - kernel = WhiteKernel(noise_level=0.1,noise_level_bounds=(1e-2,1))+C(0.5, (1e-3,1e1))*RBF(length_scale=length_scale_est, length_scale_bounds=length_scale_bounds_est) - gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=8) - - gp.fit(x,y) - - print(" Fit: std: ", np.std(y - gp.predict(x)), "using number of features ", len(y)) - - if opts.fit_save_gp: - print(" Attempting to save fit ", opts.fit_save_gp+".pkl") - joblib.dump(gp,opts.fit_save_gp+".pkl") - - return lambda x: gp.predict(x) - else: - x_scaled = np.zeros(x.shape) - x_center = np.zeros(len(length_scale_est)) - x_center = np.mean(x) - print(" Scaling data to central point ", x_center) - for indx in np.arange(len(x)): - x_scaled[indx] = (x[indx] - x_center)/length_scale_est # resize - - kernel = WhiteKernel(noise_level=0.1,noise_level_bounds=(1e-2,1))+C(0.5, (1e-3,1e1))*RBF( len(x_center), (1e-3,1e1)) - gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=8) - - gp.fit(x_scaled,y) - print(" Fit: std: ", np.std(y - gp.predict(x_scaled)), "using number of features ", len(y)) # should NOT be perfect - - return lambda x,x0=x_center,scl=length_scale_est: gp.predict( (x-x0 )/scl) - -def map_funcs(func_list,obj): - return [func(obj) for func in func_list] -def fit_gp_pool(x,y,n_pool=10,**kwargs): - """ - Split the data into 10 parts, and return a GP that averages them - """ - x_copy = np.array(x) - y_copy = np.array(y) - indx_list =np.arange(len(x_copy)) - np.random.shuffle(indx_list) # acts in place - partition_list = np.array_split(indx_list,n_pool) - gp_fit_list =[] - for part in partition_list: - print(" Fitting partition ") - gp_fit_list.append(fit_gp(x[part],y[part],**kwargs)) - fn_out = lambda x: np.mean( map_funcs( gp_fit_list,x), axis=0) - print(" Testing ", fn_out([x[0]])) - return fn_out - - -def fit_rf(x,y,y_errors=None,fname_export='nn_fit'): -# from sklearn.ensemble import RandomForestRegressor - from sklearn.ensemble import ExtraTreesRegressor - # Instantiate model. Usually not that many structures to find, don't overcomplicate - # - should scale like number of samples - rf = ExtraTreesRegressor(n_estimators=100, verbose=True,n_jobs=-1) # no more than 5% of samples in a leaf - if y_errors is None: - rf.fit(x,y) - else: - rf.fit(x,y,sample_weight=1./y_errors**2) - - ### reject points with infinities : problems for inputs - def fn_return(x_in,rf=rf): - f_out = -lnL_default_large_negative*np.ones(len(x_in)) - # remove infinity or Nan - indx_ok = np.all(np.isfinite(np.array(x_in,dtype=float)),axis=-1) - # rf internally uses float32, so we need to remove points > 10^37 or so ! - # ... this *should* never happen due to bounds constraints, but ... - indx_ok_size = np.all( np.logical_not(np.greater(np.abs(x_in),1e37)), axis=-1) - indx_ok = np.logical_and(indx_ok, indx_ok_size) - f_out[indx_ok] = rf.predict(x_in[indx_ok]) - return f_out -# fn_return = lambda x_in: rf.predict(x_in) - - print( " Demonstrating RF") # debugging - residuals = rf.predict(x)-y - print( " std ", np.std(residuals), np.max(y), np.max(fn_return(x))) - return fn_return - - - - - -# initialize -dat_mass = [] -weights = [] -n_params = -1 - - - ### - ### Convert data. RIGHT NOW JUST DOWNSELECTING, no intermediate fitting parameters defined - ### - -# Naive convert: no downselect. -if (supplemental_coordinate_convert ==None): - - indx_of_orig_names = np.array([ dat_orig_names.index(coord_names[k]) for k in range(len(coord_names))]) - dat_out = [] - for line in dat: - dat_here= np.zeros(len(coord_names)+2) - if line[col_lnL+1] > opts.sigma_cut: - print("skipping", line) - continue - dat_here[:-2] = line[indx_of_orig_names+2]#line[2:len(coord_names)+2] # modify to use names! - dat_here[-2] = line[0] - dat_here[-1] = line[1] - dat_out.append(dat_here) - dat_out= np.array(dat_out) - - # Repack data, WHOLE SET - X =dat_out[:,0:len(coord_names)] - Y = dat_out[:,-2] - if np.max(Y)<0 and lnL_shift ==0: - lnL_shift = -100 - np.max(Y) # force it to be offset/positive -- may help some configurations. Remember our adaptivity is silly. - Y_err = dat_out[:,-1] - def convert_coords(x): - return x - -else: - # Pack data, using coordinate converter. Note later calculations MUST use the converter - X = supplemental_coordinate_convert(dat[:,2:], coord_names=coord_names, low_level_coord_names=dat_orig_names) # convert and generate X - Y = dat[:,0] - Y_err = dat[:,1] - if np.max(Y)<0 and lnL_shift ==0: - lnL_shift = -100 - np.max(Y) # force it to be offset/positive -- may help some configurations. Remember our adaptivity is silly. - def convert_coords(x_in): - return supplemental_coordinate_convert(x_in, coord_names=coord_names, low_level_coord_names=dat_orig_names) # convert and generate X -# Save copies for later (plots) -X_orig = X.copy() -Y_orig = Y.copy() - - - -# Eliminate values with Y too small -max_lnL = np.max(Y) -if np.isinf(opts.lnL_offset): - indx_ok= np.ones(len(Y),dtype=bool) # default case, we preserve all the data -else: - indx_ok = np.array(Y>np.max(Y)-opts.lnL_offset,dtype=bool) # force cast : sometimes indx_ok is a mappable object? -n_ok = np.sum(indx_ok) -# Provide some random points, to insure reasonable tapering behavior away from the sample -print(" Points used in fit : ", n_ok, " out of ", len(indx_ok), " given max lnL ", max_lnL) -if max_lnL < 10 and np.mean(Y) > -10: # second condition to allow synthetic tests not to fail, as these often have maxlnL not large - print(" Resetting to use ALL input data -- beware ! ") - # nothing matters, we will reject it anyways - indx_ok = np.ones(len(Y),dtype=bool) -elif n_ok < 10: # and max_lnL > 30: - # mark the top 10 elements and use them for fits - # this may be VERY VERY DANGEROUS if the peak is high and poorly sampled - idx_sorted_index = np.lexsort((np.arange(len(Y)), Y)) # Sort the array of Y, recovering index values - indx_list = np.array( [[k, Y[k]] for k in idx_sorted_index]) # pair up with the weights again - indx_list = indx_list[::-1] # reverse, so most significant are first - indx_ok = list(map(int,indx_list[:10,0])) - print(" Revised number of points for fit: ", np.sum(indx_ok), len(indx_ok), indx_list[:10]) -X_raw = X.copy() - - - -my_fit= None -if opts.fit_method =='gp': - print(" FIT METHOD : GP") - # some data truncation IS used for the GP, but beware - print(" Truncating data set used for GP, to reduce memory usage needed in matrix operations") - X=X[indx_ok] - Y=Y[indx_ok] - lnL_shift - Y_err = Y_err[indx_ok] - # Cap the total number of points retained, AFTER the threshold cut - if opts.cap_points< len(Y) and opts.cap_points> 100: - n_keep = opts.cap_points - indx = np.random.choice(np.arange(len(Y)),size=n_keep,replace=False) - Y=Y[indx] - X=X[indx] - Y_err=Y_err[indx] - if opts.ignore_errors_in_data: - Y_err=None - my_fit = fit_gp(X,Y,y_errors=Y_err) -elif opts.fit_method == 'rf': - print( " FIT METHOD ", opts.fit_method, " IS RF ") - # NO data truncation for NN needed? To be *consistent*, have the code function the same way as the others - X=X[indx_ok] - Y=Y[indx_ok] - lnL_shift - Y_err = Y_err[indx_ok] - # Cap the total number of points retained, AFTER the threshold cut - if opts.cap_points< len(Y) and opts.cap_points> 100: - n_keep = opts.cap_points - indx = np.random.choice(np.arange(len(Y)),size=n_keep,replace=False) - Y=Y[indx] - X=X[indx] - Y_err=Y_err[indx] - if opts.ignore_errors_in_data: - Y_err=None - my_fit = fit_rf(X,Y,y_errors=Y_err) - - -# Sort for later convenience (scatterplots, etc) -indx = Y.argsort()#[::-1] -X=X[indx] -Y=Y[indx] - - - -### -### Integrate posterior -### - - -sampler = mcsampler.MCSampler() -if opts.sampler_method == "adaptive_cartesian_gpu": - sampler = mcsamplerGPU.MCSampler() - sampler.xpy = xpy_default - sampler.identity_convert=identity_convert - mcsampler = mcsamplerGPU # force use of routines in that file, for properly configured GPU-accelerated code as needed - - # if opts.sampler_xpy == "numpy": - # mcsampler.set_xpy_to_numpy() - # sampler.xpy= numpy - # sampler.identity_convert= lambda x: x -if opts.sampler_method == "GMM": - sampler = mcsamplerEnsemble.MCSampler() -elif opts.sampler_method == "AV": - sampler = mcsamplerAdaptiveVolume.MCSampler() - opts.internal_use_lnL= True # required! -elif opts.sampler_method == "portfolio": - use_portfolio=True - sampler = None - sampler_list = [] - sampler_types = opts.sampler_portfolio - for name in sampler_types: - if name =='AV': - sampler = mcsamplerAdaptiveVolume.MCSampler() - if name =='GMM': - sampler = mcsamplerEnsemble.MCSampler() - opts.sampler_method = 'GMM' # this will force the creation/parsing of GMM-specific arguments below, so they are properly passed - if name == "adaptive_cartesian_gpu": - sampler = mcsamplerGPU.MCSampler() - sampler.xpy = xpy_default - sampler.identity_convert=identity_convert - if name == 'NFlow': - # expensive import, only do if requested - try: - import RIFT.integrators.mcsamplerNFlow as mcsamplerNFlow - mcsampler_NF_ok = True - except: - print(" No mcsamplerNFlow ") - continue - sampler = mcsamplerNFlow.MCSampler() - sampler.xpy = xpy_default - sampler.identity_convert=identity_convert - if sampler is None: - # Don't add unknown type - continue - print('PORTFOLIO: adding {} '.format(name)) - sampler_list.append(sampler) - sampler = mcsamplerPortfolio.MCSampler(portfolio=sampler_list) - - -## -## Loop over param names -## -for p in coord_names: - prior_here = prior_map[p] - range_here = prior_range_map[p] - - sampler.add_parameter(p, pdf=np.vectorize(lambda x:1), prior_pdf=prior_here,left_limit=range_here[0],right_limit=range_here[1],adaptive_sampling=True) - -likelihood_function = None -log_likelihood_function = None -def log_likelihood_function(*args): - return my_fit(convert_coords(np.array([*args]).T )) - -if len(coord_names) ==1: - def likelihood_function(x): - if isinstance(x,float): - return np.exp(my_fit([x])) - else: - return np.exp(my_fit(convert_coords(np.c_[x]))) -if len(coord_names) ==2: - def likelihood_function(x,y): - if isinstance(x,float): - return np.exp(my_fit([x,y])) - else: -# return np.exp(my_fit(convert_coords(np.array([x,y],dtype=internal_dtype).T))) - return np.exp(my_fit(convert_coords(np.c_[x,y]))) -if len(coord_names) ==3: - def likelihood_function(x,y,z): - if isinstance(x,float): - return np.exp(my_fit([x,y,z])) - else: -# return np.exp(my_fit(convert_coords(np.array([x,y,z],dtype=internal_dtype).T))) - return np.exp(my_fit(convert_coords(np.c_[x,y,z]))) -if len(coord_names) ==4: - def likelihood_function(x,y,z,a): - if isinstance(x,float): - return np.exp(my_fit([x,y,z,a])) - else: -# return np.exp(my_fit(convert_coords(np.array([x,y,z,a],dtype=internal_dtype).T))) - return np.exp(my_fit(convert_coords(np.c_[x,y,z,a]))) -if len(coord_names) ==5: - def likelihood_function(x,y,z,a,b): - if isinstance(x,float): - return np.exp(my_fit([x,y,z,a,b])) - else: -# return np.exp(my_fit(convert_coords(np.array([x,y,z,a,b],dtype=internal_dtype).T))) - return np.exp(my_fit(convert_coords(np.c_[x,y,z,a,b]))) -if len(coord_names) ==6: - def likelihood_function(x,y,z,a,b,c): - if isinstance(x,float): - return np.exp(my_fit([x,y,z,a,b,c])) - else: -# return np.exp(my_fit(convert_coords(np.array([x,y,z,a,b,c],dtype=internal_dtype).T))) - return np.exp(my_fit(convert_coords(np.c_[x,y,z,a,b,c]))) -if len(coord_names) ==7: - def likelihood_function(x,y,z,a,b,c,d): - if isinstance(x,float): - return np.exp(my_fit([x,y,z,a,b,c,d])) - else: - return np.exp(my_fit(convert_coords(np.c_[x,y,z,a,b,c,d]))) -if len(coord_names) ==8: - def likelihood_function(x,y,z,a,b,c,d,e): - if isinstance(x,float): - return np.exp(my_fit([x,y,z,a,b,c,d,e])) - else: - return np.exp(my_fit(convert_coords(np.c_[x,y,z,a,b,c,d,e]))) -if len(coord_names) ==9: - def likelihood_function(x,y,z,a,b,c,d,e,f): - if isinstance(x,float): - return np.exp(my_fit([x,y,z,a,b,c,d,e,f])) - else: - return np.exp(my_fit(convert_coords(np.c_[x,y,z,a,b,c,d,e,f]))) -if len(coord_names) ==10: - def likelihood_function(x,y,z,a,b,c,d,e,f,g): - if isinstance(x,float): - return np.exp(my_fit([x,y,z,a,b,c,d,e,f,g])) - else: - return np.exp(my_fit(convert_coords(np.c_[x,y,z,a,b,c,d,e,f,g]))) - - - - -n_step = opts.n_step -my_exp = np.min([1,0.8*np.log(n_step)/np.max(Y)]) # target value : scale to slightly sublinear to (n_step)^(0.8) for Ymax = 200. This means we have ~ n_step points, with peak value wt~ n_step^(0.8)/n_step ~ 1/n_step^(0.2), limiting contrast -if np.max(Y_orig) < 0: # for now, don't use a weight exponent if we are negative: can't use guess based from GW experience - my_exp = 1 -#my_exp = np.max([my_exp, 1/np.log(n_step)]) # do not allow extreme contrast in adaptivity, to the point that one iteration will dominate -print(" Weight exponent ", my_exp, " and peak contrast (exp)*lnL = ", my_exp*np.max(Y), "; exp(ditto) = ", np.exp(my_exp*np.max(Y)), " which should ideally be no larger than of order the number of trials in each epoch, to insure reweighting doesn't select a single preferred bin too strongly. Note also the floor exponent also constrains the peak, de-facto") - - -extra_args={} -if opts.sampler_method == "GMM": - n_max_blocks = ((1.0*int(opts.n_max))/n_step) - n_comp = opts.internal_n_comp # default - def parse_corr_params(my_str): - """ - Takes a string with no spaces, and returns a tuple - """ - corr_param_names = my_str.replace(',',' ').split() - corr_param_indexes = [] - for param in corr_param_names: - try: - indx = low_level_coord_names.index(param) - corr_param_indexes.append(indx) - except: - continue - return tuple(corr_param_indexes) - if opts.internal_correlate_parameters == 'all': - gmm_dict = {tuple(range(len(low_level_coord_names))):None} # integrate *jointly* in all parameters together - elif not (opts.internal_correlate_parameters is None): - # Correlate identified parameters - my_blocks = opts.internal_correlate_parameters.split() - my_tuples = list(map( parse_corr_params, my_blocks)) - gmm_dict = {x:None for x in my_tuples} - print(" GMM: Proposed correlated ", gmm_dict) - # What about un-labelled parameters? Make a null tuple for them as well - correlated_params = set(); correlated_params = correlated_params.union( *list(map(set,my_tuples))) - uncorrelated_params = set(np.arange(len(low_level_coord_names))); - uncorrelated_params = uncorrelated_params.difference(correlated_params) - for x in uncorrelated_params: - gmm_dict[(x,)] = None - print( " Using correlated GMM sampling on sampling variable indexes " , gmm_dict, " out of ", low_level_coord_names) - else: - param_indexes = range(len(low_level_coord_names)) - gmm_dict = {(k,):None for k in param_indexes} # no correlations -# lnL_offset_saving = opts.lnL_offset - lnL_offset_saving = -20 # for simplicity, hardcode for now for preserving points - print("GMM ", gmm_dict) - extra_args = {'n_comp':n_comp,'max_iter':n_max_blocks,'L_cutoff': None,'gmm_dict':gmm_dict,'max_err':50, 'lnw_failure_cut':-np.inf} # made up for now, should adjust -extra_args.update({ - "n_adapt": 100, # Number of chunks to allow adaption over - "history_mult": 10, # Multiplier on 'n' - number of samples to estimate marginalized 1D histograms with, - "force_no_adapt":opts.force_no_adapt, - "tripwire_fraction":opts.tripwire_fraction -}) - -fn_passed = likelihood_function -if supplemental_ln_likelihood: - fn_passed = lambda *x: likelihood_function(*x)*np.exp(supplemental_ln_likelihood(*x)) -if opts.internal_use_lnL: - fn_passed = log_likelihood_function # helps regularize large values - if supplemental_ln_likelihood: - fn_passed = lambda *x: log_likelihood_function(*x) + supplemental_ln_likelihood(*x) - extra_args.update({"use_lnL":True,"return_lnI":True}) - - - -res, var, neff, dict_return = sampler.integrate(fn_passed, *coord_names, verbose=True,nmax=int(opts.n_max),n=n_step,neff=opts.n_eff, save_intg=True,tempering_adapt=True, floor_level=1e-3,igrand_threshold_p=1e-3,convergence_tests=test_converged,adapt_weight_exponent=my_exp,no_protect_names=True,**extra_args) # weight ecponent needs better choice. We are using arbitrary-name functions - - -# Save result -- needed for odds ratios, etc. -np.savetxt(opts.fname_output_integral, [np.log(res)]) - -if neff < len(coord_names): - print(" PLOTS WILL FAIL ") - print(" Not enough independent Monte Carlo points to generate useful contours") - - -samples = sampler._rvs -print(samples.keys()) -n_params = len(coord_names) -dat_mass = np.zeros((len(samples[coord_names[0]]),n_params+3)) -if not(opts.internal_use_lnL): - dat_logL = np.log(samples["integrand"]) -else: - if 'log_integrand' in samples: - dat_logL = samples['log_integrand'] - else: - dat_logL = samples["integrand"] -lnLmax = np.max(dat_logL[np.isfinite(dat_logL)]) -print(" Max lnL ", np.max(dat_logL)) - -n_ESS = -1 -if True: - # Compute n_ESS. Should be done by integrator! - if 'log_joint_s_prior' in samples: - weights_scaled = np.exp(dat_logL - lnLmax + samples["log_joint_prior"] - samples["log_joint_s_prior"]) - # dictionary, write this to enable later use of it - samples["joint_s_prior"] = np.exp(samples["log_joint_s_prior"]) - samples["joint_prior"] = np.exp(samples["log_joint_prior"]) - else: - weights_scaled = np.exp(dat_logL - lnLmax)*sampler._rvs["joint_prior"]/sampler._rvs["joint_s_prior"] - weights_scaled = weights_scaled/np.max(weights_scaled) # try to reduce dynamic range - n_ESS = np.sum(weights_scaled)**2/np.sum(weights_scaled**2) - print(" n_eff n_ESS ", neff, n_ESS) - - -# Throw away stupid points that don't impact the posterior -indx_ok = np.ones(len(dat_logL),dtype=bool) -if not('log_joint_s_prior' in samples): - indx_ok=samples["joint_s_prior"]>0 -indx_ok = np.logical_and(dat_logL > np.max(dat_logL)-opts.lnL_offset ,indx_ok) -for p in coord_names: - samples[p] = samples[p][indx_ok] -dat_logL = dat_logL[indx_ok] -print(samples.keys()) -samples["joint_prior"] =samples["joint_prior"][indx_ok] -samples["joint_s_prior"] =samples["joint_s_prior"][indx_ok] - - - -### -### 1d posteriors of the coordinates used for sampling [EQUALLY WEIGHTED, BIASED because physics cuts aren't applied] -### - -p = samples["joint_prior"] -ps =samples["joint_s_prior"] -lnL = dat_logL -lnLmax = np.max(lnL) -weights = np.exp(lnL-lnLmax)*p/ps - - - -print(" ---- Subset for posterior samples (and further corner work) --- ") - - -p_norm = (weights/np.sum(weights)) -indx_list = np.random.choice(np.arange(len(weights)), p=p_norm.astype(np.float64),size=opts.n_output_samples) - - -dat_out = np.zeros( (opts.n_output_samples,2+len(dat_orig_names)) ) - -# Initialize fixed parameters -if len(coord_names) < len(dat_orig_names): # not needed if all params are in fit - - if len(dat) < opts.n_output_samples: - print(" NOTE: original data shorter than requested output; adding",opts.n_output_samples-len(dat),"duplicate fill lines from original data.") - newlines = None - if opts.n_output_samples > 2*len(dat): - newlines = dat[:] - newlen = len(newlines) - while newlen < opts.n_output_samples: - newerlines = dat[:opts.n_output_samples-newlen] #will only get up to len(dat) lines - newlines = np.concatenate((newlines,newerlines), axis=0) - newlen = len(newlines) - else: - newlines = dat[:opts.n_output_samples-len(dat)] #duplicate lines to fill - dat = np.concatenate((dat,newlines), axis=0) #should be fine since dat isn't used after this - - for c in np.arange(len(dat_orig_names)): - if dat_orig_names[c] not in coord_names: - print(" Not in coord_names:",dat_orig_names[c],"; adding to output as constant.") - outidx = name_index_dict[dat_orig_names[c]] # write in correct place - if len(dat) > opts.n_output_samples: - dat_out[:,outidx] = dat[:opts.n_output_samples,outidx] #truncate original data to fit (not ideal) - else: #len(dat) <= n_output_samples (if dat was <, should now be =) - dat_out[:,outidx] = dat[:,outidx] - -# Fill data from PE -for indx in np.arange(len(coord_names)): - vals = samples[coord_names[indx]][indx_list] # load in data for this column - outindx = name_index_dict[ coord_names[indx]] # write in correct place - dat_out[:,outindx] = vals - -# NOTE: if m1 or m2 is "constant" (i.e., not in samples), the possibility for m2 > m1 arises! Re-sort masses here to avoid; use below code. -#if ("m1" not in coord_names) or ("m2" not in coord_names): -# print(" NOTE: re-sorting masses so m1 > m2 (precaution)") -# m1dx = name_index_dict["m1"] -# m1 = np.maximum(dat_out[:,m1dx], dat_out[:,m1dx+1]) #N.B.: assumes m2 col index after m1 col -# m2 = np.minimum(dat_out[:,m1dx], dat_out[:,m1dx+1]) -# dat_out[:,m1dx] = m1 -# dat_out[:,m1dx+1] = m2 - -print(" Saving to ", opts.fname_output_samples+".dat") -np.savetxt(opts.fname_output_samples+".dat",dat_out,header=" lnL sigma_lnL " + ' '.join(dat_orig_names)) - +#!/usr/bin/env python +# +# util_ConstructEOSPosterior.py +# - takes in *generic-format* hyperparameter likelihood data +# - uses *uniform* prior on hyperparameters. [non-uniform priors can be applied by the user with a supplementary function] +# - generates posterior distribution by weighted Monte Carlo +# +# EXAMPLE: +# python `which util_ConstructEOSPosterior.py` --fname fake_int_grid.dat --parameter gamma1 --parameter gamma2 --lnL-offset 50 + +import RIFT.interpolators.BayesianLeastSquares as BayesianLeastSquares + +import argparse +import sys +import numpy as np +import numpy.lib.recfunctions +import scipy +import scipy.stats +import functools +import itertools + +import joblib # http://scikit-learn.org/stable/modules/model_persistence.html + +# GPU acceleration: NOT YET, just do usual +xpy_default=numpy # just in case, to make replacement clear and to enable override +identity_convert = lambda x: x # trivial return itself +cupy_success=False + +no_plots = True +internal_dtype = np.float32 # only use 32 bit storage! Factor of 2 memory savings for GP code in high dimensions + + +try: + import matplotlib.pyplot as plt + from mpl_toolkits.mplot3d import Axes3D + import matplotlib.lines as mlines + import corner + + no_plots=False +except ImportError: + print(" - no matplotlib - ") + + +from sklearn.preprocessing import PolynomialFeatures +if True: +#try: + import RIFT.misc.ModifiedScikitFit as msf # altenative polynomialFeatures +else: +#except: + print(" - Faiiled ModifiedScikitFit : No polynomial fits - ") +from sklearn import linear_model + +from igwn_ligolw import lsctables, utils, ligolw +lsctables.use_in(ligolw.LIGOLWContentHandler) + +import RIFT.integrators.mcsampler as mcsampler +try: + import RIFT.integrators.mcsamplerEnsemble as mcsamplerEnsemble + mcsampler_gmm_ok = True +except: + print(" No mcsamplerEnsemble ") + mcsampler_gmm_ok = False +try: + import RIFT.integrators.mcsamplerGPU as mcsamplerGPU + mcsampler_gpu_ok = True + mcsamplerGPU.xpy_default =xpy_default # force consistent, in case GPU present + mcsamplerGPU.identity_convert = identity_convert +except: + print( " No mcsamplerGPU ") + mcsampler_gpu_ok = False +try: + import RIFT.integrators.mcsamplerAdaptiveVolume as mcsamplerAdaptiveVolume + mcsampler_AV_ok = True +except: + print(" No mcsamplerAV ") + mcsampler_AV_ok = False +try: + import RIFT.integrators.mcsamplerPortfolio as mcsamplerPortfolio + mcsampler_Portfolio_ok = True +except: + print(" No mcsamplerPortolfio ") + + + + + +def add_field(a, descr): + """Return a new array that is like "a", but has additional fields. + + Arguments: + a -- a structured numpy array + descr -- a numpy type description of the new fields + + The contents of "a" are copied over to the appropriate fields in + the new array, whereas the new fields are uninitialized. The + arguments are not modified. + + >>> sa = numpy.array([(1, 'Foo'), (2, 'Bar')], \ + dtype=[('id', int), ('name', 'S3')]) + >>> sa.dtype.descr == numpy.dtype([('id', int), ('name', 'S3')]) + True + >>> sb = add_field(sa, [('score', float)]) + >>> sb.dtype.descr == numpy.dtype([('id', int), ('name', 'S3'), \ + ('score', float)]) + True + >>> numpy.all(sa['id'] == sb['id']) + True + >>> numpy.all(sa['name'] == sb['name']) + True + """ + if a.dtype.fields is None: + raise ValueError("`A' must be a structured numpy array") + b = numpy.empty(a.shape, dtype=a.dtype.descr + descr) + for name in a.dtype.names: + b[name] = a[name] + return b + + +parser = argparse.ArgumentParser() +parser.add_argument("--fname",help="filename of *.dat file (EOS-format: lnL sigma_lnL p1 p2 ... . ASSUME any stacking over events already performed.") +parser.add_argument("--fname-output-samples",default="output-EOS-samples",help="output grid") +parser.add_argument("--fname-output-integral",default="output-EOS-integral",help="for evidencees and pipeline compatibility") +parser.add_argument("--n-output-samples",default=2000,type=int,help="output posterior samples (default 3000)") +parser.add_argument("--eos-param", type=str, default=None, help="parameterization of equation of state [spectral only, for now]") +parser.add_argument("--parameter", action='append', help="Parameters used as fitting parameters AND varied at a low level to make a posterior. Currently can only specify gamma1,gamma2, ..., and these MUST be columns in --fname. IF NOT PROVIDED, DEFAULTS TO LIST IN FILE. ") +parser.add_argument("--parameter-implied", action='append', help="Parameter used in fit, but not independently varied for Monte Carlo. For EOS objects, only possible for physical quantities like R1.4, etc. NOT YET PROVIDED") +#parser.add_argument("--no-adapt-parameter",action='append',help="Disable adaptive sampling in a parameter. Useful in cases where a parameter is not well-constrained, and the a prior sampler is well-chosen.") +parser.add_argument("--parameter-nofit", action='append', help="Parameter used to initialize the implied parameters, and varied at a low level, but NOT the fitting parameters.") +parser.add_argument("--integration-parameter-range",action='append', help="Integration parameter ranges. Syntax is name:[a,b]") +parser.add_argument("--downselect-parameter",action='append', help='Name of parameter to be used to eliminate grid points ') +parser.add_argument("--downselect-parameter-range",action='append',type=str) +parser.add_argument("--no-downselect",action='store_true') +parser.add_argument("--aligned-prior", default="uniform",help="Options are 'uniform', 'volumetric', and 'alignedspin-zprior'") +parser.add_argument("--cap-points",default=-1,type=int,help="Maximum number of points in the sample, if positive. Useful to cap the number of points ued for GP. See also lnLoffset. Note points are selected AT RANDOM") +parser.add_argument("--lambda-max", default=4000,type=float,help="Maximum range of 'Lambda' allowed. Minimum value is ZERO, not negative.") +parser.add_argument("--lnL-shift-prevent-overflow",default=None,type=float,help="Define this quantity to be a large positive number to avoid overflows. Note that we do *not* define this dynamically based on sample values, to insure reproducibility and comparable integral results. BEWARE: If you shift the result to be below zero, because the GP relaxes to 0, you will get crazy answers.") +parser.add_argument("--lnL-offset",type=float,default=np.inf,help="lnL offset") +parser.add_argument("--lnL-cut",type=float,default=None,help="lnL cut [MANUAL]") +parser.add_argument("--sigma-cut",type=float,default=0.6,help="Eliminate points with large error from the fit.") +parser.add_argument("--ignore-errors-in-data",action='store_true',help='Ignore reported error in lnL. Helpful for testing purposes (i.e., if the error is zero)') +parser.add_argument("--lnL-peak-insane-cut",type=float,default=np.inf,help="Throw away lnL greater than this value. Should not be necessary") +parser.add_argument("--verbose", action="store_true",default=False, help="Required to build post-frame-generating sanity-test plots") +parser.add_argument("--save-plots",default=False,action='store_true', help="Write plots to file (only useful for OSX, where interactive is default") +parser.add_argument("--n-max",default=3e5,type=float) +parser.add_argument("--n-step",default=1e5,type=int) +parser.add_argument("--n-eff",default=3e3,type=int) +parser.add_argument("--pool-size",default=3,type=int,help="Integer. Number of GPs to use (result is averaged)") +parser.add_argument("--fit-method",default="rf",help="rf (default) : rf|gp|quadratic|polynomial|gp_hyper|gp_lazy|cov|kde. Note 'polynomial' with --fit-order 0 will fit a constant") +parser.add_argument("--fit-load-gp",default=None,type=str,help="Filename of GP fit to load. Overrides fitting process, but user MUST correctly specify coordinate system to interpret the fit with. Does not override loading and converting the data.") +parser.add_argument("--fit-save-gp",default=None,type=str,help="Filename of GP fit to save. ") +parser.add_argument("--fit-order",type=int,default=2,help="Fit order (polynomial case: degree)") +parser.add_argument("--no-plots",action='store_true') +parser.add_argument("--using-eos-type", type=str, default=None, help="Name of EOS parameterization (must match what is used for inputs). Will use EOS parameterization to identify appropriate field headers") +parser.add_argument("--sampler-method",default="adaptive_cartesian",help="adaptive_cartesian|GMM|adaptive_cartesian_gpu") +parser.add_argument("--sampler-portfolio",default=None,action='append',type=str,help="comma-separated strings, matching sampler methods other than portfolio") +parser.add_argument("--sampler-portfolio-args",default=None, action='append', type=str, help='eval-able dictionary to be passed to that sampler_') +parser.add_argument("--internal-use-lnL",action='store_true',help="integrator internally manipulates lnL.. ") +parser.add_argument("--internal-correlate-parameters",default=None,type=str,help="comman-separated string indicating parameters that should be sampled allowing for correlations. Must be sampling parameters. Only implemented for gmm. If string is 'all', correlate *all* parameters") +parser.add_argument("--internal-n-comp",default=1,type=int,help="number of components to use for GMM sampling. Default is 1, because we expect a unimodal posterior in well-adapted coordinates. If you have crappy coordinates, use more") +parser.add_argument("--force-no-adapt",action='store_true',help="Disable adaptation, both of the tempering exponent *and* the individual sampling prior(s)") +parser.add_argument("--tripwire-fraction",default=0.05,type=float,help="Fraction of nmax of iterations after which n_eff needs to be greater than 1+epsilon for a small number epsilon") + +# Supplemental likelihood factors: convenient way to effectively change the mass/spin prior in arbitrary ways for example +# Note this supplemental factor is passed the *fitting* arguments, directly. Use with extreme caution, since we often change the dimension in a DAG +parser.add_argument("--supplementary-likelihood-factor-code", default=None,type=str,help="Import a module (in your pythonpath!) containing a supplementary factor for the likelihood. Used to impose supplementary external priors of arbitrary complexity and external dependence (e.g., imposing alternate EOS priors)") +parser.add_argument("--supplementary-likelihood-factor-function", default=None,type=str,help="With above option, specifies the specific function used as an external likelihood. EXPERTS ONLY") +parser.add_argument("--supplementary-likelihood-factor-ini", default=None,type=str,help="With above option, specifies an ini file that is parsed (here) and passed to the preparation code, called when the module is first loaded, to configure the module. EXPERTS ONLY") +parser.add_argument("--supplementary-coordinate-code", default=None,type=str,help="Coordinate conversion/prior code. Accepts: the literal 'rift_default' (use RIFT.lalsimutils.convert_waveform_coordinates plus RIFT-standard priors); a filesystem path ending in .py (loaded as a plugin); or any importable dotted module name. See RIFT.misc.coordinate_plugin for the interface plugins must implement.") +parser.add_argument("--supplementary-coordinate-function", default=None, type=str, help="Name of the entry-point callable inside the module named by --supplementary-coordinate-code. Defaults to 'convert_coordinates'.") +parser.add_argument("--supplementary-coordinate-ini", default=None, type=str, help="Optional ini file parsed and handed to the coordinate plugin's prepare() hook so it can read its own configuration block(s).") +parser.add_argument("--supplementary-coordinate-chart", default=None, type=str, help="Which chart (coordinate system) defined by the plugin to use for this run. Required when the plugin's CHARTS dict has more than one entry; ignored when the plugin doesn't define CHARTS. Different charts can share parameter names but imply different priors -- the chart name disambiguates which (name -> prior) mapping is installed.") +opts= parser.parse_args() + +#print(" WARNING: Always use internal_use_lnL for now ") +#opts.internal_use_lnL=True + +no_plots = no_plots | opts.no_plots +lnL_shift = 0 +lnL_default_large_negative = -500 +if opts.lnL_shift_prevent_overflow: + lnL_shift = opts.lnL_shift_prevent_overflow + + + +### Comparison data (from LI) +### + +downselect_dict = {} +dlist = [] +dlist_ranges=[] +if opts.downselect_parameter: + dlist = opts.downselect_parameter + dlist_ranges = map(eval,opts.downselect_parameter_range) +else: + dlist = [] + dlist_ranges = [] +if len(dlist) != len(dlist_ranges): + print(" downselect parameters inconsistent", dlist, dlist_ranges) +for indx in np.arange(len(dlist_ranges)): + downselect_dict[dlist[indx]] = dlist_ranges[indx] + +if opts.no_downselect: + downselect_dict={} + + +test_converged={} + +### +### Retrieve data +### +# int_sig sigma/L gamma1 gamma2 ... +col_lnL = 0 +dat_orig = dat = np.loadtxt(opts.fname) +dat_orig = dat[dat[:,col_lnL].argsort()] # sort http://stackoverflow.com/questions/2828059/sorting-arrays-in-numpy-by-column +print(" Original data size = ", len(dat), dat.shape) +dat_orig_names = None +with open(opts.fname,'r') as f: + header_str = f.readline() + header_str = header_str.rstrip() +dat_orig_names = header_str.replace('#','').split()[2:] + +### +### Parameters in use +### + +coord_names = opts.parameter # Used in fit +if coord_names is None: + coord_names = dat_orig_names +low_level_coord_names = coord_names # Used for Monte Carlo +if opts.parameter_implied: + coord_names = coord_names+opts.parameter_implied +if opts.parameter_nofit: + if opts.parameter is None: + low_level_coord_names = opts.parameter_nofit # Used for Monte Carlo + else: + low_level_coord_names = opts.parameter+opts.parameter_nofit # Used for Monte Carlo +error_factor = len(coord_names) +name_index_dict ={} +for name in dat_orig_names: + try: + name_index_dict[name] = 2+dat_orig_names.index(name) + except: + raise Exception(" Currently fitting parameter names must match columns in data file ") +# TeX dictionary +print(" Coordinate names for fit :, ", coord_names, " from ", dat_orig_names, " indexed as ", name_index_dict) +print(" Coordinate names for Monte Carlo :, ", low_level_coord_names) + + +### +### Integration ranges +### + +param_ranges = {} +for range_code in opts.integration_parameter_range: + name, range_str = range_code.split(':') + range_expr = eval(range_str) # define. Better to split on , for example + param_ranges[name] = np.array(range_expr) + +# Add in integration range for everything else, if nothing specified +for name in dat_orig_names: + if not name in param_ranges: + vals = dat_orig[:,name_index_dict[name]] + param_ranges[name] = [np.min(vals), np.max(vals)] + +### +### Prior functions : default is UNIFORM, since it is unmodeled and generic +### + +def uniform_prior(x): + return np.ones(x.shape) + +prior_map = {} +for name in low_level_coord_names: + prior_map[name] = uniform_prior + if not(name in param_ranges): + raise Exception(" {} not provided a parameter range ".format(name)) # change later, should fall back to using prior range from above + + +prior_range_map = param_ranges + +# prior_map = { 'gamma1':eos_param_uniform_prior, 'gamma2':eos_param_uniform_prior, +# } +# # Les: somewhat more aggressive: +# # gamma1: 0.2,2 +# # gamma2: -1.67, 1.7 +# prior_range_map = { 'gamma1': [0.707899,1.31], 'gamma2':[-1.6,1.7], 'gamma3':[-0.6,0.6], 'gamma4':[-0.02,0.02] +# } + + +### +### Supplemental likelihood: load (as in ILE) +### +supplemental_ln_likelihood= None +supplemental_ln_likelihood_prep =None +supplemental_ln_likelihood_parsed_ini=None +# Supplemental likelihood factor. Must have identical call sequence to 'likelihood_function'. Called with identical raw inputs (including cosines/etc) +if opts.supplementary_likelihood_factor_code and opts.supplementary_likelihood_factor_function: + print(" EXTERNAL SUPPLEMENTARY LIKELIHOOD FACTOR : {}.{} ".format(opts.supplementary_likelihood_factor_code,opts.supplementary_likelihood_factor_function)) + __import__(opts.supplementary_likelihood_factor_code) + external_likelihood_module = sys.modules[opts.supplementary_likelihood_factor_code] + supplemental_ln_likelihood = getattr(external_likelihood_module,opts.supplementary_likelihood_factor_function) + name_prep = "prepare_"+opts.supplementary_likelihood_factor_function + if hasattr(external_likelihood_module,name_prep): + supplemental_ln_likelhood_prep=getattr(external_likelihood_module,name_prep) + # Check for and load in ini file associated with external library + if opts.supplementary_likelihood_factor_ini: + import configparser as ConfigParser + config = ConfigParser.ConfigParser() + config.optionxform=str # force preserve case! + config.read(opts.supplementary_likelihood_factor_ini) + supplemental_ln_likelhood_parsed_ini=config + + # Call the ini file, tell it what coordinates we are using by name + supplemental_ln_likelihood_prep(config=supplemental_ln_likelihood_parsed_ini,coords=coord_names) + +supplemental_coordinate_convert = None +if opts.supplementary_coordinate_code: + # Resolve the user-supplied coordinate-convert plugin. The loader + # accepts three forms in --supplementary-coordinate-code: the literal + # 'rift_default', a filesystem path to a .py file, or an importable + # dotted module name. The plugin must expose a callable named by + # --supplementary-coordinate-function (default 'convert_coordinates') + # with the signature (x_in, coord_names, low_level_coord_names, **kwargs) + # returning a 2-D ndarray of shape (N, len(coord_names)). Plugins may + # optionally define prepare() (one-shot setup, gets the parsed ini and + # the active coord-name lists) and register_priors() (mutate prior_map + # in place). See RIFT.misc.coordinate_plugin for the full contract. + from RIFT.misc.coordinate_plugin import load_coordinate_converter + supplemental_coordinate_convert, _coord_plugin_module = load_coordinate_converter( + spec=opts.supplementary_coordinate_code, + function_name=opts.supplementary_coordinate_function, + ini_path=opts.supplementary_coordinate_ini, + coord_names=coord_names, + low_level_coord_names=low_level_coord_names, + chart=opts.supplementary_coordinate_chart, + opts=opts, + prior_map=prior_map, + prior_range_map=prior_range_map, + ) + +from sklearn.gaussian_process import GaussianProcessRegressor +from sklearn.gaussian_process.kernels import RBF, WhiteKernel, ConstantKernel as C + +def adderr(y): + val,err = y + return val+error_factor*err + +def fit_gp(x,y,x0=None,symmetry_list=None,y_errors=None,hypercube_rescale=False,fname_export="gp_fit"): + """ + x = array so x[0] , x[1], x[2] are points. + """ + + # If we are loading a fit, override everything else + if opts.fit_load_gp: + print(" WARNING: Do not re-use fits across architectures or versions : pickling is not transferrable ") + my_gp=joblib.load(opts.fit_load_gp) + return lambda x:my_gp.predict(x) + + # Amplitude: + # - We are fitting lnL. + # - We know the scale more or less: more than 2 in the log is bad + # Scale + # - because of strong correlations with chirp mass, the length scales can be very short + # - they are rarely very long, but at high mass can be long + # - I need to allow for a RANGE + + length_scale_est = [] + length_scale_bounds_est = [] + for indx in np.arange(len(x[0])): + # These length scales have been tuned by expereience + length_scale_est.append( 2*np.std(x[:,indx]) ) # auto-select range based on sampling retained + length_scale_min_here= np.max([1e-3,0.2*np.std(x[:,indx]/np.sqrt(len(x)))]) + length_scale_bounds_est.append( (length_scale_min_here , 5*np.std(x[:,indx]) ) ) # auto-select range based on sampling *RETAINED* (i.e., passing cut). Note that for the coordinates I usually use, it would be nonsensical to make the range in coordinate too small, as can occasionally happens + + print(" GP: Input sample size ", len(x), len(y)) + print(" GP: Estimated length scales ") + print(length_scale_est) + print(length_scale_bounds_est) + + if not (hypercube_rescale): + # These parameters have been hand-tuned by experience to try to set to levels comparable to typical lnL Monte Carlo error + kernel = WhiteKernel(noise_level=0.1,noise_level_bounds=(1e-2,1))+C(0.5, (1e-3,1e1))*RBF(length_scale=length_scale_est, length_scale_bounds=length_scale_bounds_est) + gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=8) + + gp.fit(x,y) + + print(" Fit: std: ", np.std(y - gp.predict(x)), "using number of features ", len(y)) + + if opts.fit_save_gp: + print(" Attempting to save fit ", opts.fit_save_gp+".pkl") + joblib.dump(gp,opts.fit_save_gp+".pkl") + + return lambda x: gp.predict(x) + else: + x_scaled = np.zeros(x.shape) + x_center = np.zeros(len(length_scale_est)) + x_center = np.mean(x) + print(" Scaling data to central point ", x_center) + for indx in np.arange(len(x)): + x_scaled[indx] = (x[indx] - x_center)/length_scale_est # resize + + kernel = WhiteKernel(noise_level=0.1,noise_level_bounds=(1e-2,1))+C(0.5, (1e-3,1e1))*RBF( len(x_center), (1e-3,1e1)) + gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=8) + + gp.fit(x_scaled,y) + print(" Fit: std: ", np.std(y - gp.predict(x_scaled)), "using number of features ", len(y)) # should NOT be perfect + + return lambda x,x0=x_center,scl=length_scale_est: gp.predict( (x-x0 )/scl) + +def map_funcs(func_list,obj): + return [func(obj) for func in func_list] +def fit_gp_pool(x,y,n_pool=10,**kwargs): + """ + Split the data into 10 parts, and return a GP that averages them + """ + x_copy = np.array(x) + y_copy = np.array(y) + indx_list =np.arange(len(x_copy)) + np.random.shuffle(indx_list) # acts in place + partition_list = np.array_split(indx_list,n_pool) + gp_fit_list =[] + for part in partition_list: + print(" Fitting partition ") + gp_fit_list.append(fit_gp(x[part],y[part],**kwargs)) + fn_out = lambda x: np.mean( map_funcs( gp_fit_list,x), axis=0) + print(" Testing ", fn_out([x[0]])) + return fn_out + + +def fit_rf(x,y,y_errors=None,fname_export='nn_fit'): +# from sklearn.ensemble import RandomForestRegressor + from sklearn.ensemble import ExtraTreesRegressor + # Instantiate model. Usually not that many structures to find, don't overcomplicate + # - should scale like number of samples + rf = ExtraTreesRegressor(n_estimators=100, verbose=True,n_jobs=-1) # no more than 5% of samples in a leaf + if y_errors is None: + rf.fit(x,y) + else: + rf.fit(x,y,sample_weight=1./y_errors**2) + + ### reject points with infinities : problems for inputs + def fn_return(x_in,rf=rf): + f_out = -lnL_default_large_negative*np.ones(len(x_in)) + # remove infinity or Nan + indx_ok = np.all(np.isfinite(np.array(x_in,dtype=float)),axis=-1) + # rf internally uses float32, so we need to remove points > 10^37 or so ! + # ... this *should* never happen due to bounds constraints, but ... + indx_ok_size = np.all( np.logical_not(np.greater(np.abs(x_in),1e37)), axis=-1) + indx_ok = np.logical_and(indx_ok, indx_ok_size) + f_out[indx_ok] = rf.predict(x_in[indx_ok]) + return f_out +# fn_return = lambda x_in: rf.predict(x_in) + + print( " Demonstrating RF") # debugging + residuals = rf.predict(x)-y + print( " std ", np.std(residuals), np.max(y), np.max(fn_return(x))) + return fn_return + + + + + +# initialize +dat_mass = [] +weights = [] +n_params = -1 + + + ### + ### Convert data. RIGHT NOW JUST DOWNSELECTING, no intermediate fitting parameters defined + ### + +# Naive convert: no downselect. +if (supplemental_coordinate_convert ==None): + + indx_of_orig_names = np.array([ dat_orig_names.index(coord_names[k]) for k in range(len(coord_names))]) + dat_out = [] + for line in dat: + dat_here= np.zeros(len(coord_names)+2) + if line[col_lnL+1] > opts.sigma_cut: + print("skipping", line) + continue + dat_here[:-2] = line[indx_of_orig_names+2]#line[2:len(coord_names)+2] # modify to use names! + dat_here[-2] = line[0] + dat_here[-1] = line[1] + dat_out.append(dat_here) + dat_out= np.array(dat_out) + + # Repack data, WHOLE SET + X =dat_out[:,0:len(coord_names)] + Y = dat_out[:,-2] + if np.max(Y)<0 and lnL_shift ==0: + lnL_shift = -100 - np.max(Y) # force it to be offset/positive -- may help some configurations. Remember our adaptivity is silly. + Y_err = dat_out[:,-1] + def convert_coords(x): + return x + +else: + # Pack data, using coordinate converter. Note later calculations MUST use the converter + X = supplemental_coordinate_convert(dat[:,2:], coord_names=coord_names, low_level_coord_names=dat_orig_names) # convert and generate X + Y = dat[:,0] + Y_err = dat[:,1] + if np.max(Y)<0 and lnL_shift ==0: + lnL_shift = -100 - np.max(Y) # force it to be offset/positive -- may help some configurations. Remember our adaptivity is silly. + def convert_coords(x_in): + return supplemental_coordinate_convert(x_in, coord_names=coord_names, low_level_coord_names=dat_orig_names) # convert and generate X +# Save copies for later (plots) +X_orig = X.copy() +Y_orig = Y.copy() + + + +# Eliminate values with Y too small +max_lnL = np.max(Y) +if np.isinf(opts.lnL_offset): + indx_ok= np.ones(len(Y),dtype=bool) # default case, we preserve all the data +else: + indx_ok = np.array(Y>np.max(Y)-opts.lnL_offset,dtype=bool) # force cast : sometimes indx_ok is a mappable object? +n_ok = np.sum(indx_ok) +# Provide some random points, to insure reasonable tapering behavior away from the sample +print(" Points used in fit : ", n_ok, " out of ", len(indx_ok), " given max lnL ", max_lnL) +if max_lnL < 10 and np.mean(Y) > -10: # second condition to allow synthetic tests not to fail, as these often have maxlnL not large + print(" Resetting to use ALL input data -- beware ! ") + # nothing matters, we will reject it anyways + indx_ok = np.ones(len(Y),dtype=bool) +elif n_ok < 10: # and max_lnL > 30: + # mark the top 10 elements and use them for fits + # this may be VERY VERY DANGEROUS if the peak is high and poorly sampled + idx_sorted_index = np.lexsort((np.arange(len(Y)), Y)) # Sort the array of Y, recovering index values + indx_list = np.array( [[k, Y[k]] for k in idx_sorted_index]) # pair up with the weights again + indx_list = indx_list[::-1] # reverse, so most significant are first + indx_ok = list(map(int,indx_list[:10,0])) + print(" Revised number of points for fit: ", np.sum(indx_ok), len(indx_ok), indx_list[:10]) +X_raw = X.copy() + + + +my_fit= None +if opts.fit_method =='gp': + print(" FIT METHOD : GP") + # some data truncation IS used for the GP, but beware + print(" Truncating data set used for GP, to reduce memory usage needed in matrix operations") + X=X[indx_ok] + Y=Y[indx_ok] - lnL_shift + Y_err = Y_err[indx_ok] + # Cap the total number of points retained, AFTER the threshold cut + if opts.cap_points< len(Y) and opts.cap_points> 100: + n_keep = opts.cap_points + indx = np.random.choice(np.arange(len(Y)),size=n_keep,replace=False) + Y=Y[indx] + X=X[indx] + Y_err=Y_err[indx] + if opts.ignore_errors_in_data: + Y_err=None + my_fit = fit_gp(X,Y,y_errors=Y_err) +elif opts.fit_method == 'rf': + print( " FIT METHOD ", opts.fit_method, " IS RF ") + # NO data truncation for NN needed? To be *consistent*, have the code function the same way as the others + X=X[indx_ok] + Y=Y[indx_ok] - lnL_shift + Y_err = Y_err[indx_ok] + # Cap the total number of points retained, AFTER the threshold cut + if opts.cap_points< len(Y) and opts.cap_points> 100: + n_keep = opts.cap_points + indx = np.random.choice(np.arange(len(Y)),size=n_keep,replace=False) + Y=Y[indx] + X=X[indx] + Y_err=Y_err[indx] + if opts.ignore_errors_in_data: + Y_err=None + my_fit = fit_rf(X,Y,y_errors=Y_err) + + +# Sort for later convenience (scatterplots, etc) +indx = Y.argsort()#[::-1] +X=X[indx] +Y=Y[indx] + + + +### +### Integrate posterior +### + + +sampler = mcsampler.MCSampler() +if opts.sampler_method == "adaptive_cartesian_gpu": + sampler = mcsamplerGPU.MCSampler() + sampler.xpy = xpy_default + sampler.identity_convert=identity_convert + mcsampler = mcsamplerGPU # force use of routines in that file, for properly configured GPU-accelerated code as needed + + # if opts.sampler_xpy == "numpy": + # mcsampler.set_xpy_to_numpy() + # sampler.xpy= numpy + # sampler.identity_convert= lambda x: x +if opts.sampler_method == "GMM": + sampler = mcsamplerEnsemble.MCSampler() +elif opts.sampler_method == "AV": + sampler = mcsamplerAdaptiveVolume.MCSampler() + opts.internal_use_lnL= True # required! +elif opts.sampler_method == "portfolio": + use_portfolio=True + sampler = None + sampler_list = [] + sampler_types = opts.sampler_portfolio + for name in sampler_types: + if name =='AV': + sampler = mcsamplerAdaptiveVolume.MCSampler() + if name =='GMM': + sampler = mcsamplerEnsemble.MCSampler() + opts.sampler_method = 'GMM' # this will force the creation/parsing of GMM-specific arguments below, so they are properly passed + if name == "adaptive_cartesian_gpu": + sampler = mcsamplerGPU.MCSampler() + sampler.xpy = xpy_default + sampler.identity_convert=identity_convert + if name == 'NFlow': + # expensive import, only do if requested + try: + import RIFT.integrators.mcsamplerNFlow as mcsamplerNFlow + mcsampler_NF_ok = True + except: + print(" No mcsamplerNFlow ") + continue + sampler = mcsamplerNFlow.MCSampler() + sampler.xpy = xpy_default + sampler.identity_convert=identity_convert + if sampler is None: + # Don't add unknown type + continue + print('PORTFOLIO: adding {} '.format(name)) + sampler_list.append(sampler) + sampler = mcsamplerPortfolio.MCSampler(portfolio=sampler_list) + + +## +## Loop over param names +## +for p in coord_names: + prior_here = prior_map[p] + range_here = prior_range_map[p] + + sampler.add_parameter(p, pdf=np.vectorize(lambda x:1), prior_pdf=prior_here,left_limit=range_here[0],right_limit=range_here[1],adaptive_sampling=True) + +likelihood_function = None +log_likelihood_function = None +def log_likelihood_function(*args): + return my_fit(convert_coords(np.array([*args]).T )) + +if len(coord_names) ==1: + def likelihood_function(x): + if isinstance(x,float): + return np.exp(my_fit([x])) + else: + return np.exp(my_fit(convert_coords(np.c_[x]))) +if len(coord_names) ==2: + def likelihood_function(x,y): + if isinstance(x,float): + return np.exp(my_fit([x,y])) + else: +# return np.exp(my_fit(convert_coords(np.array([x,y],dtype=internal_dtype).T))) + return np.exp(my_fit(convert_coords(np.c_[x,y]))) +if len(coord_names) ==3: + def likelihood_function(x,y,z): + if isinstance(x,float): + return np.exp(my_fit([x,y,z])) + else: +# return np.exp(my_fit(convert_coords(np.array([x,y,z],dtype=internal_dtype).T))) + return np.exp(my_fit(convert_coords(np.c_[x,y,z]))) +if len(coord_names) ==4: + def likelihood_function(x,y,z,a): + if isinstance(x,float): + return np.exp(my_fit([x,y,z,a])) + else: +# return np.exp(my_fit(convert_coords(np.array([x,y,z,a],dtype=internal_dtype).T))) + return np.exp(my_fit(convert_coords(np.c_[x,y,z,a]))) +if len(coord_names) ==5: + def likelihood_function(x,y,z,a,b): + if isinstance(x,float): + return np.exp(my_fit([x,y,z,a,b])) + else: +# return np.exp(my_fit(convert_coords(np.array([x,y,z,a,b],dtype=internal_dtype).T))) + return np.exp(my_fit(convert_coords(np.c_[x,y,z,a,b]))) +if len(coord_names) ==6: + def likelihood_function(x,y,z,a,b,c): + if isinstance(x,float): + return np.exp(my_fit([x,y,z,a,b,c])) + else: +# return np.exp(my_fit(convert_coords(np.array([x,y,z,a,b,c],dtype=internal_dtype).T))) + return np.exp(my_fit(convert_coords(np.c_[x,y,z,a,b,c]))) +if len(coord_names) ==7: + def likelihood_function(x,y,z,a,b,c,d): + if isinstance(x,float): + return np.exp(my_fit([x,y,z,a,b,c,d])) + else: + return np.exp(my_fit(convert_coords(np.c_[x,y,z,a,b,c,d]))) +if len(coord_names) ==8: + def likelihood_function(x,y,z,a,b,c,d,e): + if isinstance(x,float): + return np.exp(my_fit([x,y,z,a,b,c,d,e])) + else: + return np.exp(my_fit(convert_coords(np.c_[x,y,z,a,b,c,d,e]))) +if len(coord_names) ==9: + def likelihood_function(x,y,z,a,b,c,d,e,f): + if isinstance(x,float): + return np.exp(my_fit([x,y,z,a,b,c,d,e,f])) + else: + return np.exp(my_fit(convert_coords(np.c_[x,y,z,a,b,c,d,e,f]))) +if len(coord_names) ==10: + def likelihood_function(x,y,z,a,b,c,d,e,f,g): + if isinstance(x,float): + return np.exp(my_fit([x,y,z,a,b,c,d,e,f,g])) + else: + return np.exp(my_fit(convert_coords(np.c_[x,y,z,a,b,c,d,e,f,g]))) + + + + +n_step = opts.n_step +my_exp = np.min([1,0.8*np.log(n_step)/np.max(Y)]) # target value : scale to slightly sublinear to (n_step)^(0.8) for Ymax = 200. This means we have ~ n_step points, with peak value wt~ n_step^(0.8)/n_step ~ 1/n_step^(0.2), limiting contrast +if np.max(Y_orig) < 0: # for now, don't use a weight exponent if we are negative: can't use guess based from GW experience + my_exp = 1 +#my_exp = np.max([my_exp, 1/np.log(n_step)]) # do not allow extreme contrast in adaptivity, to the point that one iteration will dominate +print(" Weight exponent ", my_exp, " and peak contrast (exp)*lnL = ", my_exp*np.max(Y), "; exp(ditto) = ", np.exp(my_exp*np.max(Y)), " which should ideally be no larger than of order the number of trials in each epoch, to insure reweighting doesn't select a single preferred bin too strongly. Note also the floor exponent also constrains the peak, de-facto") + + +extra_args={} +if opts.sampler_method == "GMM": + n_max_blocks = ((1.0*int(opts.n_max))/n_step) + n_comp = opts.internal_n_comp # default + def parse_corr_params(my_str): + """ + Takes a string with no spaces, and returns a tuple + """ + corr_param_names = my_str.replace(',',' ').split() + corr_param_indexes = [] + for param in corr_param_names: + try: + indx = low_level_coord_names.index(param) + corr_param_indexes.append(indx) + except: + continue + return tuple(corr_param_indexes) + if opts.internal_correlate_parameters == 'all': + gmm_dict = {tuple(range(len(low_level_coord_names))):None} # integrate *jointly* in all parameters together + elif not (opts.internal_correlate_parameters is None): + # Correlate identified parameters + my_blocks = opts.internal_correlate_parameters.split() + my_tuples = list(map( parse_corr_params, my_blocks)) + gmm_dict = {x:None for x in my_tuples} + print(" GMM: Proposed correlated ", gmm_dict) + # What about un-labelled parameters? Make a null tuple for them as well + correlated_params = set(); correlated_params = correlated_params.union( *list(map(set,my_tuples))) + uncorrelated_params = set(np.arange(len(low_level_coord_names))); + uncorrelated_params = uncorrelated_params.difference(correlated_params) + for x in uncorrelated_params: + gmm_dict[(x,)] = None + print( " Using correlated GMM sampling on sampling variable indexes " , gmm_dict, " out of ", low_level_coord_names) + else: + param_indexes = range(len(low_level_coord_names)) + gmm_dict = {(k,):None for k in param_indexes} # no correlations +# lnL_offset_saving = opts.lnL_offset + lnL_offset_saving = -20 # for simplicity, hardcode for now for preserving points + print("GMM ", gmm_dict) + extra_args = {'n_comp':n_comp,'max_iter':n_max_blocks,'L_cutoff': None,'gmm_dict':gmm_dict,'max_err':50, 'lnw_failure_cut':-np.inf} # made up for now, should adjust +extra_args.update({ + "n_adapt": 100, # Number of chunks to allow adaption over + "history_mult": 10, # Multiplier on 'n' - number of samples to estimate marginalized 1D histograms with, + "force_no_adapt":opts.force_no_adapt, + "tripwire_fraction":opts.tripwire_fraction +}) + +fn_passed = likelihood_function +if supplemental_ln_likelihood: + fn_passed = lambda *x: likelihood_function(*x)*np.exp(supplemental_ln_likelihood(*x)) +if opts.internal_use_lnL: + fn_passed = log_likelihood_function # helps regularize large values + if supplemental_ln_likelihood: + fn_passed = lambda *x: log_likelihood_function(*x) + supplemental_ln_likelihood(*x) + extra_args.update({"use_lnL":True,"return_lnI":True}) + + + +res, var, neff, dict_return = sampler.integrate(fn_passed, *coord_names, verbose=True,nmax=int(opts.n_max),n=n_step,neff=opts.n_eff, save_intg=True,tempering_adapt=True, floor_level=1e-3,igrand_threshold_p=1e-3,convergence_tests=test_converged,adapt_weight_exponent=my_exp,no_protect_names=True,**extra_args) # weight ecponent needs better choice. We are using arbitrary-name functions + + +# Save result -- needed for odds ratios, etc. +np.savetxt(opts.fname_output_integral, [np.log(res)]) + +if neff < len(coord_names): + print(" PLOTS WILL FAIL ") + print(" Not enough independent Monte Carlo points to generate useful contours") + + +samples = sampler._rvs +print(samples.keys()) +n_params = len(coord_names) +dat_mass = np.zeros((len(samples[coord_names[0]]),n_params+3)) +if not(opts.internal_use_lnL): + dat_logL = np.log(samples["integrand"]) +else: + if 'log_integrand' in samples: + dat_logL = samples['log_integrand'] + else: + dat_logL = samples["integrand"] +lnLmax = np.max(dat_logL[np.isfinite(dat_logL)]) +print(" Max lnL ", np.max(dat_logL)) + +n_ESS = -1 +if True: + # Compute n_ESS. Should be done by integrator! + if 'log_joint_s_prior' in samples: + weights_scaled = np.exp(dat_logL - lnLmax + samples["log_joint_prior"] - samples["log_joint_s_prior"]) + # dictionary, write this to enable later use of it + samples["joint_s_prior"] = np.exp(samples["log_joint_s_prior"]) + samples["joint_prior"] = np.exp(samples["log_joint_prior"]) + else: + weights_scaled = np.exp(dat_logL - lnLmax)*sampler._rvs["joint_prior"]/sampler._rvs["joint_s_prior"] + weights_scaled = weights_scaled/np.max(weights_scaled) # try to reduce dynamic range + n_ESS = np.sum(weights_scaled)**2/np.sum(weights_scaled**2) + print(" n_eff n_ESS ", neff, n_ESS) + + +# Throw away stupid points that don't impact the posterior +indx_ok = np.ones(len(dat_logL),dtype=bool) +if not('log_joint_s_prior' in samples): + indx_ok=samples["joint_s_prior"]>0 +indx_ok = np.logical_and(dat_logL > np.max(dat_logL)-opts.lnL_offset ,indx_ok) +for p in coord_names: + samples[p] = samples[p][indx_ok] +dat_logL = dat_logL[indx_ok] +print(samples.keys()) +samples["joint_prior"] =samples["joint_prior"][indx_ok] +samples["joint_s_prior"] =samples["joint_s_prior"][indx_ok] + + + +### +### 1d posteriors of the coordinates used for sampling [EQUALLY WEIGHTED, BIASED because physics cuts aren't applied] +### + +p = samples["joint_prior"] +ps =samples["joint_s_prior"] +lnL = dat_logL +lnLmax = np.max(lnL) +weights = np.exp(lnL-lnLmax)*p/ps + + + +print(" ---- Subset for posterior samples (and further corner work) --- ") + + +p_norm = (weights/np.sum(weights)) +indx_list = np.random.choice(np.arange(len(weights)), p=p_norm.astype(np.float64),size=opts.n_output_samples) + + +dat_out = np.zeros( (opts.n_output_samples,2+len(dat_orig_names)) ) + +# Initialize fixed parameters +if len(coord_names) < len(dat_orig_names): # not needed if all params are in fit + + if len(dat) < opts.n_output_samples: + print(" NOTE: original data shorter than requested output; adding",opts.n_output_samples-len(dat),"duplicate fill lines from original data.") + newlines = None + if opts.n_output_samples > 2*len(dat): + newlines = dat[:] + newlen = len(newlines) + while newlen < opts.n_output_samples: + newerlines = dat[:opts.n_output_samples-newlen] #will only get up to len(dat) lines + newlines = np.concatenate((newlines,newerlines), axis=0) + newlen = len(newlines) + else: + newlines = dat[:opts.n_output_samples-len(dat)] #duplicate lines to fill + dat = np.concatenate((dat,newlines), axis=0) #should be fine since dat isn't used after this + + for c in np.arange(len(dat_orig_names)): + if dat_orig_names[c] not in coord_names: + print(" Not in coord_names:",dat_orig_names[c],"; adding to output as constant.") + outidx = name_index_dict[dat_orig_names[c]] # write in correct place + if len(dat) > opts.n_output_samples: + dat_out[:,outidx] = dat[:opts.n_output_samples,outidx] #truncate original data to fit (not ideal) + else: #len(dat) <= n_output_samples (if dat was <, should now be =) + dat_out[:,outidx] = dat[:,outidx] + +# Fill data from PE +for indx in np.arange(len(coord_names)): + vals = samples[coord_names[indx]][indx_list] # load in data for this column + outindx = name_index_dict[ coord_names[indx]] # write in correct place + dat_out[:,outindx] = vals + +# NOTE: if m1 or m2 is "constant" (i.e., not in samples), the possibility for m2 > m1 arises! Re-sort masses here to avoid; use below code. +#if ("m1" not in coord_names) or ("m2" not in coord_names): +# print(" NOTE: re-sorting masses so m1 > m2 (precaution)") +# m1dx = name_index_dict["m1"] +# m1 = np.maximum(dat_out[:,m1dx], dat_out[:,m1dx+1]) #N.B.: assumes m2 col index after m1 col +# m2 = np.minimum(dat_out[:,m1dx], dat_out[:,m1dx+1]) +# dat_out[:,m1dx] = m1 +# dat_out[:,m1dx+1] = m2 + +print(" Saving to ", opts.fname_output_samples+".dat") +np.savetxt(opts.fname_output_samples+".dat",dat_out,header=" lnL sigma_lnL " + ' '.join(dat_orig_names)) + diff --git a/MonteCarloMarginalizeCode/Code/demo/pipeline/Makefile b/MonteCarloMarginalizeCode/Code/demo/pipeline/Makefile index 81d2c8492..0a530c0ae 100644 --- a/MonteCarloMarginalizeCode/Code/demo/pipeline/Makefile +++ b/MonteCarloMarginalizeCode/Code/demo/pipeline/Makefile @@ -35,16 +35,20 @@ PIPE = util_RIFT_pseudo_pipe.py \ --fake-data-cache $(FAKE_CACHE) \ --add-extrinsic -.PHONY: help inputs baseline grid slices validate-grid validate-slices all clean +.PHONY: help inputs baseline grid slices validate-grid validate-slices all clean zero-spin-phenomD help: @echo "Targets:" - @echo " make inputs - verify reference ini/coinc are available" - @echo " make baseline - build a standard pipeline (no per-distance export)" - @echo " make grid - build + validate Plan-A distance-grid export" - @echo " make slices - build + validate Plan-B distance-slice export" - @echo " make all - run baseline, grid, and slices" - @echo " make clean - remove generated run directories" + @echo " make inputs - verify reference ini/coinc are available" + @echo " make baseline - build a standard pipeline (no per-distance export)" + @echo " make grid - build + validate Plan-A distance-grid export" + @echo " make slices - build + validate Plan-B distance-slice export" + @echo " make all - run baseline, grid, and slices" + @echo " make zero-spin-phenomD - full end-to-end validation (build + run ILE locally + consolidate + posterior)" + @echo " make clean - remove generated run directories" + +zero-spin-phenomD: + $(MAKE) -C $(CURDIR)/zero_spin_phenomD all inputs: @test -s "$(REF_INI)" || (echo "missing $(REF_INI)" && false) @@ -74,7 +78,12 @@ validate-grid: @grep -q -- "--distance-marginalization " "$(CURDIR)/rundir_grid/args_ile.txt" @grep -q -- "--distance-marginalization " "$(CURDIR)/rundir_grid/ILE.sub" @! grep -q -- "--distance-marginalization " "$(CURDIR)/rundir_grid/ILE_extr.sub" - @echo "OK: Plan-A grid export only on ILE_extr.sub; distance marginalization kept on intrinsic ILE.sub, disabled only at the extrinsic stage" + @test -s "$(CURDIR)/rundir_grid/consolidate_dgrid.sub" + @test -s "$(CURDIR)/rundir_grid/consolidate_dgrid.sh" + @grep -q -- "EXTR_out.xml_\*_.dgrid" "$(CURDIR)/rundir_grid/consolidate_dgrid.sh" + @grep -q -- "all_dgrid.dat" "$(CURDIR)/rundir_grid/consolidate_dgrid.sh" + @grep -q "consolidate_dgrid" $(CURDIR)/rundir_grid/*.dag + @echo "OK: Plan-A grid export only on ILE_extr.sub; consolidate_dgrid job present; distance marginalization kept on intrinsic ILE.sub, disabled only at the extrinsic stage" slices: inputs rm -rf "$(CURDIR)/rundir_slices" @@ -94,10 +103,16 @@ validate-slices: @grep -q -- "--distance-marginalization " "$(CURDIR)/rundir_slices/args_ile.txt" @grep -q -- "--distance-marginalization " "$(CURDIR)/rundir_slices/ILE.sub" @! grep -q -- "--distance-marginalization " "$(CURDIR)/rundir_slices/ILE_extr.sub" - @echo "OK: Plan-B slice export only on ILE_extr.sub; distance marginalization kept on intrinsic ILE.sub, disabled only at the extrinsic stage" + @test -s "$(CURDIR)/rundir_slices/consolidate_dslice.sub" + @test -s "$(CURDIR)/rundir_slices/consolidate_dslice.sh" + @grep -q -- "EXTR_out.xml_\*_.dslice" "$(CURDIR)/rundir_slices/consolidate_dslice.sh" + @grep -q -- "all_dslice.dat" "$(CURDIR)/rundir_slices/consolidate_dslice.sh" + @grep -q "consolidate_dslice" $(CURDIR)/rundir_slices/*.dag + @echo "OK: Plan-B slice export only on ILE_extr.sub; consolidate_dslice job present; distance marginalization kept on intrinsic ILE.sub, disabled only at the extrinsic stage" all: baseline grid slices @echo "All pipeline-build demos passed." clean: rm -rf "$(CURDIR)/rundir_baseline" "$(CURDIR)/rundir_grid" "$(CURDIR)/rundir_slices" "$(FAKE_CACHE)" + $(MAKE) -C $(CURDIR)/zero_spin_phenomD clean diff --git a/MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/.gitignore b/MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/.gitignore new file mode 100644 index 000000000..8d1944e4b --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/.gitignore @@ -0,0 +1,3 @@ +rundir_build/ +rundir_extr/ +fake.cache diff --git a/MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/Makefile b/MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/Makefile new file mode 100644 index 000000000..52ec4ce15 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/Makefile @@ -0,0 +1,165 @@ +# End-to-end validation: pseudo_pipe build + local ILE_extr run + .dgrid +# consolidation + util_ConstructEOSPosterior.py reconstruction. +# +# Uses the fake-data zero-noise BBH cache from .travis/ILE-GPU-Paper/demos with +# IMRPhenomD (zero spin) and the AV sampler, over a small mass grid. Designed +# to run in a few minutes on a single laptop -- no condor, no GPU. +# +# Run (inside the RIFT environment): +# pixi run --manifest-path ../../../../../pixi.toml make all +# or, with a pip-installed RIFT on PATH, +# make all + +RIFT_CODE_ROOT := $(abspath ../../..) +REPO_ROOT := $(abspath ../../../../..) +CI_DEMO := $(REPO_ROOT)/.travis/ILE-GPU-Paper/demos + +REF_INI ?= $(CURDIR)/zero_spin_phenomD.ini +COINC ?= $(REPO_ROOT)/.travis/ref_ini/coinc.xml +CACHE ?= $(CI_DEMO)/zero_noise.cache +PSD ?= $(CI_DEMO)/HLV-ILIGO_PSD.xml.gz +GRID ?= $(CI_DEMO)/overlap-grid.xml.gz + +ILE_EXE := $(RIFT_CODE_ROOT)/bin/integrate_likelihood_extrinsic_batchmode +CONS_EXE := $(RIFT_CODE_ROOT)/bin/util_ConsolidateDistanceGrids.py +EOS_EXE := $(RIFT_CODE_ROOT)/bin/util_ConstructEOSPosterior.py + +RUN_BUILD := $(CURDIR)/rundir_build +RUN_EXTR := $(CURDIR)/rundir_extr + +# Tiny test: 3 grid rows, AV with low n_eff target -> ~30 s/row on a laptop. +N_EVENTS ?= 3 +N_EFF ?= 50 +N_MAX ?= 30000 + +# Fake-data time window from the zero_noise cache (event at 1000000014.236...). +EVT_TIME := 1000000014.236547946 +DATA_T0 := 1000000008 +DATA_T1 := 1000000016 + +ENV = GW_SURROGATE='' \ + RIFT_LOWLATENCY=True \ + SINGULARITY_RIFT_IMAGE=foo \ + SINGULARITY_BASE_EXE_DIR=/usr/bin/ \ + PATH=$(RIFT_CODE_ROOT)/bin:$${PATH} \ + PYTHONPATH=$(RIFT_CODE_ROOT):$${PYTHONPATH:-} + +# ILE_extr arguments tuned for the zero-noise fake-data BBH demo (zero-spin +# IMRPhenomD, AV sampler, lnL mode, distance-grid export on). These match +# what util_RIFT_pseudo_pipe.py + create_event_parameter_pipeline_* would +# emit at the extrinsic stage for the same configuration. +EXTR_ARGS := \ + --n-chunk 10000 --time-marginalization \ + --reference-freq 100.0 --adapt-weight-exponent 0.1 \ + --event-time $(EVT_TIME) --save-P 0.1 \ + --cache-file $(CACHE) \ + --fmin-template 10 --n-max $(N_MAX) --fmax 1700.0 \ + --save-deltalnL inf --l-max 2 --n-eff $(N_EFF) \ + --approximant IMRPhenomD --adapt-floor-level 0.1 \ + --force-xpy --d-max 1000 \ + --psd-file H1=$(PSD) --psd-file L1=$(PSD) \ + --channel-name H1=FAKE-STRAIN --channel-name L1=FAKE-STRAIN \ + --inclination-cosine-sampler --declination-cosine-sampler \ + --data-start-time $(DATA_T0) --data-end-time $(DATA_T1) \ + --inv-spec-trunc-time 0 --no-adapt-after-first --no-adapt-distance \ + --srate 4096 --sampler-method AV --internal-use-lnL \ + --export-marginal-distance-grid \ + --sim-xml overlap-grid.xml.gz \ + --n-events-to-analyze $(N_EVENTS) \ + --output-file demo_extr + +.PHONY: help inputs build validate-build run-extr consolidate posterior all clean + +help: + @echo "Targets:" + @echo " make inputs - verify fake-data inputs are available" + @echo " make build - run util_RIFT_pseudo_pipe.py to build a pipeline (validates threading)" + @echo " make validate-build - check the build produced a .dgrid export and consolidation job" + @echo " make run-extr - run ILE_extr locally (no condor) on the first $(N_EVENTS) grid rows" + @echo " make consolidate - run util_ConsolidateDistanceGrids.py on the produced .dgrid files" + @echo " make posterior - run util_ConstructEOSPosterior.py on the consolidated .dgrid -> joint posterior" + @echo " make all - full chain" + @echo " make clean - remove rundir_build, rundir_extr, fake.cache" + +inputs: + @test -s "$(CACHE)" || (echo "missing fake cache $(CACHE) (run the ILE-GPU-Paper demo Makefile first)" && false) + @test -s "$(PSD)" || (echo "missing PSD $(PSD)" && false) + @test -s "$(GRID)" || (echo "missing input grid $(GRID)" && false) + @test -s "$(REF_INI)" && test -s "$(COINC)" || (echo "missing reference ini/coinc" && false) + @touch "$(CURDIR)/fake.cache" + @echo "All inputs present." + +# Build a RIFT pipeline with the per-distance grid export turned on (forces +# AV sampler + IMRPhenomD + zero spin via CLI overrides on the GW150914 +# reference ini). We use --fake-data-cache to keep the build offline; the +# resulting pipeline could run on the real fake-data cache by setting the +# right event-time/coinc, but that is beyond this build-validation target. +build: inputs + rm -rf "$(RUN_BUILD)" + $(ENV) util_RIFT_pseudo_pipe.py \ + --use-ini "$(REF_INI)" \ + --use-coinc "$(COINC)" \ + --use-rundir "$(RUN_BUILD)" \ + --fake-data-cache "$(CURDIR)/fake.cache" \ + --add-extrinsic \ + --export-marginal-distance-grid \ + --assume-nospin \ + --approx IMRPhenomD \ + --ile-sampler-method AV + $(MAKE) validate-build + +validate-build: + @test -s "$(RUN_BUILD)/ILE_extr.sub" + @grep -q -- "--export-marginal-distance-grid" "$(RUN_BUILD)/ILE_extr.sub" + @grep -q -- "--sampler-method AV" "$(RUN_BUILD)/ILE_extr.sub" + @grep -q -- "--internal-use-lnL" "$(RUN_BUILD)/ILE_extr.sub" + @! grep -q -- "--distance-marginalization " "$(RUN_BUILD)/ILE_extr.sub" + @grep -q -- "IMRPhenomD" "$(RUN_BUILD)/ILE_extr.sub" + @test -s "$(RUN_BUILD)/consolidate_dgrid.sub" + @test -s "$(RUN_BUILD)/consolidate_dgrid.sh" + @grep -q "consolidate_dgrid" $(RUN_BUILD)/*.dag + @echo "OK: pipeline built; ILE_extr.sub carries AV+IMRPhenomD+grid-export, distance marg disabled only at extrinsic stage, consolidate_dgrid wired into DAG." + +# Direct local run of the ILE_extr binary on a small subset of the grid -- no +# condor. Produces real *.dgrid files we can then consolidate and reconstruct +# the posterior from. Event-time/cache match the .travis/ILE-GPU-Paper fake +# data (the GW150914 ini used for the build step has a different event time +# and no matching frames; running directly here avoids that mismatch while +# still exercising the same ILE code path). +run-extr: inputs + rm -rf "$(RUN_EXTR)" + mkdir -p "$(RUN_EXTR)" + cp "$(GRID)" "$(RUN_EXTR)/overlap-grid.xml.gz" + @echo "Running ILE_extr on $(N_EVENTS) grid rows (AV, IMRPhenomD zero-spin, lnL mode, --export-marginal-distance-grid)..." + cd "$(RUN_EXTR)" && $(ENV) "$(ILE_EXE)" $(EXTR_ARGS) + @echo "Produced .dgrid files:"; ls "$(RUN_EXTR)"/demo_extr_*_.dgrid + +consolidate: run-extr + @echo "Consolidating per-event .dgrid files..." + cd "$(RUN_EXTR)" && $(ENV) "$(CONS_EXE)" --input-glob 'demo_extr_*_.dgrid' --output all_dgrid.dat + @test -s "$(RUN_EXTR)/all_dgrid.dat" + @head -1 "$(RUN_EXTR)/all_dgrid.dat" | grep -q "^# lnL sigmaL m1 m2" + @n_data=$$(grep -cv "^#" "$(RUN_EXTR)/all_dgrid.dat"); echo "all_dgrid.dat: $$n_data data rows" + +posterior: consolidate + @echo "Reconstructing joint (m1, m2, dist) posterior from consolidated grid..." + cd "$(RUN_EXTR)" && $(ENV) "$(EOS_EXE)" \ + --fname all_dgrid.dat \ + --parameter m1 --parameter m2 --parameter dist \ + --integration-parameter-range 'm1:[24,34]' \ + --integration-parameter-range 'm2:[24,34]' \ + --integration-parameter-range 'dist:[10,500]' \ + --lnL-offset 30 \ + --fname-output-samples joint_posterior \ + --fname-output-integral joint_evidence \ + --no-plots + @test -s "$(RUN_EXTR)/joint_posterior.dat" + @n_samples=$$(grep -cv "^#" "$(RUN_EXTR)/joint_posterior.dat"); echo "joint_posterior.dat: $$n_samples posterior samples" + @python -c "import numpy as np; d=np.genfromtxt('$(RUN_EXTR)/joint_posterior.dat', names=True); print(' summary:', {n: (round(float(d[n].mean()),3), round(float(d[n].std()),3)) for n in d.dtype.names if n in ('m1','m2','dist','lnL')})" + @echo "OK: end-to-end validation complete -- pipeline built, ILE_extr produced .dgrid output, consolidated, posterior reconstructed." + +all: build run-extr consolidate posterior + @echo "All validation steps passed." + +clean: + rm -rf "$(RUN_BUILD)" "$(RUN_EXTR)" "$(CURDIR)/fake.cache" diff --git a/MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/README.md b/MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/README.md new file mode 100644 index 000000000..a7da78d6e --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/README.md @@ -0,0 +1,81 @@ +# Zero-spin IMRPhenomD .dgrid end-to-end validation + +End-to-end validation of the per-distance likelihood export pipeline using +**zero-spin IMRPhenomD**, the **AV** sampler, and a small mass grid of zero-noise +BBH points. The full chain runs in under a minute on a single laptop core -- +no condor, no GPU. + +## What it exercises + +1. **Build** (`make build`). Calls `util_RIFT_pseudo_pipe.py` with + `--add-extrinsic --export-marginal-distance-grid --assume-nospin --approx IMRPhenomD --ile-sampler-method AV` + to produce a complete RIFT run directory. Verifies the resulting + `ILE_extr.sub` carries the export flags, that distance marginalization is + disabled **only** at the extrinsic stage, and that the + `consolidate_dgrid.sub` consolidation job is wired into the DAG. + +2. **Run** (`make run-extr`). Bypasses condor and directly invokes + `integrate_likelihood_extrinsic_batchmode` on the first `N_EVENTS` rows of + the fake-data zero-noise BBH grid (`.travis/ILE-GPU-Paper/demos/overlap-grid.xml.gz`) + with arguments matching what the pipeline would emit at the extrinsic + stage. Produces one `.dgrid` file per intrinsic point. + +3. **Consolidate** (`make consolidate`). Runs + `util_ConsolidateDistanceGrids.py` over the per-event `.dgrid` files, + verifying header agreement and emitting a single `all_dgrid.dat` -- the + "net" intrinsic + distance grid that downstream tools consume. + +4. **Posterior** (`make posterior`). Feeds `all_dgrid.dat` into + `util_ConstructEOSPosterior.py` with `--parameter m1 --parameter m2 --parameter dist`, + reconstructing the joint (intrinsic + distance) posterior. Reports the + sample count and per-parameter mean / std as a sanity check. + +`make all` runs steps 1-4 sequentially; `make clean` removes the generated +run directories. + +## Inputs + +| input | source | notes | +| --- | --- | --- | +| `zero_spin_phenomD.ini` | local | minimal ini whose `[rift-pseudo-pipe]` section deliberately omits `approx`/`ile-sampler-method` so the CLI overrides win | +| coinc / fake cache / PSDs / grid | `.travis/...` | the same fake-data zero-noise BBH inputs used by the ILE-GPU-Paper demo and `.travis/test-build.sh` | + +## Tunables + +| variable | default | role | +| --- | --- | --- | +| `N_EVENTS` | 3 | number of grid rows to run locally in step 2 | +| `N_EFF` | 50 | ILE `--n-eff` target | +| `N_MAX` | 30000 | ILE `--n-max` cap | + +## Expected output + +``` +OK: pipeline built; ILE_extr.sub carries AV+IMRPhenomD+grid-export, ... +Produced .dgrid files: + rundir_extr/demo_extr_0_.dgrid + rundir_extr/demo_extr_1_.dgrid + rundir_extr/demo_extr_2_.dgrid +util_ConsolidateDistanceGrids.py: wrote 150 rows from 3 files to all_dgrid.dat +joint_posterior.dat: 2000 posterior samples + summary: {'lnL': (0.0, 0.0), 'm1': (...), 'm2': (...), 'dist': (...)} +OK: end-to-end validation complete -- pipeline built, ILE_extr produced .dgrid output, consolidated, posterior reconstructed. +All validation steps passed. +``` + +The injected true signal is m1 = m2 = 35 Msun at d = 200 Mpc; with `N_EVENTS=3` +the test only covers the lower edge of the mass grid (m1 = m2 ~ 26-29 Msun), +so the recovered posterior mean is biased toward those points -- this is by +design (fast test, not an accuracy demo). Increase `N_EVENTS` to cover the +full grid for a meaningful posterior. + +## Notes + +- Steps 2-4 use the same code paths the production pipeline does; only the + condor layer is bypassed. +- The .ini section `[rift-pseudo-pipe]` overrides CLI flags. The minimal + `zero_spin_phenomD.ini` here strips fields that would override + `--approx` / `--ile-sampler-method` / `--assume-nospin`. +- `util_ConstructEOSPosterior.py` requires `--integration-parameter-range` + for every fitted parameter; the Makefile supplies sensible ranges for + m1, m2, dist. diff --git a/MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/zero_spin_phenomD.ini b/MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/zero_spin_phenomD.ini new file mode 100644 index 000000000..230e8bb64 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/demo/pipeline/zero_spin_phenomD/zero_spin_phenomD.ini @@ -0,0 +1,63 @@ +# Minimal RIFT ini for the zero-spin IMRPhenomD validation demo. Derived from +# .travis/ref_ini/GW150914.ini but stripped to settings compatible with a fast +# zero-spin BBH test using the AV sampler. The [rift-pseudo-pipe] section +# avoids fields that would override --approx / --assume-nospin / --ile-sampler-method +# on the util_RIFT_pseudo_pipe.py command line. + +[analysis] +ifos=['H1','L1'] +singularity=False +osg=False + +[paths] + +[input] +max-psd-length=10000 + +[condor] +accounting_group=ligo.sim.o4.cbc.pe.rift +accounting_group_user=richard.oshaughnessy + +[datafind] +url-type=file +types = {'H1': 'H1_HOFT_C02', 'L1': 'L1_HOFT_C02', 'V1': ''} + +[data] +channels = {'H1': 'H1:DCS-CALIB_STRAIN_C02','L1': 'L1:DCS-CALIB_STRAIN_C02', 'V1': ''} + +[lalinference] +flow = {'H1': 20, 'L1': 20} +fhigh = { 'H1': 896, 'L1': 896 } + +[engine] +fref=20 +amporder = -1 +seglen = 4 +srate = 2048 +# zero spin -> compatible with IMRPhenomD +a_spin1-max = 0.0 +a_spin2-max = 0.0 +chirpmass-min = 23.0 +chirpmass-max = 35.0 +comp-min = 1 +comp-max = 1000 +distance-max = 1000 +aligned-spin = +alignedspin-zprior = + +[rift-pseudo-pipe] +# Keep this section minimal so the CLI args (--approx IMRPhenomD, +# --assume-nospin, --ile-sampler-method AV, --add-extrinsic, etc.) win. +internal-ile-request-disk="4M" +cip-fit-method="rf" +ile-n-eff=10 +l-max=2 +internal-distance-max=1000 +ile-runtime-max-minutes=60 +ile-jobs-per-worker=30 +internal-propose-converge-last-stage=True +force-eta-range="[0.20,0.24999]" +fmin-template=20 +event-time=1126259462.391 +n-output-samples=5000 +use-online-psd=False From 6f216a071b634447ec2faa00fe22998a21b1e8a8 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Thu, 28 May 2026 23:57:21 -0400 Subject: [PATCH 23/32] distance-slice: mark workflow-integration step 2 (consolidation) done in PLAN_B_DESIGN Co-Authored-By: Claude Opus 4.8 --- .../rift/add_distance_grids/PLAN_B_DESIGN.md | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md index 3eb256e5b..76aea3ba4 100644 --- a/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md +++ b/MonteCarloMarginalizeCode/Code/demo/rift/add_distance_grids/PLAN_B_DESIGN.md @@ -157,13 +157,23 @@ run, **without** making `create_event_parameter_pipeline_BasicIteration` `ILE_extr.sub` (not the intrinsic `ILE.sub`) with no distance marginalization; `.travis/test-build.sh` runs the same checks in CI. -2. Add a consolidation step that concatenates `.dslice` files into a - single table per iteration -- mirror what `util_CleanILE.py` does for - `.composite`. The natural drop-in is a tiny wrapper script - `util_CleanILE_dslice.py` that just concatenates with header dedup. - Add one extra `unify_dslice.sub`/`unify_dslice.sh` pair to the existing - subdag emitted by CEPP_basic; it depends on the same `ile` job set - that produced the `.dslice` files. +2. **DONE.** Add a consolidation step that concatenates `.dslice` (and + `.dgrid`) files into a single table per iteration. Landed as + `util_ConsolidateDistanceGrids.py` (header-checked concatenator with a + `--input-glob` mode) plus + `RIFT.misc.dag_utils_generic.write_consolidate_distance_grids_sub`. + When `--last-iteration-export-marginal-distance-grid` / + `--last-iteration-export-distance-slices` is set, CEPP_basic emits + `consolidate_dgrid.sub` / `consolidate_dslice.sub` and wires them as + children of every `ILE_extr` job in the DAG. Output lands at the run + root as `all_dgrid.dat` / `all_dslice.dat` -- the "net" intrinsic + + distance grid downstream tools consume. End-to-end validated by + `demo/pipeline/zero_spin_phenomD/` (zero-spin IMRPhenomD, AV sampler, + small mass grid, ~45 s on a laptop): builds the pipeline via + `util_RIFT_pseudo_pipe.py`, runs `ILE_extr` directly (no condor) on a + few grid rows, consolidates, and feeds `all_dgrid.dat` into + `util_ConstructEOSPosterior.py` to reconstruct the joint + (m1, m2, dist) posterior. 3. (Optional, deferred) Teach CIP to ingest the `.dslice` table jointly: either fit `lnL(intrinsic, dist)` directly, or marginalize over `dist` From 1beda425c37ff261ee9c56efe71ff01583905692 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Fri, 29 May 2026 05:44:44 -0400 Subject: [PATCH 24/32] subdags pipeline: fix AlternateIteration cip_args_list parsing + add --pipeline-builder hot-swap The --use-subdags path (create_event_parameter_pipeline_AlternateIteration) was broken for normal runs by a chain of issues, each masking the next: - cip_args_list parsing crashed on the 'Z'/'G' prefixes emitted by util_RIFT_pseudo_pipe.py (ValueError: invalid literal for int() ... 'Z'). Ported BasicIteration's tolerant prefix parsing. - argparse rejected 8 options the helper passes (extrinsic samples-per-ile, time-resampling, batched-convert, ile-request-disk, cip-explode-jobs-dag/-last, n-iterations-subdag-max). Added them with BasicIteration's signatures; wired the ones with a clean home, documented the rest as accepted-but-not-acted-on. - completed the half-built extrinsic batched/time-resampling convert path (batchConvertExtr_job was referenced but never defined) by porting BasicIteration's 3-branch convert setup + node construction. - fixed undefined unify_node_list used to attach SCRIPT POST composite checks. AlternateIteration now builds a complete DAG end-to-end from a standard pseudo_pipe invocation. Apply the same int('Z') tolerant-parsing fix to BasicMultiApproxIteration, which had the identical crash. Thread AlternateIteration into util_RIFT_pseudo_pipe.py as a first-class drop-in via a new --pipeline-builder {BasicIteration,AlternateIteration} selector that overrides the implicit --use-subdags routing, enabling side-by-side A/B testing of the two builders from an otherwise identical command line. Warns if an explicit choice contradicts an AMR/subdag requirement. Co-Authored-By: Claude Opus 4.8 --- ...vent_parameter_pipeline_AlternateIteration | 160 ++++++++++++++---- ...rameter_pipeline_BasicMultiApproxIteration | 13 +- .../Code/bin/util_RIFT_pseudo_pipe.py | 7 + 3 files changed, 150 insertions(+), 30 deletions(-) diff --git a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_AlternateIteration b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_AlternateIteration index 479ce384e..6cc17fc24 100755 --- a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_AlternateIteration +++ b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_AlternateIteration @@ -186,12 +186,18 @@ parser.add_argument("--cip-args",default=None,help="filename of args_cip.txt fil parser.add_argument("--cip-args-list",default=None,help="filename of args_cip_list.file, which holds CIP arguments. Overrides cip-args if present. One CIP_n.sub file is created for each line in the file, which is used for an integer m iterations, where m is the first item of each line (normally 'X' in CIP)") parser.add_argument("--cip-explode-jobs",default=None,type=int,help="Number of CIP jobs to use to use in parallel to produce posterior samples for each iteration. Code will generate a fit first, save it, use this number of workers in parallel to generate samples, and then consolidates the samples together. Note that --n-output-samples and --n-eff are NOT adjusted ... if the user wants to adaptively fix the resolution, that needs to be controlled at a higher level") parser.add_argument("--cip-explode-jobs-flat",action='store_true',help="Pass to use the same arguments for all worker jobs. The main job will be /bin/true.") +parser.add_argument("--cip-explode-jobs-dag",action='store_true',help="Accepted for parity with the BasicIteration path (where each worker gets its own node rather than a 'queue N' statement). AlternateIteration uses 'queue N' workers regardless, so this is accepted but not acted on.") +parser.add_argument("--cip-explode-jobs-last",default=None,type=int,help="Like cip_explode_jobs, but ONLY for last batch. Only applies if using --cip-args-list.") parser.add_argument("--puff-exe",default=None,help="util_ParameterPuffball.py") parser.add_argument("--puff-args",default=None,help="util_ParameterPuffball arguments. If not specified, puffball will not be performed ") parser.add_argument("--puff-cadence",default=None,type=int,help="Every n iterations (not including 0), the puffball code will be applied. Puffball points will be done *in addition* to the usual results from the DAG. (The puffball is based on perturbing points from that iteration, and this will roughly double that iteration in ILE job size). Proposed value 2 (i.e., puff overlap-grid-2, ...-4, ...-6. If not specified, puffball will not be performed ") parser.add_argument("--puff-max-it",default=-1,type=int,help="Maximum iteration number that puffball is applied. If negative, puffball is not applied ") parser.add_argument("--last-iteration-extrinsic",action='store_true',help="Configure last iteration to extract *one* set of extrinsic parameters from each intrinsic point. [This is highly inefficient, but people like having one extrinsic point per intrinsic point.] Requires --convert-args") parser.add_argument("--last-iteration-extrinsic-nsamples",default=3000,type=int,help="Construct this number of extrinsic samples") +parser.add_argument("--last-iteration-extrinsic-samples-per-ile",default=5,type=int,help="Draw this many samples from each ILE job (controls the extrinsic-stage resample/downsample count)") +parser.add_argument("--last-iteration-extrinsic-samples-per-ile-internal",default=10,type=int,help="Draw this many samples from each ILE job (BasicIteration time-resampling path). Accepted for parity; AlternateIteration uses its convert/resample/cat extrinsic path, so this is accepted but not acted on.") +parser.add_argument("--last-iteration-extrinsic-time-resampling",action='store_true',help="BasicIteration last-iteration time-resampling code path. Accepted for parity; AlternateIteration uses its convert/resample/cat extrinsic path, so this is accepted but not acted on.") +parser.add_argument("--last-iteration-extrinsic-batched-convert",action='store_true',help="BasicIteration batched extrinsic converter. Accepted for parity; AlternateIteration uses its own per-job convert/resample/cat path, so this is accepted but not acted on.") parser.add_argument("--last-iteration-export-marginal-distance-grid", action='store_true', help="Add argument to ILE_extr") parser.add_argument("--last-iteration-export-distance-slices", default=0, type=int, help="If >0, the ILE_extr (extrinsic) stage exports K-row .dslice files: Plan-B fixed-distance extrinsic-marginalized likelihoods. Adds --export-distance-slices K (+ --internal-use-lnL) to ILE_extr and strips --distance-marginalization.") parser.add_argument("--last-iteration-export-distance-slices-n-core", default=0, type=int, help="Passthrough to ILE --n-distance-slice-core for the extrinsic-stage .dslice export (0 = ILE default).") @@ -201,9 +207,11 @@ parser.add_argument("--last-iteration-export-distance-slices-skip-threshold", de parser.add_argument("--ile-args",default=None,help="filename of args_ile.txt file which holds ILE arguments. Should NOT conflict with arguments auto-set by this DAG ... in particular, i/o arguments will be modified") parser.add_argument("--ile-exe",default=None,help="filename of ILE or equivalent executable. Will default to `which integrate_likelihood_extrinsic` in low-level code") parser.add_argument("--subdag-exe",default=None,help="filename of subdag writing command (e.g., create_event_dag_via_grid). Very restrictive arguments, should only use standard code unless you are an expert!") +parser.add_argument("--n-iterations-subdag-max",default=10,type=int,help="Number of iterations to perform in subdag, maximum. Accepted for parity with the BasicIteration run-to-convergence CIP subdag, which AlternateIteration does not implement, so this is accepted but not acted on.") parser.add_argument("--ile-retries",default=0,type=int,help="Number of retry attempts for ILE jobs. (These can fail)") parser.add_argument("--general-retries",default=0,type=int,help="Number of retry attempts for internal jobs (convert, CIP, ...). (These can fail, albeit more rarely, usually due to filesystem problems)") parser.add_argument("--general-request-disk",default="4M",type=str,help="Request disk passed to condor. Must be done for all jobs now") +parser.add_argument("--ile-request-disk",default="10M",type=str,help="Request disk passed to condor for ILE. Accepted for parity; AlternateIteration sizes ILE disk via its own request_disk logic (general-request-disk / OSG default), so this is accepted but not acted on.") parser.add_argument("--ile-n-events-to-analyze",default=1,type=int,help="If >1, you are using ILE_batchmode. Structures the DAG correctly to account for batch cadence") parser.add_argument("--ile-runtime-max-minutes",default=None,type=int,help="If not none, kills ILE jobs that take longer than the specified integer number of minutes. Do not use unless an expert") parser.add_argument("--cip-exe",default=None,help="filename of CIP or equivalent executable. Will default to `which util_ConstructIntrinsicPosterior_GenericCoordinates` in low-level code") @@ -294,10 +302,21 @@ if not (opts.cip_args is None): print("CIP", cip_args) cip_args_lines = None +cip_args_prefixes = [] # so it works correctly even in flat mode if not (opts.cip_args_list is None): with open(opts.cip_args_list) as f: cip_args_lines = f.readlines() - cip_args_n = [int(x.split(' ')[0]) for x in cip_args_lines] # Pull off the integer + # Pull off the leading token. It is usually an integer (number of iterations), but util_RIFT_pseudo_pipe.py + # also emits 'Z' (run-to-convergence marker) and 'G' (grid-stage marker) prefixes; tolerate those here. + cip_args_prefixes = [(x.split(' ')[0]) for x in cip_args_lines] + cip_args_n = (cip_args_prefixes.copy()) + for indx in np.arange(len(cip_args_n)): + if cip_args_prefixes[indx][0]=='Z': + cip_args_n[indx] = 1 # one nominal iteration; AlternateIteration has no run-to-convergence CIP stage + elif cip_args_prefixes[indx][0] =='G': + cip_args_n[indx] = int(cip_args_prefixes[indx][1:]) # integer after G assumed + else: + cip_args_n[indx] = int(cip_args_n[indx]) cip_args_lines = [' '.join(x.split(' ')[1:]) for x in cip_args_lines] # pull off the integer cip_args_lines = [x.replace('[', ' \'[').replace(']', ']\'').rstrip() for x in cip_args_lines] cip_args_lines = [x.lstrip() for x in cip_args_lines] # remove leading whitespace @@ -617,7 +636,7 @@ if not (fetch_args is None): if (opts.last_iteration_extrinsic): - n_points_per_ILE = 5 + n_points_per_ILE = opts.last_iteration_extrinsic_samples_per_ile # ILE job with modified output format # - note we *double* the memory request, because we need space to save samples ile_args_extr = ile_args + " --save-P 0.01 --save-samples --n-eff " +str(2*n_points_per_ILE) # modify convergence criteria so output of reasonable size @@ -649,29 +668,94 @@ if (opts.last_iteration_extrinsic): ileExtr_job.set_sub_file(fname) ileExtr_job.write_sub_file() - # Convert task - convert_args_extr = " --convention LI --export-cosmology --use-interpolated-cosmology " - if not (convert_args is None): - convert_args_extr += convert_args - convertExtr_job, convertExtr_job_name = dag_utils.write_convert_sub(tag='convert_extr',log_dir=None,arg_str=convert_args_extr,file_input=opts.working_directory+"/iteration_$(macroiteration)_ile/EXTR_out-$(macroevent).xml_$(macroindx)_.xml.gz",file_output=opts.working_directory+"/iteration_$(macroiteration)_ile/EXTR_out-$(macroevent).xml_$(macroindx)_.dat", out_dir=opts.working_directory+"/iteration_$(macroiteration)_ile/",universe=local_worker_universe,no_grid=no_worker_grid) - convertExtr_job.add_condor_cmd("initialdir",opts.working_directory) - convertExtr_job.set_log_file(opts.working_directory+"/iteration_$(macroiteration)_ile/logs/convert-$(macroevent)-$(macroindx).log") - convertExtr_job.set_stderr_file(opts.working_directory+"/iteration_$(macroiteration)_ile/logs/convert-$(macroevent)-$(macroindx).err") - if opts.use_full_submit_paths: - fname = opts.working_directory+"/"+convertExtr_job.get_sub_file() - convertExtr_job.set_sub_file(fname) - convertExtr_job.write_sub_file() - - # Resample task - resample_args = ' --n-output-samples ' + str(n_points_per_ILE) # pick 5 random points from each ILE run - resample_job, resample_job_name = dag_utils.write_resample_sub('resample',log_dir=None,arg_str=resample_args,file_input=opts.working_directory+"/iteration_$(macroiteration)_ile/EXTR_out-$(macroevent).xml_$(macroindx)_.dat",file_output=opts.working_directory+"/iteration_$(macroiteration)_ile/EXTR_out-$(macroevent).xml_$(macroindx)_.downsampled_dat",universe=local_worker_universe,no_grid=no_worker_grid) - resample_job.add_condor_cmd("initialdir",opts.working_directory) - resample_job.set_log_file(opts.working_directory+"/iteration_$(macroiteration)_ile/logs/resample-$(macroevent)-$(macroindx).log") - resample_job.set_stderr_file(opts.working_directory+"/iteration_$(macroiteration)_ile/logs/resample-$(macroevent)-$(macroindx).err") - if opts.use_full_submit_paths: - fname = opts.working_directory+"/"+resample_job.get_sub_file() - resample_job.set_sub_file(fname) - resample_job.write_sub_file() + # Convert task. Three modes, ported from BasicIteration (the maintained path): + # (1) time-resampling: a single batched convert job per iteration (allinone_convert.sh) that writes + # extrinsic_posterior_samples.dat directly, so no separate resample/cat is needed + # (2) batched convert: one convert job per ILE output group (batch_convert.sh) + # (3) old style: per-(event,indx) convert + resample, combined later by the cat job + extra_text = '' # AlternateIteration has no --condor-local-nonworker-igwn-prefix option, so no environment prefix is prepended + convertExtr_job = None + resample_job = None + batchConvertExtr_job = None + if opts.last_iteration_extrinsic_time_resampling: + # igwn_ligolw add on all final output, then a single convert + convert_args_extr = " --convention LI --export-cosmology --use-interpolated-cosmology " + if not (convert_args is None): + convert_args_extr += convert_args + relevant_path = dag_utils.which('util_JoinExtrXML.py') + relevant_path_2 = dag_utils.which('convert_output_format_ile2inference') + # randomization: 'shuf' is preferred, but otherwise use ' sort -R'. Note performed locally, so local filesystem/os is fine. + extra_shuffle_command = ' | cat' + which_shuf = which('shuf'); which_sort = which('sort') + if isinstance(which_shuf, str): + extra_shuffle_command = ' | {} '.format(which_shuf) + elif isinstance(which_sort, str): + extra_shuffle_command = ' | {} -R '.format(which_sort) + with open("allinone_convert.sh",'w') as f: + f.write(f"""#! /bin/bash +{extra_text} +{relevant_path} ./iteration_$1_ile/'EXTR_out-*.xml_*_.xml.gz' --output ./tmp_converted.xml.gz +{relevant_path_2} {convert_args_extr} ./tmp_converted.xml.gz > ./tmp_converted.dat +head -n 1 ./tmp_converted.dat > ./extrinsic_posterior_samples.dat +sed 1d ./tmp_converted.dat {extra_shuffle_command} >> ./extrinsic_posterior_samples.dat +""") + os.system("chmod a+x allinone_convert.sh") + batchConvertExtr_job, batchConvertExtr_job_name = dag_utils.write_convert_sub(exe=opts.working_directory+"/allinone_convert.sh",tag='convert_extr',log_dir=None,arg_str='',file_input="$(macroiteration) ",file_output="/dev/null", out_dir=opts.working_directory,universe=local_worker_universe,no_grid=no_worker_grid) + batchConvertExtr_job.add_condor_cmd("initialdir",opts.working_directory) + batchConvertExtr_job.set_log_file(opts.working_directory+"/iteration_$(macroiteration)_ile/logs/batchconvert-$(macroevent).log") + batchConvertExtr_job.set_stderr_file(opts.working_directory+"/iteration_$(macroiteration)_ile/logs/batchconvert-$(macroevent).err") + batchConvertExtr_job.add_condor_cmd('request_disk',opts.general_request_disk) + if opts.use_full_submit_paths: + fname = opts.working_directory+"/"+batchConvertExtr_job.get_sub_file() + batchConvertExtr_job.set_sub_file(fname) + batchConvertExtr_job.write_sub_file() + elif opts.last_iteration_extrinsic_batched_convert: + # Batched conversion: one job for a great many items + convert_args_extr = " --convention LI --export-cosmology --use-interpolated-cosmology " + if opts.last_iteration_extrinsic_samples_per_ile: + convert_args_extr += " --n-output-samples-per-file {}".format(opts.last_iteration_extrinsic_samples_per_ile) + if not (convert_args is None): + convert_args_extr += convert_args + relevant_path = dag_utils.which('util_BatchConvertResampleILEOutput.py') + with open("batch_convert.sh",'w') as f: + f.write("""#! /bin/bash +{} +{} {}/iteration_$1_ile/EXTR_out-$2.xml_*_.xml.gz {} +""".format(extra_text,relevant_path,opts.working_directory,convert_args_extr)) + os.system("chmod a+x batch_convert.sh") + batchConvertExtr_job, batchConvertExtr_job_name = dag_utils.write_convert_sub(exe=opts.working_directory+"/batch_convert.sh",tag='convert_extr',log_dir=None,arg_str='',file_input="$(macroiteration) $(macroevent)",file_output=opts.working_directory+"/iteration_$(macroiteration)_ile/EXTR_out-$(macroevent).downsampled_dat.dat", out_dir=opts.working_directory+"/iteration_$(macroiteration)_ile/",universe=local_worker_universe,no_grid=no_worker_grid) + batchConvertExtr_job.add_condor_cmd("initialdir",opts.working_directory) + batchConvertExtr_job.set_log_file(opts.working_directory+"/iteration_$(macroiteration)_ile/logs/batchconvert-$(macroevent).log") + batchConvertExtr_job.set_stderr_file(opts.working_directory+"/iteration_$(macroiteration)_ile/logs/batchconvert-$(macroevent).err") + batchConvertExtr_job.add_condor_cmd('request_disk',opts.general_request_disk) + if opts.use_full_submit_paths: + fname = opts.working_directory+"/"+batchConvertExtr_job.get_sub_file() + batchConvertExtr_job.set_sub_file(fname) + batchConvertExtr_job.write_sub_file() + else: + # Old style convert + resample, per (event, indx) + convert_args_extr = " --convention LI --export-cosmology --use-interpolated-cosmology " + if not (convert_args is None): + convert_args_extr += convert_args + convertExtr_job, convertExtr_job_name = dag_utils.write_convert_sub(tag='convert_extr',log_dir=None,arg_str=convert_args_extr,file_input=opts.working_directory+"/iteration_$(macroiteration)_ile/EXTR_out-$(macroevent).xml_$(macroindx)_.xml.gz",file_output=opts.working_directory+"/iteration_$(macroiteration)_ile/EXTR_out-$(macroevent).xml_$(macroindx)_.dat", out_dir=opts.working_directory+"/iteration_$(macroiteration)_ile/",universe=local_worker_universe,no_grid=no_worker_grid) + convertExtr_job.add_condor_cmd("initialdir",opts.working_directory) + convertExtr_job.set_log_file(opts.working_directory+"/iteration_$(macroiteration)_ile/logs/convert-$(macroevent)-$(macroindx).log") + convertExtr_job.set_stderr_file(opts.working_directory+"/iteration_$(macroiteration)_ile/logs/convert-$(macroevent)-$(macroindx).err") + if opts.use_full_submit_paths: + fname = opts.working_directory+"/"+convertExtr_job.get_sub_file() + convertExtr_job.set_sub_file(fname) + convertExtr_job.write_sub_file() + + # Resample task + resample_args = ' --n-output-samples ' + str(n_points_per_ILE) # pick n_points_per_ILE random points from each ILE run + resample_job, resample_job_name = dag_utils.write_resample_sub('resample',log_dir=None,arg_str=resample_args,file_input=opts.working_directory+"/iteration_$(macroiteration)_ile/EXTR_out-$(macroevent).xml_$(macroindx)_.dat",file_output=opts.working_directory+"/iteration_$(macroiteration)_ile/EXTR_out-$(macroevent).xml_$(macroindx)_.downsampled_dat",universe=local_worker_universe,no_grid=no_worker_grid) + resample_job.add_condor_cmd("initialdir",opts.working_directory) + resample_job.set_log_file(opts.working_directory+"/iteration_$(macroiteration)_ile/logs/resample-$(macroevent)-$(macroindx).log") + resample_job.set_stderr_file(opts.working_directory+"/iteration_$(macroiteration)_ile/logs/resample-$(macroevent)-$(macroindx).err") + if opts.use_full_submit_paths: + fname = opts.working_directory+"/"+resample_job.get_sub_file() + resample_job.set_sub_file(fname) + resample_job.write_sub_file() # Combination task at end -- probably should be a general utility cat_job, cat_job_name = dag_utils.write_cat_sub(file_prefix='EXTR', file_postfix='.downsampled_dat.dat',file_output='extrinsic_posterior_samples.dat',universe=local_worker_universe,no_grid=no_worker_grid) @@ -1065,6 +1149,7 @@ if opts.use_bw_psd: n_group = opts.ile_n_events_to_analyze +unify_node_list = [] # populated per iteration; used below to attach SCRIPT POST checks confirming nonempty composites for it in np.arange(it_start,opts.n_iterations): consolidate_now = None fit_node_now = None @@ -1078,7 +1163,9 @@ for it in np.arange(it_start,opts.n_iterations): unify_node.add_macro("macroiteration",it) unify_node.add_parent(con_node) unify_node.set_retry(opts.general_retries) - + if not(it ==0): # don't require the first composite to be nonempty + unify_node_list.append(unify_node) + # Create subdags n_jobs_this_time = opts.n_samples_per_job if it ==it_start: @@ -1247,21 +1334,33 @@ if opts.last_iteration_extrinsic: # - *not* always same as number of ILE events being analyzed # - *assumes* grid files have sufficiently large numbers of samples to allow this! (as in many other cases) n_jobs_extrinsic = int(opts.last_iteration_extrinsic_nsamples/(1.0*n_group)) + + if opts.last_iteration_extrinsic_time_resampling: + # a single iteration-level convert job (allinone_convert.sh) consumes all ILE output and writes the posterior directly + convert_node = pipeline.CondorDAGNode(batchConvertExtr_job) + convert_node.set_retry(opts.ile_retries) # this can fail too + convert_node.add_macro("macroiteration",it) # needed so we find the correct data to read + for event in np.arange(n_jobs_extrinsic): # Add task per ILE operation ile_node = pipeline.CondorDAGNode(ileExtr_job) # ile_node.set_priority(JOB_PRIORITIES["ILE"]) ile_node.set_retry(opts.ile_retries) ile_node.add_macro("macroevent", event*n_group) + ile_node.add_macro("macrongroup", n_group) ile_node.add_macro("macroiteration", it) if not(parent_fit_node is None): ile_node.add_parent(parent_fit_node) dag.add_node(ile_node) # Add convert and resample task *for each output file* - if opts.last_iteration_extrinsic_batched_convert: + if opts.last_iteration_extrinsic_time_resampling: + # establish parent-child relationship with the single iteration-level convert job + convert_node.add_parent(ile_node) + elif opts.last_iteration_extrinsic_batched_convert: convert_node = pipeline.CondorDAGNode(batchConvertExtr_job) convert_node.add_macro("macroevent", event*n_group) + convert_node.add_macro("macrongroup", n_group) convert_node.add_macro("macroiteration", it) convert_node.set_retry(opts.ile_retries) # this can fail too convert_node.add_parent(ile_node) @@ -1290,8 +1389,11 @@ if opts.last_iteration_extrinsic: # Add nodes dag.add_node(convert_node) dag.add_node(resample_node) - - dag.add_node(cat_node) + + if not(opts.last_iteration_extrinsic_time_resampling): + dag.add_node(cat_node) + else: + dag.add_node(convert_node) # this is the time-resampling task that writes the posterior directly # Create final node for overall plots. (Note: default setup is designed to enable plots of the last two iterations *at each step* but this seems like overkill) if plot_args: diff --git a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicMultiApproxIteration b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicMultiApproxIteration index c60b0d331..5627e2227 100755 --- a/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicMultiApproxIteration +++ b/MonteCarloMarginalizeCode/Code/bin/create_event_parameter_pipeline_BasicMultiApproxIteration @@ -267,10 +267,21 @@ if not (opts.cip_args is None): print("CIP", cip_args) cip_args_lines = None +cip_args_prefixes = [] # so it works correctly even in flat mode if not (opts.cip_args_list is None): with open(opts.cip_args_list) as f: cip_args_lines = f.readlines() - cip_args_n = [int(x.split(' ')[0]) for x in cip_args_lines] # Pull off the integer + # Pull off the leading token. It is usually an integer (number of iterations), but util_RIFT_pseudo_pipe.py + # also emits 'Z' (run-to-convergence marker) and 'G' (grid-stage marker) prefixes; tolerate those here. + cip_args_prefixes = [(x.split(' ')[0]) for x in cip_args_lines] + cip_args_n = (cip_args_prefixes.copy()) + for indx in np.arange(len(cip_args_n)): + if cip_args_prefixes[indx][0]=='Z': + cip_args_n[indx] = 1 # one nominal iteration; this workflow has no run-to-convergence CIP stage + elif cip_args_prefixes[indx][0] =='G': + cip_args_n[indx] = int(cip_args_prefixes[indx][1:]) # integer after G assumed + else: + cip_args_n[indx] = int(cip_args_n[indx]) cip_args_lines = [' '.join(x.split(' ')[1:]) for x in cip_args_lines] # pull off the integer cip_args_lines = [x.replace('[', ' \'[').replace(']', ']\'').rstrip() for x in cip_args_lines] cip_args_lines = [x.lstrip() for x in cip_args_lines] # remove leading whitespace diff --git a/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py b/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py index 410d6094e..a5be6a48e 100755 --- a/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py +++ b/MonteCarloMarginalizeCode/Code/bin/util_RIFT_pseudo_pipe.py @@ -137,6 +137,7 @@ def unsafe_parse_arg_string_dict(my_argstr): parser.add_argument("--skip-reproducibility",action='store_true') parser.add_argument("--use-production-defaults",action='store_true',help="Use production defaults. Intended for use with tools like asimov or by nonexperts who just want something to run on a real event. Will require manual setting of other arguments!") parser.add_argument("--use-subdags",action='store_true',help="Use CEPP_Alternate instead of CEPP_BasicIteration. Note this writes an adaptively-sized DAG each iteration, but doesn't otherwise optimize yet.") +parser.add_argument("--pipeline-builder",default=None,choices=["BasicIteration","AlternateIteration"],help="Explicitly select the create_event_parameter_pipeline_* iteration builder, as a drop-in hot-swap for side-by-side A/B testing. Overrides the implicit --use-subdags routing. If unset, the builder is chosen by --use-subdags (Alternate) vs. the default (Basic).") parser.add_argument("--use-ile-subdags",action='store_true',help="Use ILE subdag system (new)") parser.add_argument("--bilby-ini-file",default=None,type=str,help="Pass ini file for parsing. Intended to use for calibration reweighting. Full path recommended") parser.add_argument("--bilby-pickle-file",default=None,type=str,help="Bilby Pickle file with event settings. Intended to use for calibration reweighting. Full path recommended") @@ -1444,6 +1445,12 @@ def unsafe_parse_arg_string_dict(my_argstr): cepp = "create_event_parameter_pipeline_BasicIteration" if opts.use_subdags: cepp = "create_event_parameter_pipeline_AlternateIteration" +if opts.pipeline_builder: # explicit override wins, for clean side-by-side A/B testing of the two builders + if opts.use_subdags and opts.pipeline_builder != "AlternateIteration": + # use_subdags is set either by the user or force-set by --internal-use-amr (which REQUIRES the Alternate builder) + print(" WARNING: --pipeline-builder {} overrides --use-subdags routing; AMR/subdag runs require AlternateIteration ".format(opts.pipeline_builder)) + cepp = "create_event_parameter_pipeline_" + opts.pipeline_builder +print(" Pipeline builder (create_event_parameter_pipeline_*): ", cepp) cmd =cepp+ " --ile-n-events-to-analyze {} --input-grid proposed-grid.xml.gz --ile-exe `which integrate_likelihood_extrinsic_batchmode` --ile-args `pwd`/args_ile.txt --cip-args-list args_cip_list.txt --test-args args_test.txt --request-memory-CIP {} --request-memory-ILE {} --n-samples-per-job ".format(n_jobs_per_worker,cip_mem,ile_mem) + str(npts_it) + " --working-directory `pwd` --n-iterations " + str(n_iterations) + " --n-iterations-subdag-max {} ".format(opts.internal_n_iterations_subdag_max) + " --n-copies {} ".format(opts.ile_copies) + " --ile-retries "+ str(opts.ile_retries) + " --general-retries " + str(opts.general_retries) if opts.ile_jobs_per_worker_first: cmd += " --ile-n-events-to-analyze-first {} ".format(opts.ile_jobs_per_worker_first) From f44c7a8198752cbed3117ef5eb4143e202ad9d57 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Fri, 29 May 2026 06:59:42 -0400 Subject: [PATCH 25/32] integrators: make GPU (cupy) path actually run on old + current cupy The mcsamplerEnsemble GPU port (and MonteCarloEnsemble / gaussian_mixture_model) had never been exercised with cupy installed and crashed in GPU mode. Validated end-to-end with .travis/test-integrate.sh on a Kepler/sm_30 card using a cupy 10.6 + cudatoolkit 10.2 environment (last CUDA supporting sm_30). mcsamplerEnsemble: * evaluate()/calc_pdf(): bridge the host integrand/prior -- convert samples to CPU, call the user function, push the result back to the active backend. * replace cupy-incompatible rot90([list]) with an order-preserving reshape. * build dim-group / bounds dict keys with host ints (range/np.arange); the self.xpy.arange variant produced unhashable 0-d cupy arrays on GPU. * return scalars and store _rvs on the host so downstream numpy code works. gaussian_mixture_model / MonteCarloEnsemble: * portable _xpy_logsumexp (cupyx.scipy.special.logsumexp is absent in the cupy CUDA 10.2 build needed for sm_30). * _near_psd: use Hermitian eigh/eigvalsh on GPU (cupy.linalg has no eig/eigvals); the matrices are symmetric. numpy path unchanged. * gpu_logpdf: cupy.linalg has no LinAlgError and cholesky returns NaN rather than raising; catch numpy's error type and treat a NaN factor as failure. All integrators: import cupyx.scipy.special explicitly (not auto-loaded by import cupyx in older cupy). mcsamplerGPU / mcsamplerAdaptiveVolume (so the full test passes in GPU mode): * use instance converters / self.xpy instead of module-level GPU converters, which were contaminating these otherwise-CPU samplers with cupy arrays; * bridge their CPU prior/integrand; ones_like to follow the data backend. No behavioral change without cupy: all GPU branches are guarded by cupy_ok. Note: the AC sampler's --as-test check is statistically flaky (no seed) on both CPU and GPU and can randomly fail; this is pre-existing and unrelated. Co-Authored-By: Claude Opus 4.8 --- .../RIFT/integrators/MonteCarloEnsemble.py | 45 ++++++----- .../integrators/gaussian_mixture_model.py | 78 ++++++++++++------- .../integrators/mcsamplerAdaptiveVolume.py | 26 +++++-- .../RIFT/integrators/mcsamplerEnsemble.py | 54 +++++++++---- .../Code/RIFT/integrators/mcsamplerGPU.py | 40 ++++++---- .../Code/RIFT/integrators/mcsamplerNFlow.py | 2 +- .../RIFT/integrators/mcsamplerPortfolio.py | 2 +- 7 files changed, 164 insertions(+), 83 deletions(-) diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/MonteCarloEnsemble.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/MonteCarloEnsemble.py index 163a76ca0..ae1d2cd6e 100755 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/MonteCarloEnsemble.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/MonteCarloEnsemble.py @@ -13,7 +13,7 @@ try: import cupy - import cupyx + import cupyx.scipy.special xpy_default = cupy xpy_special_default = cupyx.scipy.special identity_convert = cupy.asnumpy @@ -28,6 +28,25 @@ regularize_log_scale = 1e-64 # before taking np.log, add this, so we don't propagate infinities + +def _xpy_logsumexp(a, axis=None): + """Portable logsumexp (mirror of gaussian_mixture_model._xpy_logsumexp). + + cupyx.scipy.special.logsumexp is absent in the CUDA 10.2 cupy build needed + for older (sm_30) GPUs, so implement the reduction with cupy primitives and + fall back to scipy on CPU. + """ + if cupy_ok: + a = cupy.asarray(a) + a_max = cupy.amax(a, axis=axis, keepdims=True) + a_max = cupy.where(cupy.isfinite(a_max), a_max, cupy.zeros_like(a_max)) + out = cupy.log(cupy.sum(cupy.exp(a - a_max), axis=axis, keepdims=True)) + a_max + if axis is None: + return out.reshape(()) + return cupy.squeeze(out, axis=axis) + return logsumexp(a, axis=axis) + + try: from multiprocess import Pool except: @@ -257,23 +276,16 @@ def _calculate_results(self): self.max_value = self.xpy.maximum(scale_factor, self.max_value) self.eff_samp = self.total_value / self.max_value else: - if cupy_ok: - log_sum_weights = cupyx.scipy.special.logsumexp(log_weights) - else: - log_sum_weights = logsumexp(log_weights) - + log_sum_weights = _xpy_logsumexp(log_weights) + log_integral_here = log_sum_weights - self.xpy.log(self.n) if not(self.integral ): - self.integral = log_integral_here - self.total_value = log_sum_weights + self.integral = log_integral_here + self.total_value = log_sum_weights self.max_value = log_scale_factor else: - if cupy_ok: - self.integral = cupyx.scipy.special.logsumexp([ self.integral + self.xpy.log(self.iterations), log_integral_here]) - self.xpy.log(self.iterations+1) - self.total_value= cupyx.scipy.special.logsumexp([self.total_value, log_sum_weights]) - else: - self.integral = logsumexp([ self.integral + np.log(self.iterations), log_integral_here]) - np.log(self.iterations+1) - self.total_value = logsumexp([self.total_value, log_sum_weights]) + self.integral = _xpy_logsumexp([ self.integral + self.xpy.log(self.iterations), log_integral_here]) - self.xpy.log(self.iterations+1) + self.total_value = _xpy_logsumexp([self.total_value, log_sum_weights]) self.max_value = self.xpy.maximum(self.max_value, self.xpy.max(log_weights)) self.eff_samp = self.xpy.exp(self.total_value - (self.max_value )) @@ -282,10 +294,7 @@ def _calculate_results(self): if not(self.scaled_error_squared): self.scaled_error_squared = log_scaled_error_squared else: - if cupy_ok: - self.scaled_error_squared = cupyx.scipy.special.logsumexp([ self.scaled_error_squared + self.xpy.log(self.iterations), log_scaled_error_squared]) - self.xpy.log(self.iterations+1) - else: - self.scaled_error_squared = logsumexp([ self.scaled_error_squared + np.log(self.iterations), log_scaled_error_squared]) - np.log(self.iterations+1) + self.scaled_error_squared = _xpy_logsumexp([ self.scaled_error_squared + self.xpy.log(self.iterations), log_scaled_error_squared]) - self.xpy.log(self.iterations+1) def _reset(self): for k in self.gmm_dict: diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py index 51113cda3..23d5a241d 100755 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/gaussian_mixture_model.py @@ -16,7 +16,7 @@ try: import cupy - import cupyx + import cupyx.scipy.special xpy_default = cupy xpy_special_default = cupyx.scipy.special identity_convert = cupy.asnumpy @@ -68,6 +68,37 @@ def mvnun(lower, upper, mean, cov, maxpts=None, abseps=1e-5, releps=1e-5): import itertools +def _xpy_logsumexp(a, axis=None): + """Portable logsumexp. + + cupyx.scipy.special.logsumexp is only available in newer cupy releases; + the CUDA 10.2 cupy build required by older (sm_30/Kepler) cards does not + ship it. Implement the reduction directly with cupy primitives so the GPU + path works regardless of cupy version, and fall back to scipy on CPU. + """ + if cupy_ok: + a = cupy.asarray(a) + a_max = cupy.amax(a, axis=axis, keepdims=True) + a_max = cupy.where(cupy.isfinite(a_max), a_max, cupy.zeros_like(a_max)) + out = cupy.log(cupy.sum(cupy.exp(a - a_max), axis=axis, keepdims=True)) + a_max + if axis is None: + return out.reshape(()) + return cupy.squeeze(out, axis=axis) + return logsumexp(a, axis=axis) + + +# Symmetric (Hermitian) eigen-routines. cupy.linalg only provides the Hermitian +# variants (eigh/eigvalsh), not the general eig/eigvals. The matrices fed to +# _near_psd below are covariance/correlation matrices and hence symmetric, so +# the Hermitian routines are both correct and the only ones available on GPU. +if cupy_ok: + _xpy_eigvals = cupy.linalg.eigvalsh + _xpy_eig = cupy.linalg.eigh +else: + _xpy_eigvals = np.linalg.eigvals + _xpy_eig = np.linalg.eig + + def gpu_logpdf(x, mean, cov, xpy): """ GPU-compatible multivariate normal log-pdf. @@ -82,12 +113,16 @@ def gpu_logpdf(x, mean, cov, xpy): """ d = mean.shape[0] diff = x - mean - # Use cholesky for efficiency and stability + # Use cholesky for efficiency and stability. cupy.linalg has no LinAlgError + # attribute (and cupy.linalg.cholesky returns NaN rather than raising on a + # non-PSD input), so catch the numpy error type and also treat a NaN factor + # as failure, falling back to an epsilon-regularized diagonal in both cases. + eps = 1e-6 * xpy.eye(d) try: L = xpy.linalg.cholesky(cov) - except xpy.linalg.LinAlgError: - # Fallback to adding small epsilon to diagonal - eps = 1e-6 * xpy.eye(d) + if bool(xpy.any(xpy.isnan(L))): + L = xpy.linalg.cholesky(cov + eps) + except np.linalg.LinAlgError: L = xpy.linalg.cholesky(cov + eps) # Solve L*y = diff^T => y = L^-1 * diff^T @@ -163,24 +198,15 @@ def _e_step(self, n, sample_array, log_sample_weights=None): p_nk[:,index] = log_pdf + log_p # (16.1.5) # Use cupy or scipy for logsumexp - if cupy_ok: - p_xn = cupyx.scipy.special.logsumexp(p_nk, axis=1) - else: - p_xn = logsumexp(p_nk, axis=1) - + p_xn = _xpy_logsumexp(p_nk, axis=1) + self.p_nk = p_nk - p_xn[:,self.xpy.newaxis] # (16.1.5) # normalize log sample weights as well, before modifying things with them - if cupy_ok: - ls_sum = cupyx.scipy.special.logsumexp(log_sample_weights) - else: - ls_sum = logsumexp(log_sample_weights) - - self.p_nk += log_sample_weights[:,self.xpy.newaxis] - ls_sum - - if cupy_ok: - self.log_prob = self.xpy.sum(p_xn + log_sample_weights) - else: - self.log_prob = np.sum(p_xn + log_sample_weights) + ls_sum = _xpy_logsumexp(log_sample_weights) + + self.p_nk += log_sample_weights[:,self.xpy.newaxis] - ls_sum + + self.log_prob = self.xpy.sum(p_xn + log_sample_weights) def _m_step(self, n, sample_array): ''' @@ -223,16 +249,16 @@ def _near_psd(self, x): y = x / (var_list[:, None] * var_list[None, :]) while True: epsilon = self.epsilon - if self.xpy.min(self.xpy.linalg.eigvals(y)) > epsilon: + if self.xpy.min(_xpy_eigvals(y)) > epsilon: return x var_list = self.xpy.array([self.xpy.sqrt(x[i,i]) for i in range(n)]) y = x / (var_list[:, None] * var_list[None, :]) - eigval, eigvec = self.xpy.linalg.eig(y) + eigval, eigvec = _xpy_eig(y) val = self.xpy.maximum(eigval, epsilon) vec = eigvec - + # Standard PSD projection: val_psd = self.xpy.maximum(eigval, epsilon) near_corr = vec @ self.xpy.diag(val_psd) @ vec.T @@ -418,13 +444,13 @@ def _near_psd(self, x): y = x / (var_list[:, None] * var_list[None, :]) while True: epsilon = self.epsilon - if self.xpy.min(self.xpy.linalg.eigvals(y)) > epsilon: + if self.xpy.min(_xpy_eigvals(y)) > epsilon: return x var_list = self.xpy.array([self.xpy.sqrt(x[i,i]) for i in range(n)]) y = x / (var_list[:, None] * var_list[None, :]) - eigval, eigvec = self.xpy.linalg.eig(y) + eigval, eigvec = _xpy_eig(y) val_psd = self.xpy.maximum(eigval, epsilon) near_corr = eigvec @ self.xpy.diag(val_psd) @ eigvec.T near_cov = near_corr * (var_list[:, None] * var_list[None, :]) diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerAdaptiveVolume.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerAdaptiveVolume.py index 82c28b912..3e3579813 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerAdaptiveVolume.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerAdaptiveVolume.py @@ -20,7 +20,7 @@ try: import cupy - import cupyx # needed for logsumexp + import cupyx.scipy.special # needed for logsumexp xpy_default=cupy try: xpy_special_default = cupyx.scipy.special @@ -280,11 +280,17 @@ def add_parameter(self, params, pdf, cdf_inv=None, left_limit=None, right_limit def prior_prod(self, x): """ Evaluates prior_pdf(x), multiplying together all factors + + prior_pdf are host (numpy) functions in general, so evaluate them on a + CPU copy of the samples and convert the product back to the active + backend. identity_convert / identity_convert_togpu are no-ops when cupy + is not in use. """ p_out = xpy_default.ones(len(x)) + x_cpu = identity_convert(x) indx = 0 for param in self.params_ordered: - p_out *= self.prior_pdf[param](x[:,indx]) + p_out *= identity_convert_togpu(self.prior_pdf[param](x_cpu[:,indx])) indx +=1 return p_out @@ -552,12 +558,16 @@ def integrate_log(self, lnF, *args, xpy=xpy_default,**kwargs): rv = identity_convert_togpu(rv) # send random numbers to GPU : ugh log_joint_p_prior = identity_convert_togpu(log_joint_p_prior) # send to GPU if required. Don't waste memory reassignment otherwise - # Evaluate function, protecting argument order + # Evaluate function, protecting argument order. The user integrand is + # a host function in general, so feed it CPU samples; lnL is pushed + # back to the active backend just below. identity_convert is a no-op + # without cupy. + rv_cpu = identity_convert(rv) if 'no_protect_names' in kwargs: - unpacked0 = rv.T + unpacked0 = rv_cpu.T lnL = lnF(*unpacked0) # do not protect order else: - unpacked = dict(list(zip(self.params_ordered,rv.T))) + unpacked = dict(list(zip(self.params_ordered,rv_cpu.T))) lnL= lnF(**unpacked) # protect order using dictionary # take log if we are NOT using lnL if cupy_ok: @@ -644,7 +654,11 @@ def integrate_log(self, lnF, *args, xpy=xpy_default,**kwargs): # write out log integrand self._rvs['log_integrand'] = allloglkl - allp # remember 'allloglkl' really is Lp -- despite the misleading name! -- so we are *undoing* that self._rvs['log_joint_prior'] = allp - self._rvs['log_joint_s_prior'] = xpy_here.ones(len(allloglkl))*(np.log(1/V) - np.sum(np.log(self.dx0))) # effective uniform sampling on this volume + # ones_like(allloglkl) follows allloglkl's backend (cupy via numpy's + # __array_function__ dispatch when on GPU); xpy_here.ones(len) would + # instead create a host array, leaving this term on a different backend + # than log_integrand / log_joint_prior and breaking the arithmetic below. + self._rvs['log_joint_s_prior'] = xpy_here.ones_like(allloglkl)*(np.log(1/V) - np.sum(np.log(self.dx0))) # effective uniform sampling on this volume # Manual estimate of integrand, done transparently (no 'log aggregate' or running calculation -- so memory hog log_wt = self._rvs["log_integrand"] + self._rvs["log_joint_prior"] - self._rvs["log_joint_s_prior"] diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerEnsemble.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerEnsemble.py index f1aaa7982..a7075c1bc 100755 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerEnsemble.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerEnsemble.py @@ -8,7 +8,7 @@ try: import cupy - import cupyx + import cupyx.scipy.special xpy_default = cupy xpy_special_default = cupyx.scipy.special identity_convert = cupy.asnumpy @@ -141,21 +141,32 @@ def add_parameter(self, params, pdf=None, cdf_inv=None, left_limit=None, right_ self.prior_pdf[params] = prior_pdf def evaluate(self, samples): + # The user integrand is a host (numpy/scipy) function in general, so move + # samples to the CPU before calling it and push the result back to the + # active backend (cupy on GPU). This is a no-op when xpy is numpy. + samples = self.identity_convert(samples) temp = [] for index in range(len(self.curr_args)): temp.append(samples[:,index]) - temp_ret = self.func(*temp) - return self.xpy.rot90([temp_ret], -1) + temp_ret = self.identity_convert_togpu(self.func(*temp)) + # column vector (n,1); cupy.rot90 does not accept array-likes/lists, and + # reshape is backend-agnostic and order-preserving (equiv. to the old + # np.rot90([temp_ret], -1)). + return temp_ret.reshape((-1, 1)) def calc_pdf(self, samples): n, _ = samples.shape temp_ret = self.xpy.ones((n, 1)) + # Prior pdfs are host functions in general; evaluate them on CPU samples + # and convert the result back to the active backend. + samples_cpu = self.identity_convert(samples) for index in range(len(self.curr_args)): if self.curr_args[index] in self.prior_pdf: pdf_func = self.prior_pdf[self.curr_args[index]] - temp_samples = samples[:,index] - temp_ret *= pdf_func(temp_samples).reshape( temp_ret.shape) + temp_samples = samples_cpu[:,index] + pdf_vals = self.identity_convert_togpu(pdf_func(temp_samples)) + temp_ret *= pdf_vals.reshape( temp_ret.shape) return temp_ret def setup(self,n_comp=None,**kwargs): @@ -191,13 +202,15 @@ def setup(self,n_comp=None,**kwargs): raw_bounds = self.xpy.array(bounds) if gmm_dict is None: + # See note in integrate(): dict keys must be host ints, not 0-d + # cupy arrays (which are unhashable). bounds = {} - for indx in self.xpy.arange(len(raw_bounds)): + for indx in np.arange(len(raw_bounds)): bounds[(indx,)] = raw_bounds[indx] bounds=raw_bounds if correlate_all_dims: gmm_dict = {tuple(range(dim)):None} - bounds = {tuple(self.xpy.arange(len(bounds))): raw_bounds} + bounds = {tuple(range(dim)): raw_bounds} else: gmm_dict = {} for i in range(dim): @@ -207,7 +220,7 @@ def setup(self,n_comp=None,**kwargs): for dims in gmm_dict: n_dims = len(dims) bounds_here = self.xpy.empty((n_dims,2)) - for indx in self.xpy.arange(n_dims): + for indx in range(n_dims): bounds_here[indx] = raw_bounds[dims[indx]] bounds[dims]=bounds_here @@ -350,13 +363,16 @@ def integrate(self, func, *args,**kwargs): bounds=None if gmm_dict is None: + # NOTE: dim-group / bounds dict keys must be *host* integers. Building + # them with self.xpy.arange would produce unhashable 0-d cupy arrays + # on GPU; keep this bookkeeping on the CPU with range/np.arange. bounds = {} - for indx in self.xpy.arange(len(raw_bounds)): + for indx in np.arange(len(raw_bounds)): bounds[(indx,)] = raw_bounds[indx] bounds=raw_bounds if correlate_all_dims: gmm_dict = {tuple(range(dim)):None} - bounds = {tuple(self.xpy.arange(len(bounds))): raw_bounds} + bounds = {tuple(range(dim)): raw_bounds} else: gmm_dict = {} for i in range(dim): @@ -366,7 +382,7 @@ def integrate(self, func, *args,**kwargs): for dims in gmm_dict: n_dims = len(dims) bounds_here = self.xpy.empty((n_dims,2)) - for indx in self.xpy.arange(n_dims): + for indx in range(n_dims): bounds_here[indx] = raw_bounds[dims[indx]] bounds[dims]=bounds_here @@ -400,13 +416,15 @@ def integrate(self, func, *args,**kwargs): if mcsamp_func is not None: mcsamp_func(self, integrator) + # Store sample history on the host so downstream (CPU) consumers -- + # weights, CDFs, posterior plots -- work regardless of backend. index = 0 for param in args: - self._rvs[param] = sample_array[:,index] + self._rvs[param] = self.identity_convert(sample_array[:,index]) index += 1 - self._rvs['joint_prior'] = prior_array - self._rvs['joint_s_prior'] = p_array - self._rvs['integrand'] = value_array + self._rvs['joint_prior'] = self.identity_convert(prior_array) + self._rvs['joint_s_prior'] = self.identity_convert(p_array) + self._rvs['integrand'] = self.identity_convert(value_array) if bFairdraw and not(n_extr is None): n_extr = int(self.xpy.min([n_extr,1.5*eff_samp,1.5*neff])) @@ -419,7 +437,7 @@ def integrate(self, func, *args,**kwargs): ln_wt += - scipy.special.logsumexp(self.identity_convert(ln_wt)) wt = self.xpy.exp(ln_wt) if n_extr < len(value_array): - indx_list = self.xpy.random.choice(self.xpy.arange(len(wt)), size=n_extr,replace=True,p=wt) + indx_list = self.identity_convert(self.xpy.random.choice(self.xpy.arange(len(wt)), size=n_extr,replace=True,p=wt)) for key in list(self._rvs.keys()): if isinstance(key, tuple): self._rvs[key] = self._rvs[key][:,indx_list] @@ -435,7 +453,9 @@ def integrate(self, func, *args,**kwargs): np.savetxt('mcsampler_data.txt', self.identity_convert(dat_out), header=" ".join(['sample_array', 'value_array', 'p_array'])) - return integral, error_squared, eff_samp, dict_return + # Return scalars on the host so callers can do plain numpy arithmetic + # (np.sqrt, np.log, np.array([...])) on the results. + return self.identity_convert(integral), self.identity_convert(error_squared), self.identity_convert(eff_samp), dict_return def inv_uniform_cdf(a, b, x): diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerGPU.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerGPU.py index 2f1724352..9070e52f0 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerGPU.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerGPU.py @@ -20,7 +20,7 @@ try: import cupy - import cupyx # needed for logsumexp + import cupyx.scipy.special # needed for logsumexp xpy_default=cupy try: xpy_special_default = cupyx.scipy.special @@ -316,15 +316,20 @@ def cdf_inverse_from_hist(self, P, param,old_style=False): - for now, do on the CPU, since this is done rarely and involves fairly small arrays - this is very wasteful, since we are casting back to the CPU for ALL our sampling points """ - if old_style or not(cupy_ok): - dat_cdf = identity_convert(self.histogram_cdf[param]) - dat_edges = identity_convert(self.histogram_edges[param]) + # Use the CPU path whenever this sampler is not actually running on the + # GPU (self.xpy is numpy). The GPU interp() calls cupy.searchsorted, which + # requires cupy arrays; the histograms are numpy when self.xpy is numpy, + # so the module-level cupy_ok flag is not the right gate here. Instance + # converters are used so nothing is force-pushed across backends. + if old_style or not(cupy_ok) or (self.xpy is np): + dat_cdf = self.identity_convert(self.histogram_cdf[param]) + dat_edges = self.identity_convert(self.histogram_edges[param]) y = np.interp( - identity_convert(P), dat_cdf, + self.identity_convert(P), dat_cdf, dat_edges, ) # Return the value in the original scaling. - return identity_convert_togpu(y)*self.x_max_minus_min[param] + self.x_min[param] + return self.identity_convert_togpu(y)*self.x_max_minus_min[param] + self.x_min[param] dat_cdf = self.histogram_cdf[param] dat_edges =self.histogram_edges[param] y = interp(P,dat_cdf,dat_edges) @@ -722,8 +727,10 @@ def integrate_log(self, lnF, *args, xpy=xpy_default,**kwargs): lnL= lnF(**unpacked) # protect order using dictionary # take log if we are NOT using lnL if cupy_ok: - if not(isinstance(lnL,cupy.ndarray)): - lnL = identity_convert_togpu(lnL) # send to GPU, if not already there + # instance converter tracks self.xpy; module-level converter would + # force lnL onto the GPU even in CPU mode (see note in integrate()). + if not(isinstance(lnL, self.xpy.ndarray)): + lnL = self.identity_convert_togpu(lnL) log_integrand =lnL + self.xpy.log(joint_p_prior) - self.xpy.log(joint_p_s) log_weights = tempering_exp*lnL + self.xpy.log(joint_p_prior) - self.xpy.log(joint_p_s) @@ -1086,13 +1093,18 @@ def integrate(self, func, *args, **kwargs): fval = func(**unpacked) # Chris' original plan: note this insures the function arguments are tied to the parameters, using a dictionary. if cupy_ok: - if not(isinstance(fval,cupy.ndarray)): - fval = identity_convert_togpu(fval) # send to GPU, if not already there + # Use the *instance* converter (self.identity_convert_togpu), which + # tracks self.xpy. The module-level converter would force fval onto + # the GPU even when this sampler is running on the CPU (self.xpy is + # numpy by default), producing a numpy/cupy mismatch against the + # numpy joint_p_prior / joint_p_s built in draw_simplified. + if not(isinstance(fval, self.xpy.ndarray)): + fval = self.identity_convert_togpu(fval) # # Check if there is any practical contribution to the integral # - # FIXME: While not technically a fatal error, this will kill the + # FIXME: While not technically a fatal error, this will kill the # adaptive sampling if not(cupy_ok): # only do this check if not on GPU if fval.sum() == 0: @@ -1148,9 +1160,9 @@ def integrate(self, func, *args, **kwargs): if var is None: var=0 if mean is None: - mean=identity_convert_togpu(0.0) + mean=self.identity_convert_togpu(0.0) current_aggregate = [int(self.ntotal),mean, (self.ntotal-1)*var] - current_aggregate = update(current_aggregate, int_val,xpy=xpy_default) + current_aggregate = update(current_aggregate, int_val,xpy=self.xpy) outvals = finalize(current_aggregate) # print(var, outvals[-1]) var = outvals[-1] @@ -1160,7 +1172,7 @@ def integrate(self, func, *args, **kwargs): # running number of evaluations self.ntotal += n # FIXME: Likely redundant with int_val1 - mean = identity_convert_togpu(xpy_default.float64(int_val1/self.ntotal)) + mean = self.identity_convert_togpu(self.xpy.float64(int_val1/self.ntotal)) # this test should not be required (!), but ... nan can happen if np.isfinite(maxval): #not(np.isinf(maxval)): diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerNFlow.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerNFlow.py index 758097e98..480cf7310 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerNFlow.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerNFlow.py @@ -63,7 +63,7 @@ try: import cupy - import cupyx # needed for logsumexp + import cupyx.scipy.special # needed for logsumexp xpy_default=cupy try: xpy_special_default = cupyx.scipy.special diff --git a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerPortfolio.py b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerPortfolio.py index e34235bde..016acce45 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerPortfolio.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/integrators/mcsamplerPortfolio.py @@ -18,7 +18,7 @@ try: import cupy - import cupyx # needed for logsumexp + import cupyx.scipy.special # needed for logsumexp xpy_default=cupy try: xpy_special_default = cupyx.scipy.special From ca34b54699194734ffdb72dbd7880d47a4fb103f Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Fri, 29 May 2026 08:42:27 -0400 Subject: [PATCH 26/32] containers: add container-family deployment + multi-target build + CI dep canary Three related pieces for container CI and flexible multi-architecture deployment: Feature C (core): container family manifest. New RIFT/misc/container_manifest.py parses a YAML manifest (advertising a family of images + GPU capability ranges) and builds HTCondor expressions. Wired into write_ILE_sub_simple and write_CIP_sub (dag_utils_generic.py, import-guarded): when SINGULARITY_RIFT_IMAGE points at a .yaml/.yml manifest, MY.SingularityImage becomes an expression-valued ifThenElse over the matched machine's GPU capability (default GPUs_Capability), selecting the right image per machine. Only the matched image is fetched (CVMFS images referenced in place / lazy-fetched; osdf images selectively transferred via a comma-free $$() ternary token), never the whole family. A require_gpus capability floor is &&-composed with any user RIFT_REQUIRE_GPUS. Plain .sif / osdf:// values keep byte-identical legacy behavior. Vanilla universe throughout. Feature B: multi-target build. New containers/ dir -- rift_container.def.in template + build_family.sh (build matrix; first entry keeps the current production base for broad compatibility), shared requirements-container.txt (single source of truth), example rift_container_family.yaml, and README. Feature A: CI dependency-resolution canary. New non-blocking container-dep-canary and container-swig-canary jobs in ci.yml, plus a weekly schedule, to catch upstream breakage (e.g. swig>=4.4.0, issue #136) before a container rebuild. Tests: MonteCarloMarginalizeCode/Code/test/test_container_manifest.py (13 tests: parser, expression builders, integration via write_ILE_sub_simple condor_cmds, all-cvmfs, backward-compat). Co-Authored-By: Claude Opus 4.8 --- .github/workflows/ci.yml | 63 ++++ .../Code/RIFT/misc/container_manifest.py | 303 ++++++++++++++++++ .../Code/RIFT/misc/dag_utils_generic.py | 87 ++++- .../Code/test/test_container_manifest.py | 209 ++++++++++++ containers/README.md | 138 ++++++++ containers/build_family.sh | 91 ++++++ containers/requirements-container.txt | 25 ++ containers/rift_container.def.in | 65 ++++ containers/rift_container_family.yaml | 43 +++ 9 files changed, 1017 insertions(+), 7 deletions(-) create mode 100644 MonteCarloMarginalizeCode/Code/RIFT/misc/container_manifest.py create mode 100644 MonteCarloMarginalizeCode/Code/test/test_container_manifest.py create mode 100644 containers/README.md create mode 100755 containers/build_family.sh create mode 100644 containers/requirements-container.txt create mode 100644 containers/rift_container.def.in create mode 100644 containers/rift_container_family.yaml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 95c167bf6..0c6b246cd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,10 @@ on: pull_request: branches: [rift_O4d, rift_O4d_junior, rift_O4d_gmm_gpu] workflow_dispatch: + schedule: + # Weekly canary so a fresh UPSTREAM release (e.g. swig>=4.4.0 -- see #136) + # is caught even when there is no RIFT commit. Mondays 06:00 UTC. + - cron: '0 6 * * 1' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -189,6 +193,65 @@ jobs: **/*.log **/test-results/*.xml + container-dep-canary: + # Dependency-resolution canary for the container build. The container ships + # an UNPINNED dependency set (containers/requirements-container.txt) and + # clones RIFT at build time, so a fresh upstream release can silently break + # RIFT and only surface when a container rebuild fails (e.g. swig>=4.4.0, + # issue #136). This job installs that same unpinned set + exercises the pixi + # swig-post44 deployment lane and runs the import check, so we get an early + # warning. Runs on push/PR AND weekly (see on.schedule). + # + # Non-blocking: it tracks UPSTREAM changes outside any PR author's control, + # so a red run should alert maintainers, not block unrelated PRs. + runs-on: ubuntu-latest + continue-on-error: true + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.10' # matches the container's python3.10 + - name: Enable symlink + run: sudo ln -sf $(which python3) /usr/bin/python + - name: Install system dependencies + run: sudo apt-get update && sudo apt-get install -y libgsl-dev + - name: Install UNPINNED container dependency set (latest upstream) + run: | + python -m pip install --upgrade pip --break-system-packages + # Strip the GPU-only cupy line: there is no GPU/driver in CI and the + # canary's goal is dependency RESOLUTION + RIFT import, not cupy exec. + # (cupy is not actually listed in requirements-container.txt, but be + # defensive in case it is added later.) + grep -viE '^\s*cupy' containers/requirements-container.txt > /tmp/req-canary.txt + python -m pip install -r /tmp/req-canary.txt --break-system-packages + python -m pip install --editable . --break-system-packages + - name: Show resolved versions + run: | + python -c "import sys, numpy, scipy; print('python', sys.version); print('numpy', numpy.__version__); print('scipy', scipy.__version__)" + - name: Import check (latest container deps) + run: python .travis/test-all-mod.py + + container-swig-canary: + # Companion to container-dep-canary: exercise the pixi swig-post44 lane, + # which is the direct issue-#136 detector (swig>=4.4.0 breaking RIFT's + # generated bindings). Kept as its own job so a swig failure is distinct + # from a general dependency-resolution failure. Also non-blocking. + runs-on: ubuntu-latest + continue-on-error: true + steps: + - uses: actions/checkout@v4 + - name: Install system dependencies + run: sudo apt-get update && sudo apt-get install -y libgsl-dev + - uses: prefix-dev/setup-pixi@v0.8.1 + with: + environments: swig-post44 + - name: swig version (post-4.4 lane) + run: pixi run -e swig-post44 swig-version + - name: Install RIFT (post-4.4 swig lane) + run: pixi run -e swig-post44 install-rift + - name: Import check (post-4.4 swig lane) + run: pixi run -e swig-post44 import-check + docs: runs-on: ubuntu-latest permissions: diff --git a/MonteCarloMarginalizeCode/Code/RIFT/misc/container_manifest.py b/MonteCarloMarginalizeCode/Code/RIFT/misc/container_manifest.py new file mode 100644 index 000000000..573165e50 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/RIFT/misc/container_manifest.py @@ -0,0 +1,303 @@ +""" +container_manifest +================== + +Support for "container family" manifests used by the RIFT pipeline. + +Historically ``SINGULARITY_RIFT_IMAGE`` names a single ``.sif`` image (a local +path or an ``osdf://`` URL), and the ILE/CIP Condor jobs hard-code + + MY.SingularityImage = "" + +A *manifest* lets us instead advertise a *family* of images, each targeting a +different GPU compute capability, and let HTCondor pick the right one per matched +machine. When ``SINGULARITY_RIFT_IMAGE`` points at a ``.yaml``/``.yml`` file, +the job-submission code turns it into: + + * an expression-valued ``MY.SingularityImage`` -- a nested ``ifThenElse`` over + the matched machine's GPU capability attribute (default ``GPUs_Capability``) + that selects the highest-capability image the machine can run; and + * a ``require_gpus`` capability floor (the lowest capability any image in the + family supports), composed (``&&``) with any user-supplied + ``RIFT_REQUIRE_GPUS``; and + * for ``osdf://`` images, a *selective* ``transfer_input_files`` entry using + HTCondor ``$$()`` match-time substitution, so only the *matched* image is + transferred (CVMFS/local images are referenced in place and never + transferred). + +Single-``.sif`` behavior is completely unchanged: only ``.yaml``/``.yml`` values +exercise any of this. + +YAML schema +----------- + + version: 1 + capability_attr: GPUs_Capability # machine ClassAd attr the ifThenElse tests + fallback: ancient # label used as the innermost else-branch + containers: + - label: ancient + image: /cvmfs/.../rift_ancient_cuda11.sif # in-place (CVMFS/local) + cuda_capability_min: 3.0 # inclusive + cuda_capability_max: 7.0 # exclusive; null/omitted => open-ended + note: "cupy-cuda11x, ancient base" + - label: modern + image: osdf:///igwn/.../rift_modern_cuda12.sif # selectively transferred + cuda_capability_min: 7.0 + cuda_capability_max: null + note: "cupy-cuda12x, newer base" +""" + +import os + +__all__ = [ + "ContainerManifestError", + "is_container_manifest", + "load_container_manifest", + "build_singularity_image_expr", + "build_transfer_input_expr", + "build_require_gpus_floor", +] + +# Default machine ClassAd attribute advertising GPU compute capability. The +# user's pools advertise this via e.g. +# condor_status -constraint 'TotalGPUs > 0' -autoformat GPUs_DeviceName GPUs_Capability +DEFAULT_CAPABILITY_ATTR = "GPUs_Capability" + + +class ContainerManifestError(Exception): + """Raised for a missing/malformed container family manifest.""" + + +def is_container_manifest(value): + """Return True iff ``value`` (the ``SINGULARITY_RIFT_IMAGE`` string) names a + multi-container manifest rather than a single ``.sif``/``osdf://`` image. + + Pure string check (no filesystem access) so single-image callers pay zero + cost and their behavior is unchanged. + """ + if not value or not isinstance(value, str): + return False + return value.lower().endswith((".yaml", ".yml")) + + +def _image_needs_transfer(image): + """True iff ``image`` is a URL that must be fetched via Condor file transfer + (e.g. ``osdf://``). CVMFS/local paths (``/cvmfs/...``, ``./foo.sif``) are + resolved in place and return False. + """ + return "://" in image + + +def _image_runtime_path(image): + """The string used *inside* ``MY.SingularityImage`` for this image. + + Transferred (URL) images land in the job scratch dir under their basename, + so the pilot must reference ``./`` -- matching the existing + single-image osdf rewrite convention. In-place (CVMFS/local) images are + referenced verbatim. + """ + if _image_needs_transfer(image): + return "./{}".format(image.rstrip("/").split("/")[-1]) + return image + + +def _fmt_cap(value): + """Format a capability number for a ClassAd expression (e.g. 7.0 -> '7.0').""" + return repr(float(value)) + + +def load_container_manifest(path): + """Parse and validate a YAML container family manifest. + + Returns a dict ``{capability_attr, fallback, containers}`` where + ``containers`` is sorted by ``cuda_capability_min`` *descending* (containers + with no min sort last). + + Raises ``ContainerManifestError`` on a missing pyyaml, an unreadable or + malformed file, an empty container list, or an unknown ``fallback`` label. + """ + try: + import yaml + except ImportError as exc: # pragma: no cover - environment dependent + raise ContainerManifestError( + "PyYAML is required to read a container family manifest ({}); " + "install pyyaml or point SINGULARITY_RIFT_IMAGE at a single .sif".format(path) + ) from exc + + try: + with open(path, "r") as f: + data = yaml.safe_load(f) + except (IOError, OSError) as exc: + raise ContainerManifestError("Cannot read container manifest {}: {}".format(path, exc)) + except yaml.YAMLError as exc: + raise ContainerManifestError("Malformed container manifest {}: {}".format(path, exc)) + + if not isinstance(data, dict): + raise ContainerManifestError("Container manifest {} is not a mapping".format(path)) + + raw_containers = data.get("containers") + if not raw_containers or not isinstance(raw_containers, list): + raise ContainerManifestError( + "Container manifest {} must define a non-empty 'containers' list".format(path) + ) + + containers = [] + for idx, entry in enumerate(raw_containers): + if not isinstance(entry, dict): + raise ContainerManifestError( + "Container manifest {} entry #{} is not a mapping".format(path, idx) + ) + image = entry.get("image") + label = entry.get("label") + if not image: + raise ContainerManifestError( + "Container manifest {} entry #{} is missing 'image'".format(path, idx) + ) + if not label: + raise ContainerManifestError( + "Container manifest {} entry #{} is missing 'label'".format(path, idx) + ) + cap_min = entry.get("cuda_capability_min") + cap_max = entry.get("cuda_capability_max") + try: + cap_min = None if cap_min is None else float(cap_min) + cap_max = None if cap_max is None else float(cap_max) + except (TypeError, ValueError): + raise ContainerManifestError( + "Container manifest {} entry '{}' has non-numeric capability bounds".format( + path, label + ) + ) + containers.append( + { + "label": label, + "image": image, + "cuda_capability_min": cap_min, + "cuda_capability_max": cap_max, + "note": entry.get("note"), + } + ) + + # Sort by min capability descending; None mins (open-ended-low catch-alls) + # sort last. float('-inf') keeps them at the bottom. + containers.sort( + key=lambda c: (c["cuda_capability_min"] if c["cuda_capability_min"] is not None else float("-inf")), + reverse=True, + ) + + labels = {c["label"] for c in containers} + fallback = data.get("fallback") + if fallback is None: + # Default fallback = the most-compatible (lowest-min) container, i.e. the + # last one after the descending sort. This is the CPU-safe catch-all. + fallback = containers[-1]["label"] + elif fallback not in labels: + raise ContainerManifestError( + "Container manifest {} fallback '{}' is not one of {}".format( + path, fallback, sorted(labels) + ) + ) + + capability_attr = data.get("capability_attr") or DEFAULT_CAPABILITY_ATTR + + return { + "capability_attr": capability_attr, + "fallback": fallback, + "containers": containers, + } + + +def _capability_attr(manifest): + """Resolve the machine attribute used by the selection ifThenElse. + + Precedence: ``RIFT_GPU_CAPABILITY_ATTR`` env override > manifest + ``capability_attr`` > module default. + """ + return os.environ.get("RIFT_GPU_CAPABILITY_ATTR") or manifest["capability_attr"] + + +def _build_selector(manifest, value_fn, ternary=False): + """Build a nested capability selector over the family. + + ``value_fn(container)`` returns the ClassAd literal for a container branch + (already quoted as appropriate). The highest-min container is the outermost + test; the ``fallback`` container is the innermost else (catch-all, also used + when the capability attribute is ``undefined``). + + With ``ternary=False`` the selector uses ``ifThenElse(cond, a, b)`` (commas). + With ``ternary=True`` it uses the comma-free ClassAd ternary ``cond ? a : b`` + -- required when the result is embedded as one element of a comma-separated + ``transfer_input_files`` list, where internal commas would be mis-split. + """ + attr = _capability_attr(manifest) + containers = manifest["containers"] # sorted desc by min + by_label = {c["label"]: c for c in containers} + fb = by_label[manifest["fallback"]] + + # Containers that contribute a capability threshold test (exclude the + # fallback so it is not duplicated as both a branch and the else). + thresholds = [ + c + for c in containers + if c["cuda_capability_min"] is not None and c["label"] != fb["label"] + ] + # Fold ascending so the highest min ends up outermost. + thresholds.sort(key=lambda c: c["cuda_capability_min"]) + + expr = value_fn(fb) + for c in thresholds: + cond = "TARGET.{attr} >= {mn}".format(attr=attr, mn=_fmt_cap(c["cuda_capability_min"])) + if ternary: + expr = "({cond} ? {val} : {inner})".format(cond=cond, val=value_fn(c), inner=expr) + else: + expr = "ifThenElse({cond}, {val}, {inner})".format( + cond=cond, val=value_fn(c), inner=expr + ) + return expr + + +def build_singularity_image_expr(manifest): + """Return the unquoted ClassAd expression for ``MY.SingularityImage``. + + Each branch literal is the container's *runtime* path (CVMFS/local verbatim, + ``./`` for transferred images). + """ + return _build_selector( + manifest, lambda c: '"{}"'.format(_image_runtime_path(c["image"])) + ) + + +def build_transfer_input_expr(manifest): + """Return a single ``$$([ ... ])`` token for ``transfer_input_files`` that + fetches *only the matched* image, or ``None`` if no container in the family + needs transfer. + + Transfer branches yield the URL verbatim; in-place (CVMFS/local) branches + yield ``""`` (no transfer on those machines). Uses the comma-free ternary + form so the token survives comma-splitting of ``transfer_input_files``. + """ + if not any(_image_needs_transfer(c["image"]) for c in manifest["containers"]): + return None + + def value_fn(c): + return '"{}"'.format(c["image"]) if _image_needs_transfer(c["image"]) else '""' + + return "$$([ {} ])".format(_build_selector(manifest, value_fn, ternary=True)) + + +def build_require_gpus_floor(manifest): + """Return a ``require_gpus`` capability floor expression for the family, or + ``None``. + + The floor is the lowest ``cuda_capability_min`` across the family -- i.e. do + not match a GPU less capable than anything we ship. Uses the require_gpus + sub-ad attribute ``Capability`` (unprefixed -- *not* ``TARGET.`` and *not* + ``GPUs_Capability``). + + If any container has no min (open-ended-low catch-all), there is effectively + no lower bound and ``None`` is returned. + """ + mins = [c["cuda_capability_min"] for c in manifest["containers"]] + if any(m is None for m in mins) or not mins: + return None + return "Capability >= {}".format(_fmt_cap(min(mins))) diff --git a/MonteCarloMarginalizeCode/Code/RIFT/misc/dag_utils_generic.py b/MonteCarloMarginalizeCode/Code/RIFT/misc/dag_utils_generic.py index d9a459f13..2f320b162 100644 --- a/MonteCarloMarginalizeCode/Code/RIFT/misc/dag_utils_generic.py +++ b/MonteCarloMarginalizeCode/Code/RIFT/misc/dag_utils_generic.py @@ -125,6 +125,26 @@ def emit_dag(self, dag, path): import numpy as np import configparser +# Container family manifest support (Feature: multi-architecture container +# deployment). Import-guarded so that plain single-.sif runs never require +# pyyaml; only an actual .yaml/.yml manifest exercises this path. +try: + from RIFT.misc.container_manifest import ( + is_container_manifest, + load_container_manifest, + build_singularity_image_expr, + build_transfer_input_expr, + build_require_gpus_floor, + ContainerManifestError, + ) + _HAVE_CONTAINER_MANIFEST = True +except ImportError: + _HAVE_CONTAINER_MANIFEST = False + + def is_container_manifest(value): + # Without the helper module available, never treat a value as a manifest. + return False + __author__ = ( "Evan Ochsner , " "Chris Pankow " @@ -1902,7 +1922,21 @@ def write_CIP_sub(tag='integrate', exe=None, input_net='all.net',output='output- singularity_image_used = "{}".format(singularity_image) # make copy extra_files = [] - if singularity_image: + # Container family manifest support (see write_ILE_sub_simple). CIP jobs do + # not request GPUs, so no require_gpus floor is added here; on a CPU-only + # slot TARGET.GPUs_Capability is undefined and the selection expression + # collapses to the fallback image, which must be the CPU-safe one. + singularity_is_family = False + singularity_image_expr = None + singularity_transfer_expr = None + if singularity_image and is_container_manifest(singularity_image): + singularity_is_family = True + _manifest = load_container_manifest(singularity_image) + singularity_image_expr = build_singularity_image_expr(_manifest) + singularity_transfer_expr = build_transfer_input_expr(_manifest) + if singularity_transfer_expr: + extra_files += [singularity_transfer_expr] + elif singularity_image: if 'osdf:' in singularity_image: singularity_image_used = "./{}".format(singularity_image.split('/')[-1]) extra_files += [singularity_image] @@ -2022,7 +2056,11 @@ def write_CIP_sub(tag='integrate', exe=None, input_net='all.net',output='output- ile_job.add_condor_cmd('request_CPUs', str(1)) ile_job.add_condor_cmd('transfer_executable', 'False') ile_job.add_condor_cmd("MY.SingularityBindCVMFS", 'True') - ile_job.add_condor_cmd("MY.SingularityImage", '"' + singularity_image_used + '"') + if singularity_is_family: + # Expression-valued: emit raw, NO surrounding double quotes. + ile_job.add_condor_cmd("MY.SingularityImage", singularity_image_expr) + else: + ile_job.add_condor_cmd("MY.SingularityImage", '"' + singularity_image_used + '"') requirements.append("HAS_SINGULARITY=?=TRUE") if use_oauth_files: @@ -2219,12 +2257,32 @@ def write_ILE_sub_simple(tag='integrate', exe=None, log_dir=None, use_eos=False, singularity_image_used = "{}".format(singularity_image) # make copy extra_files = [] - if singularity_image: + # Container family manifest support: if singularity_image points at a + # .yaml/.yml manifest, build an expression-valued MY.SingularityImage plus a + # selective ($$()) transfer entry and a require_gpus capability floor. A + # plain .sif / osdf:// value keeps the legacy single-image behavior below. + singularity_is_family = False + singularity_image_expr = None + singularity_transfer_expr = None + singularity_require_gpus_floor = None + if singularity_image and is_container_manifest(singularity_image): + singularity_is_family = True + _manifest = load_container_manifest(singularity_image) + singularity_image_expr = build_singularity_image_expr(_manifest) + singularity_transfer_expr = build_transfer_input_expr(_manifest) + singularity_require_gpus_floor = build_require_gpus_floor(_manifest) + # Selective transfer: only the matched osdf image is fetched (via the + # $$() token, which is comma-free so it survives transfer_input_files + # comma-splitting). CVMFS/local images are referenced in place and + # never transferred, so the whole family is never pulled. + if singularity_transfer_expr: + extra_files += [singularity_transfer_expr] + elif singularity_image: if 'osdf:' in singularity_image: singularity_image_used = "./{}".format(singularity_image.split('/')[-1]) extra_files += [singularity_image] - + exe = exe or which("integrate_likelihood_extrinsic") frames_local = None if use_singularity: @@ -2381,7 +2439,12 @@ def write_ILE_sub_simple(tag='integrate', exe=None, log_dir=None, use_eos=False, ile_job.add_condor_cmd('request_CPUs', str(1)) ile_job.add_condor_cmd('transfer_executable', 'False') ile_job.add_condor_cmd("MY.SingularityBindCVMFS", 'True') - ile_job.add_condor_cmd("MY.SingularityImage", '"' + singularity_image_used + '"') + if singularity_is_family: + # Expression-valued: emit the ifThenElse raw, with NO surrounding + # double quotes (a classad expression must not be quoted). + ile_job.add_condor_cmd("MY.SingularityImage", singularity_image_expr) + else: + ile_job.add_condor_cmd("MY.SingularityImage", '"' + singularity_image_used + '"') ile_job.add_condor_cmd("MY.flock_local",'true') # jobs can match to local pool ! requirements.append("HAS_SINGULARITY=?=TRUE") # if not(use_simple_osg_requirements): @@ -2529,8 +2592,18 @@ def write_ILE_sub_simple(tag='integrate', exe=None, log_dir=None, use_eos=False, remove_str = 'JobStatus =?= 2 && (CurrentTime - JobStartDate) > ( {})'.format(60*max_runtime_minutes) ile_job.add_condor_cmd('periodic_remove', remove_str) - if 'RIFT_REQUIRE_GPUS' in os.environ: # new convention 'require_gpus = ' to specify conditions on GPU properties - ile_job.add_condor_cmd('require_gpus',os.environ['RIFT_REQUIRE_GPUS']) + # require_gpus: compose the user's RIFT_REQUIRE_GPUS (used today to block + # incompatible hosts by DeviceName) with the container family's capability + # floor (lowest capability any image in the family supports). Both apply; + # neither is silently dropped. (new convention 'require_gpus = ' specifies + # conditions on GPU properties) + require_gpus_terms = [] + if 'RIFT_REQUIRE_GPUS' in os.environ: + require_gpus_terms.append('({})'.format(os.environ['RIFT_REQUIRE_GPUS'])) + if singularity_is_family and singularity_require_gpus_floor: + require_gpus_terms.append('({})'.format(singularity_require_gpus_floor)) + if require_gpus_terms: + ile_job.add_condor_cmd('require_gpus', ' && '.join(require_gpus_terms)) ### diff --git a/MonteCarloMarginalizeCode/Code/test/test_container_manifest.py b/MonteCarloMarginalizeCode/Code/test/test_container_manifest.py new file mode 100644 index 000000000..29cdbc489 --- /dev/null +++ b/MonteCarloMarginalizeCode/Code/test/test_container_manifest.py @@ -0,0 +1,209 @@ +""" +Tests for container family manifest parsing and the expression-valued +SingularityImage / selective-transfer / require_gpus wiring. + +These run without a real HTCondor pool: the parser + expression builders are +pure, and the integration test inspects the generated ``condor_cmds`` on the +job object returned by ``write_ILE_sub_simple`` (no .sub file or condor needed). + +Run directly: python test/test_container_manifest.py +Or via pytest: pytest test/test_container_manifest.py +""" + +import os +import sys +import textwrap + +import pytest + +yaml = pytest.importorskip("yaml") # manifest parsing requires PyYAML + +import RIFT.misc.container_manifest as cm + + +# --------------------------------------------------------------------------- +# helpers +# --------------------------------------------------------------------------- + +MIXED_MANIFEST = textwrap.dedent( + """ + version: 1 + fallback: ancient + containers: + - label: ancient + image: /cvmfs/sw/rift_ancient_cuda11.sif + cuda_capability_min: 3.0 + cuda_capability_max: 7.0 + - label: modern + image: osdf:///igwn/rift_modern_cuda12.sif + cuda_capability_min: 7.0 + """ +) + +ALL_CVMFS_MANIFEST = textwrap.dedent( + """ + version: 1 + fallback: ancient + containers: + - label: ancient + image: /cvmfs/sw/rift_ancient.sif + cuda_capability_min: 3.0 + - label: modern + image: /cvmfs/sw/rift_modern.sif + cuda_capability_min: 7.0 + """ +) + + +def _write(tmp_path, text, name="fam.yaml"): + p = tmp_path / name + p.write_text(text) + return str(p) + + +# --------------------------------------------------------------------------- +# 1. parser +# --------------------------------------------------------------------------- + +def test_parser_sorts_and_resolves_fallback(tmp_path): + m = cm.load_container_manifest(_write(tmp_path, MIXED_MANIFEST)) + # sorted by capability descending + assert [c["label"] for c in m["containers"]] == ["modern", "ancient"] + assert m["fallback"] == "ancient" + assert m["capability_attr"] == cm.DEFAULT_CAPABILITY_ATTR + + +def test_parser_default_fallback_is_lowest(tmp_path): + # no explicit fallback -> most-compatible (lowest-min) container + text = MIXED_MANIFEST.replace("fallback: ancient\n", "") + m = cm.load_container_manifest(_write(tmp_path, text)) + assert m["fallback"] == "ancient" + + +def test_parser_rejects_unknown_fallback(tmp_path): + text = MIXED_MANIFEST.replace("fallback: ancient", "fallback: nope") + with pytest.raises(cm.ContainerManifestError): + cm.load_container_manifest(_write(tmp_path, text)) + + +def test_parser_rejects_empty(tmp_path): + with pytest.raises(cm.ContainerManifestError): + cm.load_container_manifest(_write(tmp_path, "version: 1\ncontainers: []\n")) + + +def test_parser_rejects_missing_image(tmp_path): + text = "containers:\n - label: x\n cuda_capability_min: 5.0\n" + with pytest.raises(cm.ContainerManifestError): + cm.load_container_manifest(_write(tmp_path, text)) + + +# --------------------------------------------------------------------------- +# 2. expressions +# --------------------------------------------------------------------------- + +def test_image_expression(tmp_path): + m = cm.load_container_manifest(_write(tmp_path, MIXED_MANIFEST)) + expr = cm.build_singularity_image_expr(m) + assert expr == ( + 'ifThenElse(TARGET.GPUs_Capability >= 7.0, ' + '"./rift_modern_cuda12.sif", "/cvmfs/sw/rift_ancient_cuda11.sif")' + ) + # an expression must NOT be a quoted string literal + assert not expr.startswith('"') + + +def test_transfer_expression_is_comma_free_ternary(tmp_path): + m = cm.load_container_manifest(_write(tmp_path, MIXED_MANIFEST)) + expr = cm.build_transfer_input_expr(m) + assert expr == ( + '$$([ (TARGET.GPUs_Capability >= 7.0 ? ' + '"osdf:///igwn/rift_modern_cuda12.sif" : "") ])' + ) + # the token sits inside a comma-separated transfer_input_files list, so it + # must contain no commas of its own + assert "," not in expr + + +def test_transfer_expression_none_when_all_in_place(tmp_path): + m = cm.load_container_manifest(_write(tmp_path, ALL_CVMFS_MANIFEST)) + assert cm.build_transfer_input_expr(m) is None + + +def test_require_gpus_floor(tmp_path): + m = cm.load_container_manifest(_write(tmp_path, MIXED_MANIFEST)) + assert cm.build_require_gpus_floor(m) == "Capability >= 3.0" + + +def test_capability_attr_env_override(tmp_path, monkeypatch): + monkeypatch.setenv("RIFT_GPU_CAPABILITY_ATTR", "CUDACapability") + m = cm.load_container_manifest(_write(tmp_path, MIXED_MANIFEST)) + assert "TARGET.CUDACapability >=" in cm.build_singularity_image_expr(m) + + +# --------------------------------------------------------------------------- +# 3-5. integration with write_ILE_sub_simple (inspect generated condor_cmds) +# --------------------------------------------------------------------------- + +def _make_ile_job(tmp_path, monkeypatch, singularity_image): + """Call write_ILE_sub_simple in an isolated cwd; return its condor_cmds dict. + + Skips if the dag_utils_generic backend cannot be imported in this env. + """ + dag = pytest.importorskip("RIFT.misc.dag_utils_generic") + monkeypatch.chdir(tmp_path) + job, _ = dag.write_ILE_sub_simple( + tag="ILE", + log_dir=str(tmp_path) + "/", + exe="/usr/bin/true", + arg_str="--foo bar", + transfer_files=["../all.net"], + use_singularity=True, + singularity_image=singularity_image, + request_gpu=True, + cache_file="local.cache", + ) + return dict(job.condor_cmds) + + +def test_integration_family_mixed(tmp_path, monkeypatch): + monkeypatch.setenv( + "RIFT_REQUIRE_GPUS", '(DeviceName=!="Tesla K10.G1.8GB")' + ) + cmds = _make_ile_job(tmp_path, monkeypatch, _write(tmp_path, MIXED_MANIFEST)) + + img = cmds["MY.SingularityImage"] + assert img.startswith("ifThenElse(") # expression, not a literal + assert not img.startswith('"') + + # selective transfer: exactly one $$() token, whole family NOT dumped + tif = cmds["transfer_input_files"] + assert tif.count("$$([") == 1 + assert "/cvmfs/sw/rift_ancient_cuda11.sif" not in tif # cvmfs image not transferred + assert tif.count("osdf:///igwn/rift_modern_cuda12.sif") == 1 + + # floor composed with (not replacing) the user's RIFT_REQUIRE_GPUS + rg = cmds["require_gpus"] + assert "Capability >= 3.0" in rg + assert 'DeviceName=!="Tesla K10.G1.8GB"' in rg + assert "&&" in rg + + +def test_integration_all_cvmfs_no_transfer_token(tmp_path, monkeypatch): + cmds = _make_ile_job(tmp_path, monkeypatch, _write(tmp_path, ALL_CVMFS_MANIFEST)) + assert "$$([" not in cmds.get("transfer_input_files", "") + # still an expression-valued image + a capability floor + assert cmds["MY.SingularityImage"].startswith("ifThenElse(") + assert "Capability >= 3.0" in cmds["require_gpus"] + + +def test_backward_compat_single_sif(tmp_path, monkeypatch): + monkeypatch.delenv("RIFT_REQUIRE_GPUS", raising=False) + cmds = _make_ile_job(tmp_path, monkeypatch, "./foo.sif") + # byte-identical legacy behavior: quoted literal, no $$() token, no floor + assert cmds["MY.SingularityImage"] == '"./foo.sif"' + assert "$$([" not in cmds.get("transfer_input_files", "") + assert "require_gpus" not in cmds + + +if __name__ == "__main__": + sys.exit(pytest.main([os.path.abspath(__file__), "-v"])) diff --git a/containers/README.md b/containers/README.md new file mode 100644 index 000000000..8b7f6f4f1 --- /dev/null +++ b/containers/README.md @@ -0,0 +1,138 @@ +# RIFT containers + +This directory holds the multi-architecture container build and the "container +family" deployment mechanism. It has two related but independent pieces: + +1. **Multi-target build** — build a *family* of RIFT containers (different base + image + cupy/CUDA variant, targeting different GPU compute capabilities) from + one template. +2. **Family deployment** — let `SINGULARITY_RIFT_IMAGE` point at a YAML + *manifest* describing that family, so each Condor job picks the right image + for the machine it lands on. + +The top-level [`rift_container.def`](../rift_container.def) is unchanged and +remains the default single-image build. + +--- + +## 1. Building a family + +``` +containers/build_family.sh [--render-only] [OUTPUT_DIR] +``` + +- [`rift_container.def.in`](rift_container.def.in) is a template with + `@@BASE_IMAGE@@` / `@@CUPY_PKG@@` placeholders (apptainer `.def` files take no + build args, so we render then build). +- [`build_family.sh`](build_family.sh) holds the build `MATRIX`. The **first** + entry is the default and uses the current production base image, so the family + always includes a broadly-compatible image for older machines. Add rows to + target more architectures. +- `--render-only` writes the per-entry `.def` files without invoking apptainer + (useful in CI or on a machine without apptainer). +- Each build also emits a `rift_container_family.generated.yaml` stub — fill in + each `image:` with where you published the `.sif` (a CVMFS path or `osdf://` + URL), and you have a deployable manifest. + +All matrix entries share the pip set in +[`requirements-container.txt`](requirements-container.txt) (the cupy wheel is the +only per-entry difference). That file is the **single source of truth** also +consumed by the CI dependency canary (below). + +--- + +## 2. Deploying a family via a manifest + +Set `SINGULARITY_RIFT_IMAGE` to a `.yaml`/`.yml` manifest instead of a single +`.sif`. Everything else (pseudo_pipe, `--use-singularity`, etc.) is unchanged — +the manifest is detected by file extension. A plain `.sif` path or single +`osdf://` URL keeps the **exact** legacy single-image behavior; the manifest path +is never consulted in that case. + +See [`rift_container_family.yaml`](rift_container_family.yaml) for a worked +example. Schema: + +| field | meaning | +|-------------------|---------| +| `version` | manifest schema version (currently `1`) | +| `capability_attr` | machine ClassAd attribute the selection expression tests (default `GPUs_Capability`) | +| `fallback` | label of the catch-all image (innermost `else`); **must be CPU-safe** | +| `containers[]` | the family | +| ↳ `label` | human id; also referenced by `fallback` | +| ↳ `image` | a CVMFS/local path (referenced in place, lazy-fetched) **or** an `osdf://` URL (selectively transferred) | +| ↳ `cuda_capability_min` | inclusive lower capability bound for this image | +| ↳ `cuda_capability_max` | informational upper bound (`null` = open-ended) | +| ↳ `note` | free-text | + +### What the pipeline generates + +For the ILE (and CIP) Condor submit, a manifest produces: + +- **`MY.SingularityImage`** — an *unquoted* `ifThenElse(...)` expression that + selects the highest-capability image the matched machine can run, defaulting to + the `fallback` image (also used when the capability attribute is `undefined`, + e.g. on a CPU-only CIP slot — hence the fallback must be CPU-safe): + + ``` + ifThenElse(TARGET.GPUs_Capability >= 8.0, "./rift_container_modern.sif", "/cvmfs/.../rift_container_default.sif") + ``` + +- **Selective transfer** — only `osdf://` images get fetched, and only on the + machine that selected them, via one HTCondor `$$()` match-time token appended + to `transfer_input_files` (CVMFS/local images are referenced in place and never + transferred, so the *whole family is never pulled*): + + ``` + $$([ (TARGET.GPUs_Capability >= 8.0 ? "osdf:///.../rift_container_modern.sif" : "") ]) + ``` + + `request_disk` is **not** auto-sized (image sizes are unknown at submit time) — + size it to your largest single transferred image. + +- **`require_gpus` floor** — `Capability >= `, + composed (`&&`) with any user-supplied `RIFT_REQUIRE_GPUS` (which today you use + to block incompatible hosts by `DeviceName`). Both apply; neither is dropped. + +### HTCondor GPU attribute names — important + +Two different namespaces are in play and are kept separate: + +- The **image-selection `ifThenElse`** reads the *machine* ClassAd. Default + `GPUs_Capability` (advertised on the OSG; some pools differ). Override per-run + with `RIFT_GPU_CAPABILITY_ATTR`, or per-manifest with `capability_attr`. Verify + on your pool: + + ``` + condor_status -constraint 'TotalGPUs > 0' -autoformat GPUs_DeviceName GPUs_Capability GPUs_GlobalMemoryMb + ``` + + Not every GPU host advertises this; on such hosts the expression collapses to + the fallback image and the `require_gpus` floor does the steering. + +- The **`require_gpus` floor** uses the require_gpus sub-ad attribute + `Capability` (unprefixed — *not* `TARGET.`, *not* `GPUs_`). + +### Requirements + +- `PyYAML` must be importable wherever the pipeline is built (only when a + manifest is actually used). Single-`.sif` runs never require it. +- Smoke-test items for a first real-pool run: (a) the pilot honors a relative + `./name.sif` produced by the selection expression; (b) when a manifest *mixes* + CVMFS and osdf entries, the `$$()` transfer token expands to `""` on a + CVMFS-matched machine — confirm your Condor tolerates an empty entry (it + generally does). If not, use a manifest with uniform retrieval (all-osdf or + all-cvmfs). + +--- + +## 3. CI dependency-resolution canary + +The default container build uses *unpinned* deps, so a fresh upstream release +(e.g. `swig>=4.4.0`, see issue #136) can silently break RIFT and we only find out +when a container rebuild fails. The `container-dep-canary` job in +[`.github/workflows/ci.yml`](../.github/workflows/ci.yml) installs the unpinned +[`requirements-container.txt`](requirements-container.txt) set (minus the +GPU-only cupy wheel) and the pixi `swig-post44` lane, then runs the import check — +on every push/PR **and weekly** — to flag such breakage early. It is +non-blocking (advisory): it tracks upstream changes outside any PR author's +control. diff --git a/containers/build_family.sh b/containers/build_family.sh new file mode 100755 index 000000000..d49ffe14f --- /dev/null +++ b/containers/build_family.sh @@ -0,0 +1,91 @@ +#!/bin/bash +# Build a *family* of RIFT containers from containers/rift_container.def.in, one +# per build-matrix entry (different base image + cupy/CUDA variant, targeting +# different GPU compute capabilities). +# +# Usage: +# containers/build_family.sh [--render-only] [OUTPUT_DIR] +# +# --render-only render the per-entry .def files but do NOT run apptainer +# (useful on machines without apptainer, or in CI) +# OUTPUT_DIR where rendered .def and built .sif land (default: ./container_family) +# +# The DEFAULT (first) matrix entry keeps the current production base image, so +# the family always includes a broadly-compatible image for older machines. +# Add rows to MATRIX to target more architectures. +# +# After building, publish the .sif files to CVMFS or osdf and edit +# containers/rift_container_family.yaml so SINGULARITY_RIFT_IMAGE can point at it. +set -euo pipefail + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +TEMPLATE="${HERE}/rift_container.def.in" + +RENDER_ONLY=0 +OUTPUT_DIR="./container_family" +for arg in "$@"; do + case "$arg" in + --render-only) RENDER_ONLY=1 ;; + *) OUTPUT_DIR="$arg" ;; + esac +done + +# Build matrix: "label|base_image|cupy_pkg|cuda_capability_min|cuda_capability_max" +# - The first entry is the DEFAULT and uses the current production base image. +# - cuda_capability_max may be empty (open-ended); it is informational and is +# echoed into the manifest stub for convenience. +MATRIX=( + "default|nvidia/cuda:11.8.0-runtime-ubuntu22.04|cupy-cuda11x|3.5|8.0" + "modern|nvidia/cuda:12.4.1-runtime-ubuntu22.04|cupy-cuda12x|8.0|" +) + +mkdir -p "${OUTPUT_DIR}" +MANIFEST_STUB="${OUTPUT_DIR}/rift_container_family.generated.yaml" +{ + echo "# Auto-generated manifest stub from containers/build_family.sh." + echo "# Edit 'image:' to the published CVMFS path or osdf:// URL of each .sif." + echo "version: 1" + echo "capability_attr: GPUs_Capability" + echo "fallback: default" + echo "containers:" +} > "${MANIFEST_STUB}" + +for row in "${MATRIX[@]}"; do + IFS='|' read -r label base cupy cap_min cap_max <<< "$row" + rendered="${OUTPUT_DIR}/rift_container_${label}.def" + sif="${OUTPUT_DIR}/rift_container_${label}.sif" + + echo ">>> Rendering ${label}: base=${base} cupy=${cupy}" + sed -e "s#@@BASE_IMAGE@@#${base}#g" \ + -e "s#@@CUPY_PKG@@#${cupy}#g" \ + "${TEMPLATE}" > "${rendered}" + + { + echo " - label: ${label}" + echo " image: REPLACE_ME/rift_container_${label}.sif # publish to CVMFS or osdf" + echo " cuda_capability_min: ${cap_min}" + if [ -n "${cap_max}" ]; then + echo " cuda_capability_max: ${cap_max}" + else + echo " cuda_capability_max: null" + fi + echo " note: \"base=${base}, ${cupy}\"" + } >> "${MANIFEST_STUB}" + + if [ "${RENDER_ONLY}" -eq 1 ]; then + echo " (render-only) wrote ${rendered}" + continue + fi + if ! command -v apptainer >/dev/null 2>&1; then + echo " apptainer not found; wrote ${rendered} (build skipped)" >&2 + continue + fi + echo ">>> Building ${sif}" + apptainer build "${sif}" "${rendered}" +done + +echo +echo "Done. Rendered defs (and any built .sif) are in ${OUTPUT_DIR}/" +echo "Manifest stub: ${MANIFEST_STUB}" +echo "Next: publish the .sif images, fill in their 'image:' locations, and point" +echo "SINGULARITY_RIFT_IMAGE at the resulting .yaml manifest." diff --git a/containers/requirements-container.txt b/containers/requirements-container.txt new file mode 100644 index 000000000..0a7d935aa --- /dev/null +++ b/containers/requirements-container.txt @@ -0,0 +1,25 @@ +# Shared pip dependency set for the RIFT container builds. +# +# SINGLE SOURCE OF TRUTH: both the container definition (rift_container.def / +# containers/rift_container.def.in) and the CI "dependency-resolution canary" +# (.github/workflows/ci.yml :: container-dep-canary) install from this file, so +# the canary actually exercises the same unpinned set the container ships. +# +# NOTE: the GPU-specific cupy wheel (cupy-cuda11x vs cupy-cuda12x) is NOT listed +# here -- it varies per build-matrix entry and is installed by the .def itself. +# The canary has no GPU, so it skips cupy entirely. +# +# Intentionally UNPINNED (mirrors rift_container.def). The canary's whole job is +# to catch when a fresh upstream release of one of these (e.g. swig>=4.4.0 via a +# transitive build, lalsuite, numpy) breaks RIFT -- see issue #136 -- before it +# surprises a container rebuild. +asimov>=0.5.6 +asimov-gwdata>=0.4.0 +gwdatafind==1.2.0 +gwosc>=0.7.1 +lalsuite>=7.26 +numpy>=1.24.4 +natsort +pybind11>=2.12 +scipy>=1.9.3 +pyseobnr diff --git a/containers/rift_container.def.in b/containers/rift_container.def.in new file mode 100644 index 000000000..dee46d925 --- /dev/null +++ b/containers/rift_container.def.in @@ -0,0 +1,65 @@ +# Parameterized apptainer definition for the RIFT container *family*. +# +# This is a TEMPLATE. Apptainer .def files take no build args, so +# containers/build_family.sh renders a concrete .def per build-matrix entry by +# substituting the @@PLACEHOLDERS@@ below, then runs `apptainer build`. +# +# Placeholders: +# @@BASE_IMAGE@@ - docker base image (e.g. nvidia/cuda:11.8.0-runtime-ubuntu22.04) +# @@CUPY_PKG@@ - cupy wheel matched to the base CUDA version (cupy-cuda11x / cupy-cuda12x) +# +# The top-level rift_container.def is left in place as the default single build; +# this template + build_family.sh is the multi-target path. +Bootstrap: docker +From: @@BASE_IMAGE@@ + +%post + # Update the system and install essential libraries + apt-get update -y + apt-get install -y \ + build-essential \ + cmake \ + g++ \ + wget \ + python3.10 \ + python3.10-venv \ + python3-pip \ + curl \ + bc \ + locales \ + git \ + libkrb5-dev \ + libgsl-dev + + # Configure locale + locale-gen en_US.UTF-8 + + # Ensure Python symlink is in place + ln -s /usr/bin/python3.10 /usr/local/bin/python3 + ln -s /usr/bin/python3 /usr/local/bin/python + + # Set up RIFT installation, using MAIN SOURCE. Modify if you want a release version, or a different branch! + cd /opt + mkdir installed_RIFT + cd installed_RIFT + git clone https://github.com/oshaughn/research-projects-RIT.git + cd research-projects-RIT + #git checkout rift_O4c + pip3 install --upgrade pip + pip3 install --upgrade setuptools --break-system-packages + pip3 install -e . + + # GPU-specific cupy variant, matched to the base image CUDA version. + pip3 install @@CUPY_PKG@@ + + # Shared dependency set -- single source of truth, also exercised by the CI + # dependency-resolution canary (containers/requirements-container.txt). + pip3 install -r containers/requirements-container.txt + +%environment + # Set environment variables + alias python=python3 + +%labels + org.rift.base @@BASE_IMAGE@@ + org.rift.cupy @@CUPY_PKG@@ diff --git a/containers/rift_container_family.yaml b/containers/rift_container_family.yaml new file mode 100644 index 000000000..406b825e1 --- /dev/null +++ b/containers/rift_container_family.yaml @@ -0,0 +1,43 @@ +# Example RIFT container *family* manifest. +# +# Point SINGULARITY_RIFT_IMAGE at a copy of this file (a .yaml / .yml path) to +# deploy a family of containers instead of a single .sif. The pipeline turns it +# into an expression-valued MY.SingularityImage that picks the right image per +# matched machine's GPU capability, a selective ($$()) transfer for osdf images, +# and a require_gpus capability floor. +# +# A plain .sif path or single osdf:// URL keeps the legacy single-image behavior +# (this file is NOT consulted in that case). +# +# See containers/README.md for the full schema and the HTCondor GPU-attribute +# caveat. + +version: 1 + +# Machine ClassAd attribute the image-selection ifThenElse tests. Default +# GPUs_Capability (advertised on the OSG; verify on your pool with e.g. +# condor_status -constraint 'TotalGPUs > 0' -af GPUs_DeviceName GPUs_Capability +# ). Overridable per-run via the RIFT_GPU_CAPABILITY_ATTR env var. +capability_attr: GPUs_Capability + +# Innermost else-branch of the selection expression: used when the machine +# advertises no/low capability (and on CPU-only CIP slots). MUST be the +# CPU-safe / most broadly compatible image. +fallback: default + +containers: + # Default, broadly-compatible image for older machines. Referenced in place + # on CVMFS -- never transferred; CVMFS lazy-fetches it only when selected. + - label: default + image: /cvmfs/singularity.opensciencegrid.org/oshaughn/rift_container_default.sif + cuda_capability_min: 3.5 + cuda_capability_max: 8.0 + note: "base=nvidia/cuda:11.8.0-runtime-ubuntu22.04, cupy-cuda11x" + + # Newer image for higher-capability GPUs. Delivered via osdf: only the + # matched machine fetches it (selective $$() transfer). + - label: modern + image: osdf:///igwn/staging/oshaughn/rift_containers/rift_container_modern.sif + cuda_capability_min: 8.0 + cuda_capability_max: null + note: "base=nvidia/cuda:12.4.1-runtime-ubuntu22.04, cupy-cuda12x" From f04cc2eaa78b7a3a55867dc1c01d044e59dff9cb Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Fri, 29 May 2026 09:00:04 -0400 Subject: [PATCH 27/32] containers: record real-pool validation results in README Validated on a real HTCondor pool + GPU (cap-3.0 machine): GPUs_Capability / Capability attribute names, require_gpus floor matching+exclusion, $$() match-time image selection, and tolerance of the empty-result ("") case for a mixed CVMFS/osdf manifest. Mixed manifests are safe; uniform retrieval is not required. Only the OSG/GWMS pilot evaluation of the expression-valued MY.SingularityImage remains to be smoke-tested on a real glidein. Co-Authored-By: Claude Opus 4.8 --- containers/README.md | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/containers/README.md b/containers/README.md index 8b7f6f4f1..f06641dce 100644 --- a/containers/README.md +++ b/containers/README.md @@ -116,12 +116,26 @@ Two different namespaces are in play and are kept separate: - `PyYAML` must be importable wherever the pipeline is built (only when a manifest is actually used). Single-`.sif` runs never require it. -- Smoke-test items for a first real-pool run: (a) the pilot honors a relative - `./name.sif` produced by the selection expression; (b) when a manifest *mixes* - CVMFS and osdf entries, the `$$()` transfer token expands to `""` on a - CVMFS-matched machine — confirm your Condor tolerates an empty entry (it - generally does). If not, use a manifest with uniform retrieval (all-osdf or - all-cvmfs). + +### Validation status + +Validated on a real HTCondor pool + GPU (a cap-3.0 machine): + +- The advertised attributes are `GPUs_Capability` (machine ad) and `Capability` + (require_gpus sub-ad) — matching the defaults above. +- The `require_gpus` capability floor matches a compatible GPU and correctly + *excludes* an incompatible one (`Capability >= 7.0` did not match a cap-3.0 + GPU), so the floor steers GPU selection as intended. +- The `$$([ ifThenElse(TARGET.GPUs_Capability >= …, …) ])` transfer token is + honored at match time: only the matched image's URL is selected/transferred. +- The empty-result case — when a manifest *mixes* CVMFS and osdf entries and a + CVMFS branch is selected, the `$$()` token expands to `""` — is **tolerated**: + the empty entry is skipped and the job runs clean. (So mixed manifests are + safe; you do *not* need uniform all-osdf / all-cvmfs retrieval.) + +One item still needs a real **OSG/GWMS** pilot (a local pool has no singularity +wrapper to exercise it): that the pilot evaluates the expression-valued +`MY.SingularityImage` and honors a relative `./name.sif` produced by it. --- From a832f630f761139ace0421b8eb66f47fafdd2c21 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Fri, 29 May 2026 09:18:57 -0400 Subject: [PATCH 28/32] docs: add container family + multi-arch deployment guide New docs/source/containers.rst (wired into the toctree, cross-linked from osg.rst): how to point SINGULARITY_RIFT_IMAGE at a YAML container-family manifest, the manifest schema, what the pipeline generates (expression-valued MY.SingularityImage, selective $$() transfer, require_gpus floor), the GPU attribute names + verification command, building a family with containers/build_family.sh, and the CI dependency canary. Renders under the existing Sphinx 'docs' CI job. Co-Authored-By: Claude Opus 4.8 --- docs/source/containers.rst | 198 +++++++++++++++++++++++++++++++++++++ docs/source/index.rst | 1 + docs/source/osg.rst | 6 ++ 3 files changed, 205 insertions(+) create mode 100644 docs/source/containers.rst diff --git a/docs/source/containers.rst b/docs/source/containers.rst new file mode 100644 index 000000000..7d987886e --- /dev/null +++ b/docs/source/containers.rst @@ -0,0 +1,198 @@ +Containers and multi-architecture deployment +============================================= + +RIFT runs its compute jobs (ILE, CIP) inside a Singularity/Apptainer container +on HTCondor pools such as the OSG. Historically the environment variable +``SINGULARITY_RIFT_IMAGE`` names a **single** image, and every job is pinned to +it:: + + export SINGULARITY_RIFT_IMAGE=/cvmfs/singularity.opensciencegrid.org/.../rift:production + +That still works exactly as before. This page documents two additions: + +* a **container *family*** — point ``SINGULARITY_RIFT_IMAGE`` at a YAML + *manifest* describing several images that target different GPU compute + capabilities, and let HTCondor pick the right one per matched machine; and +* a **multi-target build** that produces such a family from one template. + +.. note:: + + If ``SINGULARITY_RIFT_IMAGE`` is a plain ``.sif`` path or a single + ``osdf://`` URL, behavior is **unchanged** — the manifest machinery is never + engaged. A manifest is recognized purely by its ``.yaml`` / ``.yml`` suffix. + + +Deploying a container family +---------------------------- + +Set ``SINGULARITY_RIFT_IMAGE`` to a manifest file instead of a single image:: + + export SINGULARITY_RIFT_IMAGE=`pwd`/rift_container_family.yaml + +Everything else — ``util_RIFT_pseudo_pipe.py``, ``--use-singularity``, +``--use-osg`` — is identical. When the pipeline builds the ILE/CIP submit +files it reads the manifest and emits an *expression-valued* container +selection (see `What the pipeline generates`_ below). + +Manifest format +~~~~~~~~~~~~~~~ + +.. code-block:: yaml + + version: 1 + + # Machine ClassAd attribute the selection expression tests. + # Default GPUs_Capability (see "GPU attribute names" below). + capability_attr: GPUs_Capability + + # Catch-all image (innermost else of the selection); MUST be CPU-safe, + # since it is also used when no GPU capability is advertised. + fallback: default + + containers: + # Broadly-compatible image for older machines. On CVMFS: referenced in + # place and lazy-fetched (only the selected image is ever pulled), never + # transferred. + - label: default + image: /cvmfs/singularity.opensciencegrid.org/oshaughn/rift_container_default.sif + cuda_capability_min: 3.5 # inclusive lower bound for this image + cuda_capability_max: 8.0 # informational; null = open-ended + note: "cupy-cuda11x, ubuntu22.04/cuda11.8" + + # Newer image for higher-capability GPUs. Delivered via osdf: only the + # matched machine fetches it (selective transfer). + - label: modern + image: osdf:///igwn/staging/oshaughn/rift_containers/rift_container_modern.sif + cuda_capability_min: 8.0 + cuda_capability_max: null + note: "cupy-cuda12x, ubuntu22.04/cuda12.4" + +.. list-table:: + :header-rows: 1 + :widths: 30 70 + + * - Field + - Meaning + * - ``version`` + - Manifest schema version (currently ``1``). + * - ``capability_attr`` + - Machine ClassAd attribute the selection expression tests (default + ``GPUs_Capability``). + * - ``fallback`` + - ``label`` of the catch-all image (innermost ``else``); **must be + CPU-safe**. + * - ``containers[].label`` + - Human id; also referenced by ``fallback``. + * - ``containers[].image`` + - A CVMFS/local path (referenced in place, lazy-fetched) **or** an + ``osdf://`` URL (selectively transferred). + * - ``containers[].cuda_capability_min`` + - Inclusive lower capability bound for this image. + * - ``containers[].cuda_capability_max`` + - Informational upper bound (``null`` = open-ended). + * - ``containers[].note`` + - Free text. + +A starting manifest lives at :code:`containers/rift_container_family.yaml` in the +source tree. + + +What the pipeline generates +--------------------------- + +For a manifest, the ILE (and CIP) Condor submit files get: + +* **``MY.SingularityImage``** — an *unquoted* ``ifThenElse`` expression that + selects the highest-capability image the matched machine can run, falling back + to the ``fallback`` image (also used when the capability attribute is + ``undefined``, e.g. on a CPU-only CIP slot — hence the fallback must be + CPU-safe):: + + ifThenElse(TARGET.GPUs_Capability >= 8.0, "./rift_container_modern.sif", "/cvmfs/.../rift_container_default.sif") + +* **Selective transfer** — only ``osdf://`` images are fetched, and only on the + machine that selected them, via a single HTCondor ``$$()`` match-time token + appended to ``transfer_input_files``. CVMFS/local images are referenced in + place and never transferred, so the **whole family is never pulled**:: + + $$([ (TARGET.GPUs_Capability >= 8.0 ? "osdf:///.../rift_container_modern.sif" : "") ]) + + ``request_disk`` is **not** auto-sized — set it to your largest single + transferred image. + +* **``require_gpus`` floor** — ``Capability >= ``, + combined (``&&``) with any ``RIFT_REQUIRE_GPUS`` you set. Both apply; neither + is dropped. This stops jobs matching a GPU that *no* image in the family + supports. + + +GPU attribute names +------------------- + +Two different ClassAd namespaces are involved, and they are kept separate: + +* The **image selection** ``ifThenElse`` reads the *machine* ad. The default + attribute is ``GPUs_Capability``. Override it per run with the environment + variable ``RIFT_GPU_CAPABILITY_ATTR``, or per manifest with ``capability_attr``. + Verify what your pool advertises:: + + condor_status -constraint 'TotalGPUs > 0' -autoformat GPUs_DeviceName GPUs_Capability GPUs_GlobalMemoryMb + + Not every GPU host advertises this; on such hosts the expression collapses to + the fallback image and the ``require_gpus`` floor does the steering. + +* The **``require_gpus`` floor** uses the require_gpus sub-ad attribute + ``Capability`` (unprefixed — *not* ``TARGET.``, *not* ``GPUs_``). + +.. note:: + + These mechanisms have been validated on a real HTCondor pool + GPU: the + attribute names, the ``require_gpus`` floor (matching a compatible GPU and + excluding an incompatible one), the ``$$()`` match-time image selection, and + tolerance of the empty-result case for a manifest that mixes CVMFS and + ``osdf`` entries. The remaining item for a first real OSG run is that the + pilot evaluates the expression-valued ``MY.SingularityImage`` and honors a + relative ``./name.sif`` produced by it. + + +Building a container family +--------------------------- + +The build lives under :code:`containers/`: + +* :code:`rift_container.def.in` — an Apptainer definition template with + ``@@BASE_IMAGE@@`` / ``@@CUPY_PKG@@`` placeholders. +* :code:`build_family.sh` — renders one ``.def`` per build-matrix entry and runs + ``apptainer build``. The **first** matrix entry keeps the current production + base image, so the family always includes a broadly-compatible image for older + machines. +* :code:`requirements-container.txt` — the shared, unpinned pip dependency set + (the cupy wheel is the only per-entry difference). + +.. code-block:: console + + # render the per-entry .def files only (no apptainer needed) + containers/build_family.sh --render-only ./container_family + + # render and build each .sif (requires apptainer) + containers/build_family.sh ./container_family + +Each run also writes a ``rift_container_family.generated.yaml`` stub: fill in +each ``image:`` with where you published the ``.sif`` (a CVMFS path or +``osdf://`` URL) and you have a deployable manifest. + +The top-level :code:`rift_container.def` is unchanged and remains the default +single-image build. + + +Catching dependency breakage early (CI canary) +---------------------------------------------- + +The container ships an *unpinned* dependency set and clones RIFT at build time, +so a fresh upstream release (for example ``swig>=4.4.0``) can silently break +RIFT and only surface when a container rebuild fails. Two **non-blocking** CI +jobs guard against this — ``container-dep-canary`` (installs the same unpinned +``containers/requirements-container.txt`` set and runs the import check) and +``container-swig-canary`` (exercises the ``pixi`` ``swig-post44`` lane). They +run on every push/PR and on a weekly schedule, so a breaking upstream release is +flagged even with no RIFT commit. diff --git a/docs/source/index.rst b/docs/source/index.rst index fb3cdd005..36a4080aa 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -21,6 +21,7 @@ Rapid inference via Iterative FiTting: this algorithm provides a framework for e examples-ini examples-noini osg + containers injections plotting hyperpipe diff --git a/docs/source/osg.rst b/docs/source/osg.rst index 04b29d456..c2e671f7f 100644 --- a/docs/source/osg.rst +++ b/docs/source/osg.rst @@ -33,6 +33,12 @@ absolutely essential to extremely helpful: RIFT_GETENV=LD_LIBRARY_PATH,PATH,PYTHONPATH,*RIFT*,LIBRARY_PATH SINGULARITY_RIFT_IMAGE=/cvmfs/singularity.opensciencegrid.org/james-clark/research-projects-rit/rift:production +.. note:: + + ``SINGULARITY_RIFT_IMAGE`` may also point at a YAML *container family* + manifest (instead of a single image) to deploy images matched to each + machine's GPU capability. See :doc:`containers`. + Additionally, if you are using a waveform model implemented in `gwsignal`, you must export an extra environment variable: From e94462a0371fb12c5932f3a47f290dfb39de0549 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Fri, 29 May 2026 09:22:04 -0400 Subject: [PATCH 29/32] containers: stage requirements file via %files (fix build path error) build_family.sh rendered defs ran `pip3 install -r containers/requirements-container.txt` from inside the cloned RIFT working dir, but the clone is upstream main, which does not carry that file yet -- so the build failed with "Could not open requirements file: containers/requirements-container.txt". Stage the host's copy into the image via an Apptainer %files section instead (@@REQFILE@@ -> absolute host path, substituted by build_family.sh), and install from /opt/requirements-container.txt. The build no longer depends on the cloned branch shipping the file. Comments/README updated to match (the top-level rift_container.def keeps its equivalent inline list for the default build). Co-Authored-By: Claude Opus 4.8 --- containers/README.md | 4 +++- containers/build_family.sh | 1 + containers/requirements-container.txt | 10 ++++++---- containers/rift_container.def.in | 11 ++++++++++- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/containers/README.md b/containers/README.md index f06641dce..62d6ebc0d 100644 --- a/containers/README.md +++ b/containers/README.md @@ -37,7 +37,9 @@ containers/build_family.sh [--render-only] [OUTPUT_DIR] All matrix entries share the pip set in [`requirements-container.txt`](requirements-container.txt) (the cupy wheel is the only per-entry difference). That file is the **single source of truth** also -consumed by the CI dependency canary (below). +consumed by the CI dependency canary (below). `build_family.sh` stages it into +each image via the `.def`'s `%files` section, so the build does **not** depend on +the cloned RIFT branch shipping the file. --- diff --git a/containers/build_family.sh b/containers/build_family.sh index d49ffe14f..9d187c754 100755 --- a/containers/build_family.sh +++ b/containers/build_family.sh @@ -58,6 +58,7 @@ for row in "${MATRIX[@]}"; do echo ">>> Rendering ${label}: base=${base} cupy=${cupy}" sed -e "s#@@BASE_IMAGE@@#${base}#g" \ -e "s#@@CUPY_PKG@@#${cupy}#g" \ + -e "s#@@REQFILE@@#${HERE}/requirements-container.txt#g" \ "${TEMPLATE}" > "${rendered}" { diff --git a/containers/requirements-container.txt b/containers/requirements-container.txt index 0a7d935aa..e90cf5e6b 100644 --- a/containers/requirements-container.txt +++ b/containers/requirements-container.txt @@ -1,9 +1,11 @@ # Shared pip dependency set for the RIFT container builds. # -# SINGLE SOURCE OF TRUTH: both the container definition (rift_container.def / -# containers/rift_container.def.in) and the CI "dependency-resolution canary" -# (.github/workflows/ci.yml :: container-dep-canary) install from this file, so -# the canary actually exercises the same unpinned set the container ships. +# SINGLE SOURCE OF TRUTH: the multi-target build (containers/rift_container.def.in, +# which stages this file into the image via its %files section) and the CI +# "dependency-resolution canary" (.github/workflows/ci.yml :: container-dep-canary) +# both install from this file, so the canary exercises the same unpinned set the +# family containers ship. (The top-level rift_container.def keeps an equivalent +# inline list for the default single build.) # # NOTE: the GPU-specific cupy wheel (cupy-cuda11x vs cupy-cuda12x) is NOT listed # here -- it varies per build-matrix entry and is installed by the .def itself. diff --git a/containers/rift_container.def.in b/containers/rift_container.def.in index dee46d925..3d881c426 100644 --- a/containers/rift_container.def.in +++ b/containers/rift_container.def.in @@ -13,6 +13,13 @@ Bootstrap: docker From: @@BASE_IMAGE@@ +%files + # Stage the shared dependency list from the HOST build tree into the image, + # so the build does NOT depend on the cloned RIFT branch carrying this file + # (the clone below may be a branch/release that predates it). build_family.sh + # fills in the absolute host path of containers/requirements-container.txt. + @@REQFILE@@ /opt/requirements-container.txt + %post # Update the system and install essential libraries apt-get update -y @@ -54,7 +61,9 @@ From: @@BASE_IMAGE@@ # Shared dependency set -- single source of truth, also exercised by the CI # dependency-resolution canary (containers/requirements-container.txt). - pip3 install -r containers/requirements-container.txt + # Staged into the image via the %files section above (independent of the + # cloned branch). + pip3 install -r /opt/requirements-container.txt %environment # Set environment variables From 6a62b385682b8ab1faba1ef500e4bccfad367e5e Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Fri, 29 May 2026 09:34:09 -0400 Subject: [PATCH 30/32] containers: work around proot seccomp failure on unprivileged apptainer builds Unprivileged apptainer builds on shared clusters (e.g. CIT) fall back to the proot engine, whose mksquashfs step is blocked by seccomp: proot error: ptrace(TRACEME): Operation not permitted mksquashfs command failed build_family.sh now exports PROOT_NO_SECCOMP=1 (overridable, harmless when proot is unused) -- the documented workaround. README gains a build-troubleshooting note covering this plus the better --fakeroot / userns alternatives and APPTAINER_TMPDIR for space. Co-Authored-By: Claude Opus 4.8 --- containers/README.md | 18 ++++++++++++++++++ containers/build_family.sh | 9 +++++++++ 2 files changed, 27 insertions(+) diff --git a/containers/README.md b/containers/README.md index 62d6ebc0d..31089386a 100644 --- a/containers/README.md +++ b/containers/README.md @@ -41,6 +41,24 @@ consumed by the CI dependency canary (below). `build_family.sh` stages it into each image via the `.def`'s `%files` section, so the build does **not** depend on the cloned RIFT branch shipping the file. +### Build troubleshooting + +**`proot error: ptrace(TRACEME): Operation not permitted` / `mksquashfs command +failed`** (seen on shared clusters such as CIT). Apptainer fell back to its +unprivileged `proot` build engine (no usable user namespaces or setuid +apptainer), and proot's squashfs step is blocked by seccomp. `build_family.sh` +already exports `PROOT_NO_SECCOMP=1`, which is the documented workaround; if you +invoke `apptainer build` by hand, set it yourself: + +```console +export PROOT_NO_SECCOMP=1 +``` + +Better, if your site supports it, avoid the proot path entirely — build with +`apptainer build --fakeroot ...` (needs `/etc/subuid` + `/etc/subgid` mappings +for your user) or on a node with unprivileged user namespaces enabled. If the +build runs out of space mid-way, point `APPTAINER_TMPDIR` at a large local disk. + --- ## 2. Deploying a family via a manifest diff --git a/containers/build_family.sh b/containers/build_family.sh index 9d187c754..b30c9d3ad 100755 --- a/containers/build_family.sh +++ b/containers/build_family.sh @@ -39,6 +39,15 @@ MATRIX=( "modern|nvidia/cuda:12.4.1-runtime-ubuntu22.04|cupy-cuda12x|8.0|" ) +# Workaround for unprivileged apptainer builds that fall back to the `proot` +# engine (no usable user namespaces / setuid apptainer, common on shared +# clusters like CIT): proot's mksquashfs step is blocked by seccomp on ptrace +# ("proot error: ptrace(TRACEME): Operation not permitted"). PROOT_NO_SECCOMP=1 +# disables proot's seccomp filtering and lets the build finish. Harmless when +# proot is not used; override by exporting it yourself before running. +# A fully privileged / fakeroot / userns-capable build does not need this. +export PROOT_NO_SECCOMP="${PROOT_NO_SECCOMP:-1}" + mkdir -p "${OUTPUT_DIR}" MANIFEST_STUB="${OUTPUT_DIR}/rift_container_family.generated.yaml" { From 58c8ae6d1fff22c2ffca35f11f2d3ceb2c1f9fd6 Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Fri, 29 May 2026 10:31:46 -0400 Subject: [PATCH 31/32] containers: add --fakeroot/--sandbox build modes (real fix for proot/mksquashfs) PROOT_NO_SECCOMP=1 silenced the seccomp message but proot still cannot exec mksquashfs on locked-down clusters (CIT), so SIF creation kept failing. The actual fixes avoid the proot engine: - build_family.sh now accepts --fakeroot (pass-through to apptainer build; the IGWN/CIT-recommended path, needs subuid/subgid + userns), --sandbox (build a directory, skipping mksquashfs entirely), and passes any other --flag through. Empty-array expansion made safe for RHEL7-era bash under set -u. - README + docs troubleshooting rewritten to lead with --fakeroot / --sandbox / build-elsewhere; PROOT_NO_SECCOMP demoted to best-effort. Validated on cardassia: --fakeroot produces a .sif and --sandbox a directory with a tiny test image; flag/command construction verified via a stub apptainer. Co-Authored-By: Claude Opus 4.8 --- containers/README.md | 50 ++++++++++++++++++++++++++------------ containers/build_family.sh | 34 ++++++++++++++++++++++---- docs/source/containers.rst | 14 +++++++++++ 3 files changed, 78 insertions(+), 20 deletions(-) diff --git a/containers/README.md b/containers/README.md index 31089386a..9b2ea1609 100644 --- a/containers/README.md +++ b/containers/README.md @@ -43,21 +43,41 @@ the cloned RIFT branch shipping the file. ### Build troubleshooting -**`proot error: ptrace(TRACEME): Operation not permitted` / `mksquashfs command -failed`** (seen on shared clusters such as CIT). Apptainer fell back to its -unprivileged `proot` build engine (no usable user namespaces or setuid -apptainer), and proot's squashfs step is blocked by seccomp. `build_family.sh` -already exports `PROOT_NO_SECCOMP=1`, which is the documented workaround; if you -invoke `apptainer build` by hand, set it yourself: - -```console -export PROOT_NO_SECCOMP=1 -``` - -Better, if your site supports it, avoid the proot path entirely — build with -`apptainer build --fakeroot ...` (needs `/etc/subuid` + `/etc/subgid` mappings -for your user) or on a node with unprivileged user namespaces enabled. If the -build runs out of space mid-way, point `APPTAINER_TMPDIR` at a large local disk. +**`proot error: ptrace(TRACEME): Operation not permitted` / +`mksquashfs command failed`** (seen on shared clusters such as CIT). Apptainer +has no usable user namespaces or setuid install, so it falls back to its +unprivileged `proot` build engine — which cannot run the `mksquashfs` helper. +**Setting `PROOT_NO_SECCOMP=1` is not sufficient** (it silences the seccomp +message but proot still fails to exec mksquashfs). Avoid the proot path instead: + +1. **Build with `--fakeroot`** (recommended; the IGWN/CIT path): + + ```console + containers/build_family.sh --fakeroot ./container_family + ``` + + Requires `/etc/subuid` + `/etc/subgid` entries for your user and unprivileged + user namespaces enabled (check: `grep $USER /etc/subuid` and + `apptainer build --fakeroot` on a tiny def). This produces a real `.sif` + without proot. + +2. **If even `--fakeroot` is unavailable, build a `--sandbox`** (a directory). + This skips `mksquashfs` entirely, so it sidesteps the failing step: + + ```console + containers/build_family.sh --sandbox ./container_family + # later, on a host where apptainer can make a SIF: + apptainer build rift_container_default.sif ./container_family/rift_container_default/ + ``` + +3. **Or build elsewhere** — on a node/registry with proper apptainer (or build + the OCI image with Docker/podman, push to a registry, then + `apptainer pull`/`build` the `.sif` on a capable host). + +`build_family.sh` still exports `PROOT_NO_SECCOMP=1` as a harmless best-effort, +and passes any extra `--flag` you give it straight through to `apptainer build`. +If a build runs out of space mid-way, point `APPTAINER_TMPDIR` at a large local +disk. --- diff --git a/containers/build_family.sh b/containers/build_family.sh index b30c9d3ad..abd9b5794 100755 --- a/containers/build_family.sh +++ b/containers/build_family.sh @@ -4,11 +4,21 @@ # different GPU compute capabilities). # # Usage: -# containers/build_family.sh [--render-only] [OUTPUT_DIR] +# containers/build_family.sh [--render-only] [--fakeroot] [--sandbox] \ +# [other apptainer build flags] [OUTPUT_DIR] # # --render-only render the per-entry .def files but do NOT run apptainer # (useful on machines without apptainer, or in CI) -# OUTPUT_DIR where rendered .def and built .sif land (default: ./container_family) +# --fakeroot pass --fakeroot to `apptainer build` (RECOMMENDED on shared +# clusters such as CIT: avoids the unprivileged `proot` engine, +# whose mksquashfs step fails. Needs /etc/subuid + /etc/subgid +# entries for your user and unprivileged user namespaces.) +# --sandbox build a writable directory instead of a .sif. This SKIPS the +# mksquashfs step entirely, so it sidesteps the proot squashfs +# failure when even --fakeroot is unavailable. Convert to .sif +# later on a capable host: apptainer build out.sif sandbox_dir/ +# any other --flag is passed straight through to `apptainer build`. +# OUTPUT_DIR where rendered .def and built images land (default: ./container_family) # # The DEFAULT (first) matrix entry keeps the current production base image, so # the family always includes a broadly-compatible image for older machines. @@ -22,11 +32,16 @@ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" TEMPLATE="${HERE}/rift_container.def.in" RENDER_ONLY=0 +SANDBOX=0 +BUILD_OPTS=() OUTPUT_DIR="./container_family" for arg in "$@"; do case "$arg" in --render-only) RENDER_ONLY=1 ;; - *) OUTPUT_DIR="$arg" ;; + --sandbox) SANDBOX=1 ;; + --fakeroot) BUILD_OPTS+=(--fakeroot) ;; + --*) BUILD_OPTS+=("$arg") ;; # passthrough to apptainer build + *) OUTPUT_DIR="$arg" ;; esac done @@ -90,8 +105,17 @@ for row in "${MATRIX[@]}"; do echo " apptainer not found; wrote ${rendered} (build skipped)" >&2 continue fi - echo ">>> Building ${sif}" - apptainer build "${sif}" "${rendered}" + + if [ "${SANDBOX}" -eq 1 ]; then + target="${OUTPUT_DIR}/rift_container_${label}" # writable directory (no mksquashfs) + sandbox_opt=(--sandbox) + else + target="${sif}" + sandbox_opt=() + fi + echo ">>> Building ${target}${BUILD_OPTS[*]:+ (opts: ${BUILD_OPTS[*]})}" + # ${arr[@]+"${arr[@]}"} expands safely even when the array is empty under set -u + apptainer build ${sandbox_opt[@]+"${sandbox_opt[@]}"} ${BUILD_OPTS[@]+"${BUILD_OPTS[@]}"} "${target}" "${rendered}" done echo diff --git a/docs/source/containers.rst b/docs/source/containers.rst index 7d987886e..92af7ead8 100644 --- a/docs/source/containers.rst +++ b/docs/source/containers.rst @@ -177,10 +177,24 @@ The build lives under :code:`containers/`: # render and build each .sif (requires apptainer) containers/build_family.sh ./container_family + # on shared clusters (e.g. CIT), build with --fakeroot to avoid the + # unprivileged proot engine (whose mksquashfs step fails): + containers/build_family.sh --fakeroot ./container_family + Each run also writes a ``rift_container_family.generated.yaml`` stub: fill in each ``image:`` with where you published the ``.sif`` (a CVMFS path or ``osdf://`` URL) and you have a deployable manifest. +.. note:: + + On clusters without setuid apptainer or unprivileged user namespaces, a plain + build falls back to the ``proot`` engine and fails at ``mksquashfs`` + (``ptrace(TRACEME): Operation not permitted``). Use ``--fakeroot`` (needs + ``/etc/subuid`` + ``/etc/subgid`` entries), or ``--sandbox`` to build a + directory that skips ``mksquashfs`` and convert it to a ``.sif`` later on a + capable host. See the build-troubleshooting section of + :code:`containers/README.md`. + The top-level :code:`rift_container.def` is unchanged and remains the default single-image build. From 4579235951f1e09a24674e8a7fc4e69b6fef19fd Mon Sep 17 00:00:00 2001 From: Richard O'Shaughnessy Date: Fri, 29 May 2026 12:20:10 -0400 Subject: [PATCH 32/32] containers: document the consistent-SINGULARITY_BASE_EXE_DIR family requirement A single SINGULARITY_BASE_EXE_DIR is applied to every image the selection expression can pick (ILE/CIP locate the executable as SINGULARITY_BASE_EXE_DIR + , no per-image override). So all images in a manifest must install RIFT executables at the same in-container path / share a common layout -- don't mix apples and oranges. Documented in the prototype manifest, the generated-manifest stub, the README schema, and the docs page (also flags SINGULARITY_BASE_EXE_DIR_HYPERPIPE). Co-Authored-By: Claude Opus 4.8 --- containers/README.md | 9 +++++++++ containers/build_family.sh | 4 ++++ containers/rift_container_family.yaml | 9 +++++++++ docs/source/containers.rst | 12 ++++++++++++ 4 files changed, 34 insertions(+) diff --git a/containers/README.md b/containers/README.md index 9b2ea1609..56eaa9e81 100644 --- a/containers/README.md +++ b/containers/README.md @@ -104,6 +104,15 @@ example. Schema: | ↳ `cuda_capability_max` | informational upper bound (`null` = open-ended) | | ↳ `note` | free-text | +> **Keep the family consistent.** A *single* `SINGULARITY_BASE_EXE_DIR` is +> applied to **every** image in the family — the ILE/CIP jobs locate the +> executable as `SINGULARITY_BASE_EXE_DIR + `, with no per-image +> override. So all images in a manifest **must install RIFT's executables at the +> same in-container path** (and share a common layout/Python/entrypoints). Build +> them from the same `rift_container.def.in` template (`build_family.sh` does +> this) and do **not** hand-mix images with different internal layouts. The same +> applies to `SINGULARITY_BASE_EXE_DIR_HYPERPIPE` if you use hyperpipe. + ### What the pipeline generates For the ILE (and CIP) Condor submit, a manifest produces: diff --git a/containers/build_family.sh b/containers/build_family.sh index abd9b5794..3b9348c8b 100755 --- a/containers/build_family.sh +++ b/containers/build_family.sh @@ -68,6 +68,10 @@ MANIFEST_STUB="${OUTPUT_DIR}/rift_container_family.generated.yaml" { echo "# Auto-generated manifest stub from containers/build_family.sh." echo "# Edit 'image:' to the published CVMFS path or osdf:// URL of each .sif." + echo "# IMPORTANT: a single SINGULARITY_BASE_EXE_DIR is applied to the whole" + echo "# family -- all images must install RIFT executables at the SAME" + echo "# in-container path. These are built from one template, so they are" + echo "# consistent; do not hand-swap in images with a different layout." echo "version: 1" echo "capability_attr: GPUs_Capability" echo "fallback: default" diff --git a/containers/rift_container_family.yaml b/containers/rift_container_family.yaml index 406b825e1..1a87b1a5e 100644 --- a/containers/rift_container_family.yaml +++ b/containers/rift_container_family.yaml @@ -11,6 +11,15 @@ # # See containers/README.md for the full schema and the HTCondor GPU-attribute # caveat. +# +# IMPORTANT -- keep the family CONSISTENT. A single SINGULARITY_BASE_EXE_DIR is +# applied to *every* image in the family (the ILE/CIP jobs locate the executable +# as SINGULARITY_BASE_EXE_DIR + , with no per-image override). So all +# images listed below MUST install RIFT's executables at the SAME in-container +# path (and otherwise share a common layout/Python/entrypoints). Build them from +# the same containers/rift_container.def.in template (build_family.sh does this) +# -- do NOT mix images with different internal layouts. Same goes for +# SINGULARITY_BASE_EXE_DIR_HYPERPIPE if you use hyperpipe. version: 1 diff --git a/docs/source/containers.rst b/docs/source/containers.rst index 92af7ead8..59f5cf4ac 100644 --- a/docs/source/containers.rst +++ b/docs/source/containers.rst @@ -96,6 +96,18 @@ Manifest format A starting manifest lives at :code:`containers/rift_container_family.yaml` in the source tree. +.. warning:: + + **Keep the family consistent.** A *single* ``SINGULARITY_BASE_EXE_DIR`` is + applied to **every** image in the family — the ILE/CIP jobs locate the + executable as ``SINGULARITY_BASE_EXE_DIR + ``, with no per-image + override. Every image in a manifest **must install RIFT's executables at the + same in-container path** (and share a common layout / Python / entrypoints). + Build them from the same ``rift_container.def.in`` template + (``build_family.sh`` does this); do **not** hand-mix images with different + internal layouts. The same applies to ``SINGULARITY_BASE_EXE_DIR_HYPERPIPE`` + if you use hyperpipe. + What the pipeline generates ---------------------------