Тесты NumPy
Тестирование NumPy с помощью Airspeed Velocity.
Использование
Airspeed Velocity сам управляет созданием и настройкой виртуальных сред Python, если не указано иное. Для запуска тестов вам не нужно устанавливать разработку NumPy в текущей среде Python.
Перед началом убедитесь, что airspeed velocity установлен. По умолчанию, asv поставляется с поддержкой anaconda и virtualenv:
pip install asv pip install virtualenv
После добавления новых тестов, вы должны протестировать их локально перед отправкой запроса на добавление.
Для запуска всех тестов перейдите в корневую директорию NumPy в командной строке и выполните:
spin bench
Это позволит скомпилировать NumPy и запустить все доступные тесты, определенные в benchmarks/. (Примечание: это может занять некоторое время. Каждый тест выполняется несколько раз для измерения распределения во времени выполнения.)
Для тестирования тестов локально, лучше запустить их без повторений:
cd benchmarks/ export REGEXP="bench.*Ufunc" asv run --dry-run --show-stderr --python=same --quick -b $REGEXP
Где регулярное выражение для сопоставления тестов хранится в $REGEXP, а –quick используется для избежания повторений.
Для запуска тестов из конкретного модуля тестов, например, bench_core.py, просто добавьте имя файла без расширения:
spin bench -t bench_core
Для запуска теста, определенного в классе, например, MeshGrid из bench_creation.py:
spin bench -t bench_creation.MeshGrid
Для сравнения изменений результатов тестов с другой версией/коммитом/веткой используйте опцию --compare (или эквивалентную опцию -c):
spin bench --compare v1.6.2 -t bench_core spin bench --compare 20d03bcfd -t bench_core spin bench -c main -t bench_core
Все вышеперечисленные команды отображают результаты в виде простого текста в консоли, и результаты не сохраняются для сравнения с будущими коммитами. Для большего контроля, графического отображения и сохранения результатов для сравнения с будущими коммитами, вы можете выполнить команды ASV (запись результатов и генерация HTML):
cd benchmarks asv run -n -e --python=same asv publish asv preview
Дополнительную информацию о том, как использовать asv, можно найти в документации ASV. Справка по командной строке доступна как обычно через asv --help и asv run --help.
Версии тестирования
Для тестирования или визуализации только релизов на разных машинах локально, теги с их коммитами можно сгенерировать, прежде чем запустить их с помощью asv, то есть:
cd benchmarks
# Get commits for tags
# delete tag_commits.txt before re-runs
for gtag in $(git tag --list --sort taggerdate | grep "^v"); do
git log $gtag --oneline -n1 --decorate=no | awk '{print $1;}' >> tag_commits.txt
done
# Use the last 20
tail --lines=20 tag_commits.txt > 20_vers.txt
asv run HASHFILE:20_vers.txt
# Publish and view
asv publish
asv preview
Подробную информацию о внесении этих данных см. в репозитории результатов тестов.
Написание тестов
См. документацию ASV для базовых сведений о написании тестов.
Некоторые моменты для рассмотрения:
- Набор тестов должен быть импортируем с любой версией NumPy.
- Параметры тестов и т. д. не должны зависеть от установленной версии NumPy.
- Постарайтесь, чтобы время выполнения теста было разумным.
- Предпочитайте методы
time_ASV для измерения времени выполнения тестов вместо самостоятельного измерения времени, даже если это требует некоторой перестройки при написании теста. - Подготовка массивов и т. д. обычно должна выполняться в методе
setup, а не в методахtime_, чтобы избежать подсчета времени подготовки вместе со временем выполняемой операции. - Обратите внимание, что большие массивы, созданные с помощью
np.emptyилиnp.zeros, могут не быть выделены в физической памяти, пока память не будет использована. Если это желаемое поведение, убедитесь, что это прокомментировано в вашей функции настройки. Если вы тестируете алгоритм, маловероятно, что пользователь будет запускать указанный алгоритм на только что созданном пустом/нулевом массиве. Можно заставить возникнуть ошибки страниц в фазе настройки, вызвавnp.onesилиarr.fill(value)после создания массива.
© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/benchmarking.html