-
Notifications
You must be signed in to change notification settings - Fork 72
/
Makefile
152 lines (123 loc) · 3.99 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
MAKEFLAGS += --no-builtin-rules
MAKEFLAGS += --no-builtin-variables
# allow overriding the name of the venv directory
VENV_DIR ?= venv
# use a default prefix for coverage data files
COVERAGE_FILE ?= .coverage
# use different coverage data file per coverage run, otherwise combine complains
TESTS_COVERAGE_FILE = ${COVERAGE_FILE}.tests
# make tasks run all commands in a single shell
.ONESHELL:
# these targets don't produce files:
.PHONY: ${VENV_DIR}/ venv clean clean-caches filecheck pytest pytest-nb tests-toy tests
.PHONY: rerun-notebooks precommit-install precommit pyright tests-marimo
.PHONY: coverage coverage-tests coverage-filecheck-tests
.PHONY: coverage-report-html coverage-report-md
# set up the venv with all dependencies for development
${VENV_DIR}/: requirements.txt
python3 -m venv ${VENV_DIR}
. ${VENV_DIR}/bin/activate
python3 -m pip --require-virtualenv install -r requirements.txt
# make sure `make venv` always works no matter what $VENV_DIR is
venv: ${VENV_DIR}/
# remove all caches
clean-caches:
rm -rf .pytest_cache *.egg-info .coverage.*
find . -type f -name "*.cover" -delete
# remove all caches and the venv
clean: clean-caches
rm -rf ${VENV_DIR}
# run filecheck tests
filecheck:
lit -vv tests/filecheck --order=smart --timeout=20
# run pytest tests
pytest:
pytest tests -W error -vv
# run pytest on notebooks
pytest-nb:
pytest -W error --nbval -vv docs \
--ignore=docs/mlir_interoperation.ipynb \
--ignore=docs/Toy \
--nbval-current-env
# run tests for Toy tutorial
filecheck-toy:
lit -v docs/Toy/examples --order=smart
pytest-toy:
pytest docs/Toy/toy/tests
.PHONY: pytest-toy-nb
pytest-toy-nb:
@if python -c "import riscemu" > /dev/null 2>&1; then \
pytest -W error --nbval -vv docs/Toy --nbval-current-env; \
else \
echo "riscemu is not installed, skipping tests."; \
fi
tests-toy: filecheck-toy pytest-toy pytest-toy-nb
tests-marimo:
@for file in docs/marimo/*.py; do \
echo "Running $$file"; \
error_message=$$(python3 "$$file" 2>&1) || { \
echo "Error running $$file"; \
echo "$$error_message"; \
exit 1; \
}; \
done
@echo "All marimo tests passed successfully."
.PHONY: tests-marimo-onnx
tests-marimo-onnx:
@if python -c "import onnx" > /dev/null 2>&1; then \
echo "onnx is installed, running tests."; \
if ! command -v mlir-opt > /dev/null 2>&1; then \
echo "MLIR is not installed, skipping tests."; \
exit 0; \
fi; \
for file in docs/marimo/onnx/*.py; do \
echo "Running $$file"; \
error_message=$$(python3 "$$file" 2>&1) || { \
echo "Error running $$file"; \
echo "$$error_message"; \
exit 1; \
}; \
done; \
echo "All marimo onnx tests passed successfully."; \
else \
echo "onnx is not installed, skipping tests."; \
fi
# run all tests
tests-functional: pytest tests-toy filecheck pytest-nb tests-marimo tests-marimo-onnx
@echo All functional tests done.
# run all tests
tests: tests-functional pyright
@echo All tests done.
# re-generate the output from all jupyter notebooks in the docs directory
rerun-notebooks:
jupyter nbconvert \
--ClearMetadataPreprocessor.enabled=True \
--inplace \
--to notebook \
--execute docs/*.ipynb docs/Toy/*.ipynb
# set up all precommit hooks
precommit-install:
pre-commit install
# run all precommit hooks and apply them
precommit:
pre-commit run --all
# run pyright on all files in the current git commit
pyright:
# We make sure to generate the python typing stubs before running pyright
xdsl-stubgen
pyright $(shell git diff --staged --name-only -- '*.py')
# run coverage over all tests and combine data files
coverage: coverage-tests coverage-filecheck-tests
coverage combine --append
# run coverage over tests
coverage-tests:
COVERAGE_FILE=${TESTS_COVERAGE_FILE} pytest -W error --cov --cov-config=.coveragerc
# run coverage over filecheck tests
coverage-filecheck-tests:
lit -v tests/filecheck/ -DCOVERAGE
# generate html coverage report
coverage-report-html:
coverage html
# generate markdown coverage report
coverage-report-md:
coverage report --format=markdown