BYU-PRISM / Seeq

Hybrid (Physics-Informed) Machine Learning
MIT License
45 stars 5 forks source link

Trying to install SysID from github, not working in SDL #2

Closed KjellRSeeq closed 2 years ago

KjellRSeeq commented 2 years ago

A user at one of our customers would like to explore the SysID package shown in our Seeq gallery launched this week. I am trying to follow the install steps, screenshot below, and I am running into an issue at Step 3. image-2021-10-15-15-59-59-529

I am able to create a new SDL project, run the terminal, run step 2 command. Then I shutdown that terminal and open a new one, per the video, and enter the command on step 3 - however, I get the following error when running that command (I also note that in my new terminal, I do not have the (base) prepending the command line. I am an Admin on the server.

image-2021-10-15-16-01-36-938

Is there something else I need to do in the project? My colleagues at Seeq tell me that we cannot use conda installs in Seeq Data Lab projects, therefore the Add On will not run for all users. Is there another way to install this package??

I'm following the steps from here: https://github.com/BYU-PRISM/Seeq/blob/main/README.md

jnhopark commented 2 years ago

We are going to remove some dependency from the installation that makes it simpler and easier to install the Add-On in a couple of days. We will also check the compatibility between SDL and conda, which did not cause a problem at our end. But, you can try the below steps to check the compatibility.

Creating the conda environment in SDL (Do this in SDL terminal)

  1. conda create --name "use any name"
  2. Type 'y' and press 'enter'
  3. Run conda init --all and restart the terminal
  4. Run conda install -c conda-forge slycot
  5. Run pip install seeq-sysid
  6. Upload developer_notebook.ipynb file to the Seeq Data Lab project.

Check if there is an error to confirm the compatibility between conda and sdl.

KjellRSeeq commented 2 years ago

Okay, I did per steps below. Showed screenshots of the progress. Full error message at step 5 in attached…but ran into the same error as I did previously on step 4.

From: Junho Park @.> Sent: Tuesday, October 19, 2021 1:08 PM To: BYU-PRISM/Seeq @.> Cc: Kjell Raemdonck @.>; Author @.> Subject: Re: [BYU-PRISM/Seeq] Trying to install SysID from github, not working in SDL (Issue #2)

We are going to remove some dependency from the installation that makes it simpler and easier to install the Add-On in a couple of days. We will also check the compatibility between SDL and conda, which did not a problem on our end. But, you can try the below steps to check the compatibility.

Creating the conda environment in SDL

  1. conda creat --name "use any name"

  2. Type 'y' and press 'enter' @.***

  3. Run conda init --all and restart the terminalrun @.***

  4. Run conda install -c conda-forge slycot @.***

  5. Run pip install seeq-sysid @.***

  6. Upload developer_notebook.ipynb file to the Seeq Data Lab project.

Check if there is an error to confirm the compatibility between conda and sdl.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHubhttps://github.com/BYU-PRISM/Seeq/issues/2#issuecomment-947026048, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AWEEAYJYKHWWAHDTQ2V3KMDUHW62HANCNFSM5GJVCTIA. Triage notifications on the go with GitHub Mobile for iOShttps://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Androidhttps://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

@.***:~$ pip install seeq-sysid Collecting seeq-sysid Downloading seeq_sysid-0.0.4-py3-none-any.whl (23 kB) Requirement already satisfied: ipywidgets in /opt/conda/lib/python3.8/site-packages (from seeq-sysid) (7.6.3) Requirement already satisfied: statsmodels<=0.12.2 in /opt/conda/lib/python3.8/site-packages (from seeq-sysid) (0.12.2) Requirement already satisfied: pandas in /opt/conda/lib/python3.8/site-packages (from seeq-sysid) (1.2.3) Requirement already satisfied: plotly in /opt/conda/lib/python3.8/site-packages (from seeq-sysid) (4.14.3) Requirement already satisfied: ipyvuetify in /opt/conda/lib/python3.8/site-packages (from seeq-sysid) (1.6.1) Requirement already satisfied: seeq in /opt/conda/lib/python3.8/site-packages (from seeq-sysid) (52.1.4.179.18) Requirement already satisfied: numpy in /opt/conda/lib/python3.8/site-packages (from seeq-sysid) (1.20.1) Collecting setuptools<=49.2.1 Downloading setuptools-49.2.1-py3-none-any.whl (789 kB) |████████████████████████████████| 789 kB 9.1 MB/s Collecting sippy-rcognita<=0.2.1 Downloading sippy-rcognita-0.2.1.tar.gz (30 kB) Collecting gekko<=1.0.1 Downloading gekko-1.0.1-py3-none-any.whl (12.4 MB) |████████████████████████████████| 12.4 MB 18.5 MB/s Collecting control<=0.9.0 Downloading control-0.9.0.tar.gz (339 kB) |████████████████████████████████| 339 kB 28.2 MB/s Requirement already satisfied: scipy in /opt/conda/lib/python3.8/site-packages (from control<=0.9.0->seeq-sysid) (1.6.0) Requirement already satisfied: matplotlib in /opt/conda/lib/python3.8/site-packages (from control<=0.9.0->seeq-sysid) (3.3.4) Collecting slycot Downloading slycot-0.4.0.0.tar.gz (1.5 MB) |████████████████████████████████| 1.5 MB 35.7 MB/s Installing build dependencies ... done Getting requirements to build wheel ... done Preparing wheel metadata ... done Collecting future Downloading future-0.18.2.tar.gz (829 kB) |████████████████████████████████| 829 kB 19.4 MB/s Collecting casadi Downloading casadi-3.5.5-cp38-none-manylinux1_x86_64.whl (34.2 MB) |████████████████████████████████| 34.2 MB 10.1 MB/s Requirement already satisfied: patsy>=0.5 in /opt/conda/lib/python3.8/site-packages (from statsmodels<=0.12.2->seeq-sysid)(0.5.1) Requirement already satisfied: python-dateutil>=2.7.3 in /opt/conda/lib/python3.8/site-packages (from pandas->seeq-sysid) (2.8.1) Requirement already satisfied: pytz>=2017.3 in /opt/conda/lib/python3.8/site-packages (from pandas->seeq-sysid) (2021.1) Requirement already satisfied: six in /opt/conda/lib/python3.8/site-packages (from patsy>=0.5->statsmodels<=0.12.2->seeq-sysid) (1.16.0) Requirement already satisfied: ipyvue<2,>=1.5 in /opt/conda/lib/python3.8/site-packages (from ipyvuetify->seeq-sysid) (1.5.0) Requirement already satisfied: ipython>=4.0.0 in /opt/conda/lib/python3.8/site-packages (from ipywidgets->seeq-sysid) (7.24.1) Requirement already satisfied: ipykernel>=4.5.1 in /opt/conda/lib/python3.8/site-packages (from ipywidgets->seeq-sysid) (5.5.5) Requirement already satisfied: traitlets>=4.3.1 in /opt/conda/lib/python3.8/site-packages (from ipywidgets->seeq-sysid) (5.0.5) Requirement already satisfied: widgetsnbextension~=3.5.0 in /opt/conda/lib/python3.8/site-packages (from ipywidgets->seeq-sysid) (3.5.1) Requirement already satisfied: jupyterlab-widgets>=1.0.0 in /opt/conda/lib/python3.8/site-packages (from ipywidgets->seeq-sysid) (1.0.0) Requirement already satisfied: nbformat>=4.2.0 in /opt/conda/lib/python3.8/site-packages (from ipywidgets->seeq-sysid) (5.1.3) Requirement already satisfied: tornado>=4.2 in /opt/conda/lib/python3.8/site-packages (from ipykernel>=4.5.1->ipywidgets->seeq-sysid) (6.1) Requirement already satisfied: jupyter-client in /opt/conda/lib/python3.8/site-packages (from ipykernel>=4.5.1->ipywidgets->seeq-sysid) (6.1.12) Requirement already satisfied: pickleshare in /opt/conda/lib/python3.8/site-packages (from ipython>=4.0.0->ipywidgets->seeq-sysid) (0.7.5) Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /opt/conda/lib/python3.8/site-packages (from ipython>=4.0.0->ipywidgets->seeq-sysid) (3.0.18) Requirement already satisfied: matplotlib-inline in /opt/conda/lib/python3.8/site-packages (from ipython>=4.0.0->ipywidgets->seeq-sysid) (0.1.2) Requirement already satisfied: backcall in /opt/conda/lib/python3.8/site-packages (from ipython>=4.0.0->ipywidgets->seeq-sysid) (0.2.0) Requirement already satisfied: pexpect>4.3 in /opt/conda/lib/python3.8/site-packages (from ipython>=4.0.0->ipywidgets->seeq-sysid) (4.8.0) Requirement already satisfied: jedi>=0.16 in /opt/conda/lib/python3.8/site-packages (from ipython>=4.0.0->ipywidgets->seeq-sysid) (0.18.0) Requirement already satisfied: decorator in /opt/conda/lib/python3.8/site-packages (from ipython>=4.0.0->ipywidgets->seeq-sysid) (5.0.9) Requirement already satisfied: pygments in /opt/conda/lib/python3.8/site-packages (from ipython>=4.0.0->ipywidgets->seeq-sysid) (2.9.0) Requirement already satisfied: parso<0.9.0,>=0.8.0 in /opt/conda/lib/python3.8/site-packages (from jedi>=0.16->ipython>=4.0.0->ipywidgets->seeq-sysid) (0.8.2) Requirement already satisfied: ipython-genutils in /opt/conda/lib/python3.8/site-packages (from nbformat>=4.2.0->ipywidgets->seeq-sysid) (0.2.0) Requirement already satisfied: jsonschema!=2.5.0,>=2.4 in /opt/conda/lib/python3.8/site-packages (from nbformat>=4.2.0->ipywidgets->seeq-sysid) (3.2.0) Requirement already satisfied: jupyter-core in /opt/conda/lib/python3.8/site-packages (from nbformat>=4.2.0->ipywidgets->seeq-sysid) (4.7.1) Requirement already satisfied: attrs>=17.4.0 in /opt/conda/lib/python3.8/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.2.0->ipywidgets->seeq-sysid) (21.2.0) Requirement already satisfied: pyrsistent>=0.14.0 in /opt/conda/lib/python3.8/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.2.0->ipywidgets->seeq-sysid) (0.17.3) Requirement already satisfied: ptyprocess>=0.5 in /opt/conda/lib/python3.8/site-packages (from pexpect>4.3->ipython>=4.0.0->ipywidgets->seeq-sysid) (0.7.0) Requirement already satisfied: wcwidth in /opt/conda/lib/python3.8/site-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=4.0.0->ipywidgets->seeq-sysid) (0.2.5) Requirement already satisfied: notebook>=4.4.1 in /opt/conda/lib/python3.8/site-packages (from widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (6.4.0) Requirement already satisfied: prometheus-client in /opt/conda/lib/python3.8/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (0.11.0) Requirement already satisfied: pyzmq>=17 in /opt/conda/lib/python3.8/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (22.1.0) Requirement already satisfied: Send2Trash>=1.5.0 in /opt/conda/lib/python3.8/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (1.5.0) Requirement already satisfied: terminado>=0.8.3 in /opt/conda/lib/python3.8/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (0.10.0) Requirement already satisfied: nbconvert in /opt/conda/lib/python3.8/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (5.5.0) Requirement already satisfied: argon2-cffi in /opt/conda/lib/python3.8/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (20.1.0) Requirement already satisfied: jinja2 in /opt/conda/lib/python3.8/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (3.0.1) Requirement already satisfied: cffi>=1.0.0 in /opt/conda/lib/python3.8/site-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (1.14.5) Requirement already satisfied: pycparser in /opt/conda/lib/python3.8/site-packages (from cffi>=1.0.0->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (2.20) Requirement already satisfied: MarkupSafe>=2.0 in /opt/conda/lib/python3.8/site-packages (from jinja2->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (2.0.1) Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.3 in /opt/conda/lib/python3.8/site-packages (from matplotlib->control<=0.9.0->seeq-sysid) (2.4.7) Requirement already satisfied: pillow>=6.2.0 in /opt/conda/lib/python3.8/site-packages (from matplotlib->control<=0.9.0->seeq-sysid) (8.2.0) Requirement already satisfied: cycler>=0.10 in /opt/conda/lib/python3.8/site-packages (from matplotlib->control<=0.9.0->seeq-sysid) (0.10.0) Requirement already satisfied: kiwisolver>=1.0.1 in /opt/conda/lib/python3.8/site-packages (from matplotlib->control<=0.9.0->seeq-sysid) (1.3.1) Requirement already satisfied: testpath in /opt/conda/lib/python3.8/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (0.5.0) Requirement already satisfied: mistune>=0.8.1 in /opt/conda/lib/python3.8/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (0.8.4) Requirement already satisfied: pandocfilters>=1.4.1 in /opt/conda/lib/python3.8/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (1.4.3) Requirement already satisfied: defusedxml in /opt/conda/lib/python3.8/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (0.7.1) Requirement already satisfied: entrypoints>=0.2.2 in /opt/conda/lib/python3.8/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (0.3) Requirement already satisfied: bleach in /opt/conda/lib/python3.8/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (3.3.0) Requirement already satisfied: webencodings in /opt/conda/lib/python3.8/site-packages (from bleach->nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (0.5.1) Requirement already satisfied: packaging in /opt/conda/lib/python3.8/site-packages (from bleach->nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->seeq-sysid) (20.9) Requirement already satisfied: retrying>=1.3.3 in /opt/conda/lib/python3.8/site-packages (from plotly->seeq-sysid) (1.3.3) Requirement already satisfied: requests>=2.21.0 in /opt/conda/lib/python3.8/site-packages (from seeq->seeq-sysid) (2.25.1) Requirement already satisfied: cryptography>=3.2 in /opt/conda/lib/python3.8/site-packages (from seeq->seeq-sysid) (3.4.4) Requirement already satisfied: beautifulsoup4>=4.8.0 in /opt/conda/lib/python3.8/site-packages (from seeq->seeq-sysid) (4.9.3) Requirement already satisfied: tzlocal>=2.0.0 in /opt/conda/lib/python3.8/site-packages (from seeq->seeq-sysid) (2.0.0) Requirement already satisfied: cron-descriptor>=1.2.24 in /opt/conda/lib/python3.8/site-packages (from seeq->seeq-sysid) (1.2.24) Requirement already satisfied: urllib3>=1.15.1 in /opt/conda/lib/python3.8/site-packages (from seeq->seeq-sysid) (1.26.4) Requirement already satisfied: Mako>=1.1.0 in /opt/conda/lib/python3.8/site-packages (from seeq->seeq-sysid) (1.1.4) Requirement already satisfied: certifi>=14.05.14 in /opt/conda/lib/python3.8/site-packages (from seeq->seeq-sysid) (2021.5.30) Requirement already satisfied: pyOpenSSL>=19.1.0 in /opt/conda/lib/python3.8/site-packages (from seeq->seeq-sysid) (20.0.1) Requirement already satisfied: Deprecated>=1.2.6 in /opt/conda/lib/python3.8/site-packages (from seeq->seeq-sysid) (1.2.6) Requirement already satisfied: recurrent>=0.4.0 in /opt/conda/lib/python3.8/site-packages (from seeq->seeq-sysid) (0.4.0) Requirement already satisfied: soupsieve>1.2 in /opt/conda/lib/python3.8/site-packages (from beautifulsoup4>=4.8.0->seeq->seeq-sysid) (2.0.1) Requirement already satisfied: wrapt<2,>=1.10 in /opt/conda/lib/python3.8/site-packages (from Deprecated>=1.2.6->seeq->seeq-sysid) (1.12.1) Requirement already satisfied: parsedatetime in /opt/conda/lib/python3.8/site-packages (from recurrent>=0.4.0->seeq->seeq-sysid) (2.6) Requirement already satisfied: chardet<5,>=3.0.2 in /opt/conda/lib/python3.8/site-packages (from requests>=2.21.0->seeq->seeq-sysid) (4.0.0) Requirement already satisfied: idna<3,>=2.5 in /opt/conda/lib/python3.8/site-packages (from requests>=2.21.0->seeq->seeq-sysid) (2.10) Building wheels for collected packages: control, sippy-rcognita, future, slycot Building wheel for control (setup.py) ... done Created wheel for control: filename=control-0.9.0-py2.py3-none-any.whl size=344929 sha256=961ab2877ee90c05075280f83b8c411eeba1b5d3fe0b1843bd57a2cc01558f28 Stored in directory: /tmp/pip-ephem-wheel-cache-rti4_5_a/wheels/80/0a/b0/7fe78eb64c712d7900b44a906fcb20df1e44a3a2af8d72b828 Building wheel for sippy-rcognita (setup.py) ... done Created wheel for sippy-rcognita: filename=sippy_rcognita-0.2.1-py3-none-any.whl size=40168 sha256=8573e1ad8224b04ccbeae357bab58b797a90d995171eeb3a430c6d148c98a3bd Stored in directory: /tmp/pip-ephem-wheel-cache-rti4_5_a/wheels/15/e1/80/9b0ae73dc922ad12e18f4c50d16344ac7bcd7e880a11fa9301 Building wheel for future (setup.py) ... done Created wheel for future: filename=future-0.18.2-py3-none-any.whl size=491070 sha256=efdf89d3c499981d51efd63f7f9873fb89f5e9487b88a175cc7534b13bbd0bff Stored in directory: /tmp/pip-ephem-wheel-cache-rti4_5_a/wheels/8e/70/28/3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4 Building wheel for slycot (PEP 517) ... error ERROR: Command errored out with exit status 1: command: /opt/conda/bin/python3.8 /opt/conda/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py build_wheel /tmp/tmpc4atitl2 cwd: /tmp/pip-install-jh5hu952/slycot_05ee58c3b41d4ef3bccf586aaf17e3e8 Complete output (81 lines): Not searching for unused variables given on the command line. CMake Error: CMake was unable to find a build program corresponding to "Ninja". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool. -- Configuring incomplete, errors occurred! See also "/tmp/pip-install-jh5hu952/slycot_05ee58c3b41d4ef3bccf586aaf17e3e8/_cmake_test_compile/build/CMakeFiles/CMakeOutput.log". Not searching for unused variables given on the command line. -- The C compiler identification is GNU 9.3.0 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- The Fortran compiler identification is unknown CMake Error at CMakeLists.txt:4 (ENABLE_LANGUAGE): No CMAKE_Fortran_COMPILER could be found.

Tell CMake where to find the compiler by setting either the environment
variable "FC" or the CMake cache entry CMAKE_Fortran_COMPILER to the full
path to the compiler, or to the compiler name if it is in the PATH.

-- Configuring incomplete, errors occurred! See also "/tmp/pip-install-jh5hu952/slycot_05ee58c3b41d4ef3bccf586aaf17e3e8/_cmake_test_compile/build/CMakeFiles/CMakeOutput.log". See also "/tmp/pip-install-jh5hu952/slycot_05ee58c3b41d4ef3bccf586aaf17e3e8/_cmake_test_compile/build/CMakeFiles/CMakeError.log".


-- Trying "Ninja" generator






--







-- Trying "Ninja" generator - failure


-- Trying "Unix Makefiles" generator






--







-- Trying "Unix Makefiles" generator - failure


scikit-build could not get a working generator for your system. Aborting build.

Building Linux wheels for Python 3.8 requires a compiler (e.g gcc). But scikit-build does NOT know how to install it on ubuntu

To build compliant wheels, consider using the manylinux system described in PEP-513. Get it with "dockcross/manylinux-x64" docker image:

https://github.com/dockcross/dockcross#readme

For more details, please refer to scikit-build documentation:

http://scikit-build.readthedocs.io/en/latest/generators.html#linux


ERROR: Failed building wheel for slycot Successfully built control sippy-rcognita future Failed to build slycot ERROR: Could not build wheels for slycot which use PEP 517 and cannot be installed directly

anvenkat18 commented 2 years ago

The installation of slycot in data-lab is the piece that failed for me (I tried pip). Removing that dependency as @imanbabaei and @jnhopark are planning to do should address the issue i think. image image

imanbabaei commented 2 years ago

We tried to use a pre-built slycot package to avoid that error. Building slycot from the source code requires a compiler. However, We simplified the installation procedure, and there is no need to install some packages based on slycot.

You can install the Seeq-SysID package by running pip install seeq-sysid in a new terminal. Installation Guide

KjellRSeeq commented 2 years ago

Hey guys, this is working! App runs as expected in App Mode as well. Thanks for your help!

From: Mohd.Reza Babaei @.> Sent: Tuesday, October 19, 2021 6:06 PM To: BYU-PRISM/Seeq @.> Cc: Kjell Raemdonck @.>; Author @.> Subject: Re: [BYU-PRISM/Seeq] Trying to install SysID from github, not working in SDL (Issue #2)

We tried to use a pre-built slycot package to avoid that error. Building slycot from the source code requires a compiler. However, We simplified the installation procedure, and there is no need to install some packages based on slycot.

You can install the Seeq-SysID package by running pip install seeq-sysid in a new terminal. Installation Guidehttps://github.com/BYU-PRISM/Seeq#user-installation-seeq-data-lab

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHubhttps://github.com/BYU-PRISM/Seeq/issues/2#issuecomment-947196341, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AWEEAYJ3WSJJX4GM5WM7N6LUHYBVJANCNFSM5GJVCTIA. Triage notifications on the go with GitHub Mobile for iOShttps://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Androidhttps://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.