Spec-Zone.ru › NumPy 2.0

Тесты 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API