Skip to content
This repository has been archived by the owner on Jun 9, 2021. It is now read-only.

Fixing Install Script Typo & adding Conda Install Support #63

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

mwidjaja1
Copy link

@mwidjaja1 mwidjaja1 commented Dec 11, 2020

Update

As of 02/02/2021, Apple has updated this copy of TensorFlow. I have created a Conda Environment File to make it easier to install TensorFlow to MiniForge (not Anaconda -- Anaconda is not ARM compatible). Instructions on how to do this are tentatively posted on: #153


Original PR

Hello there,

I'd like to propose this PR to address two issues:

  1. There is a typo right now where $virtual_env has two forms of capitalization in the installation script that's causing pip to crash during installation
  2. By removing the check for finding bin/activate for Python and being more clever with when we need to activate it (i.e. only when we're using a virtual env), we can make the installation script work for Conda/Miniforge installs. I also added documentation to Readme.md about how one can install Tensorflow on Conda if they'd like.

@mwidjaja1
Copy link
Author

mwidjaja1 commented Dec 11, 2020

Update

As of 02/02/2021, Apple has updated this copy of TensorFlow. I have created a Conda Environment File to make it easier to install TensorFlow to MiniForge (not Anaconda -- Anaconda is not ARM compatible). Instructions on how to do this are tentatively posted on: #153


Original Post

To install Tensorflow in a Conda-supported Python, DO NOT USE ANACONDA. Anaconda is not ARM supported. Use Miniforge which is noted in step 1.

  1. Install the Apple Silicon version of Miniforge from https://github.com/conda-forge/miniforge/#download
  2. [Optional] Create your own environment for TF with Python version 3.8
  3. Modify the install_venv.sh script in place where it is -- do not move it or rename it. Modify it with the contents of https://github.com/apple/tensorflow_macos/blob/793e0a7675ad66385f76248d8794eea966967974/scripts/install_venv.sh.
  4. Run the updated install_venv.sh script by running bash REPLACE_WITH_PATH_TO_SCRIPT --prompt. It will prompt you for a path to your virtual environment which you made using Miniforge. In my example below, the name of my Conda env is tensorflow and Miniforge is installed in my home directory.
bash scripts/install_venv.sh --prompt
Path to new or existing virtual environment [default: /Users/Matthew/tensorflow_macos_venv/]: /Users/Matthew/miniforge3/envs/tensorflow

###########################################################################

scripts/install_venv.sh will perform the following operations:
-> Install tensorflow_macos 0.1a1 into existing virtual environment /Users/Matthew/miniforge3/envs/tensorflow.
-> Install bundled binary wheels for numpy-1.18.5, grpcio-1.33.2, h5py-2.10.0, tensorflow_addons-0.11.2+mlcompute into /Users/Matthew/miniforge3/envs/tensorflow.


Confirm [y/N]? y

>> Installing and upgrading base packages.
Collecting pip==20.2.4
  Using cached pip-20.2.4-py2.py3-none-any.whl (1.5 MB)
Collecting wheel
  Using cached wheel-0.36.1-py2.py3-none-any.whl (34 kB)
Collecting setuptools
  Using cached setuptools-51.0.0-py3-none-any.whl (785 kB)
Collecting cached-property
  Using cached cached_property-1.5.2-py2.py3-none-any.whl (7.6 kB)
Collecting six
  Using cached six-1.15.0-py2.py3-none-any.whl (10 kB)
Installing collected packages: pip, wheel, setuptools, cached-property, six
  Attempting uninstall: pip
    Found existing installation: pip 20.2.4
    Uninstalling pip-20.2.4:
      Successfully uninstalled pip-20.2.4
  Attempting uninstall: wheel
    Found existing installation: wheel 0.36.1
    Uninstalling wheel-0.36.1:
      Successfully uninstalled wheel-0.36.1
  Attempting uninstall: setuptools
    Found existing installation: setuptools 51.0.0
    Uninstalling setuptools-51.0.0:
      Successfully uninstalled setuptools-51.0.0
  Attempting uninstall: cached-property
    Found existing installation: cached-property 1.5.2
    Uninstalling cached-property-1.5.2:
      Successfully uninstalled cached-property-1.5.2
  Attempting uninstall: six
    Found existing installation: six 1.15.0
    Uninstalling six-1.15.0:
      Successfully uninstalled six-1.15.0
Successfully installed cached-property-1.5.2 pip-20.2.4 setuptools-51.0.0 six-1.15.0 wheel-0.36.1
WARNING: You are using pip version 20.2.4; however, version 20.3.1 is available.
You should consider upgrading via the '/Users/Matthew/miniforge3/envs/tensorflow/bin/python3 -m pip install --upgrade pip' command.
>> Installing bundled binary dependencies.
>> Running: /Users/Matthew/miniforge3/envs/tensorflow/bin/python3 -m pip install --upgrade -t /Users/Matthew/miniforge3/envs/tensorflow/lib/python3.8/site-packages/ --no-dependencies --force /Users/Matthew/tensorflow_macos/scripts/arm64/numpy-1.18.5-cp38-cp38-macosx_11_0_arm64.whl
Processing ./scripts/arm64/numpy-1.18.5-cp38-cp38-macosx_11_0_arm64.whl
Installing collected packages: numpy
Successfully installed numpy-1.18.5
WARNING: You are using pip version 20.2.4; however, version 20.3.1 is available.
You should consider upgrading via the '/Users/Matthew/miniforge3/envs/tensorflow/bin/python3 -m pip install --upgrade pip' command.
>> Running: /Users/Matthew/miniforge3/envs/tensorflow/bin/python3 -m pip install --upgrade -t /Users/Matthew/miniforge3/envs/tensorflow/lib/python3.8/site-packages/ --no-dependencies --force /Users/Matthew/tensorflow_macos/scripts/arm64/grpcio-1.33.2-cp38-cp38-macosx_11_0_arm64.whl
Processing ./scripts/arm64/grpcio-1.33.2-cp38-cp38-macosx_11_0_arm64.whl
Installing collected packages: grpcio
Successfully installed grpcio-1.33.2
WARNING: You are using pip version 20.2.4; however, version 20.3.1 is available.
You should consider upgrading via the '/Users/Matthew/miniforge3/envs/tensorflow/bin/python3 -m pip install --upgrade pip' command.
>> Running: /Users/Matthew/miniforge3/envs/tensorflow/bin/python3 -m pip install --upgrade -t /Users/Matthew/miniforge3/envs/tensorflow/lib/python3.8/site-packages/ --no-dependencies --force /Users/Matthew/tensorflow_macos/scripts/arm64/h5py-2.10.0-cp38-cp38-macosx_11_0_arm64.whl
Processing ./scripts/arm64/h5py-2.10.0-cp38-cp38-macosx_11_0_arm64.whl
Installing collected packages: h5py
Successfully installed h5py-2.10.0
WARNING: You are using pip version 20.2.4; however, version 20.3.1 is available.
You should consider upgrading via the '/Users/Matthew/miniforge3/envs/tensorflow/bin/python3 -m pip install --upgrade pip' command.
>> Running: /Users/Matthew/miniforge3/envs/tensorflow/bin/python3 -m pip install --upgrade -t /Users/Matthew/miniforge3/envs/tensorflow/lib/python3.8/site-packages/ --no-dependencies --force /Users/Matthew/tensorflow_macos/scripts/arm64/tensorflow_addons-0.11.2+mlcompute-cp38-cp38-macosx_11_0_arm64.whl
Processing ./scripts/arm64/tensorflow_addons-0.11.2+mlcompute-cp38-cp38-macosx_11_0_arm64.whl
Installing collected packages: tensorflow-addons
Successfully installed tensorflow-addons-0.11.2
WARNING: You are using pip version 20.2.4; however, version 20.3.1 is available.
You should consider upgrading via the '/Users/Matthew/miniforge3/envs/tensorflow/bin/python3 -m pip install --upgrade pip' command.
>> Installing dependencies.
Collecting absl-py
  Using cached absl_py-0.11.0-py3-none-any.whl (127 kB)
Collecting astunparse
  Using cached astunparse-1.6.3-py2.py3-none-any.whl (12 kB)
Collecting flatbuffers
  Using cached flatbuffers-1.12-py2.py3-none-any.whl (15 kB)
Collecting gast
  Using cached gast-0.4.0-py3-none-any.whl (9.8 kB)
Collecting google_pasta
  Using cached google_pasta-0.2.0-py3-none-any.whl (57 kB)
Collecting keras_preprocessing
  Using cached Keras_Preprocessing-1.1.2-py2.py3-none-any.whl (42 kB)
Collecting opt_einsum
  Using cached opt_einsum-3.3.0-py3-none-any.whl (65 kB)
Collecting protobuf
  Using cached protobuf-3.14.0-py2.py3-none-any.whl (173 kB)
Collecting tensorflow_estimator
  Using cached tensorflow_estimator-2.3.0-py2.py3-none-any.whl (459 kB)
Processing /Users/Matthew/Library/Caches/pip/wheels/a0/16/9c/5473df82468f958445479c59e784896fa24f4a5fc024b0f501/termcolor-1.1.0-py3-none-any.whl
Collecting typing_extensions
  Using cached typing_extensions-3.7.4.3-py3-none-any.whl (22 kB)
Processing /Users/Matthew/Library/Caches/pip/wheels/5f/fd/9e/b6cf5890494cb8ef0b5eaff72e5d55a70fb56316007d6dfe73/wrapt-1.12.1-py3-none-any.whl
Requirement already satisfied: wheel in /Users/Matthew/miniforge3/envs/tensorflow/lib/python3.8/site-packages (0.36.1)
Collecting tensorboard
  Using cached tensorboard-2.4.0-py3-none-any.whl (10.6 MB)
Collecting typeguard
  Using cached typeguard-2.10.0-py3-none-any.whl (16 kB)
Requirement already satisfied: six in /Users/Matthew/miniforge3/envs/tensorflow/lib/python3.8/site-packages (from absl-py) (1.15.0)
Requirement already satisfied: numpy>=1.9.1 in /Users/Matthew/miniforge3/envs/tensorflow/lib/python3.8/site-packages (from keras_preprocessing) (1.19.4)
Collecting werkzeug>=0.11.15
  Using cached Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)
Requirement already satisfied: grpcio>=1.24.3 in /Users/Matthew/miniforge3/envs/tensorflow/lib/python3.8/site-packages (from tensorboard) (1.33.2)
Requirement already satisfied: setuptools>=41.0.0 in /Users/Matthew/miniforge3/envs/tensorflow/lib/python3.8/site-packages (from tensorboard) (51.0.0)
Collecting google-auth-oauthlib<0.5,>=0.4.1
  Using cached google_auth_oauthlib-0.4.2-py2.py3-none-any.whl (18 kB)
Collecting markdown>=2.6.8
  Using cached Markdown-3.3.3-py3-none-any.whl (96 kB)
Collecting tensorboard-plugin-wit>=1.6.0
  Using cached tensorboard_plugin_wit-1.7.0-py3-none-any.whl (779 kB)
Collecting requests<3,>=2.21.0
  Using cached requests-2.25.0-py2.py3-none-any.whl (61 kB)
Collecting google-auth<2,>=1.6.3
  Using cached google_auth-1.23.0-py2.py3-none-any.whl (114 kB)
Collecting requests-oauthlib>=0.7.0
  Using cached requests_oauthlib-1.3.0-py2.py3-none-any.whl (23 kB)
Collecting idna<3,>=2.5
  Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
Collecting chardet<4,>=3.0.2
  Using cached chardet-3.0.4-py2.py3-none-any.whl (133 kB)
Requirement already satisfied: certifi>=2017.4.17 in /Users/Matthew/miniforge3/envs/tensorflow/lib/python3.8/site-packages (from requests<3,>=2.21.0->tensorboard) (2020.12.5)
Collecting urllib3<1.27,>=1.21.1
  Using cached urllib3-1.26.2-py2.py3-none-any.whl (136 kB)
Collecting rsa<5,>=3.1.4; python_version >= "3.5"
  Using cached rsa-4.6-py3-none-any.whl (47 kB)
Collecting pyasn1-modules>=0.2.1
  Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)
Collecting cachetools<5.0,>=2.0.0
  Downloading cachetools-4.2.0-py3-none-any.whl (12 kB)
Collecting oauthlib>=3.0.0
  Using cached oauthlib-3.1.0-py2.py3-none-any.whl (147 kB)
Collecting pyasn1>=0.1.3
  Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
Installing collected packages: absl-py, astunparse, flatbuffers, gast, google-pasta, keras-preprocessing, opt-einsum, protobuf, tensorflow-estimator, termcolor, typing-extensions, wrapt, werkzeug, pyasn1, rsa, pyasn1-modules, cachetools, google-auth, oauthlib, idna, chardet, urllib3, requests, requests-oauthlib, google-auth-oauthlib, markdown, tensorboard-plugin-wit, tensorboard, typeguard
Successfully installed absl-py-0.11.0 astunparse-1.6.3 cachetools-4.2.0 chardet-3.0.4 flatbuffers-1.12 gast-0.4.0 google-auth-1.23.0 google-auth-oauthlib-0.4.2 google-pasta-0.2.0 idna-2.10 keras-preprocessing-1.1.2 markdown-3.3.3 oauthlib-3.1.0 opt-einsum-3.3.0 protobuf-3.14.0 pyasn1-0.4.8 pyasn1-modules-0.2.8 requests-2.25.0 requests-oauthlib-1.3.0 rsa-4.6 tensorboard-2.4.0 tensorboard-plugin-wit-1.7.0 tensorflow-estimator-2.3.0 termcolor-1.1.0 typeguard-2.10.0 typing-extensions-3.7.4.3 urllib3-1.26.2 werkzeug-1.0.1 wrapt-1.12.1
WARNING: You are using pip version 20.2.4; however, version 20.3.1 is available.
You should consider upgrading via the '/Users/Matthew/miniforge3/envs/tensorflow/bin/python3 -m pip install --upgrade pip' command.
Collecting ipython
  Using cached ipython-7.19.0-py3-none-any.whl (784 kB)
Collecting jedi>=0.10
  Using cached jedi-0.17.2-py2.py3-none-any.whl (1.4 MB)
Collecting traitlets>=4.2
  Using cached traitlets-5.0.5-py3-none-any.whl (100 kB)
Collecting pygments
  Downloading Pygments-2.7.3-py3-none-any.whl (950 kB)
     |████████████████████████████████| 950 kB 3.3 MB/s 
Collecting pickleshare
  Using cached pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)
Collecting pexpect>4.3; sys_platform != "win32"
  Using cached pexpect-4.8.0-py2.py3-none-any.whl (59 kB)
Collecting prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0
  Using cached prompt_toolkit-3.0.8-py3-none-any.whl (355 kB)
Collecting backcall
  Using cached backcall-0.2.0-py2.py3-none-any.whl (11 kB)
Collecting appnope; sys_platform == "darwin"
  Downloading appnope-0.1.2-py2.py3-none-any.whl (4.3 kB)
Collecting decorator
  Using cached decorator-4.4.2-py2.py3-none-any.whl (9.2 kB)
Requirement already satisfied: setuptools>=18.5 in /Users/Matthew/miniforge3/envs/tensorflow/lib/python3.8/site-packages (from ipython) (51.0.0)
Collecting parso<0.8.0,>=0.7.0
  Using cached parso-0.7.1-py2.py3-none-any.whl (109 kB)
Collecting ipython-genutils
  Using cached ipython_genutils-0.2.0-py2.py3-none-any.whl (26 kB)
Collecting ptyprocess>=0.5
  Using cached ptyprocess-0.6.0-py2.py3-none-any.whl (39 kB)
Collecting wcwidth
  Using cached wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)
Installing collected packages: parso, jedi, ipython-genutils, traitlets, pygments, pickleshare, ptyprocess, pexpect, wcwidth, prompt-toolkit, backcall, appnope, decorator, ipython
Successfully installed appnope-0.1.2 backcall-0.2.0 decorator-4.4.2 ipython-7.19.0 ipython-genutils-0.2.0 jedi-0.17.2 parso-0.7.1 pexpect-4.8.0 pickleshare-0.7.5 prompt-toolkit-3.0.8 ptyprocess-0.6.0 pygments-2.7.3 traitlets-5.0.5 wcwidth-0.2.5
WARNING: You are using pip version 20.2.4; however, version 20.3.1 is available.
You should consider upgrading via the '/Users/Matthew/miniforge3/envs/tensorflow/bin/python3 -m pip install --upgrade pip' command.
Processing ./scripts/arm64/tensorflow_macos-0.1a1-cp38-cp38-macosx_11_0_arm64.whl
Installing collected packages: tensorflow-macos
Successfully installed tensorflow-macos-0.1a1
WARNING: You are using pip version 20.2.4; however, version 20.3.1 is available.
You should consider upgrading via the '/Users/Matthew/miniforge3/envs/tensorflow/bin/python3 -m pip install --upgrade pip' command.
Collecting pip
  Downloading pip-20.3.1-py2.py3-none-any.whl (1.5 MB)
     |████████████████████████████████| 1.5 MB 3.3 MB/s 
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 20.2.4
    Uninstalling pip-20.2.4:
      Successfully uninstalled pip-20.2.4
Successfully installed pip-20.3.1
###########################################################################

TensorFlow and TensorFlow Addons with ML Compute for macOS 11.0 successfully installed.

To begin, activate the virtual environment:

   . "/Users/Matthew/miniforge3/envs/tensorflow/bin/activate" 

@mwidjaja1
Copy link
Author

Hey is there anything I can do to help out with this? Would be happy to help if there's something you'd like me to clean up or improve. Thanks!

@hoytak
Copy link
Collaborator

hoytak commented Dec 21, 2020

Hello @mwidjaja1, thank you for the fantastic work here! We're figuring out how to include this in some way in our next release. As you can imagine, there are non-engineering matters to resolve around taking contributions, but we're figuring it out.

@mwidjaja1
Copy link
Author

Gotcha! I'd be willing to sign anything away if needed if that's legally required 🙂. I don't know if it helps either but I am an Apple Public Beta Tester so I have those agreements 'signed off on' technically speaking already.

@shixnya
Copy link

shixnya commented Dec 23, 2020

Hi @mwidjaja1,

Thank you for the fantastic work!
Just a very minor note. The last message by the script seems just a little confusing when you use conda because 'activate' script does not exist in the specified folder. Perhaps a better way is separate those cases using a variable (e.g. $is_conda) and show a different message. If you also use this variable consistently when two cases are separated, this approach may also make the entire script a little more transparent.

I'm talking about this message.
To begin, activate the virtual environment:
. "/Users/Matthew/miniforge3/envs/tensorflow/bin/activate"

@heathentw
Copy link

@shixnya hi, I suffer from not having an 'activate' in the envs/tf/bin, which cause me failed to the installation, do you know what a 'activate' if for or how can I get it right? thanks.

@shixnya
Copy link

shixnya commented Jan 23, 2021

Hi @heathentw

You are right. The issue that I raised is that 'activate' script will not be generated in Conda environment because it's an option of the 'conda' command.

You can run this instead of activate script.
% conda activate envname
(envname should be a valid name of an environment. In your case, I assume it is tf.)

@mwidjaja1
Copy link
Author

Thank you @shixnya for that update. @hoytak, could you make sure this recommendation is integrated into the final script? Thanks!

@pietmlr
Copy link

pietmlr commented Jan 24, 2021

@mwidjaja1 I tried installing using your steps shown above, but unfortunately I get an error when running the installation script:
ERROR: Package resource directory /Users/pietmuller/Downloads/tensorflow_macos-master/scripts/arm64 does not exist. Please ensure that this script is located inside the unpacked archive.

Im sure it's a dumb mistake of mine, but yea...

@mwidjaja1
Copy link
Author

@redmlr You should not be renaming any directories or moving any files around, which your terminal output makes it sound like you did.

Both your script and a directory named arm64 should be within the directory named tensorflow_macos. I don't know how the -master suffix and scripts folder came into play but it should not have.

3. Download the archive file from the [releases](https://github.com/apple/tensorflow_macos/releases)
4. Run `scripts/install_venv.sh --prompt` and at the prompt, provide the path to your environment's directory. For example: `~/miniforge3/envs/tensorflow` if your env name is `tensorflow` and you installed Miniforge ot your home directory.

#### Notes/Users/Matthew/miniforge3/envs/tensorflow

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#### Notes/Users/Matthew/miniforge3/envs/tensorflow
#### Notes

1. Download a Python 3.8 for Apple Silicon ARM from https://github.com/conda-forge/miniforge/#download and install it.
2. [Optional] Create a Python 3.8 Conda Environment for TensorFlow
3. Download the archive file from the [releases](https://github.com/apple/tensorflow_macos/releases)
4. Run `scripts/install_venv.sh --prompt` and at the prompt, provide the path to your environment's directory. For example: `~/miniforge3/envs/tensorflow` if your env name is `tensorflow` and you installed Miniforge ot your home directory.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
4. Run `scripts/install_venv.sh --prompt` and at the prompt, provide the path to your environment's directory. For example: `~/miniforge3/envs/tensorflow` if your env name is `tensorflow` and you installed Miniforge ot your home directory.
4. Run `scripts/install_venv.sh --prompt` and at the prompt, provide the path to your environment's directory. For example: `~/miniforge3/envs/tensorflow` if your env name is `tensorflow` and you installed Miniforge in your home directory.

@rajivshah3
Copy link

Both your script and a directory named arm64 should be within the directory named tensorflow_macos. I don't know how the -master suffix and scripts folder came into play but it should not have.

I think the -master part comes from downloading a ZIP of the repo (green "Code" button -> "Download ZIP") instead of cloning it with git

@pietmlr
Copy link

pietmlr commented Jan 25, 2021

@redmlr You should not be renaming any directories or moving any files around, which your terminal output makes it sound like you did.

Both your script and a directory named arm64 should be within the directory named tensorflow_macos. I don't know how the -master suffix and scripts folder came into play but it should not have.

Yes, I downloaded the wrong one.. Even though I now downloaded the release package, the installation script outputs that my miniforge environment is not an virtual environment..
ERROR: /Users/pietmuller/miniforge3/envs/tensorflow_m1 does not seem to be a virtual environment. Please specify a new directory or an existing Python 3.8 virtual environment.
I'm very sorry that I'm struggling with this installation so long.. thanks for helping

@mwidjaja1
Copy link
Author

@redmlr You have to modify the script with my proposed changes in place, without moving the script or anything. I don't think you fully modified it.

@pietmlr
Copy link

pietmlr commented Jan 25, 2021

Hello there,

I'd like to propose this PR to address two issues:

  1. There is a typo right now where $virtual_env has two forms of capitalization in the installation script that's causing pip to crash during installation
  2. By removing the check for finding bin/activate for Python and being more clever with when we need to activate it (i.e. only when we're using a virtual env), we can make the installation script work for Conda/Miniforge installs. I also added documentation to Readme.md about how one can install Tensorflow on Conda if they'd like.

@mwidjaja1 do you mean these?

@pietmlr
Copy link

pietmlr commented Jan 25, 2021

Hello there,

I'd like to propose this PR to address two issues:

  1. There is a typo right now where $virtual_env has two forms of capitalization in the installation script that's causing pip to crash during installation
  2. By removing the check for finding bin/activate for Python and being more clever with when we need to activate it (i.e. only when we're using a virtual env), we can make the installation script work for Conda/Miniforge installs. I also added documentation to Readme.md about how one can install Tensorflow on Conda if they'd like.

@redmlr You have to modify the script with my proposed changes in place, without moving the script or anything. I don't think you fully modified it.

Thank you for your help @mwidjaja1, I appreciate it!
I already applied your fixed a few hours ago and it works definitely, but not in PyCharm, it seems that it doesn't accept this environment..

@mwidjaja1
Copy link
Author

@redmlr I don't use PyCharm anymore but I can tell you there IS a way to connect a Conda/Miniforge env to PyCharm and I was able to do it last year. That should be a Googling task outside the scope of this particular MR though -- I can't help you too much more in that area. Glad you got it working at least outside of PyCharm for now!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants