From 38a810b9cce078d549993cfe868c390e41a4d9f7 Mon Sep 17 00:00:00 2001 From: Daniel Hupp Date: Tue, 8 Oct 2024 15:08:07 +0200 Subject: [PATCH 1/5] fix python version and environment --- .github/workflows/pre-commit.yml | 6 +- .github/workflows/pytest.yml | 8 +- .gitignore | 4 +- README.md | 3 +- engine/cdo_table.py | 4 +- engine/init.py | 2 +- engine/performance_check.py | 2 +- engine/perturb.py | 2 +- engine/run_ensemble.py | 4 +- engine/select_members.py | 4 +- engine/stats.py | 4 +- requirements/environment.yml | 216 ++++++++++++++--------------- requirements/requirements.yml | 2 +- setup_env.sh | 2 +- tests/helpers.py | 2 +- util/model_output_parser.py | 2 +- visualize/performance_meta_data.py | 4 +- 17 files changed, 133 insertions(+), 138 deletions(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 1c968868..45300dc7 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -19,16 +19,16 @@ jobs: - name: Set up Python uses: actions/setup-python@v2 with: - python-version: 3.11.0 + python-version: 3.10.8 - uses: conda-incubator/setup-miniconda@v2 with: miniconda-version: "latest" channels: conda-forge channel-priority: flexible show-channel-urls: true - - name: Create env from unpinned reqs + - name: Create env from pinned environment run: | - conda env create --name dev_env --file requirements/requirements.yml + conda env create --name dev_env --file requirements/environment.yml - name: Install pre-commit hooks run: | conda run --name dev_env pre-commit install-hooks diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index d3d2bd58..bf63a01f 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -19,18 +19,18 @@ jobs: - name: Set up Python uses: actions/setup-python@v2 with: - python-version: 3.11.0 + python-version: 3.10.8 - uses: conda-incubator/setup-miniconda@v2 with: miniconda-version: "latest" channels: conda-forge channel-priority: flexible show-channel-urls: true - - name: Create dev env from unpinned reqs + - name: Create env from pinned environment run: | - conda env create --name dev_env --file requirements/requirements.yml + ./setup_env.sh -n probtest - name: Run Pytest env: TZ: Europe/Zurich run: | - conda run --name dev_env pytest -v -s --cov --cov-report=term tests/ + conda run --name probtest pytest -v -s --cov --cov-report=term tests/ diff --git a/.gitignore b/.gitignore index 46ee5c08..21dbc3d8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ .idea* -.vscode/* -!.vscode/settings.json +.vscode *pycache* *.swp *.pdf @@ -9,6 +8,7 @@ *.nc .coverage coverage.xml +miniconda # output from unittest test_stats.csv diff --git a/README.md b/README.md index 721ba838..9ee007f3 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,8 @@ setup scripts: ```console ./setup_miniconda.sh -./setup_env.sh -n probtest -u +source miniconda/bin/activate +./setup_env.sh ``` #### Initialize probtest diff --git a/engine/cdo_table.py b/engine/cdo_table.py index 332b3a9c..95d0d113 100644 --- a/engine/cdo_table.py +++ b/engine/cdo_table.py @@ -45,7 +45,7 @@ def rel_diff_stats( horizontal_dims, xarray_ds, fill_value_key, -): # pylint: disable=unused-argument +): # pylint: disable=unused-argument, too-many-positional-arguments dims = xarray_ds[varname].dims dataarray = xarray_ds[varname] time = xarray_ds[time_dim].values @@ -125,7 +125,7 @@ def cdo_table( perturbed_model_output_dir, cdo_table_file, file_specification, -): +): # pylint: disable=too-many-positional-arguments # TODO: A single perturbed run provides enough data to make proper statistics. # refactor cdo_table interface to reflect that if len(member_num) == 1: diff --git a/engine/init.py b/engine/init.py index d0c75dbd..220afdf1 100644 --- a/engine/init.py +++ b/engine/init.py @@ -96,7 +96,7 @@ def init( timing_current, timing_reference, append_time, -): +): # pylint: disable=too-many-positional-arguments template_partition = str(template_name).rpartition("/") env = Environment( loader=FileSystemLoader(template_partition[0]), undefined=StrictUndefined diff --git a/engine/performance_check.py b/engine/performance_check.py index 9b884ec0..f95e3501 100644 --- a/engine/performance_check.py +++ b/engine/performance_check.py @@ -50,7 +50,7 @@ def performance_check( measurement_uncertainty, tolerance_factor, new_reference_threshold, -): +): # pylint: disable=too-many-positional-arguments ttcur = TimingTree.from_json(timing_current) ttref = TimingTree.from_json(timing_reference) diff --git a/engine/perturb.py b/engine/perturb.py index 8007f0b9..0e1b2cff 100644 --- a/engine/perturb.py +++ b/engine/perturb.py @@ -100,7 +100,7 @@ def perturb( variable_names, perturb_amplitude, copy_all_files, -): # pylint: disable=unused-argument +): # pylint: disable=unused-argument, too-many-positional-arguments processed_member_num = process_member_num(member_num) diff --git a/engine/run_ensemble.py b/engine/run_ensemble.py index 0f602ec5..30fea8c0 100644 --- a/engine/run_ensemble.py +++ b/engine/run_ensemble.py @@ -71,7 +71,7 @@ def prepare_perturbed_run_script( rhs_new, rhs_old, seed, -): +): # pylint: disable=too-many-positional-arguments with open(runscript, "r", encoding="utf-8") as in_file: with open(perturbed_runscript, "w", encoding="utf-8") as out_file: @@ -222,7 +222,7 @@ def run_ensemble( lhs, rhs_new, rhs_old, -): +): # pylint: disable=too-many-positional-arguments perturbed_run_dir = perturbed_run_dir if perturbed_run_dir else run_dir os.chdir(run_dir) job_list = [] diff --git a/engine/select_members.py b/engine/select_members.py index 0ed94f74..51d0be10 100644 --- a/engine/select_members.py +++ b/engine/select_members.py @@ -33,7 +33,7 @@ def find_members_and_factor_validating_for_all_stats_files( min_factor, max_factor, iterations, -): +): # pylint: disable=too-many-positional-arguments members = list(range(1, total_member_num + 1)) @@ -263,7 +263,7 @@ def select_members( min_factor, max_factor, iterations, -): # pylint: disable=unused-argument +): # pylint: disable=unused-argument, too-many-positional-arguments if min_member_num > max_member_num: logger.error( diff --git a/engine/stats.py b/engine/stats.py index 3c80f819..5e6274b0 100644 --- a/engine/stats.py +++ b/engine/stats.py @@ -41,7 +41,7 @@ def process_member( file_id, stats_file_name, file_specification, -): +): # pylint: disable=too-many-positional-arguments if m_num == 0: input_dir = model_output_dir m_id = "ref" @@ -110,7 +110,7 @@ def stats( member_type, perturbed_model_output_dir, file_specification, -): +): # pylint: disable=too-many-positional-arguments file_specification = file_specification[0] # can't store dicts as defaults in click assert isinstance(file_specification, dict), "must be dict" diff --git a/requirements/environment.yml b/requirements/environment.yml index d6b44578..e2c0ac8d 100644 --- a/requirements/environment.yml +++ b/requirements/environment.yml @@ -7,36 +7,37 @@ dependencies: - _openmp_mutex=4.5 - alsa-lib=1.2.12 - annotated-types=0.7.0 - - astroid=3.2.4 + - astroid=3.3.5 - asttokens=2.4.1 - - attr=2.5.1 - - black=24.4.2 + - black=24.8.0 - blosc=1.21.6 - brotli=1.1.0 - brotli-bin=1.1.0 - bzip2=1.0.8 - - c-ares=1.32.3 - - ca-certificates=2024.7.4 + - c-ares=1.33.1 + - ca-certificates=2024.8.30 - cairo=1.18.0 - - certifi=2024.7.4 - - cffi=1.16.0 + - certifi=2024.8.30 + - cffi=1.17.1 - cfgv=3.3.1 - cftime=1.6.4 - click=8.1.7 - codespell=2.3.0 - colorama=0.4.6 - - contourpy=1.2.1 + - contourpy=1.3.0 - cycler=0.12.1 + - cyrus-sasl=2.1.27 - dbus=1.13.6 - decorator=5.1.1 - - dill=0.3.8 + - dill=0.3.9 - distlib=0.3.8 - docutils=0.21.2 + - double-conversion=3.3.0 - exceptiongroup=1.2.2 - - executing=2.0.1 - - expat=2.6.2 - - filelock=3.15.4 - - flake8=7.1.0 + - executing=2.1.0 + - expat=2.6.3 + - filelock=3.16.1 + - flake8=7.1.1 - flake8-black=0.3.6 - font-ttf-dejavu-sans-mono=2.37 - font-ttf-inconsolata=3.000 @@ -45,115 +46,103 @@ dependencies: - fontconfig=2.14.2 - fonts-conda-ecosystem=1 - fonts-conda-forge=1 - - fonttools=4.53.1 + - fonttools=4.54.1 - freetype=2.12.1 - - gettext=0.22.5 - - gettext-tools=0.22.5 - - glib=2.80.3 - - glib-tools=2.80.3 - graphite2=1.3.13 - - gst-plugins-base=1.24.6 - - gstreamer=1.24.6 - harfbuzz=9.0.0 - hdf4=4.2.15 - - hdf5=1.14.3 - - icu=73.2 - - identify=2.6.0 - - importlib-metadata=4.13.0 + - hdf5=1.14.4 + - icu=75.1 + - identify=2.6.1 + - importlib-metadata=8.5.0 - iniconfig=2.0.0 - ipdb=0.13.13 - - ipython=8.26.0 + - ipython=8.28.0 - isort=5.13.2 - jedi=0.19.1 - jinja2=3.1.4 - keyutils=1.6.1 - - kiwisolver=1.4.5 + - kiwisolver=1.4.7 - krb5=1.21.3 - - lame=3.100 - lcms2=2.16 - - ld_impl_linux-64=2.40 + - ld_impl_linux-64=2.43 - lerc=4.0.0 - libaec=1.1.3 - - libasprintf=0.22.5 - - libasprintf-devel=0.22.5 - libblas=3.9.0 - libbrotlicommon=1.1.0 - libbrotlidec=1.1.0 - libbrotlienc=1.1.0 - - libcap=2.69 - libcblas=3.9.0 - - libclang-cpp15=15.0.7 - - libclang13=18.1.8 + - libclang-cpp19.1=19.1.0 + - libclang13=19.1.0 - libcups=2.3.3 - - libcurl=8.9.0 - - libdeflate=1.20 + - libcurl=8.10.1 + - libdeflate=1.22 + - libdrm=2.4.123 - libedit=3.1.20191231 + - libegl=1.7.0 - libev=4.33 - - libevent=2.1.12 - - libexpat=2.6.2 + - libexpat=2.6.3 - libffi=3.4.2 - - libflac=1.4.3 + - libgcc=14.1.0 - libgcc-ng=14.1.0 - - libgcrypt=1.11.0 - - libgettextpo=0.22.5 - - libgettextpo-devel=0.22.5 + - libgfortran=14.1.0 - libgfortran-ng=14.1.0 - libgfortran5=14.1.0 - - libglib=2.80.3 + - libgl=1.7.0 + - libglib=2.82.1 + - libglvnd=1.7.0 + - libglx=1.7.0 - libgomp=14.1.0 - - libgpg-error=1.50 - libiconv=1.17 - libjpeg-turbo=3.0.0 - liblapack=3.9.0 - - libllvm15=15.0.7 - - libllvm18=18.1.8 + - libllvm19=19.1.1 - libnetcdf=4.9.2 - libnghttp2=1.58.0 - libnsl=2.0.1 - - libogg=1.3.5 + - libntlm=1.4 - libopenblas=0.3.27 - - libopus=1.3.1 - - libpng=1.6.43 - - libpq=16.3 - - libsndfile=1.2.2 - - libsqlite=3.46.0 + - libopengl=1.7.0 + - libpciaccess=0.18 + - libpng=1.6.44 + - libpq=17.0 + - libsqlite=3.46.1 - libssh2=1.11.0 + - libstdcxx=14.1.0 - libstdcxx-ng=14.1.0 - - libsystemd0=255 - - libtiff=4.6.0 + - libtiff=4.7.0 - libuuid=2.38.1 - - libvorbis=1.3.7 - libwebp-base=1.4.0 - - libxcb=1.16 + - libxcb=1.17.0 - libxcrypt=4.4.36 - libxkbcommon=1.7.0 - libxml2=2.12.7 - - libzip=1.10.1 + - libxslt=1.1.39 + - libzip=1.11.1 - libzlib=1.3.1 - lz4-c=1.9.4 - markdown-it-py=3.0.0 - - markupsafe=2.1.5 - - matplotlib=3.9.1 - - matplotlib-base=3.9.1 + - markupsafe=3.0.0 + - matplotlib=3.9.2 + - matplotlib-base=3.9.2 - matplotlib-inline=0.1.7 - mccabe=0.7.0 - mdurl=0.1.2 - - mpg123=1.32.6 - munkres=1.1.4 - - mypy=1.11.0 + - mypy=1.11.2 - mypy_extensions=1.0.0 - - mysql-common=8.3.0 - - mysql-libs=8.3.0 + - mysql-common=9.0.1 + - mysql-libs=9.0.1 - ncurses=6.5 - netcdf4=1.7.1 - nodeenv=1.9.1 - - nspr=4.35 - - nss=3.102 - - numpy=2.0.1 + - numpy=2.1.2 - openjpeg=2.5.2 - - openssl=3.3.1 + - openldap=2.6.8 + - openssl=3.3.2 - packaging=24.1 - - pandas=2.2.2 + - pandas=2.2.3 - parso=0.8.4 - pathlib=1.0.1 - pathspec=0.12.1 @@ -161,97 +150,100 @@ dependencies: - pexpect=4.9.0 - pickleshare=0.7.5 - pillow=10.4.0 - - pip=24.1.2 + - pip=24.2 - pixman=0.43.2 - - platformdirs=4.2.2 + - platformdirs=4.3.6 - pluggy=1.5.0 - - ply=3.11 - - pre-commit=3.7.1 - - pre-commit-hooks=4.6.0 - - prompt-toolkit=3.0.47 + - pre-commit=4.0.0 + - pre-commit-hooks=5.0.0 + - prompt-toolkit=3.0.48 - psutil=6.0.0 - pthread-stubs=0.4 - ptyprocess=0.7.0 - - pulseaudio-client=17.0 - pure_eval=0.2.3 - - pycodestyle=2.12.0 + - pycodestyle=2.12.1 - pycparser=2.22 - - pydantic=2.8.2 - - pydantic-core=2.20.1 + - pydantic=2.9.2 + - pydantic-core=2.23.4 - pydocstyle=6.3.0 - pyflakes=3.2.0 - pygments=2.18.0 - - pylint=3.2.6 - - pyparsing=3.1.2 - - pyqt=5.15.9 - - pyqt5-sip=12.12.2 - - pytest=8.3.2 - - python=3.12.4 + - pylint=3.3.1 + - pyparsing=3.1.4 + - pyside6=6.7.3 + - pytest=8.3.3 + - python=3.10.8 - python-dateutil=2.9.0 - - python-tzdata=2024.1 - - python_abi=3.12 + - python-tzdata=2024.2 + - python_abi=3.10 - pytoolconfig=1.2.5 - pytz=2024.1 - - pyyaml=6.0.1 + - pyyaml=6.0.2 - qhull=2020.2 - - qt-main=5.15.8 + - qt6-main=6.7.3 - readline=8.2 - - regex=2024.7.24 - - rich=13.7.1 + - regex=2024.9.11 + - rich=13.9.2 - rope=1.13.0 - rstcheck=6.2.4 - rstcheck-core=1.2.1 - ruamel.yaml=0.18.6 - ruamel.yaml.clib=0.2.8 - - scipy=1.14.0 - - setuptools=71.0.4 + - scipy=1.14.1 + - setuptools=75.1.0 - shellingham=1.5.4 - - sip=6.7.12 - six=1.16.0 - snappy=1.2.1 - snowballstemmer=2.2.0 - stack_data=0.6.2 - tk=8.6.13 - toml=0.10.2 - - tomli=2.0.1 - - tomlkit=0.13.0 + - tomli=2.0.2 + - tomlkit=0.13.2 - tornado=6.4.1 - traitlets=5.14.3 - - typer=0.12.3 - - typer-slim=0.12.3 - - typer-slim-standard=0.12.3 + - typer=0.12.5 + - typer-slim=0.12.5 + - typer-slim-standard=0.12.5 - typing-extensions=4.12.2 - typing_extensions=4.12.2 - - tzdata=2024a + - tzdata=2024b - ukkonen=1.0.1 - - virtualenv=20.26.3 + - unicodedata2=15.1.0 + - virtualenv=20.26.6 + - wayland=1.23.1 - wcwidth=0.2.13 - - xarray=2024.7.0 + - wheel=0.44.0 + - xarray=2024.9.0 - xcb-util=0.4.1 + - xcb-util-cursor=0.1.5 - xcb-util-image=0.4.0 - xcb-util-keysyms=0.4.1 - xcb-util-renderutil=0.3.10 - xcb-util-wm=0.4.2 - - xkeyboard-config=2.42 - - xorg-kbproto=1.0.7 + - xkeyboard-config=2.43 - xorg-libice=1.1.1 - xorg-libsm=1.2.4 - - xorg-libx11=1.8.9 + - xorg-libx11=1.8.10 - xorg-libxau=1.0.11 - - xorg-libxdmcp=1.1.3 - - xorg-libxext=1.3.4 + - xorg-libxcomposite=0.4.6 + - xorg-libxcursor=1.2.2 + - xorg-libxdamage=1.1.6 + - xorg-libxdmcp=1.1.5 + - xorg-libxext=1.3.6 + - xorg-libxfixes=6.0.1 + - xorg-libxi=1.8.2 + - xorg-libxrandr=1.5.4 - xorg-libxrender=0.9.11 + - xorg-libxtst=1.2.5 - xorg-libxxf86vm=1.1.5 - - xorg-renderproto=0.11.1 - - xorg-xextproto=7.3.0 - - xorg-xf86vidmodeproto=2.3.1 - - xorg-xproto=7.0.31 + - xorg-xorgproto=2024.1 - xz=5.2.6 - yaml=0.2.5 - - zipp=3.19.2 + - zipp=3.20.2 - zlib=1.3.1 - zstd=1.5.6 - pip: - - coverage==7.6.0 + - coverage==7.6.1 - flake8-pyproject==1.2.3 - pytest-cov==5.0.0 diff --git a/requirements/requirements.yml b/requirements/requirements.yml index 0853414d..a982d2e7 100644 --- a/requirements/requirements.yml +++ b/requirements/requirements.yml @@ -2,7 +2,7 @@ channels: - conda-forge - defaults dependencies: - - python>=3.10 + - python==3.10.8 - pip>=22.3 # runtime - click>=7.1.2 diff --git a/setup_env.sh b/setup_env.sh index ae0fe804..32886b4b 100755 --- a/setup_env.sh +++ b/setup_env.sh @@ -13,7 +13,7 @@ DEFAULT_ENV_NAME="probtest" # Default options ENV_NAME="${DEFAULT_ENV_NAME}" -PYVERSION=3.11 +PYVERSION=3.10 PINNED=true EXPORT=false CONDA=conda diff --git a/tests/helpers.py b/tests/helpers.py index 8ffce196..a982f37b 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -205,7 +205,7 @@ def run_select_members_cli( iterations=50, max_factor=50.0, log=None, -): +): # pylint: disable=too-many-positional-arguments args = [ "--stats-file-name", stats_file_name, diff --git a/util/model_output_parser.py b/util/model_output_parser.py index 5218d378..882fb1af 100644 --- a/util/model_output_parser.py +++ b/util/model_output_parser.py @@ -107,7 +107,7 @@ def __get_variables(data, time_dim, horizontal_dims): def dataframe_from_ncfile( file_id, filename, varname, time_dim, horizontal_dims, xarray_ds, fill_value_key -): +): # pylint: disable=too-many-positional-arguments statistics = statistics_over_horizontal_dim( xarray_ds[varname], horizontal_dims, diff --git a/visualize/performance_meta_data.py b/visualize/performance_meta_data.py index 4ea5bc27..9a5bee7d 100644 --- a/visualize/performance_meta_data.py +++ b/visualize/performance_meta_data.py @@ -23,7 +23,9 @@ from util.visualize_util import create_figure -def plot_meta_data_timer(timer, data, revs, ax, experiment_name, savedir): +def plot_meta_data_timer( + timer, data, revs, ax, experiment_name, savedir +): # pylint: disable=too-many-positional-arguments fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(10, 6)) # Selecting and plotting the data From c13564cd9194527ea975defeb2018e20348d5088 Mon Sep 17 00:00:00 2001 From: Daniel Hupp Date: Tue, 8 Oct 2024 15:30:54 +0200 Subject: [PATCH 2/5] pin python version even more --- requirements/environment.yml | 1 - setup_env.sh | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements/environment.yml b/requirements/environment.yml index e2c0ac8d..c4070ab1 100644 --- a/requirements/environment.yml +++ b/requirements/environment.yml @@ -115,7 +115,6 @@ dependencies: - libuuid=2.38.1 - libwebp-base=1.4.0 - libxcb=1.17.0 - - libxcrypt=4.4.36 - libxkbcommon=1.7.0 - libxml2=2.12.7 - libxslt=1.1.39 diff --git a/setup_env.sh b/setup_env.sh index 32886b4b..a2020bfb 100755 --- a/setup_env.sh +++ b/setup_env.sh @@ -13,7 +13,7 @@ DEFAULT_ENV_NAME="probtest" # Default options ENV_NAME="${DEFAULT_ENV_NAME}" -PYVERSION=3.10 +PYVERSION=3.10.8 PINNED=true EXPORT=false CONDA=conda From 03d7c86e0edad53ab85e4b19d3315a1af0d39c20 Mon Sep 17 00:00:00 2001 From: Daniel Hupp Date: Tue, 8 Oct 2024 15:47:05 +0200 Subject: [PATCH 3/5] improve readme --- README.md | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 9ee007f3..2679990d 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,32 @@ Visualize the performance database generated with `performance`. Even though probtest is used exclusively with ICON at the moment, it does not contain any information about the model or its directory structure. This makes it very flexible and applicable to any circumstance (e.g. usable by Buildbot, Jenkins and human users alike). However, it also requires a lot of information about the model and the data to be processed upon invocation. Since a typical probtest usage involves multiple commands (e.g. run-ensemble -> stats -> tolerance -> check) this leads to a lot of redundancy in the invocation. Therefore, probtest can read commonly used input variables (e.g. the model output directory, the experiment name, the name of the submit script, ...) from a configuration file in json format. To further ease the process, these configuration files can be created from templates using the `init` command. A template for ICON is contained in this repository in the `templates` subdirectory. +### Setup conda + +All requirements for using probtest can be easily installed with conda using the +setup scripts. + +For setting up conda you use +```console +./setup_miniconda.sh -u +``` +which will modify your `.bashrc`, or you can use +```console +./setup_miniconda.sh +source miniconda/bin/activate +``` +which requires the source minconda. + +The pinned requiremnts can be installed by +```console +./setup_env.sh +``` +The unpinned requirements and updating the environment can be done by +```console +./setup_env.sh -u -e +``` + + ### The init command This command sets up the configuration file. For more help on the command line arguments for `init`, see @@ -102,14 +128,8 @@ Objective: Run an `exp_name` ICON experiment with an test build and check if the output of the test is within a perturbed ensemble of the reference build. This is in particular used to validate a GPU build against a CPU reference. -All requirements for using probtest can be easily installed with conda using the -setup scripts: - -```console -./setup_miniconda.sh -source miniconda/bin/activate -./setup_env.sh -``` +You need to have setup a proper environment, for example as described in the +section [Setup conda](#setup-conda). #### Initialize probtest Once set up, probtest can generate the config file according to your needs. From 96b9cd1c091a1a67131711ee5ea05fe7223b9752 Mon Sep 17 00:00:00 2001 From: Daniel Hupp Date: Tue, 8 Oct 2024 15:51:23 +0200 Subject: [PATCH 4/5] fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2679990d..8ebf6483 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ source miniconda/bin/activate ``` which requires the source minconda. -The pinned requiremnts can be installed by +The pinned requirements can be installed by ```console ./setup_env.sh ``` From b093d472c1448d08d0ffbbd595321b8668cfe478 Mon Sep 17 00:00:00 2001 From: Daniel Hupp Date: Tue, 8 Oct 2024 16:02:15 +0200 Subject: [PATCH 5/5] fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8ebf6483..7b3a07f9 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ which will modify your `.bashrc`, or you can use ./setup_miniconda.sh source miniconda/bin/activate ``` -which requires the source minconda. +which requires to source minconda. The pinned requirements can be installed by ```console