diff --git a/code/HIGG_ZN_BATCH.py b/code/HIGG_ZN_BATCH.py new file mode 100644 index 0000000..eb5445c --- /dev/null +++ b/code/HIGG_ZN_BATCH.py @@ -0,0 +1,171 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jun 7 13:22:49 2023 + +@author: User +""" +import os +from pathlib import Path +import sys + +root_dir = Path('../../').resolve() +sys.path.append(root_dir.as_posix()) + +import numpy as np +from create_Batch_model import * +import matplotlib.pyplot as plt + +from create_Batch_model import create_model, update_nex +from CADETProcess.comparison import calculate_sse +from CADETProcess.simulator import Cadet +from CADETProcess import settings + + +from CADETProcess.optimization import OptimizationProblem +from CADETProcess.optimization import U_NSGA3 + +def setup_optimization_problem(): + # crystal phase discretization + n_x = 100 + 2 # total number of components c_feed being the first, c_eq being the last + x_c = 1e-6 # m + x_max = 900e-6 # m + + # Spacing + x_grid_n = np.logspace(np.log10(x_c), np.log10(x_max), n_x-1) + + x_ct_n = [] + for p in range(1, n_x-1): + x_ct_n.append((x_grid_n[p] + x_grid_n[p-1]) / 2) + x_ct_n = np.asarray(x_ct_n) + + t_int = 2 + + # optimization problem + simulator = Cadet(r"C:\Users\User\cadet\cadet3\bin\cadet-cli.exe") # intrinsic distribution implementation, HR in z + + optimization_problem = OptimizationProblem('HIGG_ZN_BATCH') + + # there is an ub limit, possibly in pymoo, approximately 1e16 + optimization_problem.add_variable('growth rate constant', lb=1e-9, ub=1e-5) + optimization_problem.add_variable('growth rate exponent', lb=0.1, ub=2.0) + optimization_problem.add_variable('nucleation rate', lb=1e12, ub=5e15) + optimization_problem.add_variable('nucleation exponent', lb=0.5, ub=4) + optimization_problem.add_variable('fitted ex particle count', lb=1, ub=1000) + + + def objective(x): + model = create_model() + # growth + model.root.input.model.unit_001.reaction_bulk.cry_growth_rate_constant = x[0] + model.root.input.model.unit_001.reaction_bulk.cry_g = x[1] + + # nucleation + model.root.input.model.unit_001.reaction_bulk.cry_primary_nucleation_rate = x[2] + model.root.input.model.unit_001.reaction_bulk.cry_u = x[3] + + n=update_nex(x[4]) + + filename = simulator.get_tempfile_name() + + model.filename = filename + model.save() + model = simulator.run_h5(filename) + + # calculate residual + residual = 0.0 + try: + for i in range (t_int, t_int+11): + n_x_t = model.root.output.solution.unit_001.solution_outlet[i,1:-1] + residual += calculate_sse(n_x_t/1e14, n[i]/1e14) + except IndexError: + return 1e10 + + # plotting + fig=plt.figure(figsize = (9,4.5)) + plt.suptitle(f"kg:{np.format_float_scientific(x[0],precision=2)}, g:{np.format_float_scientific(x[1],precision=2)}, kb:{np.format_float_scientific(x[2],precision=2)}, b:{np.format_float_scientific(x[3],precision=2)}, par:{np.format_float_scientific(x[4],precision=2)}", size="xx-small") + + ax = fig.add_subplot(1,2,1) + for i in range (t_int, t_int+11): + n_x_t = model.root.output.solution.unit_001.solution_outlet[i,1:-1] + ax.plot(x_ct_n*1e6,n_x_t) + ax.set_xscale("log") + ax.set_xlabel('$chord~length~/~\mu m}$') + ax.set_ylabel('$n~/~(1/m/m^3)$') + + ax = fig.add_subplot(1,2,2) + for i in range (t_int, t_int+11): + ax.plot(x_ct_n*1e6,n[i]) + ax.set_xscale("log") + ax.set_xlabel('$chord~length~/~\mu m}$') + + plt.savefig(f'{settings.working_directory}/{residual}.png', dpi=80) + plt.close(fig) + + # remove .h5 file + os.remove(model.filename) + + return residual + + optimizer = U_NSGA3() + + optimizer.n_cores = 7 + optimizer.pop_size = 21 # better: 100-200 + optimizer.n_max_gen = 5 + + settings.working_directory = f'{optimization_problem.name}' + + optimization_problem.add_objective(objective) + optimization_problem.parallelization_backend = "joblib" + + return optimizer, optimization_problem + + +print("started optimization") +if __name__ == '__main__': + optimizer, optimization_problem = setup_optimization_problem() + + optimization_results = optimizer.optimize( + optimization_problem, + use_checkpoint=False + ) +print("ended optimization") + +print(f"the best parameters are {optimization_results.x[0]}") + +## plot the best results +model = create_model() +# growth +model.root.input.model.unit_001.reaction_bulk.cry_growth_rate_constant = optimization_results.x[0, 0] +model.root.input.model.unit_001.reaction_bulk.cry_g = optimization_results.x[0, 1] + +# nucleation +model.root.input.model.unit_001.reaction_bulk.cry_primary_nucleation_rate = optimization_results.x[0, 2] +model.root.input.model.unit_001.reaction_bulk.cry_u = optimization_results.x[0, 3] + +n=update_nex(optimization_results.x[0, 4]) + +filename = simulator.get_tempfile_name() +model.filename = filename +model.save() +model = simulator.run_h5(filename) +os.remove(model.filename) + +# plot +fig=plt.figure(figsize = (9,4.5)) +ax = fig.add_subplot(1,2,1) +for i in range (t_int, t_int+11): + n_x_t = model.root.output.solution.unit_001.solution_outlet[i,1:-1] + ax.plot(x_ct_n*1e6,n_x_t) +ax.set_xscale("log") +ax.set_xlabel('$chord~length~/~\mu m}$') +ax.set_ylabel('$n~/~(1/m/m^3)$') +ax.set_title("Simulated") + +ax = fig.add_subplot(1,2,2) +for i in range (t_int, t_int+11): + ax.plot(x_ct_n*1e6,n[i]) +ax.set_xscale("log") +ax.set_xlabel('$chord~length~/~\mu m}$') +ax.set_title("Experimental") + +plt.show() \ No newline at end of file diff --git a/code/cld_psd_utils.py b/code/cld_psd_utils.py new file mode 100644 index 0000000..2bc4a58 --- /dev/null +++ b/code/cld_psd_utils.py @@ -0,0 +1,114 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jun 7 13:24:53 2023 + +@author: User +""" + +import numpy as np +from scipy.optimize import nnls +from scipy.signal import sosfiltfilt, butter +from numpy import tan as tan + +## matrix A. it only depends on the grid and particle structure, independent on the cld. +def get_A(grid, cir:"aspect ratio")->"array of shape (M x N)": + ## probability funtion for a sphere + def pdf(L_l, L_u, a_i): + if (L_u <= L_l): + raise ValueError ("the uuper bound must be larger than the lower bound") + + if (L_u <= 2.0*a_i): + return np.sqrt(1.0-(L_l/2.0/a_i)**2) - np.sqrt(1.0-(L_u/2.0/a_i)**2) + elif (L_l> 2.0*a_i): + return 0 + else: + return np.sqrt(1.0-(L_l/2.0/a_i)**2) + + ## probability funtion for an ellipse + def pdf_ellip(L_l, L_u, a, a_i, cir): + if (L_u <= L_l): + raise ValueError ("the upper bound must be larger than the lower bound") + + if (a == np.pi) or (a == 0.0): + if (L_u <= 2.0*a_i): + return np.sqrt(1.0-(L_l/2.0/a_i)**2) - np.sqrt(1.0-(L_u/2.0/a_i)**2) + elif (L_l> 2.0*a_i): + return 0 + else: + return np.sqrt(1.0-(L_l/2.0/a_i)**2) + + elif (a == np.pi*0.5) or (a == np.pi*1.5): + if (L_u <= 2.0*cir*a_i): + return np.sqrt(1.0-(L_l/2.0/a_i/cir)**2) - np.sqrt(1.0-(L_u/2.0/a_i/cir)**2) + elif (L_l> 2.0*cir*a_i): + return 0 + else: + return np.sqrt(1.0-(L_l/2.0/a_i/cir)**2) + + else: + if 2.0*cir*a_i*np.sqrt((1+tan(a)**2) / (cir**2 + tan(a)**2)) >= L_u: + return np.sqrt(1.0-(cir**2 + tan(a)**2)/(1.0+tan(a)**2) * (L_l/2.0/cir/a_i)**2) - np.sqrt(1.0-(cir**2 + tan(a)**2)/(1.0+tan(a)**2) * (L_u/2.0/cir/a_i)**2) + elif 2.0*cir*a_i*np.sqrt((1+tan(a)**2) / (cir**2 + tan(a)**2)) < L_l: + return 0 + else: + return np.sqrt(1.0-(cir**2 + tan(a)**2)/(1.0+tan(a)**2) * (L_l/2.0/cir/a_i)**2) + + # grid + def get_centers(grid): + ct = [] + for p in range(1, len(grid)): + ct.append((grid[p] + grid[p-1]) / 2) + ct = np.asarray(ct) + return ct + + ## bin number of chords M and particle count N, assume they use the same grid, but can be changed later + M = len(grid) - 1 + N = len(grid) - 1 + + ## chrod length grid + l_ct = get_centers(grid) + l_grid = grid + + ## particle size grid + x_ct = get_centers(grid) + x_grid = grid + + ## format A + if cir == 1.0: + A = [] + for j in range (0, M): + for i in range (0, N): + A.append(pdf(l_grid[j], l_grid[j+1], x_ct[i]/2.0)) + A = np.asarray(A) + A = np.reshape(A, (M,N)) + + elif cir < 1.0 and cir > 0.0: + A = [] + itg_res = 100 ## this can be changed, usually 100 is enough + pi_space = np.linspace(0, 2.0*np.pi, itg_res) + for j in range (0, M): + for i in range (0, N): + area_wrapper = [] + for k in range (0, itg_res): + a = pi_space[k] + area_wrapper.append(pdf_ellip(x_grid[j], x_grid[j+1], a, x_ct[i]/2.0/np.sqrt(cir), cir)) # numerical integration + A.append(np.trapz(area_wrapper, pi_space) / 2.0/np.pi) + A = np.asarray(A) + A = np.reshape(A, (M,N)) + + else: + raise ValueError ("the cir must be between 0 and 1.") + + return A + + +## cld to psd +def cld_to_psd(A, cld:"normlaized cld", fre:"frequency of Butterworth"=0.35, order:"order of Butterworth"=1)->"normalized filtered psd, res" : + ## inverse cld to get psd + X_inverse, residuals = nnls(A, cld) + + ## the order and frequency can be adjusted + sos = butter(order, fre, output='sos') # default is lowpass + filtd_X = sosfiltfilt(sos, X_inverse) + + return filtd_X, residuals \ No newline at end of file diff --git a/code/create_Batch_model.py b/code/create_Batch_model.py new file mode 100644 index 0000000..0e0d142 --- /dev/null +++ b/code/create_Batch_model.py @@ -0,0 +1,253 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Jun 9 10:43:34 2023 + +@author: User +""" +import pandas as pd +import numpy as np + +## Blaze grid +x_min = 1e-6 # m +x_max = 900e-6 # m +n_bins = 100 + +x_grid = np.logspace(np.log10(x_min),np.log10(x_max),n_bins+1) + +# midpoint, arithmetic mean +x_ct = [] +for i in range (n_bins): + x_ct.append(0.5*x_grid[i]+0.5*x_grid[i+1]) +x_ct = np.asarray(x_ct) + + +data_dir = r"C:\Users\User\blaze\6.6.23\230606 higg_zn_batchExportOriginal.xlsx" + +sheet_LW = "E2E-ChannelData-LW" + +df_LW = pd.read_excel(data_dir, sheet_name=sheet_LW, header=0, skiprows=4) +df_LW.drop(columns=df_LW.columns[-1],axis=1,inplace=True) # drop the last column, which is empty + +# slice data [row,col] +time = df_LW.iloc[:,0:1].to_numpy() # s +mean_size = df_LW.iloc[:,2:3].to_numpy() # um +particle_count = df_LW.iloc[:,3:4].to_numpy() # 1 +number_distri = df_LW.iloc[:,4:].to_numpy() # 1 + +# to find the starting point, set a value so that the increase is bigger than the set value, it will be treated as the addition point +threshold = 10000 +for i in range (0,len(time)): + if (particle_count[i+1] - particle_count[i]) > threshold: + addition_point_row = i+1 + break + +print("successfully get experimental results") +# remember to delete the background +time_frame = 16 ## plot how many time points after addition + +def normalize_cld(cld): + total_cld = np.sum(cld) + normalized_cld = [] + for i in range (0, len(cld)): + normalized_cld.append(cld[i] / total_cld) + return np.asarray(normalized_cld) + +def calculate_n(psd, x_ct, reactor_dimension): + # calculate the number density 1/m cry/m rea + n = [] + for i in range (0, len(psd)): + n.append(psd[i]/x_ct[i]/reactor_dimension) + n = np.asarray(n) # the first m is the particle size, the second m is the reactor length + return n + +from scipy.interpolate import interp1d +def normalize_extrap_n(n, x_ct_old, x_ct_new): + area = np.trapz(n, x_ct_old) + n = n/area + spl = interp1d(x_ct_old, n, kind="quadratic", fill_value="extrapolate") + normalized_n = spl(x_ct_new) + return normalized_n + +## convert the cld to psd +from cld_psd_utils import get_A, cld_to_psd + +# imageJ input +cir = 0.84 + +# reactor input +reactor_volume = 0.25*900**2*np.pi*330 /1e18 # m^3, this might also be inaccurate + +# get A +A = get_A(x_grid, cir) +print("successfully get A") + +def update_nex(count): + total_particle_count = count # 26666, this is leveraged + psd = [] + n = [] + for i in range (0, time_frame): + r_psd, res = cld_to_psd(A, normalize_cld(number_distri[addition_point_row+i]), fre=0.15, order=1) + psd.append(r_psd * total_particle_count) + n.append(calculate_n(r_psd * total_particle_count, x_ct, reactor_volume)) + return n + +n = update_nex(3.8) + +# batch experiments +from cadet import Cadet as CADETPython + +# enable Jacobian +jacobian = 1 + +# time resolution +time_resolution = 60 +1 + +# feed +c_feed = 9.9*0.8 +c_eq = 0.707 + +# crystal phase discretization +n_x = 100 + 2 # total number of components c_feed being the first, c_eq being the last +x_c = 1e-6 # m +x_max = 900e-6 # m + +# simulation time +cycle_time = 60 # s + +# volume +v_reactor = 35e-6 # m^3 + +# Spacing +x_grid_n = np.logspace(np.log10(x_c), np.log10(x_max), n_x-1) + +x_ct_n = [] +for p in range(1, n_x-1): + x_ct_n.append((x_grid_n[p] + x_grid_n[p-1]) / 2) +x_ct_n = np.asarray(x_ct_n) + +# PDF +t_int = 2 # discard the first 2 seconds +#nPDF = normalize_extrap_n(n[t_int], x_ct*1e6, x_ct_n*1e6) # the change in particle count does not change the nPDF, no need to update + +# Boundary conditions +boundary_c = [] +for p in range(n_x): + if p == 0: + boundary_c.append(c_feed) + elif p == n_x-1: + boundary_c.append(c_eq) + else: + boundary_c.append(0) +boundary_c = np.asarray(boundary_c) + +# Initial conditions +initial_c = [] +for k in range(n_x): + if k == n_x-1: + initial_c.append(c_eq) + elif k==0: + initial_c.append(c_feed) + else: + initial_c.append(0) +initial_c = np.asarray(initial_c) + +def create_model(): + model = CADETPython() + + # number of unit operations + model.root.input.model.nunits = 2 + + #inlet model + model.root.input.model.unit_000.unit_type = 'INLET' + model.root.input.model.unit_000.ncomp = n_x + model.root.input.model.unit_000.inlet_type = 'PIECEWISE_CUBIC_POLY' + + #time sections + model.root.input.solver.sections.nsec = 1 + model.root.input.solver.sections.section_times = [0.0, 8000,] # s + model.root.input.solver.sections.section_continuity = [] + + model.root.input.model.unit_000.sec_000.const_coeff = n_x*[0.0,] #boundary_c + model.root.input.model.unit_000.sec_000.lin_coeff = n_x*[0.0,] + model.root.input.model.unit_000.sec_000.quad_coeff = n_x*[0.0,] + model.root.input.model.unit_000.sec_000.cube_coeff = n_x*[0.0,] + + # CSTR + model.root.input.model.unit_001.unit_type = 'CSTR' + model.root.input.model.unit_001.ncomp = n_x + model.root.input.model.unit_001.use_analytic_jacobian = jacobian # don't change now + model.root.input.model.unit_001.init_c = initial_c + model.root.input.model.unit_001.init_volume = v_reactor + model.root.input.model.unit_001.porosity = 1 + model.root.input.model.unit_001.adsorption_model = 'NONE' + + # crystallization reaction + model.root.input.model.unit_001.reaction_model = 'CRYSTALLIZATION' + model.root.input.model.unit_001.reaction_bulk.cry_bins = x_grid + model.root.input.model.unit_001.reaction_bulk.cry_nuclei_mass_density = 1.2e3 + model.root.input.model.unit_001.reaction_bulk.cry_vol_shape_factor = 0.524 + + ## nucleation + model.root.input.model.unit_001.reaction_bulk.cry_primary_nucleation_rate = 5 + model.root.input.model.unit_001.reaction_bulk.cry_u = 10.0 + + model.root.input.model.unit_001.reaction_bulk.cry_secondary_nucleation_rate = 4e8 + model.root.input.model.unit_001.reaction_bulk.cry_b = 2.0 + model.root.input.model.unit_001.reaction_bulk.cry_k = 1.0 + + ## growth + model.root.input.model.unit_001.reaction_bulk.cry_growth_rate_constant = 0.0e-6 + model.root.input.model.unit_001.reaction_bulk.cry_growth_constant = 0 + model.root.input.model.unit_001.reaction_bulk.cry_a = 1.0 + model.root.input.model.unit_001.reaction_bulk.cry_g = 1.0 + model.root.input.model.unit_001.reaction_bulk.cry_p = 0.0 + model.root.input.model.unit_001.reaction_bulk.cry_growth_dispersion_rate = 0 # 1.5e-11 + model.root.input.model.unit_001.reaction_bulk.cry_growth_scheme_order = 2 # can only be 1, 2, 3, 4 + + ## Outlet + model.root.input.model.unit_002.unit_type = 'OUTLET' + model.root.input.model.unit_002.ncomp = n_x + + # Connections + Q = 0 # volumetric flow rate + + model.root.input.model.connections.nswitches = 1 + model.root.input.model.connections.switch_000.section = 0 + model.root.input.model.connections.switch_000.connections = [ + 0, 1, -1, -1, Q, + 1, 2, -1, -1, Q, + ] # Q, volumetric flow rate + + # numerical solver configuration + model.root.input.model.solver.gs_type = 1 + model.root.input.model.solver.max_krylov = 0 + model.root.input.model.solver.max_restarts = 10 + model.root.input.model.solver.schur_safety = 1e-8 + + # Number of cores for parallel simulation + model.root.input.solver.nthreads = 1 + + # Tolerances for the time integrator + model.root.input.solver.time_integrator.abstol = 1e-6 + model.root.input.solver.time_integrator.algtol = 1e-10 + model.root.input.solver.time_integrator.reltol = 1e-6 + model.root.input.solver.time_integrator.init_step_size = 1e-10 + model.root.input.solver.time_integrator.max_steps = 1000000 + + # Return data + model.root.input['return'].split_components_data = 0 + model.root.input['return'].split_ports_data = 0 + model.root.input['return'].unit_000.write_solution_bulk = 1 + model.root.input['return'].unit_000.write_solution_inlet = 1 + model.root.input['return'].unit_000.write_solution_outlet = 1 + model.root.input['return'].unit_000.write_sens_outlet=1 + model.root.input['return'].unit_000.write_sens_bulk=1 + + # Copy settings to the other unit operations + model.root.input['return'].unit_001 = model.root.input['return'].unit_000 + model.root.input['return'].unit_002 = model.root.input['return'].unit_000 + + # Solution times + model.root.input.solver.user_solution_times = np.linspace(0, cycle_time, time_resolution) + + return model \ No newline at end of file diff --git a/data/230606 higg_zn_batchExportOriginal.xlsx b/data/230606 higg_zn_batchExportOriginal.xlsx new file mode 100644 index 0000000..151adbc Binary files /dev/null and b/data/230606 higg_zn_batchExportOriginal.xlsx differ diff --git a/environment.yml b/environment.yml index 2594cea..670f911 100644 --- a/environment.yml +++ b/environment.yml @@ -1,70 +1,264 @@ -name: bug_test +name: cadet channels: + - anaconda - conda-forge - - anaconda-fusion - defaults dependencies: - - bzip2=1.0.8=h8ffe710_4 - - ca-certificates=2023.5.7=h56e8100_0 + - aiohttp=3.8.4=py310h8d17308_0 + - aiosignal=1.3.1=pyhd8ed1ab_0 + - anyio=3.5.0=py310haa95532_0 + - aom=3.5.0=h63175ca_0 + - appdirs=1.4.4=pyhd3eb1b0_0 + - argon2-cffi=21.3.0=pyhd3eb1b0_0 + - argon2-cffi-bindings=21.2.0=py310h2bbff1b_0 + - asttokens=2.0.5=pyhd3eb1b0_0 + - async-timeout=4.0.2=pyhd8ed1ab_0 + - attrs=22.1.0=py310haa95532_0 + - babel=2.11.0=py310haa95532_0 + - backcall=0.2.0=pyhd3eb1b0_0 + - beautifulsoup4=4.11.1=py310haa95532_0 + - blas=1.0=mkl + - bleach=4.1.0=pyhd3eb1b0_0 + - bottleneck=1.3.5=py310h9128911_0 + - brotli=1.0.9=h2bbff1b_7 + - brotli-bin=1.0.9=h2bbff1b_7 + - brotlipy=0.7.0=py310h2bbff1b_1002 + - bzip2=1.0.8=he774522_0 + - ca-certificates=2023.01.10=haa95532_0 - cadet=4.3.0=h8cf7cf1_4 + - certifi=2022.12.7=py310haa95532_0 + - cffi=1.15.1=py310h2bbff1b_3 + - charset-normalizer=2.0.4=pyhd3eb1b0_0 + - cloudpickle=2.0.0=pyhd3eb1b0_0 + - colorama=0.4.6=py310haa95532_0 + - comm=0.1.2=py310haa95532_0 + - contourpy=1.0.5=py310h59b6b97_0 + - cryptography=38.0.4=py310h21b164f_0 + - curl=8.0.1=h68f0423_0 + - cycler=0.11.0=pyhd3eb1b0_0 + - debugpy=1.5.1=py310hd77b12b_0 + - decorator=5.1.1=pyhd3eb1b0_0 + - defusedxml=0.7.1=pyhd3eb1b0_0 + - dill=0.3.6=pyhd8ed1ab_1 + - double-conversion=3.2.0=h63175ca_1 + - eigen=3.4.0=h2d74725_0 + - entrypoints=0.4=py310haa95532_0 + - et_xmlfile=1.1.0=py310haa95532_0 + - executing=0.8.3=pyhd3eb1b0_0 + - expat=2.5.0=h63175ca_1 + - ffmpeg=5.1.2=gpl_h5b1d025_106 + - flit-core=3.6.0=pyhd3eb1b0_0 + - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 + - font-ttf-inconsolata=3.000=h77eed37_0 + - font-ttf-source-code-pro=2.038=h77eed37_0 + - font-ttf-ubuntu=0.83=hab24e00_0 + - fontconfig=2.14.2=hbde0cde_0 + - fonts-conda-ecosystem=1=0 + - fonts-conda-forge=1=0 + - fonttools=4.25.0=pyhd3eb1b0_0 + - freetype=2.12.1=ha860e81_0 + - frozenlist=1.3.3=py310h8d17308_0 + - gettext=0.21.1=h5728263_0 + - giflib=5.2.1=h8cc25b3_3 + - gl2ps=1.4.2=h0597ee9_0 + - glew=2.1.0=h39d44d4_2 + - glib=2.74.1=h12be248_1 + - glib-tools=2.74.1=h12be248_1 + - gst-plugins-base=1.22.0=h001b923_2 + - gstreamer=1.22.0=h6b5321d_2 + - hdf4=4.2.15=h1b1b6ef_5 - hdf5=1.12.2=nompi_h57737ce_101 - - intel-openmp=2023.1.0=h57928b3_46319 + - icc_rt=2022.1.0=h6049295_2 + - icu=70.1=h0e60522_0 + - idna=3.4=py310haa95532_0 + - intel-openmp=2021.4.0=haa95532_3556 + - ipykernel=6.19.2=py310h9909e9c_0 + - ipython=8.8.0=py310haa95532_0 + - ipython_genutils=0.2.0=pyhd3eb1b0_1 + - jedi=0.18.1=py310haa95532_1 + - jinja2=3.1.2=py310haa95532_0 + - jpeg=9e=h2bbff1b_1 + - json5=0.9.6=pyhd3eb1b0_0 + - jsoncpp=1.9.5=h2d74725_1 + - jsonschema=4.16.0=py310haa95532_0 + - jupyter_client=7.4.8=py310haa95532_0 + - jupyter_core=5.1.1=py310haa95532_0 + - jupyter_server=1.23.4=py310haa95532_0 + - jupyterlab=3.5.3=py310haa95532_0 + - jupyterlab_pygments=0.1.2=py_0 + - jupyterlab_server=2.16.5=py310haa95532_0 + - kiwisolver=1.4.4=py310hd77b12b_0 - krb5=1.20.1=heb0366b_0 + - lerc=3.0=hd77b12b_0 - libaec=1.0.6=h63175ca_1 - - libblas=3.9.0=17_win64_mkl - - libcblas=3.9.0=17_win64_mkl - - libcurl=8.1.2=h68f0423_0 - - libffi=3.4.2=h8ffe710_5 - - libhwloc=2.9.1=nocuda_h15da153_6 + - libblas=3.9.0=12_win64_mkl + - libbrotlicommon=1.0.9=h2bbff1b_7 + - libbrotlidec=1.0.9=h2bbff1b_7 + - libbrotlienc=1.0.9=h2bbff1b_7 + - libcblas=3.9.0=12_win64_mkl + - libclang=15.0.7=default_h77d9078_1 + - libclang13=15.0.7=default_h77d9078_1 + - libcurl=8.0.1=h68f0423_0 + - libdeflate=1.17=h2bbff1b_0 + - libexpat=2.5.0=h63175ca_1 + - libffi=3.4.2=hd77b12b_6 + - libglib=2.74.1=he8f3873_1 - libiconv=1.17=h8ffe710_0 - - liblapack=3.9.0=17_win64_mkl - - liblapacke=3.9.0=17_win64_mkl - - libsqlite=3.42.0=hcfcfb64_0 - - libssh2=1.11.0=h7dfc565_0 - - libxml2=2.11.4=hc3477c8_0 + - liblapack=3.9.0=12_win64_mkl + - liblapacke=3.9.0=12_win64_mkl + - libnetcdf=4.9.1=nompi_hc41bf00_101 + - libogg=1.3.5=h2bbff1b_1 + - libopus=1.3.1=h8ffe710_1 + - libpng=1.6.39=h8cc25b3_0 + - libsodium=1.0.18=h62dcd97_0 + - libsqlite=3.40.0=hcfcfb64_0 + - libssh2=1.10.0=h9a1e1f7_3 + - libtheora=1.1.1=h8d14728_1005 + - libtiff=4.5.0=h6c2663c_2 + - libvorbis=1.3.7=he774522_0 + - libwebp=1.2.4=hbc33d0d_1 + - libwebp-base=1.2.4=h2bbff1b_1 + - libxml2=2.10.4=hc3477c8_0 + - libxslt=1.1.37=h0192164_0 + - libzip=1.9.2=h519de47_1 - libzlib=1.2.13=hcfcfb64_4 - - mkl=2022.1.0=h6a75c08_874 - - openssl=3.1.1=hcfcfb64_1 - - pip=23.1.2=pyhd8ed1ab_0 - - pthreads-win32=2.9.1=hfa6e2cd_3 - - python=3.10.0=hcf16a7b_3_cpython - - setuptools=67.7.2=pyhd8ed1ab_0 - - sqlite=3.42.0=hcfcfb64_0 + - loguru=0.7.0=py310h5588dad_0 + - lxml=4.9.2=py310hc0e5b84_0 + - lz4-c=1.9.4=h2bbff1b_0 + - m2w64-gcc-libgfortran=5.3.0=6 + - m2w64-gcc-libs=5.3.0=7 + - m2w64-gcc-libs-core=5.3.0=7 + - m2w64-gmp=6.1.0=2 + - m2w64-libwinpthread-git=5.0.0.4634.697f757=2 + - markupsafe=2.1.1=py310h2bbff1b_0 + - matplotlib=3.7.1=py310haa95532_0 + - matplotlib-base=3.7.1=py310h4ed8f06_0 + - matplotlib-inline=0.1.6=py310haa95532_0 + - mistune=0.8.4=py310h2bbff1b_1000 + - mkl=2021.4.0=h0e2418a_729 + - mkl-service=2.4.0=py310h2bbff1b_0 + - mkl_fft=1.3.1=py310ha0764ea_0 + - mkl_random=1.2.2=py310h4ed8f06_0 + - msys2-conda-epoch=20160418=1 + - multidict=6.0.4=py310h8d17308_0 + - multiprocess=0.70.14=py310haa95532_0 + - munkres=1.1.4=py_0 + - nbclassic=0.4.8=py310haa95532_0 + - nbclient=0.5.13=py310haa95532_0 + - nbconvert=6.5.4=py310haa95532_0 + - nbformat=5.7.0=py310haa95532_0 + - nest-asyncio=1.5.6=py310haa95532_0 + - nlohmann_json=3.11.2=h39d44d4_0 + - notebook=6.5.2=py310haa95532_0 + - notebook-shim=0.2.2=py310haa95532_0 + - numexpr=2.8.4=py310hd213c9f_0 + - numpy=1.23.5=py310h60c9a35_0 + - numpy-base=1.23.5=py310h04254f7_0 + - openh264=2.3.1=h63175ca_2 + - openpyxl=3.0.10=py310h2bbff1b_0 + - openssl=3.1.0=hcfcfb64_0 + - packaging=22.0=py310haa95532_0 + - pandas=1.5.3=py310h4ed8f06_0 + - pandocfilters=1.5.0=pyhd3eb1b0_0 + - parso=0.8.3=pyhd3eb1b0_0 + - pathos=0.3.0=pyhd8ed1ab_0 + - pcre=8.45=hd77b12b_0 + - pcre2=10.40=h17e33f8_0 + - pickleshare=0.7.5=pyhd3eb1b0_1003 + - pillow=9.4.0=py310hd77b12b_0 + - pip=23.0.1=py310haa95532_0 + - platformdirs=2.5.2=py310haa95532_0 + - ply=3.11=py310haa95532_0 + - pooch=1.4.0=pyhd3eb1b0_0 + - pox=0.3.2=pyhd8ed1ab_0 + - ppft=1.7.6.6=pyhd8ed1ab_0 + - proj=9.1.1=heca977f_2 + - prometheus_client=0.14.1=py310haa95532_0 + - prompt-toolkit=3.0.36=py310haa95532_0 + - psutil=5.9.0=py310h2bbff1b_0 + - pugixml=1.11.4=h0e60522_0 + - pure_eval=0.2.2=pyhd3eb1b0_0 + - pycparser=2.21=pyhd3eb1b0_0 + - pyopenssl=22.0.0=pyhd3eb1b0_0 + - pyparsing=3.0.9=py310haa95532_0 + - pyqt=5.15.7=py310hbabf5d4_0 + - pyqt5-sip=12.11.0=py310h8a704f9_0 + - pyrsistent=0.18.0=py310h2bbff1b_0 + - pysocks=1.7.1=py310haa95532_0 + - python=3.10.10=h4de0772_0_cpython + - python-dateutil=2.8.2=pyhd3eb1b0_0 + - python-fastjsonschema=2.16.2=py310haa95532_0 + - python_abi=3.10=3_cp310 + - pytz=2022.7=py310haa95532_0 + - pywin32=305=py310h2bbff1b_0 + - pywinpty=2.0.2=py310h5da7b33_0 + - pyzmq=23.2.0=py310hd77b12b_0 + - qt-main=5.15.8=h720456b_6 + - qt-webengine=5.15.8=h5b1ea0b_0 + - qtwebkit=5.212=h992fabe_8 + - requests=2.28.1=py310haa95532_0 + - scipy=1.10.0=py310hb9afe5d_1 + - send2trash=1.8.0=pyhd3eb1b0_1 + - setuptools=65.6.3=py310haa95532_0 + - sip=6.6.2=py310hd77b12b_0 + - six=1.16.0=pyhd3eb1b0_1 + - sniffio=1.2.0=py310haa95532_1 + - soupsieve=2.3.2.post1=py310haa95532_0 + - spyder-kernels=2.4.1=py310haa95532_0 + - sqlite=3.41.1=h2bbff1b_0 + - stack_data=0.2.0=pyhd3eb1b0_0 - suitesparse=5.4.0=h5d0cbe0_1 - - tbb=2021.9.0=h91493d7_0 - - tbb-devel=2021.9.0=h91493d7_0 - - tk=8.6.12=h8ffe710_0 - - tzdata=2023c=h71feb2d_0 + - svt-av1=1.4.1=h63175ca_0 + - tbb=2021.7.0=h59b6b97_0 + - tbb-devel=2021.7.0=h59b6b97_0 + - terminado=0.17.1=py310haa95532_0 + - tinycss2=1.2.1=py310haa95532_0 + - tk=8.6.12=h2bbff1b_0 + - toml=0.10.2=pyhd3eb1b0_0 + - tomli=2.0.1=py310haa95532_0 + - tornado=6.2=py310h2bbff1b_0 + - traitlets=5.7.1=py310haa95532_0 + - typing-extensions=4.4.0=py310haa95532_0 + - typing_extensions=4.4.0=py310haa95532_0 + - tzdata=2022g=h04d1e81_0 - ucrt=10.0.22621.0=h57928b3_0 - - vc=14.3=hb25d44b_16 - - vc14_runtime=14.34.31931=h5081d32_16 - - vs2015_runtime=14.34.31931=hed1258a_16 - - wheel=0.40.0=pyhd8ed1ab_0 - - xz=5.2.6=h8d14728_0 + - urllib3=1.26.14=py310haa95532_0 + - utfcpp=3.2.3=h57928b3_0 + - vc=14.2=h21ff451_1 + - vs2015_runtime=14.34.31931=h4c5c07a_10 + - vtk=9.2.6=qt_py310h836d5f5_200 + - wcwidth=0.2.5=pyhd3eb1b0_0 + - webencodings=0.5.1=py310haa95532_1 + - websocket-client=0.58.0=py310haa95532_4 + - wheel=0.38.4=py310haa95532_0 + - win32_setctime=1.1.0=pyhd8ed1ab_0 + - win_inet_pton=1.1.0=py310haa95532_0 + - wincertstore=0.2=py310haa95532_2 + - winpty=0.4.3=4 + - wslink=1.10.1=pyhd8ed1ab_0 + - x264=1!164.3095=h8ffe710_2 + - x265=3.5=h2d74725_3 + - xlrd=2.0.1=pyhd3eb1b0_0 + - xz=5.2.10=h8cc25b3_1 + - yarl=1.8.2=py310h8d17308_0 + - zeromq=4.3.4=hd77b12b_0 + - zlib=1.2.13=hcfcfb64_4 + - zstd=1.5.2=h19a0ad4_0 - pip: - about-time==4.2.1 - addict==2.4.0 - alive-progress==3.1.4 - - anyio==3.7.0 - - appdirs==1.4.4 - arviz==0.15.1 - autograd==1.5 - cadet-process==0.7.3 - cadet-python==0.14 - - certifi==2023.5.7 - cma==3.2.2 - cobra==0.26.3 - - colorama==0.4.6 - - contourpy==1.0.7 - corner==2.2.2 - - cycler==0.11.0 - depinfo==1.7.0 - deprecated==1.2.14 - - dill==0.3.6 - diskcache==5.6.1 - - exceptiongroup==1.1.1 - - filelock==3.12.1 - - fonttools==4.40.0 + - filelock==3.10.0 - future==0.18.3 - grapheme==0.6.0 - h11==0.14.0 @@ -73,46 +267,28 @@ dependencies: - hopsy==1.1.0 - httpcore==0.17.2 - httpx==0.24.1 - - idna==3.4 - importlib-resources==5.12.0 - joblib==1.2.0 - - kiwisolver==1.4.4 - - llvmlite==0.40.1rc1 + - llvmlite==0.40.0 - markdown-it-py==2.2.0 - - matplotlib==3.7.1 - mdurl==0.1.2 - mpmath==1.3.0 - - multiprocess==0.70.14 - numba==0.57.0 - - numpy==1.23.5 - optlang==1.6.1 - - packaging==23.1 - - pandas==1.5.3 - - pathos==0.3.0 - - pillow==9.5.0 - polyround==0.2.11 - - pox==0.3.2 - - ppft==1.7.6.6 - - pydantic==1.10.9 + - pydantic==1.10.8 - pygments==2.15.1 - pymoo==0.6.0.1 - - pyparsing==3.0.9 - - python-dateutil==2.8.2 - python-libsbml==5.20.1 - - pytz==2023.3 - rich==13.4.1 - ruamel-yaml==0.17.31 - ruamel-yaml-clib==0.2.7 - scikit-learn==1.2.2 - - scipy==1.10.1 - - six==1.16.0 - - sniffio==1.3.0 - swiglpk==5.0.8 - sympy==1.11.1 - threadpoolctl==3.1.0 - tqdm==4.65.0 - - typing-extensions==4.6.3 - wrapt==1.15.0 - xarray==2023.5.0 - xarray-einstats==0.5.1 -prefix: C:\Users\ronal\miniconda3\envs\bug_test +prefix: C:\Users\User\miniconda3\envs\cadet diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..39a9b4b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,173 @@ +about-time==4.2.1 +addict==2.4.0 +aiohttp @ file:///D:/bld/aiohttp_1676292870197/work +aiosignal @ file:///home/conda/feedstock_root/build_artifacts/aiosignal_1667935791922/work +alive-progress==3.1.4 +anyio @ file:///C:/ci/anyio_1644481856696/work/dist +appdirs==1.4.4 +argon2-cffi @ file:///opt/conda/conda-bld/argon2-cffi_1645000214183/work +argon2-cffi-bindings @ file:///C:/ci/argon2-cffi-bindings_1644569876605/work +arviz==0.15.1 +asttokens @ file:///opt/conda/conda-bld/asttokens_1646925590279/work +async-timeout @ file:///home/conda/feedstock_root/build_artifacts/async-timeout_1640026696943/work +attrs @ file:///C:/b/abs_09s3y775ra/croot/attrs_1668696195628/work +autograd==1.5 +Babel @ file:///C:/b/abs_a2shv_3tqi/croot/babel_1671782804377/work +backcall @ file:///home/ktietz/src/ci/backcall_1611930011877/work +beautifulsoup4 @ file:///C:/ci/beautifulsoup4_1650293028159/work +bleach @ file:///opt/conda/conda-bld/bleach_1641577558959/work +Bottleneck @ file:///C:/Windows/Temp/abs_3198ca53-903d-42fd-87b4-03e6d03a8381yfwsuve8/croots/recipe/bottleneck_1657175565403/work +brotlipy==0.7.0 +-e git+https://github.com/fau-advanced-separations/CADET-Process.git@ba7276b50c1cf373eb0255ec08da71c7c0963daa#egg=CADET_Process +CADET-Python==0.14 +certifi @ file:///C:/b/abs_85o_6fm0se/croot/certifi_1671487778835/work/certifi +cffi @ file:///C:/b/abs_49n3v2hyhr/croot/cffi_1670423218144/work +charset-normalizer @ file:///tmp/build/80754af9/charset-normalizer_1630003229654/work +cloudpickle @ file:///tmp/build/80754af9/cloudpickle_1632508026186/work +cma==3.2.2 +cobra==0.26.3 +colorama @ file:///C:/b/abs_a9ozq0l032/croot/colorama_1672387194846/work +comm @ file:///C:/b/abs_1419earm7u/croot/comm_1671231131638/work +contourpy @ file:///C:/b/abs_d5rpy288vc/croots/recipe/contourpy_1663827418189/work +corner==2.2.2 +cryptography @ file:///C:/b/abs_b7d7drzbky/croot/cryptography_1673298763653/work +cycler @ file:///tmp/build/80754af9/cycler_1637851556182/work +debugpy @ file:///C:/ci_310/debugpy_1642079916595/work +decorator @ file:///opt/conda/conda-bld/decorator_1643638310831/work +defusedxml @ file:///tmp/build/80754af9/defusedxml_1615228127516/work +depinfo==1.7.0 +Deprecated==1.2.14 +dill @ file:///home/conda/feedstock_root/build_artifacts/dill_1666603105584/work +diskcache==5.6.1 +entrypoints @ file:///C:/ci/entrypoints_1649926676279/work +et-xmlfile==1.1.0 +executing @ file:///opt/conda/conda-bld/executing_1646925071911/work +fastjsonschema @ file:///C:/Users/BUILDE~1/AppData/Local/Temp/abs_ebruxzvd08/croots/recipe/python-fastjsonschema_1661376484940/work +filelock==3.10.0 +flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core +fonttools==4.25.0 +frozenlist @ file:///D:/bld/frozenlist_1667935541751/work +future==0.18.3 +grapheme==0.6.0 +h11==0.14.0 +h5netcdf==1.2.0 +h5py==3.6.0 +hopsy==1.1.0 +httpcore==0.17.2 +httpx==0.24.1 +idna @ file:///C:/b/abs_bdhbebrioa/croot/idna_1666125572046/work +importlib-resources==5.12.0 +ipykernel @ file:///C:/b/abs_b4f07tbsyd/croot/ipykernel_1672767104060/work +ipython @ file:///C:/b/abs_d4_i9p0_36/croot/ipython_1674681439495/work +ipython-genutils @ file:///tmp/build/80754af9/ipython_genutils_1606773439826/work +jedi @ file:///C:/ci/jedi_1644315428305/work +Jinja2 @ file:///C:/b/abs_7cdis66kl9/croot/jinja2_1666908141852/work +joblib==1.2.0 +json5 @ file:///tmp/build/80754af9/json5_1624432770122/work +jsonschema @ file:///C:/b/abs_59eyhnbyej/croots/recipe/jsonschema_1663375476535/work +jupyter-server @ file:///C:/b/abs_1cfi3__jl8/croot/jupyter_server_1671707636383/work +jupyter_client @ file:///C:/b/abs_b9pns5mx5p/croot/jupyter_client_1671703062216/work +jupyter_core @ file:///C:/b/abs_84df679bho/croot/jupyter_core_1672332237650/work +jupyterlab @ file:///C:/b/abs_513jt6yy74/croot/jupyterlab_1675354138043/work +jupyterlab-pygments @ file:///tmp/build/80754af9/jupyterlab_pygments_1601490720602/work +jupyterlab_server @ file:///C:/b/abs_5ayr1vni0w/croot/jupyterlab_server_1672127362727/work +kiwisolver @ file:///C:/b/abs_88mdhvtahm/croot/kiwisolver_1672387921783/work +llvmlite==0.40.0 +loguru @ file:///D:/bld/loguru_1681126322414/work +lxml @ file:///D:/bld/lxml_1671013694264/work +markdown-it-py==2.2.0 +MarkupSafe @ file:///C:/ci/markupsafe_1654508036328/work +matplotlib @ file:///C:/b/abs_999d_v8_lh/croot/matplotlib-suite_1678723900840/work +matplotlib-inline @ file:///C:/ci/matplotlib-inline_1661934094726/work +mdurl==0.1.2 +mistune @ file:///C:/ci_310/mistune_1642084168466/work +mkl-fft==1.3.1 +mkl-random @ file:///C:/ci_310/mkl_random_1643050563308/work +mkl-service==2.4.0 +mpmath==1.3.0 +multidict @ file:///D:/bld/multidict_1672339572480/work +multiprocess @ file:///C:/b/abs_ca0rg6wl6_/croot/multiprocess_1668006439310/work +munkres==1.1.4 +nbclassic @ file:///C:/b/abs_26e3fkk516/croot/nbclassic_1668174974037/work +nbclient @ file:///C:/ci/nbclient_1650308592199/work +nbconvert @ file:///C:/b/abs_4av3q4okro/croot/nbconvert_1668450658054/work +nbformat @ file:///C:/b/abs_85_3g7dkt4/croot/nbformat_1670352343720/work +nest-asyncio @ file:///C:/b/abs_3a_4jsjlqu/croot/nest-asyncio_1672387322800/work +notebook @ file:///C:/b/abs_ca13hqvuzw/croot/notebook_1668179888546/work +notebook_shim @ file:///C:/b/abs_ebfczttg6x/croot/notebook-shim_1668160590914/work +numba==0.57.0 +numexpr @ file:///C:/b/abs_a7kbak88hk/croot/numexpr_1668713882979/work +numpy @ file:///C:/b/abs_datssh7cer/croot/numpy_and_numpy_base_1672336199388/work +openpyxl==3.0.10 +optlang==1.6.1 +packaging @ file:///C:/b/abs_cfsup8ur87/croot/packaging_1671697442297/work +pandas @ file:///C:/b/abs_b9kefbuby2/croot/pandas_1677835593760/work +pandocfilters @ file:///opt/conda/conda-bld/pandocfilters_1643405455980/work +parso @ file:///opt/conda/conda-bld/parso_1641458642106/work +pathos @ file:///home/conda/feedstock_root/build_artifacts/pathos_1666612980302/work +pickleshare @ file:///tmp/build/80754af9/pickleshare_1606932040724/work +Pillow==9.4.0 +platformdirs @ file:///C:/b/abs_73cc5cz_1u/croots/recipe/platformdirs_1662711386458/work +ply==3.11 +PolyRound==0.2.11 +pooch @ file:///tmp/build/80754af9/pooch_1623324770023/work +pox @ file:///home/conda/feedstock_root/build_artifacts/pox_1666592868822/work +ppft @ file:///home/conda/feedstock_root/build_artifacts/ppft_1666592874911/work +prometheus-client @ file:///C:/Windows/TEMP/abs_ab9nx8qb08/croots/recipe/prometheus_client_1659455104602/work +prompt-toolkit @ file:///C:/b/abs_6coz5_9f2s/croot/prompt-toolkit_1672387908312/work +psutil @ file:///C:/Windows/Temp/abs_b2c2fd7f-9fd5-4756-95ea-8aed74d0039flsd9qufz/croots/recipe/psutil_1656431277748/work +pure-eval @ file:///opt/conda/conda-bld/pure_eval_1646925070566/work +pycparser @ file:///tmp/build/80754af9/pycparser_1636541352034/work +pydantic==1.10.8 +Pygments==2.15.1 +pymoo==0.6.0.1 +pyOpenSSL @ file:///opt/conda/conda-bld/pyopenssl_1643788558760/work +pyparsing @ file:///C:/Users/BUILDE~1/AppData/Local/Temp/abs_7f_7lba6rl/croots/recipe/pyparsing_1661452540662/work +PyQt5==5.15.7 +PyQt5-sip @ file:///D:/bld/pyqt-split_1657234606115/work/pyqt_sip +pyrsistent @ file:///C:/ci_310/pyrsistent_1642117077485/work +PySocks @ file:///C:/ci_310/pysocks_1642089375450/work +python-dateutil @ file:///tmp/build/80754af9/python-dateutil_1626374649649/work +python-libsbml==5.20.1 +pytz @ file:///C:/b/abs_22fofvpn1x/croot/pytz_1671698059864/work +pywin32==305.1 +pywinpty @ file:///C:/ci_310/pywinpty_1644230983541/work/target/wheels/pywinpty-2.0.2-cp310-none-win_amd64.whl +pyzmq @ file:///C:/ci/pyzmq_1657616000714/work +requests @ file:///C:/ci/requests_1657735340829/work +rich==13.4.1 +ruamel.yaml==0.17.31 +ruamel.yaml.clib==0.2.7 +scikit-learn==1.2.2 +scipy==1.10.0 +Send2Trash @ file:///tmp/build/80754af9/send2trash_1632406701022/work +sip @ file:///C:/Windows/Temp/abs_b8fxd17m2u/croots/recipe/sip_1659012372737/work +six @ file:///tmp/build/80754af9/six_1644875935023/work +sniffio @ file:///C:/ci_310/sniffio_1642092172680/work +soupsieve @ file:///C:/b/abs_fasraqxhlv/croot/soupsieve_1666296394662/work +spyder-kernels @ file:///C:/b/abs_feh4xo1mrn/croot/spyder-kernels_1673292245176/work +stack-data @ file:///opt/conda/conda-bld/stack_data_1646927590127/work +swiglpk==5.0.8 +sympy==1.11.1 +terminado @ file:///C:/b/abs_25nakickad/croot/terminado_1671751845491/work +threadpoolctl==3.1.0 +tinycss2 @ file:///C:/b/abs_52w5vfuaax/croot/tinycss2_1668168823131/work +toml @ file:///tmp/build/80754af9/toml_1616166611790/work +tomli @ file:///C:/Windows/TEMP/abs_ac109f85-a7b3-4b4d-bcfd-52622eceddf0hy332ojo/croots/recipe/tomli_1657175513137/work +tornado @ file:///C:/ci/tornado_1662476985533/work +tqdm==4.65.0 +traitlets @ file:///C:/b/abs_e5m_xjjl94/croot/traitlets_1671143896266/work +typing_extensions @ file:///C:/b/abs_89eui86zuq/croot/typing_extensions_1669923792806/work +urllib3 @ file:///C:/b/abs_9bcwxczrvm/croot/urllib3_1673575521331/work +vtk==9.2.6 +wcwidth @ file:///Users/ktietz/demo/mc3/conda-bld/wcwidth_1629357192024/work +webencodings==0.5.1 +websocket-client @ file:///C:/ci_310/websocket-client_1642093970919/work +win-inet-pton @ file:///C:/ci_310/win_inet_pton_1642658466512/work +win32-setctime @ file:///home/conda/feedstock_root/build_artifacts/win32_setctime_1642883564726/work +wincertstore==0.2 +wrapt==1.15.0 +wslink @ file:///home/conda/feedstock_root/build_artifacts/wslink_1676499749829/work +xarray==2023.5.0 +xarray-einstats==0.5.1 +xlrd @ file:///tmp/build/80754af9/xlrd_1608072521494/work +yarl @ file:///D:/bld/yarl_1672341135467/work