diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..333aa3985a8bf8a54f045c3563bcb2c25214c369 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,12 @@ +# auto detect text files and perform LF normalization +* text=auto + +# shell scripts will always have LF only (even in Windows environment) +*.sh text eol=lf + +# perl scripts will always have LF only (even in Windows environment) +*.pl text eol=lf + +# denote all files that are truly binary and should not be modified +*.png binary +*.jpg binary diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5dd5539ca8218b0277c496802529134daac34e4d..d0d9efa380574eb36d13450043e7d81f35cf0bdb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,6 +25,9 @@ tests: script: - apt update - apt install -y libgl1-mesa-glx xvfb graphviz xdg-utils libcairo2-dev libjpeg-dev libgif-dev + - wget -nv https://repo.anaconda.com/archive/Anaconda3-5.3.1-Linux-x86_64.sh -O /tmp/Anaconda3-5.3.1-Linux-x86_64.sh + - bash /tmp/Anaconda3-5.3.1-Linux-x86_64.sh -b -p /tmp/anaconda3 + - export PATH=/tmp/anaconda3/bin:$PATH; bash getting_started/getting_started.sh - pip install tox - xvfb-run tox -v --recreate diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 814bc50af509a91d7165fd471ef369d77bfceca0..dd9500ff8435f1e88e0d4debf07ffb0883811743 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -73,6 +73,12 @@ Ready to contribute? Here's how to set up `flatland` for local development. $ cd flatland $ pip install -e . + These steps are performed if you run + + $ getting_started/getting_started.bat/.sh + + from Anaconda prompt. Only prerequisites: git and Anaconda. + 4. Create a branch for local development:: diff --git a/getting_started/getting_started.bat b/getting_started/getting_started.bat new file mode 100644 index 0000000000000000000000000000000000000000..48833ab83ebc62a3bbb7edfc8312251c48bb17dc --- /dev/null +++ b/getting_started/getting_started.bat @@ -0,0 +1,55 @@ +@echo on + +set FLATLAND_BASEDIR=%~dp0\.. + +@echo off +echo "************ TESTING PREREQUISITES PYTHON3 + GIT + GIT *************************" +@echo on + +git --version || goto :error +python --version || goto :error +rem deactivate in case we're in virtualenv +call conda deactivate || call deactivate + + +@echo off +echo "************ SETUP VIRTUAL ENVIRONMENT FLATLAND *************************" +@echo on +(conda info --envs | findstr flatland-rl) || conda create python=3.6 -y --name flatland-rl || goto :error +(call conda activate flatland-rl || call activate flatland-rl) || goto :error + + +@echo off +echo "************ INSTALL FLATLAND AND DEPENDENCIES IN THE VIRTUALENV *************************" +@echo on +rem TODO we should get rid of having to install these packages outside of setup.py with conda! +call conda install -y -c conda-forge cairosvg pycairo || goto :error +call conda install -y -c anaconda tk || goto :error +call python -m pip install --upgrade pip || goto :error +python setup.py install || goto :error + +# ensure jupyter is installed in the virtualenv +python -m pip install --upgrade -r %FLATLAND_BASEDIR%/requirements_dev.txt -r %FLATLAND_BASEDIR%/requirements_continuous_integration.txt || goto :error + + +@echo off +echo "************ INSTALL JUPYTER EXTENSION *************************" +@echo on +jupyter nbextension install --py --sys-prefix widgetsnbextension || goto :error +jupyter nbextension enable --py --sys-prefix widgetsnbextension || goto :error +jupyter nbextension install --py --sys-prefix jpy_canvas || goto :error +jupyter nbextension enable --py --sys-prefix jpy_canvas || goto :error + + +@echo off +echo "************ RUN JUPYTER NOTEBOOKS *************************" +@echo on +jupyter notebook || goto :error + + +goto :EOF + + +:error +echo Failed with error #%errorlevel%. +pause diff --git a/getting_started/run_notebooks.sh b/getting_started/getting_started.sh old mode 100755 new mode 100644 similarity index 57% rename from getting_started/run_notebooks.sh rename to getting_started/getting_started.sh index 70654ae50fa2e51c7b19df1e71e07408d3c4e7ce..0a245787f32a42092c548605b77ed27426ec4903 --- a/getting_started/run_notebooks.sh +++ b/getting_started/getting_started.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash set -e # stop on error set -x # echo commands @@ -12,27 +12,34 @@ set +x echo "************ TESTING PREREQUISITES PYTHON3 + GIT *************************" set -x +git --version +python --version +conda --version +echo $PATH + set +x echo "************ SETUP VIRTUAL ENVIRONMENT FLATLAND *************************" set -x +source deactivate +(conda info --envs | fgrep flatland-rl) || conda create python=3.6 -y --name flatland-rl +source activate flatland-rl -export WORKON_HOME=${FLATLAND_BASEDIR}/getting_started/envs -echo WORKON_HOME=$WORKON_HOME -echo PWD=$PWD -mkdir -p ${WORKON_HOME} -# cannot work with virtualenvwrapper in script -cd ${WORKON_HOME} -python3 -m venv flatland -source flatland/bin/activate set +x echo "************ INSTALL FLATLAND IN THE VIRTUALENV *************************" set -x -cd ${FLATLAND_BASEDIR} -python setup.py install + +# TODO we should get rid of having to install these packages outside of setup.py with conda! +conda install -y -c conda-forge cairosvg pycairo +conda install -y -c anaconda tk +python -m pip install --upgrade pip + +python ${FLATLAND_BASEDIR}/setup.py install + # ensure jupyter is installed in the virtualenv -pip install -r ${FLATLAND_BASEDIR}/requirements_dev.txt -r requirements_continuous_integration.txt +python -m pip install --upgrade -r ${FLATLAND_BASEDIR}/requirements_dev.txt -r requirements_continuous_integration.txt + set +x echo "************ INSTALL JUPYTER EXTENSION *************************" @@ -41,4 +48,9 @@ jupyter nbextension install --py --sys-prefix widgetsnbextension jupyter nbextension enable --py --sys-prefix widgetsnbextension jupyter nbextension install --py --sys-prefix jpy_canvas jupyter nbextension enable --py --sys-prefix jpy_canvas -jupyter notebook + + +set +x +echo "************ RUN JUPYTER NOTEBOOKS *************************" +set -x +jupyter notebook & diff --git a/getting_started/run_notebooks.bat b/getting_started/run_notebooks.bat deleted file mode 100644 index afe41e08040c981deddcb1718e3876c2bb097708..0000000000000000000000000000000000000000 --- a/getting_started/run_notebooks.bat +++ /dev/null @@ -1,53 +0,0 @@ -@echo on - -set PWD_BEFORE=%cd% - -@echo off -echo "************ TESTING PREREQUISITES PYTHON3 + GIT *************************" -@echo on - -git --version || goto :error -python3 --version || goto :error - - -@echo off -echo "************ SETUP VIRTUAL ENVIRONMENT FLATLAND *************************" -@echo on - -set FLATLAND_BASEDIR=%~dp0\.. -set WORKON_HOME=%FLATLAND_BASEDIR%\getting_started\envs_win -if not exist "%WORKON_HOME%" md "%WORKON_HOME%" || goto :error -cd "%WORKON_HOME%" -rem use venv instead of virtualenv/virtualenv-wrapper because of https://github.com/pypa/virtualenv/issues/355 -python3 -m venv flatland || goto :error -rem ignore activation error: https://stackoverflow.com/questions/51358202/python-3-7-activate-venv-error-parameter-format-not-correct-65001-windows -call "%WORKON_HOME%\flatland\Scripts\activate.bat" || true - - -@echo off -echo "************ INSTALL FLATLAND IN THE VIRTUALENV *************************" -@echo on -python -m pip install --upgrade pip || goto :error -cd %FLATLAND_BASEDIR% || goto :error -python setup.py install || goto :error -REM ensure jupyter is installed in the virtualenv -pip install -r "%FLATLAND_BASEDIR%/requirements_dev.txt" -r "%FLATLAND_BASEDIR%\requirements_continuous_integration.txt" || goto :error - -@echo off -echo "************ INSTALL JUPYTER EXTENSION *************************" -@echo on -jupyter nbextension install --py --sys-prefix widgetsnbextension || goto :error -jupyter nbextension enable --py --sys-prefix widgetsnbextension || goto :error -jupyter nbextension install --py --sys-prefix jpy_canvas || goto :error -jupyter nbextension enable --py --sys-prefix jpy_canvas || goto :error -jupyter notebook || goto :error - - -goto :EOF - - -:error -echo Failed with error #%errorlevel%. -cd "%PWD_BEFORE%" || true -deactivate || true -pause diff --git a/notebooks/Scene_Editor.ipynb b/notebooks/Scene_Editor.ipynb index 64bbad77d3a9b63caea062795cd0ab8f0cce72f3..87b2d38c314140a3f51afa92058b0d5c3c3cc6af 100644 --- a/notebooks/Scene_Editor.ipynb +++ b/notebooks/Scene_Editor.ipynb @@ -70,7 +70,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0b92e7084e37450cbfb3855dc3a58543", + "model_id": "86a323f55bb54ff78169a9c7ca63730f", "version_major": 2, "version_minor": 0 }, @@ -111,7 +111,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.5" + "version": "3.6.8" }, "latex_envs": { "LaTeX_envs_menu_present": true, diff --git a/requirements_continuous_integration.txt b/requirements_continuous_integration.txt index fa2b57bc94cd6f2c2a41b0299f9a77d0291f3fe0..a165e673a153db966a05ded2e18b7aafc1ff0042 100644 --- a/requirements_continuous_integration.txt +++ b/requirements_continuous_integration.txt @@ -1,16 +1,17 @@ # contains all additional requirements to run the ```tox .``` in addition to requirements_dev.txt for ```tox -e py36,py37``` -bumpversion==0.5.3 -wheel==0.32.1 -watchdog==0.9.0 -benchmarker==4.0.1 -coverage==4.5.1 -Sphinx==1.8.1 -sphinx-rtd-theme==0.4.3 -flake8==3.7.7 -flake8-eradicate==0.2.0 -twine==1.12.1 -pydeps==1.7.2 -jupyter==1.0.0 -pytest-xvfb==1.2.0 +bumpversion>=0.5.3 +wheel>=0.32.1 +watchdog>=0.9.0 +benchmarker>=4.0.1 +coverage>=4.5.1 +Sphinx>=1.8.1 +sphinx-rtd-theme>=0.4.3 +flake8>=3.7.7 +flake8-eradicate>=0.2.0 +twine>=1.12.1 +pydeps>=1.7.2 +jupyter>=1.0.0 +jupyter-core>=4.5.0 +notebook>=5.7.8 +pytest-xvfb>=1.2.0 git+https://github.com/who8mylunch/Jupyter_Canvas_Widget.git@bd151ae1509c50b5809944dd3294f58b7b069c86 - diff --git a/requirements_dev.txt b/requirements_dev.txt index 002be2a1736601bfec55406eb47fd33ec90bb358..ea46eb245842881f1c51ededa5284300836a36ba 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,18 +1,17 @@ # contains all requirements to run the tests by running ```tox -e py36,py37``` -tox==3.5.2 -twine==1.12.1 -pytest==3.8.2 -pytest-runner==4.2 -numpy==1.16.4 -recordtype==1.3 -xarray==0.11.3 -matplotlib==3.0.2 -Pillow==5.4.1 -# pycairo==1.18.1 is installed via setup.py since it needs special treatment under Windows -CairoSVG==2.3.1 -msgpack==0.6.1 -svgutils==0.3.1 -screeninfo==0.3.1 -pyarrow==0.13.0 -importlib-metadata==0.17 -importlib_resources==1.0.2 +tox>=3.5.2 +twine>=1.12.1 +pytest>=3.8.2 +pytest-runner>=4.2 +numpy>=1.16.4 +recordtype>=1.3 +xarray>=0.11.3 +matplotlib>=3.0.2 +Pillow>=5.4.1 +CairoSVG>=2.3.1 +msgpack>=0.6.1 +svgutils>=0.3.1 +screeninfo>=0.3.1 +pyarrow>=0.13.0 +importlib-metadata>=0.17 +importlib_resources>=1.0.2 diff --git a/setup.py b/setup.py index 900dada07e587333db5459bc4a482be080f241b9..0afa7bf1ba7ce9fbe170178caf808dd7ce267937 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,6 @@ """The setup script.""" import os -import platform import sys from setuptools import setup, find_packages @@ -12,51 +11,6 @@ assert sys.version_info >= (3, 6) with open('README.rst') as readme_file: readme = readme_file.read() -# install pycairo on Windows -if os.name == 'nt': - p = platform.architecture() - is64bit = p[0] == '64bit' - if sys.version[0:3] == '3.5': - if is64bit: - url = 'https://download.lfd.uci.edu/pythonlibs/t4jqbe6o/pycairo-1.18.1-cp35-cp35m-win_amd64.whl' - else: - url = 'https://download.lfd.uci.edu/pythonlibs/t4jqbe6o/pycairo-1.18.1-cp35-cp35m-win32.whl' - - if sys.version[0:3] == '3.6': - if is64bit: - url = 'https://download.lfd.uci.edu/pythonlibs/t4jqbe6o/pycairo-1.18.1-cp36-cp36m-win_amd64.whl' - else: - url = 'https://download.lfd.uci.edu/pythonlibs/t4jqbe6o/pycairo-1.18.1-cp36-cp36m-win32.whl' - - if sys.version[0:3] == '3.7': - if is64bit: - url = 'https://download.lfd.uci.edu/pythonlibs/t4jqbe6o/pycairo-1.18.1-cp37-cp37m-win_amd64.whl' - else: - url = 'https://download.lfd.uci.edu/pythonlibs/t4jqbe6o/pycairo-1.18.1-cp37-cp37m-win32.whl' - - try: - import pycairo - except: - call_cmd = "pip install " + url - os.system(call_cmd) - - import site - import ctypes.util - - default_os_path = os.environ['PATH'] - os.environ['PATH'] = '' - for s in site.getsitepackages(): - os.environ['PATH'] = os.environ['PATH'] + ';' + s + '\\cairo' - os.environ['PATH'] = os.environ['PATH'] + ';' + default_os_path - print(os.environ['PATH']) - if ctypes.util.find_library('cairo') is not None: - print("cairo installed: OK") -else: - try: - import pycairo - except: - os.system("pip install pycairo==1.18.1") - def get_all_svg_files(directory='./svg/'): ret = []