

README - GENERAL INFORMATION

Title of Project: CompoundingPharma – Dynamic production sequencing to minimize patient delays for compounded medications 

Grant Agreement: Horizon Europe MSCA Postdoctoral Fellowship No. 101150714 
Repository Version: Final Project Update 2026-02-19

Project acronym: CompoundingPharma 

Principal Investigator: Kraig Delana <ORCID: 0000-0002-0485-9950>
Institution: IE Business School 
Email: kraig.delana@ie.edu



OVERVIEW & INTEROPERABILITY

This README illustrates how to run the code and generate the outputs associated with the fluid model simulation as presented in section 5.1 (and appendix D) of the associated paper. 

The simulation code has been implemented in Python (.py files) using open-source libraries.  The files can be opened and run in any IDE compatible with python, e.g., Spyder or Visual Studio Code (or run directly) and is sectioned into cells with pseudocode documentation provided inline describing code function. Instructions to reproduce the results are included below, and the outputs of the code are included for convenience in the associated output folder. 



RUN SIMULATION (1) -- Manuscript_Fluid_Simulation_v0006.py

1. To generate the .csv data files for the output folder, open and run the code file in the IDE of your choosing.


2. The code file will populate output file (fluid_sim_replications_rawX.csv) into the output directory. 

├── fluid/
│   │
    ├── output/
    │   │
	├──  fluid_sim_replications_rawX.csv
  
<X> represents the current system size (X = {4,12,24,36,72,124}) and is the number of unique medications.  This is specified in the last cell of the code as system_size = system_scale[<index>] (index = {0,1,2,3,4,5}).  The default index is 2, i.e., system_size = system_scale[2] representing the case with 24 unique medications:

          
3. To recreate all the results, it is necessary to manually change the index of system_scale[<index>] in the first uncommented line of the final cell, and rerun it in order to generate the output data at different system sizes. This is due to exceedingly long run times for larger systems.  When the number of unique medications is small, e.g., when system_size = system_scale[0] there are only only 4 unique medications, and the code runs in approximately 20 seconds, for medium sized systems, e.g., when system_size = system_scale[2] with 24 unique medications, the code runs in approximately 8 minutes, while large systems take multiple hours to simulate. (associated computer and anaconda environment specifications in included at the end of this README.)

This cell can be found at the end of the script in the code file:

---

#%% run simulations for a given system size and export the results

#generate lists to hold results from each replications

#set system size: 0,1,2,3,4,5
system_size = system_scale[2]
#rep_costs_sdre = []
rep_costs_sdre_smpl = []
rep_costs_xindex = []
rep_costs_oldest = []
# rep_costs_longest = []
rep_costs_lowerbound = []
rep_costs_lowerbound_converged = []

start = time.time()

for r in range(replications): #range(replications):
    
    gen_params(system_size, param_seeds[r])
           
    #simplified SDRE 
    innit(innit_seeds[r], runin, sim_duration ,convergence_multiplier)
    rep_costs_sdre_smpl.append(sim_simplified_sdre())
    
    # x-index
    innit(innit_seeds[r], runin, sim_duration,convergence_multiplier)
    rep_costs_xindex.append(sim_x_index())

    # oldest
    innit(innit_seeds[r], runin, sim_duration,convergence_multiplier)
    rep_costs_oldest.append(sim_oldest_task())
    
    #get lower bound then append 
    lb, lbc, lbx = LBF_rvst_nrml()#LBF_rvst_log()
    rep_costs_lowerbound.append(lb)
    rep_costs_lowerbound_converged.append(lbc)
    
    print(r)
    print((time.time() - start)/60)

# print(rep_costs_sdre)
# alarm()
# export simulation output 

fluid_sim_replications_raw= pd.DataFrame(list(zip(rep_costs_lowerbound, rep_costs_lowerbound_converged, rep_costs_sdre_smpl, rep_costs_xindex, rep_costs_oldest)),
              columns=['lower_bound','lower_bound_converged', 'sdre_simplified', 'xindex','oldest'])
fluid_sim_replications_raw['size'] = system_size
outputfilename = f"fluid_sim_replications_raw{system_size}.csv"

fluid_sim_replications_raw.to_csv( OUTPUT_DIR/ outputfilename,index=False,sep=',',encoding='utf-8')

alarm()

---

Manual iterations of running the code file will produce the following files within the output directory

Fluid/
│
└── output/
    │
    ├── fluid_sim_replications_raw4.csv
    ├── fluid_sim_replications_raw12.csv
    ├── fluid_sim_replications_raw24.csv
    ├── fluid_sim_replications_raw36.csv
    ├── fluid_sim_replications_raw72.csv
    └── fluid_sim_replications_raw124.csv


---------------------------------------

RUN SIMULATION (2) -- Manuscript_Fluid_Simulation_Visuals_v0001.py

1. To generate the .png files for the output folder, you can either use the pre-populated outputs for luid_sim_replications_rawX.csv, in which case you can open and run the code directly, or first complete the simulation code above for all system sizes.        


2. The code file provides additional .png files to the output file directory:


├── fluid/
│   │
    ├── output/
  
          
3. A single run of the code file will produce the following files within the output directory in a matter of seconds:


Fluids/
│
└── output/
    │
    ├── fluid_sim_replications_absolute4.png
    ├── fluid_sim_replications_absolute12.png
    ├── fluid_sim_replications_absolute24.png
    ├── fluid_sim_replications_absolute36.png
    ├── fluid_sim_replications_absolute72.png
    └── fluid_sim_replications_absolute124.png

    ├── simplified_fluid_sim_summary.png
    ├── simplified_fluid_sim_summary_abs.png
    └── simplified_fluid_sim_summary_apndx.png



COMPUTATIONAL ENVIRONMENT

The code was executed on the following system:

	Operating system: Microsoft Windows 11 Enterprise (Version 10.0.26200)
	System architecture: x64-based PC
	CPU: Intel(R) Core(TM) Ultra 9 285H (16 cores, 16 logical processors)
	RAM: 68 GB
	Python version: 3.13.5
	Environment: Anaconda (conda)

A complete specification of the Anaconda environment is provided below: 

name: base
channels:
  - defaults
  - conda-forge
dependencies:
  - _anaconda_depends=2025.06=py313_mkl_2
  - aiobotocore=2.19.0=py313haa95532_0
  - aiohappyeyeballs=2.4.4=py313haa95532_0
  - aiohttp=3.11.10=py313h827c3e9_0
  - aioitertools=0.7.1=pyhd3eb1b0_0
  - aiosignal=1.2.0=pyhd3eb1b0_0
  - alabaster=0.7.16=py313haa95532_0
  - altair=5.5.0=py313haa95532_0
  - anaconda-anon-usage=0.7.1=py313hfc23b7f_100
  - anaconda-auth=0.8.6=py313haa95532_0
  - anaconda-catalogs=0.2.0=py313haa95532_2
  - anaconda-cli-base=0.5.2=py313haa95532_0
  - anaconda-client=1.13.0=py313haa95532_1
  - anaconda-navigator=2.6.6=py313haa95532_2
  - anaconda-project=0.11.1=py313haa95532_1
  - anaconda_powershell_prompt=1.1.0=haa95532_1
  - anaconda_prompt=1.1.0=haa95532_1
  - annotated-types=0.6.0=py313haa95532_0
  - anyio=4.7.0=py313haa95532_0
  - appdirs=1.4.4=pyhd3eb1b0_0
  - archspec=0.2.3=pyhd3eb1b0_0
  - argon2-cffi=21.3.0=pyhd3eb1b0_0
  - argon2-cffi-bindings=21.2.0=py313h827c3e9_1
  - arrow=1.3.0=py313haa95532_0
  - arrow-cpp=19.0.0=h33d5241_2
  - astroid=3.3.8=py313haa95532_0
  - astropy=7.0.0=py313h827c3e9_0
  - astropy-iers-data=0.2025.1.13.0.34.51=py313haa95532_0
  - asttokens=3.0.0=py313haa95532_0
  - async-lru=2.0.4=py313haa95532_0
  - asyncssh=2.17.0=py313haa95532_0
  - atomicwrites=1.4.0=py_0
  - attrs=24.3.0=py313haa95532_0
  - automat=24.8.1=py313haa95532_0
  - autopep8=2.0.4=pyhd3eb1b0_0
  - aws-c-auth=0.6.19=h2bbff1b_0
  - aws-c-cal=0.5.20=h2bbff1b_0
  - aws-c-common=0.8.5=h2bbff1b_0
  - aws-c-compression=0.2.16=h2bbff1b_0
  - aws-c-event-stream=0.2.15=hd77b12b_0
  - aws-c-http=0.6.25=h2bbff1b_0
  - aws-c-io=0.13.10=h2bbff1b_0
  - aws-c-mqtt=0.7.13=h2bbff1b_0
  - aws-c-s3=0.1.51=h2bbff1b_0
  - aws-c-sdkutils=0.1.6=h2bbff1b_0
  - aws-checksums=0.1.13=h2bbff1b_0
  - aws-crt-cpp=0.18.16=hd77b12b_0
  - aws-sdk-cpp=1.11.212=h6a15179_0
  - babel=2.16.0=py313haa95532_0
  - bcrypt=4.3.0=py313h636fa0f_0
  - beautifulsoup4=4.12.3=py313haa95532_0
  - binaryornot=0.4.4=pyhd3eb1b0_1
  - black=24.10.0=py313haa95532_0
  - blas=1.0=mkl
  - bleach=6.2.0=py313haa95532_0
  - blinker=1.9.0=py313haa95532_0
  - blosc=1.21.3=h6c2663c_0
  - bokeh=3.6.2=py313haa95532_0
  - boltons=24.1.0=py313haa95532_0
  - boost-cpp=1.82.0=h59b6b97_2
  - botocore=1.36.3=py313haa95532_0
  - bottleneck=1.4.2=py313h2cb717b_0
  - brotli-python=1.0.9=py313h5da7b33_9
  - bzip2=1.0.8=h2bbff1b_6
  - c-ares=1.19.1=h2bbff1b_0
  - c-blosc2=2.17.1=h0eb4811_0
  - ca-certificates=2025.11.12=h4c7d964_0
  - cachetools=5.5.1=py313haa95532_0
  - certifi=2025.11.12=pyhd8ed1ab_0
  - cffi=1.17.1=py313h827c3e9_1
  - chardet=4.0.0=py313haa95532_1003
  - charset-normalizer=3.3.2=pyhd3eb1b0_0
  - click=8.1.8=py313haa95532_0
  - cloudpickle=3.0.0=py313haa95532_0
  - colorama=0.4.6=py313haa95532_0
  - colorcet=3.1.0=py313haa95532_0
  - comm=0.2.1=py313haa95532_0
  - conda=25.7.0=py313hfa70ccb_0
  - conda-anaconda-telemetry=0.1.2=py313haa95532_1
  - conda-anaconda-tos=0.2.0=py313haa95532_0
  - conda-build=25.5.0=py313hcfce1f1_0
  - conda-content-trust=0.2.0=py313haa95532_1
  - conda-index=0.6.1=py313haa95532_0
  - conda-libmamba-solver=25.4.0=pyhd3eb1b0_0
  - conda-pack=0.7.1=py313haa95532_0
  - conda-package-handling=2.4.0=py313haa95532_0
  - conda-package-streaming=0.11.0=py313haa95532_0
  - conda-repo-cli=1.0.165=py313haa95532_0
  - conda-token=0.6.0=pyhd3eb1b0_0
  - constantly=23.10.4=py313haa95532_0
  - contourpy=1.3.1=py313h214f63a_0
  - cookiecutter=1.7.3=pyhd3eb1b0_0
  - cpp-expected=1.1.0=h214f63a_0
  - cryptography=44.0.1=py313hbd6ee87_0
  - cssselect=1.2.0=py313haa95532_0
  - curl=8.12.1=h51539b2_0
  - cycler=0.11.0=pyhd3eb1b0_0
  - cytoolz=1.0.1=py313h827c3e9_0
  - dask=2025.2.0=py313haa95532_0
  - dask-core=2025.2.0=py313haa95532_0
  - dask-expr=2.0.0=py313haa95532_0
  - datashader=0.18.0=py313haa95532_0
  - debugpy=1.8.11=py313h5da7b33_0
  - decorator=5.1.1=pyhd3eb1b0_0
  - defusedxml=0.7.1=pyhd3eb1b0_0
  - deprecated=1.2.13=py313haa95532_0
  - diff-match-patch=20200713=pyhd3eb1b0_0
  - dill=0.3.8=py313haa95532_0
  - distributed=2025.2.0=py313haa95532_0
  - distro=1.9.0=py313haa95532_0
  - docstring-to-markdown=0.11=py313haa95532_0
  - docutils=0.21.2=py313haa95532_0
  - et_xmlfile=1.1.0=py313haa95532_1
  - evalidate=2.0.3=py313haa95532_0
  - executing=0.8.3=pyhd3eb1b0_0
  - expat=2.7.1=h8ddb27b_0
  - filelock=3.17.0=py313haa95532_0
  - flake8=7.1.1=py313haa95532_0
  - flask=3.1.0=py313haa95532_0
  - fmt=9.1.0=h6d14046_1
  - fonttools=4.55.3=py313h827c3e9_0
  - freeglut=3.4.0=h8a1e904_1
  - freetype=2.13.3=h0620614_0
  - frozendict=2.4.2=py313haa95532_0
  - frozenlist=1.5.0=py313h827c3e9_0
  - fsspec=2025.3.2=py313h4442805_0
  - gflags=2.2.2=hd77b12b_1
  - gitdb=4.0.7=pyhd3eb1b0_0
  - gitpython=3.1.43=py313haa95532_0
  - glog=0.5.0=hd77b12b_1
  - gmp=6.3.0=h537511b_0
  - gmpy2=2.2.1=py313h827c3e9_0
  - greenlet=3.1.1=py313h5da7b33_0
  - h11=0.16.0=py313haa95532_0
  - h5py=3.12.1=py313h535c9fb_1
  - hdf5=1.14.5=ha36df97_2
  - heapdict=1.0.1=pyhd3eb1b0_0
  - holoviews=1.20.2=py313haa95532_0
  - httpcore=1.0.9=py313haa95532_0
  - httpx=0.28.1=py313haa95532_0
  - hvplot=0.11.3=py313haa95532_0
  - hyperlink=21.0.0=pyhd3eb1b0_0
  - icc_rt=2022.1.0=h6049295_2
  - icu=73.1=h6c2663c_0
  - idna=3.7=py313haa95532_0
  - imageio=2.37.0=py313haa95532_0
  - imagesize=1.4.1=py313haa95532_0
  - imbalanced-learn=0.13.0=py313haa95532_0
  - importlib-metadata=8.5.0=py313haa95532_0
  - incremental=24.7.2=pyhd3eb1b0_0
  - inflection=0.5.1=py313haa95532_1
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - intake=2.0.7=py313haa95532_0
  - intel-openmp=2023.1.0=h59b6b97_46320
  - intervaltree=3.1.0=pyhd3eb1b0_0
  - ipykernel=6.29.5=py313haa95532_1
  - ipython=8.30.0=py313haa95532_0
  - ipywidgets=8.1.5=py313haa95532_0
  - isort=6.0.1=py313haa95532_0
  - itemadapter=0.3.0=pyhd3eb1b0_0
  - itemloaders=1.3.2=py313haa95532_0
  - itsdangerous=2.2.0=py313haa95532_0
  - jaraco.classes=3.2.1=pyhd3eb1b0_0
  - jaraco.context=6.0.0=py313haa95532_0
  - jaraco.functools=4.1.0=py313haa95532_0
  - jedi=0.19.2=py313haa95532_0
  - jellyfish=1.1.3=py313h8ecf97c_0
  - jinja2=3.1.6=py313haa95532_0
  - jinja2-time=0.2.0=pyhd3eb1b0_3
  - jmespath=1.0.1=py313haa95532_0
  - joblib=1.4.2=py313haa95532_0
  - jpeg=9e=h827c3e9_3
  - json5=0.9.25=py313haa95532_0
  - jsonpatch=1.33=py313haa95532_1
  - jsonpointer=2.1=pyhd3eb1b0_0
  - jsonschema=4.23.0=py313haa95532_0
  - jsonschema-specifications=2023.7.1=py313haa95532_0
  - jupyter=1.1.1=py313haa95532_0
  - jupyter-lsp=2.2.5=py313haa95532_0
  - jupyter_client=8.6.3=py313haa95532_0
  - jupyter_console=6.6.3=py313haa95532_1
  - jupyter_core=5.7.2=py313haa95532_0
  - jupyter_events=0.12.0=py313haa95532_0
  - jupyter_server=2.15.0=py313haa95532_0
  - jupyter_server_terminals=0.5.3=py313haa95532_0
  - jupyterlab=4.3.4=py313haa95532_0
  - jupyterlab-variableinspector=3.2.4=py313haa95532_0
  - jupyterlab_pygments=0.3.0=py313haa95532_0
  - jupyterlab_server=2.27.3=py313haa95532_0
  - jupyterlab_widgets=3.0.13=py313haa95532_0
  - keyring=25.6.0=py313haa95532_0
  - kiwisolver=1.4.8=py313h5da7b33_0
  - krb5=1.20.1=h5b6d351_0
  - lazy_loader=0.4=py313haa95532_0
  - lcms2=2.16=h62be587_1
  - lerc=4.0.0=h5da7b33_0
  - libabseil=20250127.0=cxx17_h52369b4_0
  - libarchive=3.7.7=h9243413_0
  - libboost=1.82.0=h3399ecb_2
  - libbrotlicommon=1.0.9=h827c3e9_9
  - libbrotlidec=1.0.9=h827c3e9_9
  - libbrotlienc=1.0.9=h827c3e9_9
  - libclang=14.0.6=default_hb5a9fac_2
  - libclang13=14.0.6=default_h8e68704_2
  - libcurl=8.12.1=h9da9810_0
  - libdeflate=1.22=h5bf469e_0
  - libevent=2.1.12=h56d1f94_1
  - libffi=3.4.4=hd77b12b_1
  - libgrpc=1.71.0=hf4237ab_0
  - libiconv=1.16=h2bbff1b_3
  - liblief=0.16.4=h585ebfc_0
  - libmamba=2.0.5=hcd6fe79_1
  - libmambapy=2.0.5=py313h214f63a_1
  - libmpdec=4.0.0=h827c3e9_0
  - libpng=1.6.39=h8cc25b3_0
  - libpq=17.4=h70ee33d_0
  - libprotobuf=5.29.3=hac4c8cb_0
  - libre2-11=2024.07.02=h5da7b33_0
  - libsodium=1.0.18=h62dcd97_0
  - libsolv=0.7.30=hf2fb9eb_1
  - libspatialindex=1.9.3=h6c2663c_0
  - libssh2=1.11.1=h2addb87_0
  - libthrift=0.15.0=h4364b78_2
  - libtiff=4.7.0=h404307b_0
  - libwebp-base=1.3.2=h3d04722_1
  - libxml2=2.13.8=h866ff63_0
  - libxslt=1.1.41=h0739af5_0
  - linkify-it-py=2.0.0=py313haa95532_0
  - llvmlite=0.44.0=py313h8b1c7eb_1
  - locket=1.0.0=py313haa95532_0
  - lxml=5.3.0=py313h395c83e_1
  - lz4=4.3.2=py313h827c3e9_1
  - lz4-c=1.9.4=h2bbff1b_1
  - lzo=2.10=he774522_2
  - m2-msys2-runtime=2.5.0.17080.65c939c=3
  - m2-patch=2.7.5=2
  - markdown=3.8=py313haa95532_0
  - markdown-it-py=2.2.0=py313haa95532_1
  - markupsafe=3.0.2=py313h827c3e9_0
  - matplotlib=3.10.0=py313haa95532_1
  - matplotlib-base=3.10.0=py313h7aa5d4e_1
  - matplotlib-inline=0.1.6=py313haa95532_0
  - mbedtls=3.5.1=h5da7b33_1
  - mccabe=0.7.0=pyhd3eb1b0_0
  - mdit-py-plugins=0.3.0=py313haa95532_0
  - mdurl=0.1.0=py313haa95532_0
  - menuinst=2.2.0=py313h5da7b33_1
  - mistune=3.1.2=py313haa95532_0
  - mkl=2023.1.0=h6b88ed4_46358
  - mkl-service=2.4.0=py313h827c3e9_2
  - mkl_fft=1.3.11=py313h827c3e9_0
  - mkl_random=1.2.8=py313hce38976_0
  - more-itertools=10.3.0=py313haa95532_0
  - mpc=1.3.1=h827c3e9_0
  - mpfr=4.2.1=h56c3642_0
  - mpmath=1.3.0=py313haa95532_0
  - msgpack-python=1.0.3=py313h214f63a_0
  - msys2-conda-epoch=20160418=1
  - multidict=6.1.0=py313h827c3e9_0
  - multipledispatch=0.6.0=py313haa95532_0
  - mypy=1.14.1=py313h827c3e9_0
  - mypy_extensions=1.0.0=py313haa95532_0
  - narwhals=1.31.0=py313haa95532_1
  - navigator-updater=0.5.1=py313haa95532_0
  - nbclient=0.10.2=py313haa95532_0
  - nbconvert=7.16.6=py313haa95532_0
  - nbconvert-core=7.16.6=py313haa95532_0
  - nbconvert-pandoc=7.16.6=py313haa95532_0
  - nbformat=5.10.4=py313haa95532_0
  - nest-asyncio=1.6.0=py313haa95532_0
  - networkx=3.4.2=py313haa95532_0
  - nlohmann_json=3.11.2=h6c2663c_0
  - nltk=3.9.1=py313hea850e4_0
  - notebook=7.3.2=py313haa95532_1
  - notebook-shim=0.2.4=py313haa95532_0
  - numba=0.61.0=py313h5da7b33_1
  - numexpr=2.10.1=py313h4cd664f_0
  - numpy=2.1.3=py313he6dc315_0
  - numpy-base=2.1.3=py313h6011491_0
  - numpydoc=1.7.0=py313haa95532_0
  - openjpeg=2.5.2=h9b5d1b5_1
  - openpyxl=3.1.5=py313h827c3e9_1
  - openssl=3.1.0=hcfcfb64_3
  - orc=2.1.1=hd1c1d5c_0
  - overrides=7.4.0=py313haa95532_0
  - packaging=24.2=py313haa95532_0
  - pandas=2.2.3=py313h5da7b33_0
  - pandoc=2.12=haa95532_3
  - pandocfilters=1.5.0=pyhd3eb1b0_0
  - panel=1.7.0=py313haa95532_0
  - param=2.2.0=py313haa95532_0
  - parsel=1.8.1=py313haa95532_0
  - parso=0.8.4=py313haa95532_0
  - partd=1.4.2=py313haa95532_0
  - pathspec=0.10.3=py313haa95532_0
  - patsy=1.0.1=py313haa95532_0
  - pcre2=10.42=h0ff8eda_1
  - pexpect=4.8.0=pyhd3eb1b0_3
  - pickleshare=0.7.5=pyhd3eb1b0_1003
  - pillow=11.1.0=py313hea0d53e_1
  - pip=25.1=pyhc872135_2
  - pkce=1.0.3=py313haa95532_0
  - pkginfo=1.12.0=py313haa95532_0
  - platformdirs=4.3.7=py313haa95532_0
  - plotly=5.24.1=py313h4442805_1
  - pluggy=1.5.0=py313haa95532_0
  - ply=3.11=py313haa95532_1
  - poyo=0.5.0=pyhd3eb1b0_0
  - prometheus_client=0.21.1=py313haa95532_0
  - prompt-toolkit=3.0.43=py313haa95532_0
  - prompt_toolkit=3.0.43=hd3eb1b0_0
  - propcache=0.3.1=py313h827c3e9_0
  - protego=0.4.0=py313haa95532_0
  - protobuf=5.29.3=py313h5da7b33_0
  - psutil=5.9.0=py313h827c3e9_1
  - ptyprocess=0.7.0=pyhd3eb1b0_2
  - pure_eval=0.2.2=pyhd3eb1b0_0
  - py-cpuinfo=9.0.0=py313haa95532_0
  - py-lief=0.16.4=py313h585ebfc_0
  - pyarrow=19.0.0=py313h5da7b33_1
  - pyasn1=0.4.8=pyhd3eb1b0_0
  - pyasn1-modules=0.2.8=py_0
  - pybind11-abi=5=hd3eb1b0_0
  - pycodestyle=2.12.1=py313haa95532_0
  - pycosat=0.6.6=py313h827c3e9_2
  - pycparser=2.21=pyhd3eb1b0_0
  - pyct=0.5.0=py313haa95532_0
  - pycurl=7.45.6=py313h51539b2_0
  - pydantic=2.10.3=py313haa95532_0
  - pydantic-core=2.27.1=py313h636fa0f_0
  - pydantic-settings=2.6.1=py313haa95532_0
  - pydispatcher=2.0.5=py313haa95532_3
  - pydocstyle=6.3.0=py313haa95532_0
  - pyerfa=2.0.1.5=py313h827c3e9_0
  - pyflakes=3.2.0=py313haa95532_0
  - pygithub=2.4.0=py313haa95532_0
  - pygments=2.19.1=py313haa95532_0
  - pyjwt=2.10.1=py313haa95532_0
  - pylint=3.3.5=py313haa95532_0
  - pylint-venv=3.0.3=py313haa95532_0
  - pyls-spyder=0.4.0=pyhd3eb1b0_0
  - pynacl=1.5.0=py313h7edc060_1
  - pyodbc=5.2.0=py313h5da7b33_0
  - pyopenssl=25.0.0=py313hb6ff9d5_0
  - pyparsing=3.2.0=py313haa95532_0
  - pyqt=5.15.10=py313h5da7b33_1
  - pyqt5-sip=12.13.0=py313h827c3e9_1
  - pyqtwebengine=5.15.10=py313h5da7b33_1
  - pysocks=1.7.1=py313haa95532_0
  - pytables=3.10.2=py313h0217527_2
  - pytest=8.3.4=py313haa95532_0
  - python=3.13.5=h286a616_100_cp313
  - python-dateutil=2.9.0post0=py313haa95532_2
  - python-dotenv=1.1.0=py313haa95532_0
  - python-fastjsonschema=2.20.0=py313haa95532_0
  - python-json-logger=3.2.1=py313haa95532_0
  - python-libarchive-c=5.1=pyhd3eb1b0_0
  - python-lmdb=1.6.2=py313h5da7b33_0
  - python-lsp-black=2.0.0=py313haa95532_1
  - python-lsp-jsonrpc=1.1.2=pyhd3eb1b0_0
  - python-lsp-server=1.12.2=py313h4442805_0
  - python-slugify=5.0.2=pyhd3eb1b0_0
  - python-tzdata=2025.2=pyhd3eb1b0_0
  - python_abi=3.13=0_cp313
  - pytoolconfig=1.2.6=py313haa95532_0
  - pytz=2024.1=py313haa95532_0
  - pyuca=1.2=py313haa95532_1
  - pyviz_comms=3.0.2=py313haa95532_0
  - pywavelets=1.8.0=py313h827c3e9_0
  - pywin32=308=py313h5da7b33_0
  - pywin32-ctypes=0.2.2=py313haa95532_0
  - pywinpty=2.0.15=py313h72d21ff_0
  - pyyaml=6.0.2=py313h827c3e9_0
  - pyzmq=26.2.0=py313h5da7b33_0
  - qdarkstyle=3.2.3=pyhd3eb1b0_0
  - qstylizer=0.2.2=py313haa95532_0
  - qt-main=5.15.2=h19c9488_12
  - qt-webengine=5.15.9=h5bd16bc_7
  - qtawesome=1.4.0=py313haa95532_0
  - qtconsole=5.6.1=py313haa95532_1
  - qtpy=2.4.1=py313haa95532_0
  - queuelib=1.6.2=py313haa95532_0
  - rapidfuzz=3.12.1=py313h5da7b33_0
  - re2=2024.07.02=h214f63a_0
  - readchar=4.0.5=py313haa95532_0
  - referencing=0.30.2=py313haa95532_0
  - regex=2024.11.6=py313h827c3e9_0
  - reproc=14.2.4=hd77b12b_2
  - reproc-cpp=14.2.4=hd77b12b_2
  - requests=2.32.3=py313haa95532_1
  - requests-file=2.1.0=py313haa95532_0
  - requests-toolbelt=1.0.0=py313haa95532_0
  - rfc3339-validator=0.1.4=py313haa95532_0
  - rfc3986-validator=0.1.1=py313haa95532_0
  - rich=13.9.4=py313haa95532_0
  - roman-numerals-py=3.1.0=py313haa95532_0
  - rope=1.13.0=py313haa95532_0
  - rpds-py=0.22.3=py313h636fa0f_0
  - rtree=1.0.1=py313h2eaa2aa_0
  - ruamel.yaml=0.18.10=py313h827c3e9_0
  - ruamel.yaml.clib=0.2.12=py313h827c3e9_0
  - ruamel_yaml=0.17.21=py313h827c3e9_0
  - s3fs=2025.3.2=py313haa95532_0
  - scikit-image=0.25.0=py313h5da7b33_0
  - scikit-learn=1.6.1=py313h585ebfc_0
  - scipy=1.15.3=py313hde77213_0
  - scrapy=2.12.0=py313haa95532_1
  - seaborn=0.13.2=py313haa95532_3
  - semver=3.0.2=py313haa95532_1
  - send2trash=1.8.2=py313haa95532_1
  - service_identity=24.2.0=py313haa95532_0
  - setuptools=72.1.0=py313haa95532_0
  - shellingham=1.5.0=py313haa95532_0
  - simdjson=3.10.1=h214f63a_0
  - sip=6.7.12=py313h5da7b33_1
  - six=1.17.0=py313haa95532_0
  - sklearn-compat=0.1.3=py313haa95532_0
  - smmap=4.0.0=pyhd3eb1b0_0
  - snappy=1.2.1=hcdb6601_0
  - sniffio=1.3.0=py313haa95532_0
  - snowballstemmer=2.2.0=pyhd3eb1b0_0
  - sortedcontainers=2.4.0=pyhd3eb1b0_0
  - soupsieve=2.5=py313haa95532_0
  - spdlog=1.11.0=h59b6b97_0
  - sphinx=8.2.3=py313h827c3e9_0
  - sphinxcontrib-applehelp=2.0.0=pyhd3eb1b0_1
  - sphinxcontrib-devhelp=2.0.0=pyhd3eb1b0_0
  - sphinxcontrib-htmlhelp=2.1.0=pyhd3eb1b0_0
  - sphinxcontrib-jsmath=1.0.1=pyhd3eb1b0_0
  - sphinxcontrib-qthelp=2.0.0=pyhd3eb1b0_1
  - sphinxcontrib-serializinghtml=2.0.0=pyhd3eb1b0_0
  - spyder=6.0.7=py313haa95532_1
  - spyder-kernels=3.0.5=py313h4442805_0
  - sqlalchemy=2.0.39=py313h54f65d0_0
  - sqlite=3.45.3=h2bbff1b_0
  - stack_data=0.2.0=pyhd3eb1b0_0
  - statsmodels=0.14.4=py313h827c3e9_0
  - streamlit=1.45.1=py313haa95532_1
  - superqt=0.7.3=py313h4442805_0
  - sympy=1.13.3=py313haa95532_1
  - tabulate=0.9.0=py313haa95532_0
  - tbb=2021.8.0=h59b6b97_0
  - tblib=3.1.0=py313haa95532_0
  - tenacity=9.0.0=py313haa95532_0
  - terminado=0.17.1=py313haa95532_0
  - text-unidecode=1.3=pyhd3eb1b0_0
  - textdistance=4.6.3=py313h4442805_0
  - threadpoolctl=3.5.0=py313h4442805_0
  - three-merge=0.1.1=pyhd3eb1b0_0
  - tifffile=2025.2.18=py313haa95532_0
  - tinycss2=1.4.0=py313haa95532_0
  - tk=8.6.14=h5e9d12e_1
  - tldextract=5.1.2=py313haa95532_0
  - toml=0.10.2=pyhd3eb1b0_0
  - tomli=2.0.1=py313haa95532_1
  - tomlkit=0.13.2=py313haa95532_0
  - toolz=1.0.0=py313haa95532_0
  - tornado=6.5.1=py313h827c3e9_0
  - tqdm=4.67.1=py313h4442805_0
  - traitlets=5.14.3=py313haa95532_0
  - truststore=0.10.0=py313haa95532_0
  - twisted=24.11.0=py313haa95532_0
  - twisted-iocpsupport=1.0.2=py313h827c3e9_1
  - typer=0.9.0=py313haa95532_0
  - typing-extensions=4.12.2=py313haa95532_0
  - typing_extensions=4.12.2=py313haa95532_0
  - tzdata=2025b=h04d1e81_0
  - uc-micro-py=1.0.1=py313haa95532_0
  - ucrt=10.0.26100.0=h57928b3_0
  - ujson=5.10.0=py313h5da7b33_1
  - unidecode=1.3.8=py313haa95532_0
  - urllib3=2.3.0=py313haa95532_0
  - utf8proc=2.6.1=h2bbff1b_1
  - vc=14.42=haa95532_5
  - vs2015_runtime=14.42.34433=hbfb602d_5
  - w3lib=2.1.2=py313haa95532_0
  - watchdog=4.0.2=py313haa95532_0
  - wcwidth=0.2.5=pyhd3eb1b0_0
  - webencodings=0.5.1=py313haa95532_2
  - websocket-client=1.8.0=py313haa95532_0
  - werkzeug=3.1.3=py313haa95532_0
  - whatthepatch=1.0.2=py313haa95532_0
  - wheel=0.45.1=py313haa95532_0
  - widgetsnbextension=4.0.13=py313haa95532_0
  - win_inet_pton=1.1.0=py313haa95532_0
  - winpty=0.4.3=4
  - wrapt=1.17.0=py313h827c3e9_0
  - xarray=2025.4.0=py313haa95532_0
  - xlwings=0.32.1=py313haa95532_1
  - xyzservices=2022.9.0=py313haa95532_1
  - xz=5.6.4=h4754444_1
  - yaml=0.2.5=he774522_0
  - yaml-cpp=0.8.0=hd77b12b_1
  - yapf=0.40.2=py313haa95532_0
  - yarl=1.18.0=py313h827c3e9_0
  - zeromq=4.3.5=hd77b12b_0
  - zict=3.0.0=py313haa95532_0
  - zipp=3.21.0=py313haa95532_0
  - zlib=1.2.13=h8cc25b3_1
  - zlib-ng=2.0.7=h2bbff1b_0
  - zope=1.0=py313haa95532_1
  - zope.interface=7.1.1=py313h827c3e9_0
  - zstandard=0.23.0=py313h4fc1ca9_1
  - zstd=1.5.6=h8880b57_0
prefix: C:\Users\kraig.delana\AppData\Local\anaconda3

