# Check Python major and minor version # For more information, see https://stackoverflow.com/a/22105036 PYV = $(shell python -c "import sys;t='{v[0]}.{v[1]}'.format(v=list(sys.version_info[:2]));sys.stdout.write(t)") HIGHS_DIR = "../HiGHS" # Note: use tabs # actions which are virtual, i.e. not a script .PHONY: install install-for-dev install-for-test install-deps install-flexmeasures run-local test freeze-deps upgrade-deps update-docs update-docs-pdf show-file-space show-data-model clean-db cli-autocomplete build-highs-macos install-highs-macos # ---- Development --- run-local: python run-local.py test: make install-for-test pytest # ---- Documentation --- gen_code_docs := False # by default code documentation is not generated update-docs: @echo "Creating docs environment ..." make install-docs-dependencies @echo "Creating documentation ..." export GEN_CODE_DOCS=${gen_code_docs}; cd documentation; make clean; make html SPHINXOPTS="-W --keep-going -n"; cd .. update-docs-pdf: @echo "NOTE: PDF documentation requires packages (on Debian: latexmk texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended)" make install-docs-dependencies export GEN_CODE_DOCS=${gen_code_docs}; cd documentation; make clean; make latexpdf; make latexpdf; cd .. # make latexpdf can require two passes # ---- Installation --- install: install-deps install-flexmeasures install-for-dev: make freeze-deps make ensure-deps-folder pip-sync requirements/${PYV}/app.txt requirements/${PYV}/dev.txt requirements/${PYV}/test.txt make install-flexmeasures # Locally install HiGHS on macOS @if [ "$(shell uname)" = "Darwin" ]; then \ make install-highs-macos; \ fi install-for-test: make install-pip-tools # Pass pinned=no if you want to test against latest stable packages, default is our pinned dependency set ifneq ($(pinned), no) pip-sync requirements/${PYV}/app.txt requirements/${PYV}/test.txt else pip install --upgrade -r requirements/app.in -r requirements/test.in endif make install-flexmeasures # Locally install HiGHS on macOS @if [ "$(shell uname)" = "Darwin" ]; then \ make install-highs-macos; \ fi $(HIGHS_DIR): @if [ ! -d $(HIGHS_DIR) ]; then \ git clone https://github.com/ERGO-Code/HiGHS.git $(HIGHS_DIR); \ fi brew install cmake; build-highs-macos: $(HIGHS_DIR) cd $(HIGHS_DIR); \ git checkout latest; \ mkdir -p build; \ cd build; \ cmake ..; \ make; \ make install; \ cd ../../flexmeasures; install-highs-macos: build-highs-macos pip install $(HIGHS_DIR) ; \ install-deps: make install-pip-tools make freeze-deps # Pass pinned=no if you want to test against latest stable packages, default is our pinned dependency set ifneq ($(pinned), no) pip-sync requirements/${PYV}/app.txt else pip install --upgrade -r requirements/app.in endif install-flexmeasures: pip install -e . install-pip-tools: pip3 install -q "pip-tools>=7.2" install-docs-dependencies: pip install -r requirements/${PYV}/docs.txt freeze-deps: make ensure-deps-folder make install-pip-tools pip-compile -o requirements/${PYV}/app.txt requirements/app.in pip-compile -c requirements/${PYV}/app.txt -o requirements/${PYV}/test.txt requirements/test.in pip-compile -c requirements/${PYV}/app.txt -c requirements/${PYV}/test.txt -o requirements/${PYV}/dev.txt requirements/dev.in pip-compile -c requirements/${PYV}/app.txt -o requirements/${PYV}/docs.txt requirements/docs.in upgrade-deps: make ensure-deps-folder make install-pip-tools pip-compile --upgrade -o requirements/${PYV}/app.txt requirements/app.in pip-compile --upgrade -c requirements/${PYV}/app.txt -o requirements/${PYV}/test.txt requirements/test.in pip-compile --upgrade -c requirements/${PYV}/app.txt -c requirements/${PYV}/test.txt -o requirements/${PYV}/dev.txt requirements/dev.in pip-compile --upgrade -c requirements/${PYV}/app.txt -o requirements/${PYV}/docs.txt requirements/docs.in ifneq ($(skip-test), yes) make test endif # ---- Data ---- show-file-space: # Where is our file space going? du --summarize --human-readable --total ./* ./.[a-zA-Z]* | sort -h upgrade-db: flask db current flask db upgrade flask db current show-data-model: # This generates the data model, as currently written in code, as a PNG picture. # Also try with --schema for the database model. # With --deprecated, you'll see the legacy models, and not their replacements. # Use --help to learn more. ./flexmeasures/data/scripts/visualize_data_model.py --uml ensure-deps-folder: mkdir -p requirements/${PYV} clean-db: ./flexmeasures/data/scripts/clean_database.sh ${db_name} ${db_user} cli-autocomplete: ./flexmeasures/cli/scripts/add_scripts_path.sh ${extension}