Added NSFW classification

This commit is contained in:
Netkas 2021-01-14 02:07:24 -05:00
parent 47f38f2da1
commit 3294bc4ea6
9714 changed files with 5575229 additions and 5571200 deletions

View File

@ -4,7 +4,7 @@
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/services/corenlp/src" isTestSource="false" />
</content>
<orderEntry type="jdk" jdkName="Python 3.8" jdkType="Python SDK" />
<orderEntry type="jdk" jdkName="3.6 @ Ubuntu 18.04" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="head.load" level="application" />
<orderEntry type="library" name="d3" level="application" />

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8" project-jdk-type="Python SDK" />
<component name="ProjectRootManager" version="2" project-jdk-name="3.6 @ Ubuntu 18.04" project-jdk-type="Python SDK" />
</project>

View File

@ -1,45 +1,45 @@
#!/bin/sh
echo "### Initializing CoffeeHouse-Utils ###"
chmod a+x /usr/local/bin/update_server
if [ ! -f /firstrun.pass ]; then
echo "(!) First run! Installing resources..."
update_server
echo "(+) Setting boot flag..."
touch /firstrun.pass
echo "[...] Restarting server in detached mode..."
else
cd /CoffeeHousePy
echo "### Starting CoffeeHouse-LangDetect ###"
make start_langdetect &
echo "### Starting CoffeeHouse-SpamDetect ###"
make start_spamdetect &
echo "### Starting CoffeeHouse-CoreNLP ###"
make start_corenlp &
while sleep 60; do
# If grep find anything, they exit with 0 status
# If they are not 0, then something is wrong
ps aux | grep coffeehouse_languagedetection | grep -q -v grep
LANGDETECT_STATUS=$?
if [ $LANGDETECT_STATUS -ne 0 ]; then
echo "ERROR: coffeehouse_languagedetection has been terminated, terminating container."
exit 1
fi
ps aux | grep coffeehouse_spamdetection | grep -q -v grep
SPAMDETECT_STATUS=$?
if [ $SPAMDETECT_STATUS -ne 0 ]; then
echo "ERROR: coffeehouse_spamdetection has been terminated, terminating container."
exit 1
fi
ps aux | grep edu.stanford.nlp.pipeline.StanfordCoreNLPServer | grep -q -v grep
CORENLP_STATUS=$?
if [ $CORENLP_STATUS -ne 0 ]; then
echo "ERROR: coffeehouse_corenlp has been terminated, terminating container."
exit 1
fi
done
#!/bin/sh
echo "### Initializing CoffeeHouse-Utils ###"
chmod a+x /usr/local/bin/update_server
if [ ! -f /firstrun.pass ]; then
echo "(!) First run! Installing resources..."
update_server
echo "(+) Setting boot flag..."
touch /firstrun.pass
echo "[...] Restarting server in detached mode..."
else
cd /CoffeeHousePy
echo "### Starting CoffeeHouse-LangDetect ###"
make start_langdetect &
echo "### Starting CoffeeHouse-SpamDetect ###"
make start_spamdetect &
echo "### Starting CoffeeHouse-CoreNLP ###"
make start_corenlp &
while sleep 60; do
# If grep find anything, they exit with 0 status
# If they are not 0, then something is wrong
ps aux | grep coffeehouse_languagedetection | grep -q -v grep
LANGDETECT_STATUS=$?
if [ $LANGDETECT_STATUS -ne 0 ]; then
echo "ERROR: coffeehouse_languagedetection has been terminated, terminating container."
exit 1
fi
ps aux | grep coffeehouse_spamdetection | grep -q -v grep
SPAMDETECT_STATUS=$?
if [ $SPAMDETECT_STATUS -ne 0 ]; then
echo "ERROR: coffeehouse_spamdetection has been terminated, terminating container."
exit 1
fi
ps aux | grep edu.stanford.nlp.pipeline.StanfordCoreNLPServer | grep -q -v grep
CORENLP_STATUS=$?
if [ $CORENLP_STATUS -ne 0 ]; then
echo "ERROR: coffeehouse_corenlp has been terminated, terminating container."
exit 1
fi
done
fi

View File

@ -1,28 +1,28 @@
#!/bin/bash
# Written by Netkas 3/01/2021
echo "Intellivoid Provisioning"
echo "Running on x86_64 (docker) [PRODUCTION]"
echo " "
echo " ## Authentication Required "
read -p 'Enter your 25-50 character PAT: ' GIT_API_KEY
echo " #### Cloning CoffeeHousePy"
git clone https://${GIT_API_KEY}@github.com/Intellivoid/CoffeeHousePy.git
cd /CoffeeHousePy
git checkout corenlp
echo " #### Preparing System for Python"
make system_prep_python
echo " #### Preparing System for pip"
make system_prep_pip
echo " #### Preparing System for GCC"
make system_prep_gcc
echo " #### Preparing System for Java"
make system_prep_java
echo " #### Building and Installing CoffeeHousePy"
#!/bin/bash
# Written by Netkas 3/01/2021
echo "Intellivoid Provisioning"
echo "Running on x86_64 (docker) [PRODUCTION]"
echo " "
echo " ## Authentication Required "
read -p 'Enter your 25-50 character PAT: ' GIT_API_KEY
echo " #### Cloning CoffeeHousePy"
git clone https://${GIT_API_KEY}@github.com/Intellivoid/CoffeeHousePy.git
cd /CoffeeHousePy
git checkout corenlp
echo " #### Preparing System for Python"
make system_prep_python
echo " #### Preparing System for pip"
make system_prep_pip
echo " #### Preparing System for GCC"
make system_prep_gcc
echo " #### Preparing System for Java"
make system_prep_java
echo " #### Building and Installing CoffeeHousePy"
make install

View File

@ -1,16 +1,16 @@
FROM ubuntu:18.04
EXPOSE 5606 5601 5603 5604
MAINTAINER Diederik Noordhuis (diederikn@intellivoid.net)
ARG DEBIAN_FRONTEND=noninteractive
COPY Docker/bootstrap /usr/local/bin/bootstrap
COPY Docker/update_server /usr/local/bin/update_server
RUN \
apt-get update && \
ln -fs /usr/share/zoneinfo/UTC /etc/localtime && \
apt-get update && \
apt-get install git make sudo nano vim wget curl unzip -y && \
apt-get clean
FROM ubuntu:18.04
EXPOSE 5606 5601 5603 5604
MAINTAINER Diederik Noordhuis (diederikn@intellivoid.net)
ARG DEBIAN_FRONTEND=noninteractive
COPY Docker/bootstrap /usr/local/bin/bootstrap
COPY Docker/update_server /usr/local/bin/update_server
RUN \
apt-get update && \
ln -fs /usr/share/zoneinfo/UTC /etc/localtime && \
apt-get update && \
apt-get install git make sudo nano vim wget curl unzip -y && \
apt-get clean
CMD ["/bin/bash", "/usr/local/bin/bootstrap"]

422
Makefile
View File

@ -1,216 +1,208 @@
clean_apt:
rm -rf mods/apt/build mods/apt/dist mods/apt/coffeehousemod_apt.egg-info
clean_scikit_image:
rm -rf deps/scikit-image/build deps/scikit-image/dist deps/scikit-image/scikit-image.egg-info
clean_numpy:
rm -rf deps/numpy/build deps/numpy/dist deps/numpy/numpy.egg-info
clean_stopwords:
rm -rf mods/stopwords/build mods/stopwords/dist mods/stopwords/coffeehousemod_stopwords.egg-info
clean_tokenizer:
rm -rf mods/tokenizer/build mods/tokenizer/dist mods/tokenizer/coffeehousemod_tokenizer.egg-info
clean_dltc:
rm -rf dltc/build dltc/dist dltc/coffeehouse_dltc.egg-info
clean_nlpfr:
rm -rf nlpfr/build nlpfr/dist nlpfr/nltk.egg-info
clean_alg:
rm -rf alg/build alg/dist alg/coffeehouse_alg.egg-info
clean_rf:
rm -rf resource_fetch/build resource_fetch/dist resource_fetch/resource_fetch.egg-info
clean_his:
rm -rf hyper_internal_service/build hyper_internal_service/dist hyper_internal_service/hyper_internal_service.egg-info
clean_langdetect:
rm -rf services/language_detection/build services/language_detection/dist services/language_detection/coffeehouse_languagedetection.egg-info
clean_spamdetect:
rm -rf services/spam_detection/build services/spam_detection/dist services/spam_detection/coffeehouse_spamdetection.egg-info
clean_translation:
rm -rf services/translation/build services/translation/dist services/translation/coffeehouse_translation.egg-info
clean_corenlp:
cd services/corenlp; make clean
clean:
make clean_scikit_image
make clean_numpy
make clean_apt clean_stopwords clean_tokenizer clean_nlpfr
make clean_dltc
make clean_his
make clean_alg
make clean_rf
make clean_translation
make clean_langdetect
make clean_spamdetect
make clean_corenlp
# ======================================================================================================================
build_scikit_image:
cd deps/scikit-image; python3 setup.py build; python3 setup.py sdist
build_numpy:
cd deps/numpy; python3 setup.py build; python3 setup.py sdist
build_apt:
cd mods/apt; python3 setup.py build; python3 setup.py sdist
build_stopwords:
cd mods/stopwords; python3 setup.py build; python3 setup.py sdist
build_tokenizer:
cd mods/tokenizer; python3 setup.py build; python3 setup.py sdist
build_mods:
make build_apt build_stopwords build_tokenizer
build_nlpfr:
make build_mods
cd nlpfr; python3 setup.py build; python3 setup.py sdist
build_dltc:
cd dltc; python3 setup.py build; python3 setup.py sdist
build_alg:
cd alg; python3 setup.py build; python3 setup.py sdist
build_his:
cd hyper_internal_service; python3 setup.py build; python3 setup.py sdist
build_rf:
cd resource_fetch; python3 setup.py build; python3 setup.py sdist
build_langdetect:
cd services/language_detection; python3 setup.py build; python3 setup.py sdist
build_spamdetect:
cd services/spam_detection; python3 setup.py build; python3 setup.py sdist
build_translation:
cd services/translation; python3 setup.py build; python3 setup.py sdist
build_corenlp:
cd services/corenlp; make build
build:
make build_nlpfr
make build_his
make build_dltc
make build_alg
make build_numpy
make build_scikit_image
make build_rf
make buid_translation
make build_langdetect
make build_spamdetect
make build_corenlp
# ======================================================================================================================
install_scikit_image:
cd deps/scikit-image; python3 setup.py install
install_numpy:
cd deps/numpy; python3 setup.py install
install_apt:
cd mods/apt; python3 setup.py install
install_stopwords:
cd mods/stopwords; python3 setup.py install
install_tokenizer:
cd mods/tokenizer; python3 setup.py install
install_mods:
make install_apt install_stopwords install_tokenizer
install_nlpfr:
make install_mods
cd nlpfr; python3 setup.py install
install_dltc:
cd dltc; python3 setup.py install
install_alg:
cd alg; python3 setup.py install
install_his:
cd hyper_internal_service; python3 -m pip install -Ur dev_requirements.txt; python3 setup.py install
install_rf:
cd resource_fetch; python3 setup.py install
python3 -m resource_fetch
install_langdetect:
cd services/language_detection; python3 setup.py install
install_spamdetect:
cd services/spam_detection; python3 setup.py install
install_translation:
cd services/translation; python3 setup.py install
install:
make install_rf
make install_numpy
make install_scikit_image
make install_nlpfr
make install_his
make install_dltc
make install_alg
make install_translation
make install_langdetect
make install_spamdetect
make build_corenlp
# ======================================================================================================================
system_prep_python:
apt -y install python3 python3-distutils python3-dev python3-setuptools
system_prep_pip:
apt -y install wget curl
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
rm get-pip.py
system_prep_gcc:
apt -y install gcc build-essential
system_prep_java:
apt -y install openjdk-8-jre openjdk-8-jdk ant
# ======================================================================================================================
start_langdetect:
python3 -m coffeehouse_languagedetection --start-server
start_spamdetect:
python3 -m coffeehouse_spamdetection --start-server
start_translation:
python3 -m coffeehouse_translation --start-server
start_corenlp:
cd services/corenlp; make start
# ======================================================================================================================
docker_build:
docker build -t="coffeehouse_utils" -f Dockerfile .
docker_run:
docker run -it --name coffeehouse_utils -h coffeehouse_utils --restart always -p 5601:5601 -p 5606:5606 -p 5603:5603 -p 5604:5604 coffeehouse_utils
docker_rm:
clean_apt:
rm -rf mods/apt/build mods/apt/dist mods/apt/coffeehousemod_apt.egg-info
clean_stopwords:
rm -rf mods/stopwords/build mods/stopwords/dist mods/stopwords/coffeehousemod_stopwords.egg-info
clean_tokenizer:
rm -rf mods/tokenizer/build mods/tokenizer/dist mods/tokenizer/coffeehousemod_tokenizer.egg-info
clean_dltc:
rm -rf dltc/build dltc/dist dltc/coffeehouse_dltc.egg-info
clean_nlpfr:
rm -rf nlpfr/build nlpfr/dist nlpfr/nltk.egg-info
clean_alg:
rm -rf alg/build alg/dist alg/coffeehouse_alg.egg-info
clean_rf:
rm -rf resource_fetch/build resource_fetch/dist resource_fetch/resource_fetch.egg-info
clean_his:
rm -rf hyper_internal_service/build hyper_internal_service/dist hyper_internal_service/hyper_internal_service.egg-info
clean_langdetect:
rm -rf services/language_detection/build services/language_detection/dist services/language_detection/coffeehouse_languagedetection.egg-info
clean_spamdetect:
rm -rf services/spam_detection/build services/spam_detection/dist services/spam_detection/coffeehouse_spamdetection.egg-info
clean_translation:
rm -rf services/translation/build services/translation/dist services/translation/coffeehouse_translation.egg-info
clean_corenlp:
cd services/corenlp; make clean
clean_nsfw:
rm -rf services/nsfw_detection/build services/nsfw_detection/dist services/nsfw_detection/coffeehouse_nsfw.egg-info
clean:
make clean_apt clean_stopwords clean_tokenizer clean_nlpfr
make clean_dltc
make clean_his
make clean_alg
make clean_rf
make clean_translation
make clean_langdetect
make clean_spamdetect
make clean_nsfw
make clean_corenlp
# ======================================================================================================================
build_apt:
cd mods/apt; python3 setup.py build; python3 setup.py sdist
build_stopwords:
cd mods/stopwords; python3 setup.py build; python3 setup.py sdist
build_tokenizer:
cd mods/tokenizer; python3 setup.py build; python3 setup.py sdist
build_mods:
make build_apt build_stopwords build_tokenizer
build_nlpfr:
make build_mods
cd nlpfr; python3 setup.py build; python3 setup.py sdist
build_dltc:
cd dltc; python3 setup.py build; python3 setup.py sdist
build_alg:
cd alg; python3 setup.py build; python3 setup.py sdist
build_his:
cd hyper_internal_service; python3 setup.py build; python3 setup.py sdist
build_rf:
cd resource_fetch; python3 setup.py build; python3 setup.py sdist
build_langdetect:
cd services/language_detection; python3 setup.py build; python3 setup.py sdist
build_spamdetect:
cd services/spam_detection; python3 setup.py build; python3 setup.py sdist
build_translation:
cd services/translation; python3 setup.py build; python3 setup.py sdist
build_corenlp:
cd services/corenlp; make build
build_nsfw:
cd services/nsfw_detection; python3 setup.py build; python3 setup.py sdist
build:
make build_nlpfr
make build_his
make build_dltc
make build_alg
make build_rf
make buid_translation
make build_langdetect
make build_spamdetect
make build_nsfw
make build_corenlp
# ======================================================================================================================
install_apt:
cd mods/apt; python3 setup.py install
install_stopwords:
cd mods/stopwords; python3 setup.py install
install_tokenizer:
cd mods/tokenizer; python3 setup.py install
install_mods:
make install_apt install_stopwords install_tokenizer
install_nlpfr:
make install_mods
cd nlpfr; python3 setup.py install
install_dltc:
cd dltc; python3 setup.py install
install_alg:
cd alg; python3 setup.py install
install_his:
cd hyper_internal_service; python3 -m pip install -Ur dev_requirements.txt; python3 setup.py install
install_rf:
cd resource_fetch; python3 setup.py install
python3 -m resource_fetch
install_langdetect:
cd services/language_detection; python3 setup.py install
install_spamdetect:
cd services/spam_detection; python3 setup.py install
install_translation:
cd services/translation; python3 setup.py install
install_nsfw:
cd services/nsfw_detection; python3 setup.py install
install_full:
make install_rf
make install
install:
make install_nlpfr
make install_his
make install_dltc
make install_alg
make install_translation
make install_langdetect
make install_spamdetect
make install_nsfw
make build_corenlp
# ======================================================================================================================
system_prep_python:
apt -y install python3 python3-distutils python3-dev python3-setuptools
system_prep_pip:
apt -y install wget curl
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
rm get-pip.py
system_prep_gcc:
apt -y install gcc build-essential
python3 -m pip install cython
system_prep_java:
apt -y install openjdk-8-jre openjdk-8-jdk ant
# ======================================================================================================================
start_langdetect:
python3 -m coffeehouse_languagedetection --start-server
start_spamdetect:
python3 -m coffeehouse_spamdetection --start-server
start_translation:
python3 -m coffeehouse_translation --start-server
start_corenlp:
cd services/corenlp; make start
# ======================================================================================================================
docker_build:
docker build -t="coffeehouse_utils" -f Dockerfile .
docker_run:
docker run -it --name coffeehouse_utils -h coffeehouse_utils --restart always -p 5601:5601 -p 5606:5606 -p 5603:5603 -p 5604:5604 coffeehouse_utils
docker_rm:
docker rm -f coffeehouse_utils

View File

@ -1,45 +1,46 @@
# CoffeeHousePy
CoffeeHousePy is the full Python implementation for CoffeeHouse, and it's server
components. The [Makefile](Makefile) contains all the setup procedures
used in order to install CoffeeHousePy, and it's components onto the machine.
## Prepare the system
The system must have `python3.6` installed, `pip` and `gcc`. To prepare the system run
the following command, this is designed to run on Ubuntu 18.04
```shell
sudo make system_prep_python system_prep_pip system_prep_gcc
```
## Install CoffeeHousePy
Depending on the hardware, the installation procedure may take a while. To install
CoffeeHousePy run the following command
```shell
sudo -H make clean build install
```
## Services
Once CoffeeHousePy is installed, you can start it's services indvidually.
```shell
make start_langdetect # Starts the language detection server, runs on port 5606
make start_spamdetect # Starts the spam detection server, runs on port 5601
make start_translate # Starts the translation server, runs on port 5603
```
### Services Ports
| Name | Protocol | Port |
|--------------------------------|----------|------|
| CoffeeHouse Language Detection | HTTP | 5606 |
| CoffeeHouse Spam Detection | HTTP | 5601 |
| CoffeeHouse Translate | HTTP | 5603 |
| CoffeeHouse CoreNLP | HTTP | 5604 |
# CoffeeHousePy
CoffeeHousePy is the full Python implementation for CoffeeHouse, and it's server
components. The [Makefile](Makefile) contains all the setup procedures
used in order to install CoffeeHousePy, and it's components onto the machine.
## Prepare the system
The system must have `python3.6` installed, `pip` and `gcc`. To prepare the system run
the following command, this is designed to run on Ubuntu 18.04
```shell
sudo make system_prep_python system_prep_pip system_prep_gcc
```
## Install CoffeeHousePy
Depending on the hardware, the installation procedure may take a while. To install
CoffeeHousePy run the following command
```shell
sudo -H make clean build install
```
## Services
Once CoffeeHousePy is installed, you can start it's services indvidually.
```shell
make start_langdetect # Starts the language detection server, runs on port 5606
make start_spamdetect # Starts the spam detection server, runs on port 5601
make start_translate # Starts the translation server, runs on port 5603
```
### Services Ports
| Name | Protocol | Port |
|--------------------------------|----------|------|
| CoffeeHouse Spam Detection | HTTP | 5601 |
| CoffeeHouse NSFW Classifier | HTTP | 5602 |
| CoffeeHouse Translate | HTTP | 5603 |
| CoffeeHouse CoreNLP | HTTP | 5604 |
| CoffeeHouse Language Detection | HTTP | 5606 |

View File

@ -1,24 +1,24 @@
# CoffeeHouse ALG
CoffeeHouse ALG is a algorithmia API wrapper
## Image Tagger
Predicts the content and appropriate tags for an image
```python
from coffeehouse_alg.image_tagger import ImageTagger
from coffeehouse_alg.utilities import Utilities
url = "https://upload.wikimedia.org/wikipedia/commons/9/9f/Gisele_Bundchen_2018_clear_original_%28cropped%29.jpg"
# Process the image
image_tagger = ImageTagger()
image_content = Utilities.process_img_from_url(url)
image_tagger.predict_tags(image_content)
# {'result': {'character': [], 'copyright': [], 'general': [{'photo': 0.995330810546875}, {'cosplay': 0.28029680252075195}, {'solo': 0.2679383456707001}], 'rating': [{'safe': 0.7592381834983826}, {'questionable': 0.21827033162117004}, {'explicit': 0.024775557219982147}]}, 'metadata': {'content_type': 'json', 'duration': 0.298899313}}
image_tagger.predict_inception(image_content)
# {'result': {'tags': [{'class': 'Persian cat', 'confidence': 0.6589894890785217}, {'class': 'Egyptian cat', 'confidence': 0.009713547304272652}, {'class': 'handkerchief, hankie, hanky, hankey', 'confidence': 0.00886216014623642}, {'class': 'Angora, Angora rabbit', 'confidence': 0.008085943758487701}, {'class': 'teddy, teddy bear', 'confidence': 0.00662141153588891}]}, 'metadata': {'content_type': 'json', 'duration': 0.594030507}}
# CoffeeHouse ALG
CoffeeHouse ALG is a algorithmia API wrapper
## Image Tagger
Predicts the content and appropriate tags for an image
```python
from coffeehouse_alg.image_tagger import ImageTagger
from coffeehouse_alg.utilities import Utilities
url = "https://upload.wikimedia.org/wikipedia/commons/9/9f/Gisele_Bundchen_2018_clear_original_%28cropped%29.jpg"
# Process the image
image_tagger = ImageTagger()
image_content = Utilities.process_img_from_url(url)
image_tagger.predict_tags(image_content)
# {'result': {'character': [], 'copyright': [], 'general': [{'photo': 0.995330810546875}, {'cosplay': 0.28029680252075195}, {'solo': 0.2679383456707001}], 'rating': [{'safe': 0.7592381834983826}, {'questionable': 0.21827033162117004}, {'explicit': 0.024775557219982147}]}, 'metadata': {'content_type': 'json', 'duration': 0.298899313}}
image_tagger.predict_inception(image_content)
# {'result': {'tags': [{'class': 'Persian cat', 'confidence': 0.6589894890785217}, {'class': 'Egyptian cat', 'confidence': 0.009713547304272652}, {'class': 'handkerchief, hankie, hanky, hankey', 'confidence': 0.00886216014623642}, {'class': 'Angora, Angora rabbit', 'confidence': 0.008085943758487701}, {'class': 'teddy, teddy bear', 'confidence': 0.00662141153588891}]}, 'metadata': {'content_type': 'json', 'duration': 0.594030507}}
```

View File

@ -1,23 +1,23 @@
from setuptools import setup, find_packages
setup(
name='coffeehouse_alg',
version='1.0.0',
description='CoffeeHouse algorithmia wrapper',
url='https://github.com/Intellivoid/CoffeeHouse-ALG',
author='Zi Xing Narrakas',
author_email='netkas@intellivoid.info',
classifiers=[
# 3 - Alpha
# 4 - Beta
# 5 - Production/Stable
'Development Status :: 4 - Beta',
'Topic :: API Wrapper',
'Programming Language :: Python :: 3',
],
keywords='multi-label classification nlp neural networks deep learning api wrapper',
packages=find_packages(exclude=['tests']),
install_requires=[
'requests'
]
)
from setuptools import setup, find_packages
setup(
name='coffeehouse_alg',
version='1.0.0',
description='CoffeeHouse algorithmia wrapper',
url='https://github.com/Intellivoid/CoffeeHouse-ALG',
author='Zi Xing Narrakas',
author_email='netkas@intellivoid.info',
classifiers=[
# 3 - Alpha
# 4 - Beta
# 5 - Production/Stable
'Development Status :: 4 - Beta',
'Topic :: API Wrapper',
'Programming Language :: Python :: 3',
],
keywords='multi-label classification nlp neural networks deep learning api wrapper',
packages=find_packages(exclude=['tests']),
install_requires=[
'requests'
]
)

View File

@ -1,123 +1,123 @@
# Python CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-python/ for more details
#
version: 2
jobs:
build:
docker:
# CircleCI maintains a library of pre-built images
# documented at https://circleci.com/docs/2.0/circleci-images/
- image: circleci/python:3.6.6
working_directory: ~/repo
steps:
- checkout
- run:
name: install dependencies
command: |
python3 -m venv venv
ln -s $(which python3) venv/bin/python3.6
. venv/bin/activate
pip install cython sphinx==2.3.1 matplotlib ipython
sudo apt-get update
sudo apt-get install -y graphviz texlive-fonts-recommended texlive-latex-recommended texlive-latex-extra texlive-generic-extra latexmk texlive-xetex
- run:
name: build numpy
command: |
. venv/bin/activate
pip install --upgrade pip 'setuptools<49.2.0'
pip install cython
pip install .
pip install scipy
pip install pandas
- run:
name: create release notes
command: |
. venv/bin/activate
pip install git+https://github.com/hawkowl/towncrier.git@master
VERSION=$(python -c "import setup; print(setup.VERSION)")
towncrier --version $VERSION --yes
./tools/ci/test_all_newsfragments_used.py
- run:
name: run doctests on documentation
command: |
. venv/bin/activate
(cd doc ; git submodule update --init)
python tools/refguide_check.py --rst
- run:
name: build devdocs
command: |
. venv/bin/activate
cd doc
SPHINXOPTS=-q make -e html
- run:
name: build neps
command: |
. venv/bin/activate
cd doc/neps
SPHINXOPTS=-q make -e html
- store_artifacts:
path: doc/build/html/
# - store_artifacts:
# path: doc/neps/_build/html/
# destination: neps
- add_ssh_keys:
fingerprints:
- "9f:8c:e5:3f:53:40:0b:ee:c9:c3:0f:fd:0f:3c:cc:55"
- run:
name: deploy devdocs
command: |
if [ "${CIRCLE_BRANCH}" == "master" ]; then
touch doc/build/html/.nojekyll
./tools/ci/push_docs_to_repo.py doc/build/html \
git@github.com:numpy/devdocs.git \
--committer "numpy-circleci-bot" \
--email "numpy-circleci-bot@nomail" \
--message "Docs build of $CIRCLE_SHA1" \
--force
else
echo "Not on the master branch; skipping deployment"
fi
- add_ssh_keys:
fingerprints:
- "11:fb:19:69:80:3a:6d:37:9c:d1:ac:20:17:cd:c8:17"
- run:
name: select SSH key for neps repo
command: |
cat <<\EOF > ~/.ssh/config
Host github.com
IdentitiesOnly yes
IdentityFile /home/circleci/.ssh/id_rsa_11fb1969803a6d379cd1ac2017cdc817
EOF
- run:
name: deploy neps
command: |
if [ "${CIRCLE_BRANCH}" == "master" ]; then
touch doc/neps/_build/html/.nojekyll
./tools/ci/push_docs_to_repo.py doc/neps/_build/html \
git@github.com:numpy/neps.git \
--committer "numpy-circleci-bot" \
--email "numpy-circleci-bot@nomail" \
--message "Docs build of $CIRCLE_SHA1" \
--force
else
echo "Not on the master branch; skipping deployment"
fi
# Python CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-python/ for more details
#
version: 2
jobs:
build:
docker:
# CircleCI maintains a library of pre-built images
# documented at https://circleci.com/docs/2.0/circleci-images/
- image: circleci/python:3.6.6
working_directory: ~/repo
steps:
- checkout
- run:
name: install dependencies
command: |
python3 -m venv venv
ln -s $(which python3) venv/bin/python3.6
. venv/bin/activate
pip install cython sphinx==2.3.1 matplotlib ipython
sudo apt-get update
sudo apt-get install -y graphviz texlive-fonts-recommended texlive-latex-recommended texlive-latex-extra texlive-generic-extra latexmk texlive-xetex
- run:
name: build numpy
command: |
. venv/bin/activate
pip install --upgrade pip 'setuptools<49.2.0'
pip install cython
pip install .
pip install scipy
pip install pandas
- run:
name: create release notes
command: |
. venv/bin/activate
pip install git+https://github.com/hawkowl/towncrier.git@master
VERSION=$(python -c "import setup; print(setup.VERSION)")
towncrier --version $VERSION --yes
./tools/ci/test_all_newsfragments_used.py
- run:
name: run doctests on documentation
command: |
. venv/bin/activate
(cd doc ; git submodule update --init)
python tools/refguide_check.py --rst
- run:
name: build devdocs
command: |
. venv/bin/activate
cd doc
SPHINXOPTS=-q make -e html
- run:
name: build neps
command: |
. venv/bin/activate
cd doc/neps
SPHINXOPTS=-q make -e html
- store_artifacts:
path: doc/build/html/
# - store_artifacts:
# path: doc/neps/_build/html/
# destination: neps
- add_ssh_keys:
fingerprints:
- "9f:8c:e5:3f:53:40:0b:ee:c9:c3:0f:fd:0f:3c:cc:55"
- run:
name: deploy devdocs
command: |
if [ "${CIRCLE_BRANCH}" == "master" ]; then
touch doc/build/html/.nojekyll
./tools/ci/push_docs_to_repo.py doc/build/html \
git@github.com:numpy/devdocs.git \
--committer "numpy-circleci-bot" \
--email "numpy-circleci-bot@nomail" \
--message "Docs build of $CIRCLE_SHA1" \
--force
else
echo "Not on the master branch; skipping deployment"
fi
- add_ssh_keys:
fingerprints:
- "11:fb:19:69:80:3a:6d:37:9c:d1:ac:20:17:cd:c8:17"
- run:
name: select SSH key for neps repo
command: |
cat <<\EOF > ~/.ssh/config
Host github.com
IdentitiesOnly yes
IdentityFile /home/circleci/.ssh/id_rsa_11fb1969803a6d379cd1ac2017cdc817
EOF
- run:
name: deploy neps
command: |
if [ "${CIRCLE_BRANCH}" == "master" ]; then
touch doc/neps/_build/html/.nojekyll
./tools/ci/push_docs_to_repo.py doc/neps/_build/html \
git@github.com:numpy/neps.git \
--committer "numpy-circleci-bot" \
--email "numpy-circleci-bot@nomail" \
--message "Docs build of $CIRCLE_SHA1" \
--force
else
echo "Not on the master branch; skipping deployment"
fi

View File

@ -1,13 +1,13 @@
codecov:
notify:
require_ci_to_pass: no
after_n_builds: 1
coverage:
status:
project:
default:
# Require 1% coverage, i.e., always succeed
target: 1
patch: false
changes: false
comment: off
codecov:
notify:
require_ci_to_pass: no
after_n_builds: 1
coverage:
status:
project:
default:
# Require 1% coverage, i.e., always succeed
target: 1
patch: false
changes: false
comment: off

View File

@ -1,4 +1,4 @@
[run]
branch = True
include = */numpy/*
disable_warnings = include-ignored
[run]
branch = True
include = */numpy/*
disable_warnings = include-ignored

2
deps/numpy/.ctags.d vendored
View File

@ -1 +1 @@
--langmaps=c:+.src
--langmaps=c:+.src

View File

@ -1,9 +1,9 @@
version: 1
update_configs:
- package_manager: "python"
directory: "/"
update_schedule: "weekly"
commit_message:
prefix: "MAINT"
default_labels:
- "03 - Maintenance"
version: 1
update_configs:
- package_manager: "python"
directory: "/"
update_schedule: "weekly"
commit_message:
prefix: "MAINT"
default_labels:
- "03 - Maintenance"

View File

@ -1,5 +1,5 @@
# Numerical data files
numpy/lib/tests/data/*.npy binary
# Release notes, reduce number of conflicts.
doc/release/*.rst merge=union
# Numerical data files
numpy/lib/tests/data/*.npy binary
# Release notes, reduce number of conflicts.
doc/release/*.rst merge=union

View File

@ -1 +1 @@
NumPy has a Code of Conduct, please see: https://www.numpy.org/devdocs/dev/conduct/code_of_conduct.html
NumPy has a Code of Conduct, please see: https://www.numpy.org/devdocs/dev/conduct/code_of_conduct.html

View File

@ -1,31 +1,31 @@
# Contributing to numpy
## Reporting issues
When reporting issues please include as much detail as possible about your
operating system, numpy version and python version. Whenever possible, please
also include a brief, self-contained code example that demonstrates the problem.
If you are reporting a segfault please include a GDB traceback, which you can
generate by following
[these instructions.](https://github.com/numpy/numpy/blob/master/doc/source/dev/development_environment.rst#debugging)
## Contributing code
Thanks for your interest in contributing code to numpy!
+ If this is your first time contributing to a project on GitHub, please read
through our
[guide to contributing to numpy](https://numpy.org/devdocs/dev/index.html)
+ If you have contributed to other projects on GitHub you can go straight to our
[development workflow](https://numpy.org/devdocs/dev/development_workflow.html)
Either way, please be sure to follow our
[convention for commit messages](https://numpy.org/devdocs/dev/development_workflow.html#writing-the-commit-message).
If you are writing new C code, please follow the style described in
``doc/C_STYLE_GUIDE``.
Suggested ways to work on your development version (compile and run
the tests without interfering with system packages) are described in
``doc/source/dev/development_environment.rst``.
# Contributing to numpy
## Reporting issues
When reporting issues please include as much detail as possible about your
operating system, numpy version and python version. Whenever possible, please
also include a brief, self-contained code example that demonstrates the problem.
If you are reporting a segfault please include a GDB traceback, which you can
generate by following
[these instructions.](https://github.com/numpy/numpy/blob/master/doc/source/dev/development_environment.rst#debugging)
## Contributing code
Thanks for your interest in contributing code to numpy!
+ If this is your first time contributing to a project on GitHub, please read
through our
[guide to contributing to numpy](https://numpy.org/devdocs/dev/index.html)
+ If you have contributed to other projects on GitHub you can go straight to our
[development workflow](https://numpy.org/devdocs/dev/development_workflow.html)
Either way, please be sure to follow our
[convention for commit messages](https://numpy.org/devdocs/dev/development_workflow.html#writing-the-commit-message).
If you are writing new C code, please follow the style described in
``doc/C_STYLE_GUIDE``.
Suggested ways to work on your development version (compile and run
the tests without interfering with system packages) are described in
``doc/source/dev/development_environment.rst``.

View File

@ -1,3 +1,3 @@
github: [numfocus]
tidelift: pypi/numpy
custom: https://www.numpy.org/#support-numpy
github: [numfocus]
tidelift: pypi/numpy
custom: https://www.numpy.org/#support-numpy

View File

@ -1,27 +1,27 @@
<!-- Please describe the issue in detail here, and fill in the fields below -->
### Reproducing code example:
<!-- A short code example that reproduces the problem/missing feature. It should be
self-contained, i.e., possible to run as-is via 'python myproblem.py' -->
```python
import numpy as np
<< your code here >>
```
<!-- Remove these sections for a feature request -->
### Error message:
<!-- If you are reporting a segfault please include a GDB traceback, which you
can generate by following
https://github.com/numpy/numpy/blob/master/doc/source/dev/development_environment.rst#debugging -->
<!-- Full error message, if any (starting from line Traceback: ...) -->
### Numpy/Python version information:
<!-- Output from 'import sys, numpy; print(numpy.__version__, sys.version)' -->
<!-- Please describe the issue in detail here, and fill in the fields below -->
### Reproducing code example:
<!-- A short code example that reproduces the problem/missing feature. It should be
self-contained, i.e., possible to run as-is via 'python myproblem.py' -->
```python
import numpy as np
<< your code here >>
```
<!-- Remove these sections for a feature request -->
### Error message:
<!-- If you are reporting a segfault please include a GDB traceback, which you
can generate by following
https://github.com/numpy/numpy/blob/master/doc/source/dev/development_environment.rst#debugging -->
<!-- Full error message, if any (starting from line Traceback: ...) -->
### Numpy/Python version information:
<!-- Output from 'import sys, numpy; print(numpy.__version__, sys.version)' -->

View File

@ -1,7 +1,7 @@
<!-- Please be sure you are following the instructions in the dev guidelines
http://www.numpy.org/devdocs/dev/development_workflow.html
-->
<!-- We'd appreciate it if your commit message is properly formatted
http://www.numpy.org/devdocs/dev/development_workflow.html#writing-the-commit-message
-->
<!-- Please be sure you are following the instructions in the dev guidelines
http://www.numpy.org/devdocs/dev/development_workflow.html
-->
<!-- We'd appreciate it if your commit message is properly formatted
http://www.numpy.org/devdocs/dev/development_workflow.html#writing-the-commit-message
-->

390
deps/numpy/.gitignore vendored
View File

@ -1,195 +1,195 @@
# Editor temporary/working/backup files #
#########################################
.#*
[#]*#
*~
*$
*.bak
*.diff
.idea/
*.iml
*.ipr
*.iws
*.org
.project
pmip
*.rej
.settings/
.*.sw[nop]
.sw[nop]
*.tmp
*.vim
.vscode
tags
cscope.out
# gnu global
GPATH
GRTAGS
GSYMS
GTAGS
.cache
# Compiled source #
###################
*.a
*.com
*.class
*.dll
*.exe
*.o
*.o.d
*.py[ocd]
*.so
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.bz2
*.bzip2
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.tbz2
*.tgz
*.zip
# Python files #
################
# setup.py working directory
build
# sphinx build directory
_build
# setup.py dist directory
dist
doc/build
doc/cdoc/build
# Egg metadata
*.egg-info
# The shelf plugin uses this dir
./.shelf
MANIFEST
.cache
# Paver generated files #
#########################
/release
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# Patches #
###########
*.patch
*.diff
# OS generated files #
######################
.DS_Store*
.VolumeIcon.icns
.fseventsd
Icon?
.gdb_history
ehthumbs.db
Thumbs.db
.directory
# pytest generated files #
##########################
/.pytest_cache
# Things specific to this project #
###################################
numpy/core/__svn_version__.py
doc/numpy.scipy.org/_build
numpy/__config__.py
numpy/core/include/numpy/__multiarray_api.h
numpy/core/include/numpy/__ufunc_api.h
numpy/core/include/numpy/_numpyconfig.h
numpy/version.py
site.cfg
setup.cfg
.tox
numpy/core/include/numpy/__multiarray_api.c
numpy/core/include/numpy/__ufunc_api.c
numpy/core/include/numpy/__umath_generated.c
numpy/core/include/numpy/config.h
numpy/core/include/numpy/multiarray_api.txt
numpy/core/include/numpy/ufunc_api.txt
numpy/core/lib/
numpy/core/src/common/npy_binsearch.h
numpy/core/src/common/npy_cpu_features.c
numpy/core/src/common/npy_partition.h
numpy/core/src/common/npy_sort.h
numpy/core/src/common/templ_common.h
numpy/core/src/multiarray/_multiarray_tests.c
numpy/core/src/multiarray/arraytypes.c
numpy/core/src/multiarray/einsum.c
numpy/core/src/multiarray/lowlevel_strided_loops.c
numpy/core/src/multiarray/multiarray_tests.c
numpy/core/src/multiarray/nditer_templ.c
numpy/core/src/multiarray/scalartypes.c
numpy/core/src/npymath/ieee754.c
numpy/core/src/npymath/npy_math_complex.c
numpy/core/src/npymath/npy_math_internal.h
numpy/core/src/npysort/binsearch.c
numpy/core/src/npysort/heapsort.c
numpy/core/src/npysort/mergesort.c
numpy/core/src/npysort/quicksort.c
numpy/core/src/npysort/radixsort.c
numpy/core/src/npysort/selection.c
numpy/core/src/npysort/timsort.c
numpy/core/src/npysort/sort.c
numpy/core/src/private/npy_binsearch.h
numpy/core/src/private/npy_partition.h
numpy/core/src/private/templ_common.h
numpy/core/src/umath/_operand_flag_tests.c
numpy/core/src/umath/_rational_tests.c
numpy/core/src/umath/_struct_ufunc_tests.c
numpy/core/src/umath/_umath_tests.c
numpy/core/src/umath/scalarmath.c
numpy/core/src/umath/funcs.inc
numpy/core/src/umath/clip.[ch]
numpy/core/src/umath/loops.[ch]
numpy/core/src/umath/matmul.[ch]
numpy/core/src/umath/operand_flag_tests.c
numpy/core/src/umath/simd.inc
numpy/core/src/umath/struct_ufunc_test.c
numpy/core/src/umath/test_rational.c
numpy/core/src/umath/umath_tests.c
numpy/distutils/__config__.py
numpy/linalg/umath_linalg.c
doc/source/**/generated/
benchmarks/results
benchmarks/html
benchmarks/env
benchmarks/numpy
# cythonized files
cythonize.dat
numpy/random/_mtrand/_mtrand.c
numpy/random/*.c
numpy/random/legacy/*.c
numpy/random/_mtrand/randint_helpers.pxi
numpy/random/bounded_integers.pyx
numpy/random/bounded_integers.pxd
tools/swig/test/Array_wrap.cxx
tools/swig/test/Farray_wrap.cxx
tools/swig/test/Farray.py
tools/swig/test/Flat_wrap.cxx
tools/swig/test/Flat.py
tools/swig/test/Fortran_wrap.cxx
tools/swig/test/Fortran.py
tools/swig/test/Matrix_wrap.cxx
tools/swig/test/Matrix.py
tools/swig/test/Tensor_wrap.cxx
tools/swig/test/Tensor.py
tools/swig/test/Vector.py
tools/swig/test/Vector_wrap.cxx
tools/swig/test/Array.py
# Editor temporary/working/backup files #
#########################################
.#*
[#]*#
*~
*$
*.bak
*.diff
.idea/
*.iml
*.ipr
*.iws
*.org
.project
pmip
*.rej
.settings/
.*.sw[nop]
.sw[nop]
*.tmp
*.vim
.vscode
tags
cscope.out
# gnu global
GPATH
GRTAGS
GSYMS
GTAGS
.cache
# Compiled source #
###################
*.a
*.com
*.class
*.dll
*.exe
*.o
*.o.d
*.py[ocd]
*.so
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.bz2
*.bzip2
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.tbz2
*.tgz
*.zip
# Python files #
################
# setup.py working directory
build
# sphinx build directory
_build
# setup.py dist directory
dist
doc/build
doc/cdoc/build
# Egg metadata
*.egg-info
# The shelf plugin uses this dir
./.shelf
MANIFEST
.cache
# Paver generated files #
#########################
/release
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# Patches #
###########
*.patch
*.diff
# OS generated files #
######################
.DS_Store*
.VolumeIcon.icns
.fseventsd
Icon?
.gdb_history
ehthumbs.db
Thumbs.db
.directory
# pytest generated files #
##########################
/.pytest_cache
# Things specific to this project #
###################################
numpy/core/__svn_version__.py
doc/numpy.scipy.org/_build
numpy/__config__.py
numpy/core/include/numpy/__multiarray_api.h
numpy/core/include/numpy/__ufunc_api.h
numpy/core/include/numpy/_numpyconfig.h
numpy/version.py
site.cfg
setup.cfg
.tox
numpy/core/include/numpy/__multiarray_api.c
numpy/core/include/numpy/__ufunc_api.c
numpy/core/include/numpy/__umath_generated.c
numpy/core/include/numpy/config.h
numpy/core/include/numpy/multiarray_api.txt
numpy/core/include/numpy/ufunc_api.txt
numpy/core/lib/
numpy/core/src/common/npy_binsearch.h
numpy/core/src/common/npy_cpu_features.c
numpy/core/src/common/npy_partition.h
numpy/core/src/common/npy_sort.h
numpy/core/src/common/templ_common.h
numpy/core/src/multiarray/_multiarray_tests.c
numpy/core/src/multiarray/arraytypes.c
numpy/core/src/multiarray/einsum.c
numpy/core/src/multiarray/lowlevel_strided_loops.c
numpy/core/src/multiarray/multiarray_tests.c
numpy/core/src/multiarray/nditer_templ.c
numpy/core/src/multiarray/scalartypes.c
numpy/core/src/npymath/ieee754.c
numpy/core/src/npymath/npy_math_complex.c
numpy/core/src/npymath/npy_math_internal.h
numpy/core/src/npysort/binsearch.c
numpy/core/src/npysort/heapsort.c
numpy/core/src/npysort/mergesort.c
numpy/core/src/npysort/quicksort.c
numpy/core/src/npysort/radixsort.c
numpy/core/src/npysort/selection.c
numpy/core/src/npysort/timsort.c
numpy/core/src/npysort/sort.c
numpy/core/src/private/npy_binsearch.h
numpy/core/src/private/npy_partition.h
numpy/core/src/private/templ_common.h
numpy/core/src/umath/_operand_flag_tests.c
numpy/core/src/umath/_rational_tests.c
numpy/core/src/umath/_struct_ufunc_tests.c
numpy/core/src/umath/_umath_tests.c
numpy/core/src/umath/scalarmath.c
numpy/core/src/umath/funcs.inc
numpy/core/src/umath/clip.[ch]
numpy/core/src/umath/loops.[ch]
numpy/core/src/umath/matmul.[ch]
numpy/core/src/umath/operand_flag_tests.c
numpy/core/src/umath/simd.inc
numpy/core/src/umath/struct_ufunc_test.c
numpy/core/src/umath/test_rational.c
numpy/core/src/umath/umath_tests.c
numpy/distutils/__config__.py
numpy/linalg/umath_linalg.c
doc/source/**/generated/
benchmarks/results
benchmarks/html
benchmarks/env
benchmarks/numpy
# cythonized files
cythonize.dat
numpy/random/_mtrand/_mtrand.c
numpy/random/*.c
numpy/random/legacy/*.c
numpy/random/_mtrand/randint_helpers.pxi
numpy/random/bounded_integers.pyx
numpy/random/bounded_integers.pxd
tools/swig/test/Array_wrap.cxx
tools/swig/test/Farray_wrap.cxx
tools/swig/test/Farray.py
tools/swig/test/Flat_wrap.cxx
tools/swig/test/Flat.py
tools/swig/test/Fortran_wrap.cxx
tools/swig/test/Fortran.py
tools/swig/test/Matrix_wrap.cxx
tools/swig/test/Matrix.py
tools/swig/test/Tensor_wrap.cxx
tools/swig/test/Tensor.py
tools/swig/test/Vector.py
tools/swig/test/Vector_wrap.cxx
tools/swig/test/Array.py

View File

@ -1,6 +1,6 @@
[submodule "doc/scipy-sphinx-theme"]
path = doc/scipy-sphinx-theme
url = https://github.com/scipy/scipy-sphinx-theme.git
[submodule "doc/sphinxext"]
path = doc/sphinxext
url = https://github.com/numpy/numpydoc.git
[submodule "doc/scipy-sphinx-theme"]
path = doc/scipy-sphinx-theme
url = https://github.com/scipy/scipy-sphinx-theme.git
[submodule "doc/sphinxext"]
path = doc/sphinxext
url = https://github.com/numpy/numpydoc.git

48
deps/numpy/.lgtm.yml vendored
View File

@ -1,24 +1,24 @@
path_classifiers:
library:
- tools
generated:
# The exports defined in __init__.py are defined in the Cython module
# np.random.mtrand. By excluding this file we suppress a number of
# "undefined export" alerts
- numpy/random/__init__.py
extraction:
python:
python_setup:
requirements:
- cython>=0.29
cpp:
index:
build_command:
- python3 setup.py build
after_prepare:
- pip3 install --upgrade --user cython
- export PATH="$HOME/.local/bin:$PATH"
queries:
- include: py/file-not-closed
path_classifiers:
library:
- tools
generated:
# The exports defined in __init__.py are defined in the Cython module
# np.random.mtrand. By excluding this file we suppress a number of
# "undefined export" alerts
- numpy/random/__init__.py
extraction:
python:
python_setup:
requirements:
- cython>=0.29
cpp:
index:
build_command:
- python3 setup.py build
after_prepare:
- pip3 install --upgrade --user cython
- export PATH="$HOME/.local/bin:$PATH"
queries:
- include: py/file-not-closed

544
deps/numpy/.mailmap vendored
View File

@ -1,272 +1,272 @@
# Prevent git from showing duplicate names with commands like "git shortlog"
# See the manpage of git-shortlog for details.
# The syntax is:
# Name that should be used <email that should be used> Bad name <bad email>
#
# You can skip Bad name if it is the same as the one that should be used, and is unique.
#
# This file is up-to-date if the command git log --format="%aN <%aE>" | sort -u
# gives no duplicates.
Aaron Baecker <abaecker@localhost> abaecker <abaecker@localhost>
Alan Fontenot <logeaux@yahoo.com> logeaux <logeaux@yahoo.com>
Alan Fontenot <logeaux@yahoo.com> logeaux <36168460+logeaux@users.noreply.github.com>
Abdul Muneer <abdulmuneer@gmail.com> abdulmuneer <abdulmuneer@gmail.com>
Adam Ginsburg <adam.g.ginsburg@gmail.com> Adam Ginsburg <keflavich@gmail.com>
Albert Jornet Puig <albert.jornet@ic3.cat> jurnix <albert.jornet@ic3.cat>
Alex Griffing <argriffi@ncsu.edu> alex <argriffi@ncsu.edu>
Alex Griffing <argriffi@ncsu.edu> argriffing <argriffi@ncsu.edu>
Alex Griffing <argriffi@ncsu.edu> argriffing <argriffing@gmail.com>
Alex Griffing <argriffi@ncsu.edu> argriffing <argriffing@users.noreply.github.com>
Alex Thomas <alexthomas93@users.noreply.github.com> alexthomas93 <alexthomas93@users.noreply.github.com>
Alexander Belopolsky <abalkin@enlnt.com> Alexander Belopolsky <a@enlnt.com>
Alexander Belopolsky <abalkin@enlnt.com> Alexander Belopolsky <a@enlnt.com>
Alexander Belopolsky <abalkin@enlnt.com> sasha <sasha@localhost>
Alexander Jung <kontakt@ajung.name> aleju <kontakt@ajung.name>
Alexander Shadchin <alexandr.shadchin@gmail.com> Alexandr Shadchin <alexandr.shadchin@gmail.com>
Alexander Shadchin <alexandr.shadchin@gmail.com> shadchin <alexandr.shadchin@gmail.com>
Allan Haldane <allan.haldane@gmail.com> ahaldane <ealloc@gmail.com>
Alok Singhal <gandalf013@gmail.com> Alok Singhal <alok@merfinllc.com>
Alyssa Quek <alyssaquek@gmail.com> alyssaq <alyssaquek@gmail.com>
Amir Sarabadani <ladsgroup@gmail.com> amir <ladsgroup@gmail.com>
Anatoly Techtonik <techtonik@gmail.com> anatoly techtonik <techtonik@gmail.com>
Andras Deak <deak.andris@gmail.com> adeak <adeak@users.noreply.github.com>
Andrea Pattori <andrea.pattori@gmail.com> patto90 <andrea.pattori@gmail.com>
Andrea Sangalli <and-sang@outlook.com> and-sang <53617841+and-sang@users.noreply.github.com>
Andrei Kucharavy <ank@andreikucharavy.com> chiffa <ank@andreikucharavy.com>
Anne Archibald <peridot.faceted@gmail.com> aarchiba <peridot.faceted@gmail.com>
Anne Archibald <peridot.faceted@gmail.com> Anne Archibald <archibald@astron.nl>
Anže Starič <anze.staric@gmail.com> astaric <anze.staric@gmail.com>
Aron Ahmadia <aron@ahmadia.net> ahmadia <aron@ahmadia.net>
Aarthi Agurusa <agurusa@gmail.com> agurusa <agurusa@gmail.com>
Arun Persaud <apersaud@lbl.gov> Arun Persaud <arun@nubati.net>
Åsmund Hjulstad <ahju@statoil.com> Åsmund Hjulstad <asmund@hjulstad.com>
Auke Wiggers <wiggers.auke@gmail.com> auke <wiggers.auke@gmail.com>
Badhri Narayanan Krishnakumar <badhrinarayanan.k@gmail.com> badhrink <badhrinarayanan.k@gmail.com>
Behzad Nouri <behzadnouri@gmail.com> behzad nouri <behzadnouri@gmail.com>
Benjamin Root <ben.v.root@gmail.com> Ben Root <ben.v.root@gmail.com>
Benjamin Root <ben.v.root@gmail.com> weathergod <?@?>
Bernardt Duvenhage <bernardt.duvenhage@gmail.com> bduvenhage <bernardt.duvenhage@gmail.com>
Bertrand Lefebvre <bertrand.l3f@gmail.com> bertrand <bertrand.l3f@gmail.com>
Bertrand Lefebvre <bertrand.l3f@gmail.com> Bertrand <bertrand.l3f@gmail.com>
Bharat Raghunathan <bharatr@symphonyai.com> Bharat123Rox <bharatr@symphonyai.com>
Bill Spotz <wfspotz@sandia.gov> William Spotz <wfspotz@sandia.gov@localhost>
Bill Spotz <wfspotz@sandia.gov> wfspotz@sandia.gov <wfspotz@sandia.gov@localhost>
Bob Eldering <eldering@jive.eu> bobeldering <eldering@jive.eu>
Brett R Murphy <bmurphy@enthought.com> brettrmurphy <bmurphy@enthought.com>
Bryan Van de Ven <bryanv@continuum.io> Bryan Van de Ven <bryan@Laptop-3.local>
Bryan Van de Ven <bryanv@continuum.io> Bryan Van de Ven <bryan@laptop.local>
Bui Duc Minh <buiducminh287@gmail.com> Mibu287 <41239569+Mibu287@users.noreply.github.com>
Carl Kleffner <cmkleffner@gmail.com> carlkl <cmkleffner@gmail.com>
Chris Burns <chris.burns@localhost> chris.burns <chris.burns@localhost>
Chris Kerr <debdepba@dasganma.tk> Chris Kerr <cjk34@cam.ac.uk>
Christian Clauss <cclauss@bluewin.ch> cclauss <cclauss@bluewin.ch>
Christopher Hanley <chanley@gmail.com> chanley <chanley@gmail.com>
Christoph Gohlke <cgohlke@uci.edu> cgholke <?@?>
Christoph Gohlke <cgohlke@uci.edu> cgohlke <cgohlke@uci.edu>
Christoph Gohlke <cgohlke@uci.edu> Christolph Gohlke <cgohlke@uci.edu>
Chunlin Fang <fangchunlin@huawei.com> Qiyu8 <fangchunlin@huawei.com>
Chunlin Fang <fangchunlin@huawei.com> Chunlin <fangchunlin@huawei.com>
Colin Snyder <47012605+colinsnyder@users.noreply.github.com> colinsnyder <47012605+colinsnyder@users.noreply.github.com>
Daniel B Allan <daniel.b.allan@gmail.com> danielballan <daniel.b.allan@gmail.com>
Daniel da Silva <mail@danieldasilva.org> Daniel da Silva <daniel@meltingwax.net>
Daniel da Silva <mail@danieldasilva.org> Daniel da Silva <var.mail.daniel@gmail.com>
Daniel Hrisca <daniel.hrisca@gmail.com> danielhrisca <daniel.hrisca@gmail.com>
Daniel J Farrell <danieljfarrel@me.com> danieljfarrell <danieljfarrel@me.com>
Daniel Müllner <Daniel Müllner muellner@math.stanford.edu> Daniel <muellner@localhost.localdomain>
Daniel Müllner <Daniel Müllner muellner@math.stanford.edu> dmuellner <Daniel Müllner muellner@math.stanford.edu>
Daniel Rasmussen <daniel.rasmussen@appliedbrainresearch.com> drasmuss <daniel.rasmussen@appliedbrainresearch.com>
David Huard <david.huard@gmail.com> dhuard <dhuard@localhost>
David M Cooke <cookedm@localhost> cookedm <cookedm@localhost>
David Nicholson <davidjn@google.com> davidjn <dnic12345@gmail.com>
David Ochoa <ochoadavid@gmail.com> ochoadavid <ochoadavid@gmail.com>
Dawid Zych <dawid.zych@yandex.com> silenc3r <dawid.zych@yandex.com>
Dennis Zollo <dzollo@swift-nav.com> denniszollo <dzollo@swift-nav.com>
Derek Homeier <derek@astro.physik.uni-goettingen.de> Derek Homeier <dhomeie@gwdg.de>
Derek Homeier <derek@astro.physik.uni-goettingen.de> Derek Homeir <derek@astro.phsik.uni-goettingen.de>
Derek Homeier <derek@astro.physik.uni-goettingen.de> Derek Homier <derek@astro.physik.uni-goettingen.de>
Derrick Williams <myutat@gmail.com> derrick <myutat@gmail.com>
Dmitriy Shalyga <zuko3d@gmail.com> zuko3d <zuko3d@gmail.com>
Dustan Levenstein <dlevenstein@gmail.com> dustanlevenstein <43019642+dustanlevenstein@users.noreply.github.com>
Ed Schofield <edschofield@localhost> edschofield <edschofield@localhost>
Egor Zindy <ezindy@gmail.com> zindy <ezindy@gmail.com>
Endolith <endolith@gmail.com>
Erik M. Bray <erik.bray@lri.fr> E. M. Bray <erik.bray@lri.fr>
Erik M. Bray <erik.bray@lri.fr> Erik Bray <erik.m.bray@gmail.com>
Eric Fode <ericfode@gmail.com> Eric Fode <ericfode@linuxlaptop.(none)>
Eric Quintero <eric.antonio.quintero@gmail.com> e-q <eric.antonio.quintero@gmail.com>
Ernest N. Mamikonyan <ernest.mamikonyan@gmail.com> mamikony <ernest.mamikonyan@sig.com>
Etienne Guesnet <etienne.guesnet.external@atos.net> EGuesnet <51407514+EGuesnet@users.noreply.github.com>
Evgeni Burovski <evgeny.burovskiy@gmail.com> Evgeni Burovski <evgeni@burovski.me>
Evgeny Toder <evgeny.toder@jpmorgan.com> eltjpm <evgeny.toder@jpmorgan.com>
Fernando Perez <Fernando.Perez@berkeley.edu> Fernando Perez <fperez@fperez.org>
Friedrich Dunne <dunneff@tcd.ie> dunneff <dunneff@tcd.ie>
Frederic Bastien <nouiz@nouiz.org> Frederic <nouiz@nouiz.org>
Gael Varoquaux <gael.varoquaux@normalesup.org> GaelVaroquaux <gael.varoquaux@normalesup.org>
Gerrit Holl <gerrit.holl@utoronto.ca> Gerrit Holl <g.holl@reading.ac.uk>
Giuseppe Venturini <ggventurini@users.noreply.github.com> ggventurini <ggventurini@users.noreply.github.com>
Golnaz Irannejad <golnazirannejad@gmail.com> golnazir <golnazirannejad@gmail.com>
Gopal Singh Meena <gopalmeena94@gmail.com> gopalmeena <gopalmeena94@gmail.com>
Greg Knoll <gregory@bccn-berlin.de> gkBCCN <gregory@bccn-berlin.de>
Greg Yang <sorcererofdm@gmail.com> eulerreich <sorcererofdm@gmail.com>
Greg Young <gfyoung17@gmail.com> gfyoung <gfyoung17@gmail.com>
Greg Young <gfyoung17@gmail.com> gfyoung <gfyoung@mit.edu>
Guo Ci <zguoci@gmail.com> guoci <zguoci@gmail.com>
Han Genuit <hangenuit@gmail.com> 87 <hangenuit@gmail.com>
Han Genuit <hangenuit@gmail.com> hangenuit@gmail.com <hangenuit@gmail.com>
Han Genuit <hangenuit@gmail.com> Han <hangenuit@gmail.com>
Hanno Klemm <hanno.klemm@maerskoil.com> hklemm <hanno.klemm@maerskoil.com>
Hemil Desai <desai38@purdue.edu> hemildesai <desai38@purdue.edu>
Hiroyuki V. Yamazaki <hiroyuki.vincent.yamazaki@gmail.com> hvy <hiroyuki.vincent.yamazaki@gmail.com>
Gerhard Hobler <gerhard.hobler@tuwien.ac.at> hobler <gerhard.hobler@tuwien.ac.at>
Guillaume Peillex <guillaume.peillex@gmail.com> hippo91 <guillaume.peillex@gmail.com>
Irvin Probst <irvin.probst@ensta-bretagne.fr> I--P <irvin.probst@ensta-bretagne.fr>
Jaime Fernandez <jaime.frio@gmail.com> Jaime Fernandez <jaime.fernandez@hp.com>
Jaime Fernandez <jaime.frio@gmail.com> jaimefrio <jaime.frio@gmail.com>
Jaime Fernandez <jaime.frio@gmail.com> Jaime <jaime.frio@gmail.com>
James Webber <jamestwebber@gmail.com> jamestwebber <jamestwebber@gmail.com>
Jarrod Millman <millman@berkeley.edu> Jarrod Millman <jarrod.millman@gmail.com>
Jason Grout <jason-github@creativetrax.com> Jason Grout <jason.grout@drake.edu>
Jason King <pizza@netspace.net.au> jason king <pizza@netspace.net.au>
Jay Bourque <jay.bourque@continuum.io> jayvius <jay.bourque@continuum.io>
Jean Utke <jutke@allstate.com> jutke <jutke@allstate.com>
Jeffrey Yancey <jeffrey@octane5.com> Jeff <3820914+jeffyancey@users.noreply.github.com>
Jeremy Lay <jlay80@gmail.com> jeremycl01 <jlay80@gmail.com>
Jérémie du Boisberranger <jeremie.du-boisberranger@inria.fr> jeremiedbb <34657725+jeremiedbb@users.noreply.github.com>
Jerome Kelleher <jerome.kelleher@ed.ac.uk> jeromekelleher <jerome.kelleher@ed.ac.uk>
Johannes Hampp <johannes.hampp@zeu.uni-giessen.de> euronion <42553970+euronion@users.noreply.github.com>
Johannes Schönberger <hannesschoenberger@gmail.com> Johannes Schönberger <jschoenberger@demuc.de>
Johann Faouzi <johann.faouzi@gmail.com> johann.faouzi <johann.faouzi@icm-institute.org>
John Darbyshire <24256554+attack68@users.noreply.github.com> attack68 <24256554+attack68@users.noreply.github.com>
John Kirkham <kirkhamj@janelia.hhmi.org> jakirkham <jakirkham@gmail.com>
Joseph Fox-Rabinovitz <jfoxrabinovitz@gmail.com> Joseph Fox-Rabinovitz <joseph.r.fox-rabinovitz@nasa.gov>
Joseph Fox-Rabinovitz <jfoxrabinovitz@gmail.com> Joseph Fox-Rabinovitz <madphysicist@users.noreply.github.com>
Joseph Fox-Rabinovitz <jfoxrabinovitz@gmail.com> Mad Physicist <madphysicist@users.noreply.github.com>
Joseph Martinot-Lagarde <contrebasse@gmail.com> Joseph Martinot-Lagarde <joseph.martinot-lagarde@onera.fr>
Julian Taylor <juliantaylor108@gmail.com> Julian Taylor <jtaylor.debian@googlemail.com>
Julian Taylor <juliantaylor108@gmail.com> Julian Taylor <juliantaylor108@googlemail.com>
Julien Lhermitte <jrmlhermitte@gmail.com> Julien Lhermitte <lhermitte@bnl.gov>
Julien Schueller <julien.schueller@gmail.com> jschueller <julien.schueller@gmail.com>
Justus Magin <keewis@posteo.de> keewis <keewis@users.noreply.github.com>
Justus Magin <keewis@posteo.de> Keewis <keewis@posteo.de>
Kai Striega <kaistriega@gmail.com> kai <kaistriega@gmail.com>
Kai Striega <kaistriega@gmail.com> kai-striega <kaistriega@gmail.com>
Kai Striega <kaistriega@gmail.com> kai-striega <kaistriega+github@gmail.com>
Khaled Ben Abdallah Okuda <khaled.ben.okuda@gmail.com> KhaledTo <khaled.ben.okuda@gmail.com>
Kiko Correoso <kachine@protonmail.com> kikocorreoso <kikocorreoso@gmail.com>
Kiko Correoso <kachine@protonmail.com> kikocorreoso <kikocorreoso@users.noreply.github.com>
Konrad Kapp <k_kapp@yahoo.com> k_kapp@yahoo.com <k_kapp@yahoo.com>
Kriti Singh <kritisingh1.ks@gmail.com> kritisingh1 <kritisingh1.ks@gmail.com>
Kmol Yuan <pyslvs@gmail.com> Yuan <pyslvs@gmail.com>
Lars Buitinck <larsmans@gmail.com> Lars Buitinck <l.buitinck@esciencecenter.nl>
Lars Buitinck <larsmans@gmail.com> Lars Buitinck <L.J.Buitinck@uva.nl>
Lars Grüter <lagru@mailbox.org> Lars G <lagru@mailbox.org>
Luis Pedro Coelho <luis@luispedro.org> Luis Pedro Coelho <lpc@cmu.edu>
Luke Zoltan Kelley <lkelley@cfa.harvard.edu> lzkelley <lkelley@cfa.harvard.edu>
Magdalena Proszewska <magdalena.proszewska@gmail.com> mpro <magdalena.proszewska@gmail.com>
Magdalena Proszewska <magdalena.proszewska@gmail.com> mproszewska <38814059+mproszewska@users.noreply.github.com>
Manoj Kumar <manojkumarsivaraj334@gmail.com> MechCoder <manojkumarsivaraj334@gmail.com>
Marcin Podhajski <podhajskimarcin@gmail.com> m-podhajski <36967358+m-podhajski@users.noreply.github.com>
Mark DePristo <mdepristo@synapdx.com> markdepristo <mdepristo@synapdx.com>
Mark Weissman <mw9050@gmail.com> m-d-w <mw9050@gmail.com>
Mark Wiebe <mwwiebe@gmail.com> Mark <mwwiebe@gmail.com>
Mark Wiebe <mwwiebe@gmail.com> Mark Wiebe <mwiebe@continuum.io>
Mark Wiebe <mwwiebe@gmail.com> Mark Wiebe <mwiebe@enthought.com>
Mark Wiebe <mwwiebe@gmail.com> Mark Wiebe <mwiebe@georg.(none)>
Martin Goodson <martingoodson@gmail.com> martingoodson <martingoodson@gmail.com>
Martin Reinecke <martin@mpa-garching.mpg.de> mreineck <martin@mpa-garching.mpg.de>
Martin Teichmann <martin.teichmann@xfel.eu> Martin Teichmann <lkb.teichmann@gmail.com>
Matt Hancock <not.matt.hancock@gmail.com> matt <mhancock743@gmail.com>
Martino Sorbaro <martino.sorbaro@ed.ac.uk> martinosorb <martino.sorbaro@ed.ac.uk>
Mattheus Ueckermann <empeeu@yahoo.com> empeeu <empeeu@yahoo.com>
Matthew Harrigan <harrigan.matthew@gmail.com> MattHarrigan <harrigan.matthew@gmail.com>
Matti Picus <matti.picus@gmail.com> mattip <matti.picus@gmail.com>
Maximilian Konrad <maximilianlukaskonrad@hotmail.de> MLK97 <maximilianlukaskonrad@hotmail.de>
Melissa Weber Mendonça <melissawm@gmail.com> Melissa Weber Mendonca <melissawm@gmail.com>
Melissa Weber Mendonça <melissawm@gmail.com> melissawm <melissawm@gmail.com>
Michael Behrisch <oss@behrisch.de> behrisch <behrisch@users.sourceforge.net>
Michael Droettboom <mdboom@gmail.com> mdroe <mdroe@localhost>
Michael K. Tran <trankmichael@gmail.com> mtran <trankmichael@gmail.com>
Michael Martin <mmartin4242@gmail.com> mmartin <mmartin4242@gmail.com>
Michael Schnaitter <schnaitterm@knights.ucf.edu> schnaitterm <schnaitterm@users.noreply.github.com>
Muhammad Kasim <firman.kasim@gmail.com> mfkasim91 <firman.kasim@gmail.com>
Masashi Kishimoto <drehbleistift@gmail.com> kishimoto-banana <drehbleistift@gmail.com>
Nathaniel J. Smith <njs@pobox.com> njsmith <njs@pobox.com>
Naveen Arunachalam <notatroll.troll@gmail.com> naveenarun <notatroll.troll@gmail.com>
Nicolas Scheffer <nicolas.scheffer@sri.com> Nicolas Scheffer <scheffer@speech.sri.com>
Nicholas A. Del Grosso <delgrosso@bio.lmu.de> nickdg <delgrosso@bio.lmu.de>
Nick Minkyu Lee <mknicklee@protonmail.com> fivemok <9394929+fivemok@users.noreply.github.com>
Ondřej Čertík <ondrej.certik@gmail.com> Ondrej Certik <ondrej.certik@gmail.com>
Óscar Villellas Guillén <oscar.villellas@continuum.io> ovillellas <oscar.villellas@continuum.io>
Pat Miller <patmiller@localhost> patmiller <patmiller@localhost>
Paul Ivanov <pi@berkeley.edu> Paul Ivanov <paul.ivanov@local>
Paul Jacobson <hpj3@myuw.net> hpaulj <hpj3@myuw.net>
Pearu Peterson <pearu.peterson@gmail.com> Pearu Peterson <pearu@pearu-laptop.(none)>
Pete Peeradej Tanruangporn <pete.tanru@gmail.com> petetanru <pete.tanru@gmail.com>
Peter J Cock <p.j.a.cock@googlemail.com> peterjc <p.j.a.cock@googlemail.com>
Phil Elson <pelson.pub@gmail.com>
Pierre GM <pierregmcode@gmail.com> pierregm <pierregmcode@gmail.com>
Pierre GM <pierregmcode@gmail.com> pierregm <pierregm@localhost>
Piotr Gaiński <dociebieaniuszlem@gmail.com> panpiort8 <dociebieaniuszlem@gmail.com>
Prabhu Ramachandran <prabhu@localhost> prabhu <prabhu@localhost>
Przemyslaw Bartosik <sendthenote@gmail.com> przemb <sendthenote@gmail.com>
Ralf Gommers <ralf.gommers@gmail.com> Ralf Gommers <ralf.gommers@googlemail.com>
Ralf Gommers <ralf.gommers@gmail.com> rgommers <ralf.gommers@googlemail.com>
Rehas Sachdeva <aquannie@gmail.com> rehassachdeva <aquannie@gmail.com>
Ritta Narita <narittan@gmail.com> RittaNarita <narittan@gmail.com>
Riya Sharma <navneet.nmk@gmail.com> ayir <navneet.nmk@gmail.com>
Robert Kern <rkern@enthought.com> Robert Kern <robert.kern@gmail.com>
Robert LU <robberphex@gmail.com> RobberPhex <robberphex@gmail.com>
Ronan Lamy <ronan.lamy@gmail.com> Ronan Lamy <Ronan.Lamy@normalesup.org>
Russell Hewett <rhewett@mit.edu> rhewett <rhewett@mit.edu>
Ryan Blakemore <rbtnet@gmail.com> ryanblak <rbtnet@gmail.com>
Sam Preston <j.sam.preston@gmail.com> jspreston <j.sam.preston@gmail.com>
Sam Radhakrishnan <sk09idm@gmail.com> = <=>
Sam Radhakrishnan <sk09idm@gmail.com> sam09 <sk09idm@gmail.com>
Sanchez Gonzalez Alvaro <as12513@imperial.ac.uk> alvarosg <as12513@imperial.ac.uk>
Saullo Giovani <saullogiovani@gmail.com> saullogiovani <saullogiovani@gmail.com>
Saurabh Mehta <e.samehta@gmail.com>
Sebastian Berg <sebastian@sipsolutions.net> seberg <sebastian@sipsolutions.net>
Shekhar Prasad Rajak <shekharrajak@live.com> shekharrajak <shekharrajak@live.com>
Shota Kawabuchi <shota.kawabuchi+GitHub@gmail.com> skwbc <shota.kawabuchi+GitHub@gmail.com>
Siavash Eliasi <siavashserver@gmail.com> siavashserver <siavashserver@gmail.com>
Simon Gasse <simon.gasse@gmail.com> sgasse <sgasse@users.noreply.github.com>
Søren Rasmussen <soren.rasmussen@alexandra.dk> sorenrasmussenai <47032123+sorenrasmussenai@users.noreply.github.com>
Stefan Behnel <stefan_ml@behnel.de> scoder <stefan_ml@behnel.de>
Stefan van der Walt <stefanv@berkeley.edu> Stefan van der Walt <sjvdwalt@gmail.com>
Stefan van der Walt <stefanv@berkeley.edu> Stefan van der Walt <stefan@sun.ac.za>
Stephan Hoyer <shoyer@gmail.com> Stephan Hoyer <shoyer@climate.com>
Steven J Kern <kern.steven0@gmail.com>
SuryaChand P <psschand@gmail.com> Surya P <psschand@gmail.com>
SuryaChand P <psschand@gmail.com> psschand <psschand@gmail.com>
Thomas A Caswell <tcaswell@gmail.com> Thomas A Caswell <tcaswell@bnl.gov>
Tim Cera <tim@cerazone.net> tim cera <tcera@sjrwmd.com>
Tim Teichmann <t.teichmann@dashdos.com> tteichmann <t.teichmann@dashdos.com>
Tim Teichmann <t.teichmann@dashdos.com> tteichmann <44259103+tteichmann@users.noreply.github.com>
Tom Boyd <pezcore@users.noreply.github.com> pezcore <pezcore@users.noreply.github.com>
Tom Poole <t.b.poole@gmail.com> tpoole <t.b.poole@gmail.com>
Tony LaTorre <tlatorre@uchicago.edu> tlatorre <tlatorre@uchicago.edu>
Travis Oliphant <travis@continuum.io> Travis E. Oliphant <teoliphant@gmail.com>
Travis Oliphant <travis@continuum.io> Travis Oliphant <oliphant@enthought.com>
Valentin Haenel <valentin@haenel.co> Valentin Haenel <valentin.haenel@gmx.de>
Rakesh Vasudevan <rakesh.nvasudev@gmail.com> vrakesh <rakesh.nvasudev@gmail.com>
Vrinda Narayan <talk2vrinda@gmail.com> vrindaaa <48102157+vrindaaa@users.noreply.github.com>
Warren Weckesser <warren.weckesser@enthought.com> Warren Weckesser <warren.weckesser@gmail.com>
Weitang Li <liwt31@163.com> wtli@Dirac <liwt31@163.com>
Weitang Li <liwt31@163.com> wtli <liwt31@163.com>
Wendell Smith <wendellwsmith@gmail.com> Wendell Smith <wackywendell@gmail.com>
Wim Glenn <wim.glenn@melbourneit.com.au> wim glenn <wim.glenn@melbourneit.com.au>
Wojtek Ruszczewski <git@wr.waw.pl> wrwrwr <git@wr.waw.pl>
Yuji Kanagawa <yuji.kngw.80s.revive@gmail.com> kngwyu <yuji.kngw.80s.revive@gmail.com>
Yury Kirienko <yury.kirienko@gmail.com> kirienko <yury.kirienko@gmail.com>
Zac Hatfield-Dodds <zac.hatfield.dodds@gmail.com> Zac-HD <zac.hatfield.dodds@gmail.com>
Zixu Zhao <zixu.zhao.tireless@gmail.com> ZZhaoTireless <zixu.zhao.tireless@gmail.com>
Ziyan Zhou <ziyan.zhou@mujin.co.jp> Ziyan <ziyan.zhou@mujin.co.jp>
Zieji Pohz <poh.ziji@gmail.com> jpoh <poh.zijie@gmail.com>
Zieji Pohz <poh.ziji@gmail.com> zjpoh <poh.zijie@gmail.com>
Zieji Pohz <poh.ziji@gmail.com> Zijie (ZJ) Poh <8103276+zjpoh@users.noreply.github.com>
Zolisa Bleki <zolisa.bleki@gmail.com> zoj613 <44142765+zoj613@users.noreply.github.com>
Zolisa Bleki <zolisa.bleki@gmail.com> RedRuM <44142765+zoj613@users.noreply.github.com>
luzpaz <kunda@scribus.net> luz.paz <luzpaz@users.noreply.github.com>
luzpaz <kunda@scribus.net> luzpaz <luzpaz@users.noreply.github.com>
spacescientist <aspacescientist@protonmail.com> spacescientist <spacescientist@pm.me>
# Prevent git from showing duplicate names with commands like "git shortlog"
# See the manpage of git-shortlog for details.
# The syntax is:
# Name that should be used <email that should be used> Bad name <bad email>
#
# You can skip Bad name if it is the same as the one that should be used, and is unique.
#
# This file is up-to-date if the command git log --format="%aN <%aE>" | sort -u
# gives no duplicates.
Aaron Baecker <abaecker@localhost> abaecker <abaecker@localhost>
Alan Fontenot <logeaux@yahoo.com> logeaux <logeaux@yahoo.com>
Alan Fontenot <logeaux@yahoo.com> logeaux <36168460+logeaux@users.noreply.github.com>
Abdul Muneer <abdulmuneer@gmail.com> abdulmuneer <abdulmuneer@gmail.com>
Adam Ginsburg <adam.g.ginsburg@gmail.com> Adam Ginsburg <keflavich@gmail.com>
Albert Jornet Puig <albert.jornet@ic3.cat> jurnix <albert.jornet@ic3.cat>
Alex Griffing <argriffi@ncsu.edu> alex <argriffi@ncsu.edu>
Alex Griffing <argriffi@ncsu.edu> argriffing <argriffi@ncsu.edu>
Alex Griffing <argriffi@ncsu.edu> argriffing <argriffing@gmail.com>
Alex Griffing <argriffi@ncsu.edu> argriffing <argriffing@users.noreply.github.com>
Alex Thomas <alexthomas93@users.noreply.github.com> alexthomas93 <alexthomas93@users.noreply.github.com>
Alexander Belopolsky <abalkin@enlnt.com> Alexander Belopolsky <a@enlnt.com>
Alexander Belopolsky <abalkin@enlnt.com> Alexander Belopolsky <a@enlnt.com>
Alexander Belopolsky <abalkin@enlnt.com> sasha <sasha@localhost>
Alexander Jung <kontakt@ajung.name> aleju <kontakt@ajung.name>
Alexander Shadchin <alexandr.shadchin@gmail.com> Alexandr Shadchin <alexandr.shadchin@gmail.com>
Alexander Shadchin <alexandr.shadchin@gmail.com> shadchin <alexandr.shadchin@gmail.com>
Allan Haldane <allan.haldane@gmail.com> ahaldane <ealloc@gmail.com>
Alok Singhal <gandalf013@gmail.com> Alok Singhal <alok@merfinllc.com>
Alyssa Quek <alyssaquek@gmail.com> alyssaq <alyssaquek@gmail.com>
Amir Sarabadani <ladsgroup@gmail.com> amir <ladsgroup@gmail.com>
Anatoly Techtonik <techtonik@gmail.com> anatoly techtonik <techtonik@gmail.com>
Andras Deak <deak.andris@gmail.com> adeak <adeak@users.noreply.github.com>
Andrea Pattori <andrea.pattori@gmail.com> patto90 <andrea.pattori@gmail.com>
Andrea Sangalli <and-sang@outlook.com> and-sang <53617841+and-sang@users.noreply.github.com>
Andrei Kucharavy <ank@andreikucharavy.com> chiffa <ank@andreikucharavy.com>
Anne Archibald <peridot.faceted@gmail.com> aarchiba <peridot.faceted@gmail.com>
Anne Archibald <peridot.faceted@gmail.com> Anne Archibald <archibald@astron.nl>
Anže Starič <anze.staric@gmail.com> astaric <anze.staric@gmail.com>
Aron Ahmadia <aron@ahmadia.net> ahmadia <aron@ahmadia.net>
Aarthi Agurusa <agurusa@gmail.com> agurusa <agurusa@gmail.com>
Arun Persaud <apersaud@lbl.gov> Arun Persaud <arun@nubati.net>
Åsmund Hjulstad <ahju@statoil.com> Åsmund Hjulstad <asmund@hjulstad.com>
Auke Wiggers <wiggers.auke@gmail.com> auke <wiggers.auke@gmail.com>
Badhri Narayanan Krishnakumar <badhrinarayanan.k@gmail.com> badhrink <badhrinarayanan.k@gmail.com>
Behzad Nouri <behzadnouri@gmail.com> behzad nouri <behzadnouri@gmail.com>
Benjamin Root <ben.v.root@gmail.com> Ben Root <ben.v.root@gmail.com>
Benjamin Root <ben.v.root@gmail.com> weathergod <?@?>
Bernardt Duvenhage <bernardt.duvenhage@gmail.com> bduvenhage <bernardt.duvenhage@gmail.com>
Bertrand Lefebvre <bertrand.l3f@gmail.com> bertrand <bertrand.l3f@gmail.com>
Bertrand Lefebvre <bertrand.l3f@gmail.com> Bertrand <bertrand.l3f@gmail.com>
Bharat Raghunathan <bharatr@symphonyai.com> Bharat123Rox <bharatr@symphonyai.com>
Bill Spotz <wfspotz@sandia.gov> William Spotz <wfspotz@sandia.gov@localhost>
Bill Spotz <wfspotz@sandia.gov> wfspotz@sandia.gov <wfspotz@sandia.gov@localhost>
Bob Eldering <eldering@jive.eu> bobeldering <eldering@jive.eu>
Brett R Murphy <bmurphy@enthought.com> brettrmurphy <bmurphy@enthought.com>
Bryan Van de Ven <bryanv@continuum.io> Bryan Van de Ven <bryan@Laptop-3.local>
Bryan Van de Ven <bryanv@continuum.io> Bryan Van de Ven <bryan@laptop.local>
Bui Duc Minh <buiducminh287@gmail.com> Mibu287 <41239569+Mibu287@users.noreply.github.com>
Carl Kleffner <cmkleffner@gmail.com> carlkl <cmkleffner@gmail.com>
Chris Burns <chris.burns@localhost> chris.burns <chris.burns@localhost>
Chris Kerr <debdepba@dasganma.tk> Chris Kerr <cjk34@cam.ac.uk>
Christian Clauss <cclauss@bluewin.ch> cclauss <cclauss@bluewin.ch>
Christopher Hanley <chanley@gmail.com> chanley <chanley@gmail.com>
Christoph Gohlke <cgohlke@uci.edu> cgholke <?@?>
Christoph Gohlke <cgohlke@uci.edu> cgohlke <cgohlke@uci.edu>
Christoph Gohlke <cgohlke@uci.edu> Christolph Gohlke <cgohlke@uci.edu>
Chunlin Fang <fangchunlin@huawei.com> Qiyu8 <fangchunlin@huawei.com>
Chunlin Fang <fangchunlin@huawei.com> Chunlin <fangchunlin@huawei.com>
Colin Snyder <47012605+colinsnyder@users.noreply.github.com> colinsnyder <47012605+colinsnyder@users.noreply.github.com>
Daniel B Allan <daniel.b.allan@gmail.com> danielballan <daniel.b.allan@gmail.com>
Daniel da Silva <mail@danieldasilva.org> Daniel da Silva <daniel@meltingwax.net>
Daniel da Silva <mail@danieldasilva.org> Daniel da Silva <var.mail.daniel@gmail.com>
Daniel Hrisca <daniel.hrisca@gmail.com> danielhrisca <daniel.hrisca@gmail.com>
Daniel J Farrell <danieljfarrel@me.com> danieljfarrell <danieljfarrel@me.com>
Daniel Müllner <Daniel Müllner muellner@math.stanford.edu> Daniel <muellner@localhost.localdomain>
Daniel Müllner <Daniel Müllner muellner@math.stanford.edu> dmuellner <Daniel Müllner muellner@math.stanford.edu>
Daniel Rasmussen <daniel.rasmussen@appliedbrainresearch.com> drasmuss <daniel.rasmussen@appliedbrainresearch.com>
David Huard <david.huard@gmail.com> dhuard <dhuard@localhost>
David M Cooke <cookedm@localhost> cookedm <cookedm@localhost>
David Nicholson <davidjn@google.com> davidjn <dnic12345@gmail.com>
David Ochoa <ochoadavid@gmail.com> ochoadavid <ochoadavid@gmail.com>
Dawid Zych <dawid.zych@yandex.com> silenc3r <dawid.zych@yandex.com>
Dennis Zollo <dzollo@swift-nav.com> denniszollo <dzollo@swift-nav.com>
Derek Homeier <derek@astro.physik.uni-goettingen.de> Derek Homeier <dhomeie@gwdg.de>
Derek Homeier <derek@astro.physik.uni-goettingen.de> Derek Homeir <derek@astro.phsik.uni-goettingen.de>
Derek Homeier <derek@astro.physik.uni-goettingen.de> Derek Homier <derek@astro.physik.uni-goettingen.de>
Derrick Williams <myutat@gmail.com> derrick <myutat@gmail.com>
Dmitriy Shalyga <zuko3d@gmail.com> zuko3d <zuko3d@gmail.com>
Dustan Levenstein <dlevenstein@gmail.com> dustanlevenstein <43019642+dustanlevenstein@users.noreply.github.com>
Ed Schofield <edschofield@localhost> edschofield <edschofield@localhost>
Egor Zindy <ezindy@gmail.com> zindy <ezindy@gmail.com>
Endolith <endolith@gmail.com>
Erik M. Bray <erik.bray@lri.fr> E. M. Bray <erik.bray@lri.fr>
Erik M. Bray <erik.bray@lri.fr> Erik Bray <erik.m.bray@gmail.com>
Eric Fode <ericfode@gmail.com> Eric Fode <ericfode@linuxlaptop.(none)>
Eric Quintero <eric.antonio.quintero@gmail.com> e-q <eric.antonio.quintero@gmail.com>
Ernest N. Mamikonyan <ernest.mamikonyan@gmail.com> mamikony <ernest.mamikonyan@sig.com>
Etienne Guesnet <etienne.guesnet.external@atos.net> EGuesnet <51407514+EGuesnet@users.noreply.github.com>
Evgeni Burovski <evgeny.burovskiy@gmail.com> Evgeni Burovski <evgeni@burovski.me>
Evgeny Toder <evgeny.toder@jpmorgan.com> eltjpm <evgeny.toder@jpmorgan.com>
Fernando Perez <Fernando.Perez@berkeley.edu> Fernando Perez <fperez@fperez.org>
Friedrich Dunne <dunneff@tcd.ie> dunneff <dunneff@tcd.ie>
Frederic Bastien <nouiz@nouiz.org> Frederic <nouiz@nouiz.org>
Gael Varoquaux <gael.varoquaux@normalesup.org> GaelVaroquaux <gael.varoquaux@normalesup.org>
Gerrit Holl <gerrit.holl@utoronto.ca> Gerrit Holl <g.holl@reading.ac.uk>
Giuseppe Venturini <ggventurini@users.noreply.github.com> ggventurini <ggventurini@users.noreply.github.com>
Golnaz Irannejad <golnazirannejad@gmail.com> golnazir <golnazirannejad@gmail.com>
Gopal Singh Meena <gopalmeena94@gmail.com> gopalmeena <gopalmeena94@gmail.com>
Greg Knoll <gregory@bccn-berlin.de> gkBCCN <gregory@bccn-berlin.de>
Greg Yang <sorcererofdm@gmail.com> eulerreich <sorcererofdm@gmail.com>
Greg Young <gfyoung17@gmail.com> gfyoung <gfyoung17@gmail.com>
Greg Young <gfyoung17@gmail.com> gfyoung <gfyoung@mit.edu>
Guo Ci <zguoci@gmail.com> guoci <zguoci@gmail.com>
Han Genuit <hangenuit@gmail.com> 87 <hangenuit@gmail.com>
Han Genuit <hangenuit@gmail.com> hangenuit@gmail.com <hangenuit@gmail.com>
Han Genuit <hangenuit@gmail.com> Han <hangenuit@gmail.com>
Hanno Klemm <hanno.klemm@maerskoil.com> hklemm <hanno.klemm@maerskoil.com>
Hemil Desai <desai38@purdue.edu> hemildesai <desai38@purdue.edu>
Hiroyuki V. Yamazaki <hiroyuki.vincent.yamazaki@gmail.com> hvy <hiroyuki.vincent.yamazaki@gmail.com>
Gerhard Hobler <gerhard.hobler@tuwien.ac.at> hobler <gerhard.hobler@tuwien.ac.at>
Guillaume Peillex <guillaume.peillex@gmail.com> hippo91 <guillaume.peillex@gmail.com>
Irvin Probst <irvin.probst@ensta-bretagne.fr> I--P <irvin.probst@ensta-bretagne.fr>
Jaime Fernandez <jaime.frio@gmail.com> Jaime Fernandez <jaime.fernandez@hp.com>
Jaime Fernandez <jaime.frio@gmail.com> jaimefrio <jaime.frio@gmail.com>
Jaime Fernandez <jaime.frio@gmail.com> Jaime <jaime.frio@gmail.com>
James Webber <jamestwebber@gmail.com> jamestwebber <jamestwebber@gmail.com>
Jarrod Millman <millman@berkeley.edu> Jarrod Millman <jarrod.millman@gmail.com>
Jason Grout <jason-github@creativetrax.com> Jason Grout <jason.grout@drake.edu>
Jason King <pizza@netspace.net.au> jason king <pizza@netspace.net.au>
Jay Bourque <jay.bourque@continuum.io> jayvius <jay.bourque@continuum.io>
Jean Utke <jutke@allstate.com> jutke <jutke@allstate.com>
Jeffrey Yancey <jeffrey@octane5.com> Jeff <3820914+jeffyancey@users.noreply.github.com>
Jeremy Lay <jlay80@gmail.com> jeremycl01 <jlay80@gmail.com>
Jérémie du Boisberranger <jeremie.du-boisberranger@inria.fr> jeremiedbb <34657725+jeremiedbb@users.noreply.github.com>
Jerome Kelleher <jerome.kelleher@ed.ac.uk> jeromekelleher <jerome.kelleher@ed.ac.uk>
Johannes Hampp <johannes.hampp@zeu.uni-giessen.de> euronion <42553970+euronion@users.noreply.github.com>
Johannes Schönberger <hannesschoenberger@gmail.com> Johannes Schönberger <jschoenberger@demuc.de>
Johann Faouzi <johann.faouzi@gmail.com> johann.faouzi <johann.faouzi@icm-institute.org>
John Darbyshire <24256554+attack68@users.noreply.github.com> attack68 <24256554+attack68@users.noreply.github.com>
John Kirkham <kirkhamj@janelia.hhmi.org> jakirkham <jakirkham@gmail.com>
Joseph Fox-Rabinovitz <jfoxrabinovitz@gmail.com> Joseph Fox-Rabinovitz <joseph.r.fox-rabinovitz@nasa.gov>
Joseph Fox-Rabinovitz <jfoxrabinovitz@gmail.com> Joseph Fox-Rabinovitz <madphysicist@users.noreply.github.com>
Joseph Fox-Rabinovitz <jfoxrabinovitz@gmail.com> Mad Physicist <madphysicist@users.noreply.github.com>
Joseph Martinot-Lagarde <contrebasse@gmail.com> Joseph Martinot-Lagarde <joseph.martinot-lagarde@onera.fr>
Julian Taylor <juliantaylor108@gmail.com> Julian Taylor <jtaylor.debian@googlemail.com>
Julian Taylor <juliantaylor108@gmail.com> Julian Taylor <juliantaylor108@googlemail.com>
Julien Lhermitte <jrmlhermitte@gmail.com> Julien Lhermitte <lhermitte@bnl.gov>
Julien Schueller <julien.schueller@gmail.com> jschueller <julien.schueller@gmail.com>
Justus Magin <keewis@posteo.de> keewis <keewis@users.noreply.github.com>
Justus Magin <keewis@posteo.de> Keewis <keewis@posteo.de>
Kai Striega <kaistriega@gmail.com> kai <kaistriega@gmail.com>
Kai Striega <kaistriega@gmail.com> kai-striega <kaistriega@gmail.com>
Kai Striega <kaistriega@gmail.com> kai-striega <kaistriega+github@gmail.com>
Khaled Ben Abdallah Okuda <khaled.ben.okuda@gmail.com> KhaledTo <khaled.ben.okuda@gmail.com>
Kiko Correoso <kachine@protonmail.com> kikocorreoso <kikocorreoso@gmail.com>
Kiko Correoso <kachine@protonmail.com> kikocorreoso <kikocorreoso@users.noreply.github.com>
Konrad Kapp <k_kapp@yahoo.com> k_kapp@yahoo.com <k_kapp@yahoo.com>
Kriti Singh <kritisingh1.ks@gmail.com> kritisingh1 <kritisingh1.ks@gmail.com>
Kmol Yuan <pyslvs@gmail.com> Yuan <pyslvs@gmail.com>
Lars Buitinck <larsmans@gmail.com> Lars Buitinck <l.buitinck@esciencecenter.nl>
Lars Buitinck <larsmans@gmail.com> Lars Buitinck <L.J.Buitinck@uva.nl>
Lars Grüter <lagru@mailbox.org> Lars G <lagru@mailbox.org>
Luis Pedro Coelho <luis@luispedro.org> Luis Pedro Coelho <lpc@cmu.edu>
Luke Zoltan Kelley <lkelley@cfa.harvard.edu> lzkelley <lkelley@cfa.harvard.edu>
Magdalena Proszewska <magdalena.proszewska@gmail.com> mpro <magdalena.proszewska@gmail.com>
Magdalena Proszewska <magdalena.proszewska@gmail.com> mproszewska <38814059+mproszewska@users.noreply.github.com>
Manoj Kumar <manojkumarsivaraj334@gmail.com> MechCoder <manojkumarsivaraj334@gmail.com>
Marcin Podhajski <podhajskimarcin@gmail.com> m-podhajski <36967358+m-podhajski@users.noreply.github.com>
Mark DePristo <mdepristo@synapdx.com> markdepristo <mdepristo@synapdx.com>
Mark Weissman <mw9050@gmail.com> m-d-w <mw9050@gmail.com>
Mark Wiebe <mwwiebe@gmail.com> Mark <mwwiebe@gmail.com>
Mark Wiebe <mwwiebe@gmail.com> Mark Wiebe <mwiebe@continuum.io>
Mark Wiebe <mwwiebe@gmail.com> Mark Wiebe <mwiebe@enthought.com>
Mark Wiebe <mwwiebe@gmail.com> Mark Wiebe <mwiebe@georg.(none)>
Martin Goodson <martingoodson@gmail.com> martingoodson <martingoodson@gmail.com>
Martin Reinecke <martin@mpa-garching.mpg.de> mreineck <martin@mpa-garching.mpg.de>
Martin Teichmann <martin.teichmann@xfel.eu> Martin Teichmann <lkb.teichmann@gmail.com>
Matt Hancock <not.matt.hancock@gmail.com> matt <mhancock743@gmail.com>
Martino Sorbaro <martino.sorbaro@ed.ac.uk> martinosorb <martino.sorbaro@ed.ac.uk>
Mattheus Ueckermann <empeeu@yahoo.com> empeeu <empeeu@yahoo.com>
Matthew Harrigan <harrigan.matthew@gmail.com> MattHarrigan <harrigan.matthew@gmail.com>
Matti Picus <matti.picus@gmail.com> mattip <matti.picus@gmail.com>
Maximilian Konrad <maximilianlukaskonrad@hotmail.de> MLK97 <maximilianlukaskonrad@hotmail.de>
Melissa Weber Mendonça <melissawm@gmail.com> Melissa Weber Mendonca <melissawm@gmail.com>
Melissa Weber Mendonça <melissawm@gmail.com> melissawm <melissawm@gmail.com>
Michael Behrisch <oss@behrisch.de> behrisch <behrisch@users.sourceforge.net>
Michael Droettboom <mdboom@gmail.com> mdroe <mdroe@localhost>
Michael K. Tran <trankmichael@gmail.com> mtran <trankmichael@gmail.com>
Michael Martin <mmartin4242@gmail.com> mmartin <mmartin4242@gmail.com>
Michael Schnaitter <schnaitterm@knights.ucf.edu> schnaitterm <schnaitterm@users.noreply.github.com>
Muhammad Kasim <firman.kasim@gmail.com> mfkasim91 <firman.kasim@gmail.com>
Masashi Kishimoto <drehbleistift@gmail.com> kishimoto-banana <drehbleistift@gmail.com>
Nathaniel J. Smith <njs@pobox.com> njsmith <njs@pobox.com>
Naveen Arunachalam <notatroll.troll@gmail.com> naveenarun <notatroll.troll@gmail.com>
Nicolas Scheffer <nicolas.scheffer@sri.com> Nicolas Scheffer <scheffer@speech.sri.com>
Nicholas A. Del Grosso <delgrosso@bio.lmu.de> nickdg <delgrosso@bio.lmu.de>
Nick Minkyu Lee <mknicklee@protonmail.com> fivemok <9394929+fivemok@users.noreply.github.com>
Ondřej Čertík <ondrej.certik@gmail.com> Ondrej Certik <ondrej.certik@gmail.com>
Óscar Villellas Guillén <oscar.villellas@continuum.io> ovillellas <oscar.villellas@continuum.io>
Pat Miller <patmiller@localhost> patmiller <patmiller@localhost>
Paul Ivanov <pi@berkeley.edu> Paul Ivanov <paul.ivanov@local>
Paul Jacobson <hpj3@myuw.net> hpaulj <hpj3@myuw.net>
Pearu Peterson <pearu.peterson@gmail.com> Pearu Peterson <pearu@pearu-laptop.(none)>
Pete Peeradej Tanruangporn <pete.tanru@gmail.com> petetanru <pete.tanru@gmail.com>
Peter J Cock <p.j.a.cock@googlemail.com> peterjc <p.j.a.cock@googlemail.com>
Phil Elson <pelson.pub@gmail.com>
Pierre GM <pierregmcode@gmail.com> pierregm <pierregmcode@gmail.com>
Pierre GM <pierregmcode@gmail.com> pierregm <pierregm@localhost>
Piotr Gaiński <dociebieaniuszlem@gmail.com> panpiort8 <dociebieaniuszlem@gmail.com>
Prabhu Ramachandran <prabhu@localhost> prabhu <prabhu@localhost>
Przemyslaw Bartosik <sendthenote@gmail.com> przemb <sendthenote@gmail.com>
Ralf Gommers <ralf.gommers@gmail.com> Ralf Gommers <ralf.gommers@googlemail.com>
Ralf Gommers <ralf.gommers@gmail.com> rgommers <ralf.gommers@googlemail.com>
Rehas Sachdeva <aquannie@gmail.com> rehassachdeva <aquannie@gmail.com>
Ritta Narita <narittan@gmail.com> RittaNarita <narittan@gmail.com>
Riya Sharma <navneet.nmk@gmail.com> ayir <navneet.nmk@gmail.com>
Robert Kern <rkern@enthought.com> Robert Kern <robert.kern@gmail.com>
Robert LU <robberphex@gmail.com> RobberPhex <robberphex@gmail.com>
Ronan Lamy <ronan.lamy@gmail.com> Ronan Lamy <Ronan.Lamy@normalesup.org>
Russell Hewett <rhewett@mit.edu> rhewett <rhewett@mit.edu>
Ryan Blakemore <rbtnet@gmail.com> ryanblak <rbtnet@gmail.com>
Sam Preston <j.sam.preston@gmail.com> jspreston <j.sam.preston@gmail.com>
Sam Radhakrishnan <sk09idm@gmail.com> = <=>
Sam Radhakrishnan <sk09idm@gmail.com> sam09 <sk09idm@gmail.com>
Sanchez Gonzalez Alvaro <as12513@imperial.ac.uk> alvarosg <as12513@imperial.ac.uk>
Saullo Giovani <saullogiovani@gmail.com> saullogiovani <saullogiovani@gmail.com>
Saurabh Mehta <e.samehta@gmail.com>
Sebastian Berg <sebastian@sipsolutions.net> seberg <sebastian@sipsolutions.net>
Shekhar Prasad Rajak <shekharrajak@live.com> shekharrajak <shekharrajak@live.com>
Shota Kawabuchi <shota.kawabuchi+GitHub@gmail.com> skwbc <shota.kawabuchi+GitHub@gmail.com>
Siavash Eliasi <siavashserver@gmail.com> siavashserver <siavashserver@gmail.com>
Simon Gasse <simon.gasse@gmail.com> sgasse <sgasse@users.noreply.github.com>
Søren Rasmussen <soren.rasmussen@alexandra.dk> sorenrasmussenai <47032123+sorenrasmussenai@users.noreply.github.com>
Stefan Behnel <stefan_ml@behnel.de> scoder <stefan_ml@behnel.de>
Stefan van der Walt <stefanv@berkeley.edu> Stefan van der Walt <sjvdwalt@gmail.com>
Stefan van der Walt <stefanv@berkeley.edu> Stefan van der Walt <stefan@sun.ac.za>
Stephan Hoyer <shoyer@gmail.com> Stephan Hoyer <shoyer@climate.com>
Steven J Kern <kern.steven0@gmail.com>
SuryaChand P <psschand@gmail.com> Surya P <psschand@gmail.com>
SuryaChand P <psschand@gmail.com> psschand <psschand@gmail.com>
Thomas A Caswell <tcaswell@gmail.com> Thomas A Caswell <tcaswell@bnl.gov>
Tim Cera <tim@cerazone.net> tim cera <tcera@sjrwmd.com>
Tim Teichmann <t.teichmann@dashdos.com> tteichmann <t.teichmann@dashdos.com>
Tim Teichmann <t.teichmann@dashdos.com> tteichmann <44259103+tteichmann@users.noreply.github.com>
Tom Boyd <pezcore@users.noreply.github.com> pezcore <pezcore@users.noreply.github.com>
Tom Poole <t.b.poole@gmail.com> tpoole <t.b.poole@gmail.com>
Tony LaTorre <tlatorre@uchicago.edu> tlatorre <tlatorre@uchicago.edu>
Travis Oliphant <travis@continuum.io> Travis E. Oliphant <teoliphant@gmail.com>
Travis Oliphant <travis@continuum.io> Travis Oliphant <oliphant@enthought.com>
Valentin Haenel <valentin@haenel.co> Valentin Haenel <valentin.haenel@gmx.de>
Rakesh Vasudevan <rakesh.nvasudev@gmail.com> vrakesh <rakesh.nvasudev@gmail.com>
Vrinda Narayan <talk2vrinda@gmail.com> vrindaaa <48102157+vrindaaa@users.noreply.github.com>
Warren Weckesser <warren.weckesser@enthought.com> Warren Weckesser <warren.weckesser@gmail.com>
Weitang Li <liwt31@163.com> wtli@Dirac <liwt31@163.com>
Weitang Li <liwt31@163.com> wtli <liwt31@163.com>
Wendell Smith <wendellwsmith@gmail.com> Wendell Smith <wackywendell@gmail.com>
Wim Glenn <wim.glenn@melbourneit.com.au> wim glenn <wim.glenn@melbourneit.com.au>
Wojtek Ruszczewski <git@wr.waw.pl> wrwrwr <git@wr.waw.pl>
Yuji Kanagawa <yuji.kngw.80s.revive@gmail.com> kngwyu <yuji.kngw.80s.revive@gmail.com>
Yury Kirienko <yury.kirienko@gmail.com> kirienko <yury.kirienko@gmail.com>
Zac Hatfield-Dodds <zac.hatfield.dodds@gmail.com> Zac-HD <zac.hatfield.dodds@gmail.com>
Zixu Zhao <zixu.zhao.tireless@gmail.com> ZZhaoTireless <zixu.zhao.tireless@gmail.com>
Ziyan Zhou <ziyan.zhou@mujin.co.jp> Ziyan <ziyan.zhou@mujin.co.jp>
Zieji Pohz <poh.ziji@gmail.com> jpoh <poh.zijie@gmail.com>
Zieji Pohz <poh.ziji@gmail.com> zjpoh <poh.zijie@gmail.com>
Zieji Pohz <poh.ziji@gmail.com> Zijie (ZJ) Poh <8103276+zjpoh@users.noreply.github.com>
Zolisa Bleki <zolisa.bleki@gmail.com> zoj613 <44142765+zoj613@users.noreply.github.com>
Zolisa Bleki <zolisa.bleki@gmail.com> RedRuM <44142765+zoj613@users.noreply.github.com>
luzpaz <kunda@scribus.net> luz.paz <luzpaz@users.noreply.github.com>
luzpaz <kunda@scribus.net> luzpaz <luzpaz@users.noreply.github.com>
spacescientist <aspacescientist@protonmail.com> spacescientist <spacescientist@pm.me>

278
deps/numpy/.travis.yml vendored
View File

@ -1,139 +1,139 @@
# After changing this file, check it on:
# http://lint.travis-ci.org/
language: python
group: travis_latest
os: linux
dist: bionic
# Travis whitelists the installable packages, additions can be requested
# https://github.com/travis-ci/apt-package-whitelist
addons:
apt:
packages: &common_packages
- gfortran
- libgfortran5
- libgfortran3
- libatlas-base-dev
# Speedup builds, particularly when USE_CHROOT=1
- eatmydata
cache:
directories:
- $HOME/.cache/pip
stages:
# Do the style check and a single test job, don't proceed if it fails
- name: Initial tests
# Do the rest of the tests
- name: Comprehensive tests
env:
global:
- WHEELHOUSE_UPLOADER_USERNAME=travis.numpy
# The following is generated with the command:
# travis encrypt -r numpy/numpy WHEELHOUSE_UPLOADER_SECRET=tH3AP1KeY
- secure: "IEicLPrP2uW+jW51GRwkONQpdPqMVtQL5bdroqR/U8r9Tr\
XrbCVRhp4AP8JYZT0ptoBpmZWWGjmKBndB68QlMiUjQPow\
iFWt9Ka92CaqYdU7nqfWp9VImSndPmssjmCXJ1v1IjZPAM\
ahp7Qnm0rWRmA0z9SomuRUQOJQ6s684vU="
jobs:
include:
# Do all python versions without environment variables set
- stage: Initial tests
python: 3.8
- stage: Comprehensive tests
python: 3.6
- python: 3.7
- python: 3.9
- python: 3.6
env: USE_DEBUG=1
addons:
apt:
packages:
- *common_packages
- cython3-dbg
- python3-dbg
- python3-dev
- python3-setuptools
- python: 3.7
env: USE_WHEEL=1 RUN_FULL_TESTS=1 RUN_COVERAGE=1 INSTALL_PICKLE5=1
- python: 3.7
env: USE_SDIST=1
- python: 3.7
env:
- PYTHONOPTIMIZE=2
- BLAS=None
- LAPACK=None
- ATLAS=None
- NPY_BLAS_ORDER=mkl,blis,openblas,atlas,accelerate,blas
- NPY_LAPACK_ORDER=MKL,OPENBLAS,ATLAS,ACCELERATE,LAPACK
- USE_ASV=1
- python: 3.7
env:
- NPY_RELAXED_STRIDES_CHECKING=0
# use custom symbol-suffixed openblas build, not system ATLAS
- DOWNLOAD_OPENBLAS=1
- CHECK_BLAS=1
- NPY_USE_BLAS_ILP64=1
addons:
apt:
packages:
- gfortran
- eatmydata
- libgfortran5
- libgfortran3
- python: 3.7
env: USE_WHEEL=1 NPY_RELAXED_STRIDES_DEBUG=1
- python: 3.7
env: NUMPY_EXPERIMENTAL_ARRAY_FUNCTION=0
- python: 3.7
env:
- BLAS=None
- LAPACK=None
- ATLAS=None
- python: 3.7
os: linux
arch: ppc64le
env:
# use OpenBLAS build, not system ATLAS
- DOWNLOAD_OPENBLAS=1
- ATLAS=None
- python: 3.7
os: linux
arch: s390x
env:
# use OpenBLAS build, not system ATLAS
- DOWNLOAD_OPENBLAS=1
- NPY_USE_BLAS_ILP64=1
- ATLAS=None
- python: 3.7
os: linux
arch: arm64
env:
# use OpenBLAS build, not system ATLAS
- DOWNLOAD_OPENBLAS=1
- ATLAS=None
before_install:
- ./tools/travis-before-install.sh
script:
- ./tools/travis-test.sh
after_success:
- ./tools/travis-upload-wheel.sh
# After changing this file, check it on:
# http://lint.travis-ci.org/
language: python
group: travis_latest
os: linux
dist: bionic
# Travis whitelists the installable packages, additions can be requested
# https://github.com/travis-ci/apt-package-whitelist
addons:
apt:
packages: &common_packages
- gfortran
- libgfortran5
- libgfortran3
- libatlas-base-dev
# Speedup builds, particularly when USE_CHROOT=1
- eatmydata
cache:
directories:
- $HOME/.cache/pip
stages:
# Do the style check and a single test job, don't proceed if it fails
- name: Initial tests
# Do the rest of the tests
- name: Comprehensive tests
env:
global:
- WHEELHOUSE_UPLOADER_USERNAME=travis.numpy
# The following is generated with the command:
# travis encrypt -r numpy/numpy WHEELHOUSE_UPLOADER_SECRET=tH3AP1KeY
- secure: "IEicLPrP2uW+jW51GRwkONQpdPqMVtQL5bdroqR/U8r9Tr\
XrbCVRhp4AP8JYZT0ptoBpmZWWGjmKBndB68QlMiUjQPow\
iFWt9Ka92CaqYdU7nqfWp9VImSndPmssjmCXJ1v1IjZPAM\
ahp7Qnm0rWRmA0z9SomuRUQOJQ6s684vU="
jobs:
include:
# Do all python versions without environment variables set
- stage: Initial tests
python: 3.8
- stage: Comprehensive tests
python: 3.6
- python: 3.7
- python: 3.9
- python: 3.6
env: USE_DEBUG=1
addons:
apt:
packages:
- *common_packages
- cython3-dbg
- python3-dbg
- python3-dev
- python3-setuptools
- python: 3.7
env: USE_WHEEL=1 RUN_FULL_TESTS=1 RUN_COVERAGE=1 INSTALL_PICKLE5=1
- python: 3.7
env: USE_SDIST=1
- python: 3.7
env:
- PYTHONOPTIMIZE=2
- BLAS=None
- LAPACK=None
- ATLAS=None
- NPY_BLAS_ORDER=mkl,blis,openblas,atlas,accelerate,blas
- NPY_LAPACK_ORDER=MKL,OPENBLAS,ATLAS,ACCELERATE,LAPACK
- USE_ASV=1
- python: 3.7
env:
- NPY_RELAXED_STRIDES_CHECKING=0
# use custom symbol-suffixed openblas build, not system ATLAS
- DOWNLOAD_OPENBLAS=1
- CHECK_BLAS=1
- NPY_USE_BLAS_ILP64=1
addons:
apt:
packages:
- gfortran
- eatmydata
- libgfortran5
- libgfortran3
- python: 3.7
env: USE_WHEEL=1 NPY_RELAXED_STRIDES_DEBUG=1
- python: 3.7
env: NUMPY_EXPERIMENTAL_ARRAY_FUNCTION=0
- python: 3.7
env:
- BLAS=None
- LAPACK=None
- ATLAS=None
- python: 3.7
os: linux
arch: ppc64le
env:
# use OpenBLAS build, not system ATLAS
- DOWNLOAD_OPENBLAS=1
- ATLAS=None
- python: 3.7
os: linux
arch: s390x
env:
# use OpenBLAS build, not system ATLAS
- DOWNLOAD_OPENBLAS=1
- NPY_USE_BLAS_ILP64=1
- ATLAS=None
- python: 3.7
os: linux
arch: arm64
env:
# use OpenBLAS build, not system ATLAS
- DOWNLOAD_OPENBLAS=1
- ATLAS=None
before_install:
- ./tools/travis-before-install.sh
script:
- ./tools/travis-test.sh
after_success:
- ./tools/travis-upload-wheel.sh

View File

@ -1,157 +1,157 @@
Building and installing NumPy
+++++++++++++++++++++++++++++
**IMPORTANT**: the below notes are about building NumPy, which for most users
is *not* the recommended way to install NumPy. Instead, use either a complete
scientific Python distribution (recommended) or a binary installer - see
https://scipy.org/install.html.
.. Contents::
Prerequisites
=============
Building NumPy requires the following installed software:
1) Python__ 3.6.x or newer.
Please note that the Python development headers also need to be installed,
e.g., on Debian/Ubuntu one needs to install both `python3` and
`python3-dev`. On Windows and macOS this is normally not an issue.
2) Cython >= 0.29.21
3) pytest__ (optional) 1.15 or later
This is required for testing NumPy, but not for using it.
4) Hypothesis__ (optional) 5.3.0 or later
This is required for testing NumPy, but not for using it.
Python__ http://www.python.org
pytest__ http://pytest.readthedocs.io
Hypothesis__ https://hypothesis.readthedocs.io/en/latest/
.. note::
If you want to build NumPy in order to work on NumPy itself, use
``runtests.py``. For more details, see
https://docs.scipy.org/doc/numpy/dev/development_environment.html
.. note::
More extensive information on building NumPy (and SciPy) is maintained at
https://scipy.github.io/devdocs/building/
Basic Installation
==================
To install NumPy, run::
python setup.py build -j 4 install --prefix $HOME/.local
This will compile numpy on 4 CPUs and install it into the specified prefix.
To perform an inplace build that can be run from the source folder run::
python setup.py build_ext --inplace -j 4
See `Requirements for Installing Packages <https://packaging.python.org/tutorials/installing-packages/>`_
for more details.
The number of build jobs can also be specified via the environment variable
NPY_NUM_BUILD_JOBS.
Choosing compilers
==================
NumPy needs a C compiler, and for development versions also Cython. A Fortran
compiler isn't needed to build NumPy itself; the ``numpy.f2py`` tests will be
skipped when running the test suite if no Fortran compiler is available. For
building Scipy a Fortran compiler is needed though, so we include some details
on Fortran compilers in the rest of this section.
On OS X and Linux, all common compilers will work.
For Fortran, ``gfortran`` works, ``g77`` does not. In case ``g77`` is
installed then ``g77`` will be detected and used first. To explicitly select
``gfortran`` in that case, do::
python setup.py build --fcompiler=gnu95
Windows
-------
On Windows, building from source can be difficult (in particular if you need to
build SciPy as well, because that requires a Fortran compiler). Currently, the
most robust option is to use MSVC (for NumPy only). If you also need SciPy,
you can either use MSVC + Intel Fortran or the Intel compiler suite.
Intel itself maintains a good `application note
<https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl>`_
on this.
If you want to use a free compiler toolchain, our current recommendation is to
use Docker or Windows subsystem for Linux (WSL). See
https://scipy.github.io/devdocs/dev/contributor/contributor_toc.html#development-environment
for more details.
Building with optimized BLAS support
====================================
Configuring which BLAS/LAPACK is used if you have multiple libraries installed,
or you have only one installed but in a non-standard location, is done via a
``site.cfg`` file. See the ``site.cfg.example`` shipped with NumPy for more
details.
Windows
-------
The Intel compilers work with Intel MKL, see the application note linked above.
For an overview of the state of BLAS/LAPACK libraries on Windows, see
`here <https://mingwpy.github.io/blas_lapack.html>`_.
macOS
-----
You will need to install a BLAS/LAPACK library. We recommend using OpenBLAS or
Intel MKL. Apple's Accelerate also still works, however it has bugs and we are
likely to drop support for it in the near future.
Ubuntu/Debian
-------------
For best performance, a development package providing BLAS and CBLAS should be
installed. Some of the options available are:
- ``libblas-dev``: reference BLAS (not very optimized)
- ``libatlas-base-dev``: generic tuned ATLAS, it is recommended to tune it to
the available hardware, see /usr/share/doc/libatlas3-base/README.Debian for
instructions
- ``libopenblas-base``: fast and runtime detected so no tuning required but a
very recent version is needed (>=0.2.15 is recommended). Older versions of
OpenBLAS suffered from correctness issues on some CPUs.
The package linked to when numpy is loaded can be chosen after installation via
the alternatives mechanism::
update-alternatives --config libblas.so.3
update-alternatives --config liblapack.so.3
Or by preloading a specific BLAS library with::
LD_PRELOAD=/usr/lib/atlas-base/atlas/libblas.so.3 python ...
Build issues
============
If you run into build issues and need help, the NumPy
`mailing list <https://scipy.org/scipylib/mailing-lists.html>`_ is the best
place to ask. If the issue is clearly a bug in NumPy, please file an issue (or
even better, a pull request) at https://github.com/numpy/numpy.
Building and installing NumPy
+++++++++++++++++++++++++++++
**IMPORTANT**: the below notes are about building NumPy, which for most users
is *not* the recommended way to install NumPy. Instead, use either a complete
scientific Python distribution (recommended) or a binary installer - see
https://scipy.org/install.html.
.. Contents::
Prerequisites
=============
Building NumPy requires the following installed software:
1) Python__ 3.6.x or newer.
Please note that the Python development headers also need to be installed,
e.g., on Debian/Ubuntu one needs to install both `python3` and
`python3-dev`. On Windows and macOS this is normally not an issue.
2) Cython >= 0.29.21
3) pytest__ (optional) 1.15 or later
This is required for testing NumPy, but not for using it.
4) Hypothesis__ (optional) 5.3.0 or later
This is required for testing NumPy, but not for using it.
Python__ http://www.python.org
pytest__ http://pytest.readthedocs.io
Hypothesis__ https://hypothesis.readthedocs.io/en/latest/
.. note::
If you want to build NumPy in order to work on NumPy itself, use
``runtests.py``. For more details, see
https://docs.scipy.org/doc/numpy/dev/development_environment.html
.. note::
More extensive information on building NumPy (and SciPy) is maintained at
https://scipy.github.io/devdocs/building/
Basic Installation
==================
To install NumPy, run::
python setup.py build -j 4 install --prefix $HOME/.local
This will compile numpy on 4 CPUs and install it into the specified prefix.
To perform an inplace build that can be run from the source folder run::
python setup.py build_ext --inplace -j 4
See `Requirements for Installing Packages <https://packaging.python.org/tutorials/installing-packages/>`_
for more details.
The number of build jobs can also be specified via the environment variable
NPY_NUM_BUILD_JOBS.
Choosing compilers
==================
NumPy needs a C compiler, and for development versions also Cython. A Fortran
compiler isn't needed to build NumPy itself; the ``numpy.f2py`` tests will be
skipped when running the test suite if no Fortran compiler is available. For
building Scipy a Fortran compiler is needed though, so we include some details
on Fortran compilers in the rest of this section.
On OS X and Linux, all common compilers will work.
For Fortran, ``gfortran`` works, ``g77`` does not. In case ``g77`` is
installed then ``g77`` will be detected and used first. To explicitly select
``gfortran`` in that case, do::
python setup.py build --fcompiler=gnu95
Windows
-------
On Windows, building from source can be difficult (in particular if you need to
build SciPy as well, because that requires a Fortran compiler). Currently, the
most robust option is to use MSVC (for NumPy only). If you also need SciPy,
you can either use MSVC + Intel Fortran or the Intel compiler suite.
Intel itself maintains a good `application note
<https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl>`_
on this.
If you want to use a free compiler toolchain, our current recommendation is to
use Docker or Windows subsystem for Linux (WSL). See
https://scipy.github.io/devdocs/dev/contributor/contributor_toc.html#development-environment
for more details.
Building with optimized BLAS support
====================================
Configuring which BLAS/LAPACK is used if you have multiple libraries installed,
or you have only one installed but in a non-standard location, is done via a
``site.cfg`` file. See the ``site.cfg.example`` shipped with NumPy for more
details.
Windows
-------
The Intel compilers work with Intel MKL, see the application note linked above.
For an overview of the state of BLAS/LAPACK libraries on Windows, see
`here <https://mingwpy.github.io/blas_lapack.html>`_.
macOS
-----
You will need to install a BLAS/LAPACK library. We recommend using OpenBLAS or
Intel MKL. Apple's Accelerate also still works, however it has bugs and we are
likely to drop support for it in the near future.
Ubuntu/Debian
-------------
For best performance, a development package providing BLAS and CBLAS should be
installed. Some of the options available are:
- ``libblas-dev``: reference BLAS (not very optimized)
- ``libatlas-base-dev``: generic tuned ATLAS, it is recommended to tune it to
the available hardware, see /usr/share/doc/libatlas3-base/README.Debian for
instructions
- ``libopenblas-base``: fast and runtime detected so no tuning required but a
very recent version is needed (>=0.2.15 is recommended). Older versions of
OpenBLAS suffered from correctness issues on some CPUs.
The package linked to when numpy is loaded can be chosen after installation via
the alternatives mechanism::
update-alternatives --config libblas.so.3
update-alternatives --config liblapack.so.3
Or by preloading a specific BLAS library with::
LD_PRELOAD=/usr/lib/atlas-base/atlas/libblas.so.3 python ...
Build issues
============
If you run into build issues and need help, the NumPy
`mailing list <https://scipy.org/scipylib/mailing-lists.html>`_ is the best
place to ask. If the issue is clearly a bug in NumPy, please file an issue (or
even better, a pull request) at https://github.com/numpy/numpy.

View File

@ -1,30 +1,30 @@
Copyright (c) 2005-2020, NumPy Developers.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of the NumPy Developers nor the names of any
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Copyright (c) 2005-2020, NumPy Developers.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of the NumPy Developers nor the names of any
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,27 +1,27 @@
The NumPy repository and source distributions bundle several libraries that are
compatibly licensed. We list these here.
Name: Numpydoc
Files: doc/sphinxext/numpydoc/*
License: BSD-2-Clause
For details, see doc/sphinxext/LICENSE.txt
Name: scipy-sphinx-theme
Files: doc/scipy-sphinx-theme/*
License: BSD-3-Clause AND PSF-2.0 AND Apache-2.0
For details, see doc/scipy-sphinx-theme/LICENSE.txt
Name: lapack-lite
Files: numpy/linalg/lapack_lite/*
License: BSD-3-Clause
For details, see numpy/linalg/lapack_lite/LICENSE.txt
Name: tempita
Files: tools/npy_tempita/*
License: MIT
For details, see tools/npy_tempita/license.txt
Name: dragon4
Files: numpy/core/src/multiarray/dragon4.c
License: MIT
For license text, see numpy/core/src/multiarray/dragon4.c
The NumPy repository and source distributions bundle several libraries that are
compatibly licensed. We list these here.
Name: Numpydoc
Files: doc/sphinxext/numpydoc/*
License: BSD-2-Clause
For details, see doc/sphinxext/LICENSE.txt
Name: scipy-sphinx-theme
Files: doc/scipy-sphinx-theme/*
License: BSD-3-Clause AND PSF-2.0 AND Apache-2.0
For details, see doc/scipy-sphinx-theme/LICENSE.txt
Name: lapack-lite
Files: numpy/linalg/lapack_lite/*
License: BSD-3-Clause
For details, see numpy/linalg/lapack_lite/LICENSE.txt
Name: tempita
Files: tools/npy_tempita/*
License: MIT
For details, see tools/npy_tempita/license.txt
Name: dragon4
Files: numpy/core/src/multiarray/dragon4.c
License: MIT
For license text, see numpy/core/src/multiarray/dragon4.c

100
deps/numpy/MANIFEST.in vendored
View File

@ -1,50 +1,50 @@
#
# Use .add_data_files and .add_data_dir methods in a appropriate
# setup.py files to include non-python files such as documentation,
# data, etc files to distribution (*for installation*).
# Avoid using MANIFEST.in for that.
#
include MANIFEST.in
include pyproject.toml
include pytest.ini
include *.txt
include README.md
include site.cfg.example
include runtests.py
include tox.ini
include .coveragerc
include test_requirements.txt
recursive-include numpy/random *.pyx *.pxd *.pyx.in *.pxd.in
include numpy/random/include/*
include numpy/*.pxd
# Add build support that should go in sdist, but not go in bdist/be installed
# Note that sub-directories that don't have __init__ are apparently not
# included by 'recursive-include', so list those separately
recursive-include numpy *
recursive-include numpy/_build_utils *
recursive-include numpy/linalg/lapack_lite *
recursive-include tools *
# Add sdist files whose use depends on local configuration.
include numpy/core/src/common/cblasfuncs.c
include numpy/core/src/common/python_xerbla.c
# Adding build related files not found by distutils
recursive-include numpy/core/code_generators *.py *.txt
recursive-include numpy/core *.in *.h
# Add documentation and benchmarks: we don't use add_data_dir since we do not
# want to include this at installation, only for sdist-generated tarballs
# Docs:
recursive-include doc *
prune doc/build
prune doc/source/generated
# Benchmarks:
recursive-include benchmarks *
prune benchmarks/env
prune benchmarks/results
prune benchmarks/html
prune benchmarks/numpy
# Exclude generated files
prune */__pycache__
global-exclude *.pyc *.pyo *.pyd *.swp *.bak *~
# Exclude license file that we append to the main license when running
# `python setup.py sdist`
exclude LICENSES_bundled.txt
#
# Use .add_data_files and .add_data_dir methods in a appropriate
# setup.py files to include non-python files such as documentation,
# data, etc files to distribution (*for installation*).
# Avoid using MANIFEST.in for that.
#
include MANIFEST.in
include pyproject.toml
include pytest.ini
include *.txt
include README.md
include site.cfg.example
include runtests.py
include tox.ini
include .coveragerc
include test_requirements.txt
recursive-include numpy/random *.pyx *.pxd *.pyx.in *.pxd.in
include numpy/random/include/*
include numpy/*.pxd
# Add build support that should go in sdist, but not go in bdist/be installed
# Note that sub-directories that don't have __init__ are apparently not
# included by 'recursive-include', so list those separately
recursive-include numpy *
recursive-include numpy/_build_utils *
recursive-include numpy/linalg/lapack_lite *
recursive-include tools *
# Add sdist files whose use depends on local configuration.
include numpy/core/src/common/cblasfuncs.c
include numpy/core/src/common/python_xerbla.c
# Adding build related files not found by distutils
recursive-include numpy/core/code_generators *.py *.txt
recursive-include numpy/core *.in *.h
# Add documentation and benchmarks: we don't use add_data_dir since we do not
# want to include this at installation, only for sdist-generated tarballs
# Docs:
recursive-include doc *
prune doc/build
prune doc/source/generated
# Benchmarks:
recursive-include benchmarks *
prune benchmarks/env
prune benchmarks/results
prune benchmarks/html
prune benchmarks/numpy
# Exclude generated files
prune */__pycache__
global-exclude *.pyc *.pyo *.pyd *.swp *.bak *~
# Exclude license file that we append to the main license when running
# `python setup.py sdist`
exclude LICENSES_bundled.txt

98
deps/numpy/README.md vendored
View File

@ -1,49 +1,49 @@
# <img alt="NumPy" src="https://cdn.rawgit.com/numpy/numpy/master/branding/icons/numpylogo.svg" height="60">
[![Travis](https://img.shields.io/travis/numpy/numpy/master.svg?label=Travis%20CI)](
https://travis-ci.org/numpy/numpy)
[![Azure](https://dev.azure.com/numpy/numpy/_apis/build/status/azure-pipeline%20numpy.numpy)](
https://dev.azure.com/numpy/numpy/_build/latest?definitionId=5)
[![codecov](https://codecov.io/gh/numpy/numpy/branch/master/graph/badge.svg)](
https://codecov.io/gh/numpy/numpy)
NumPy is the fundamental package needed for scientific computing with Python.
- **Website:** https://www.numpy.org
- **Documentation:** https://numpy.org/doc
- **Mailing list:** https://mail.python.org/mailman/listinfo/numpy-discussion
- **Source code:** https://github.com/numpy/numpy
- **Contributing:** https://www.numpy.org/devdocs/dev/index.html
- **Bug reports:** https://github.com/numpy/numpy/issues
- **Report a security vulnerability:** https://tidelift.com/docs/security
It provides:
- a powerful N-dimensional array object
- sophisticated (broadcasting) functions
- tools for integrating C/C++ and Fortran code
- useful linear algebra, Fourier transform, and random number capabilities
Testing:
- NumPy versions &ge; 1.15 require `pytest`
- NumPy versions &lt; 1.15 require `nose`
Tests can then be run after installation with:
python -c 'import numpy; numpy.test()'
Call for Contributions
----------------------
NumPy appreciates help from a wide range of different backgrounds.
Work such as high level documentation or website improvements are valuable
and we would like to grow our team with people filling these roles.
Small improvements or fixes are always appreciated and issues labeled as easy
may be a good starting point.
If you are considering larger contributions outside the traditional coding work,
please contact us through the mailing list.
[![Powered by NumFOCUS](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](https://numfocus.org)
# <img alt="NumPy" src="https://cdn.rawgit.com/numpy/numpy/master/branding/icons/numpylogo.svg" height="60">
[![Travis](https://img.shields.io/travis/numpy/numpy/master.svg?label=Travis%20CI)](
https://travis-ci.org/numpy/numpy)
[![Azure](https://dev.azure.com/numpy/numpy/_apis/build/status/azure-pipeline%20numpy.numpy)](
https://dev.azure.com/numpy/numpy/_build/latest?definitionId=5)
[![codecov](https://codecov.io/gh/numpy/numpy/branch/master/graph/badge.svg)](
https://codecov.io/gh/numpy/numpy)
NumPy is the fundamental package needed for scientific computing with Python.
- **Website:** https://www.numpy.org
- **Documentation:** https://numpy.org/doc
- **Mailing list:** https://mail.python.org/mailman/listinfo/numpy-discussion
- **Source code:** https://github.com/numpy/numpy
- **Contributing:** https://www.numpy.org/devdocs/dev/index.html
- **Bug reports:** https://github.com/numpy/numpy/issues
- **Report a security vulnerability:** https://tidelift.com/docs/security
It provides:
- a powerful N-dimensional array object
- sophisticated (broadcasting) functions
- tools for integrating C/C++ and Fortran code
- useful linear algebra, Fourier transform, and random number capabilities
Testing:
- NumPy versions &ge; 1.15 require `pytest`
- NumPy versions &lt; 1.15 require `nose`
Tests can then be run after installation with:
python -c 'import numpy; numpy.test()'
Call for Contributions
----------------------
NumPy appreciates help from a wide range of different backgrounds.
Work such as high level documentation or website improvements are valuable
and we would like to grow our team with people filling these roles.
Small improvements or fixes are always appreciated and issues labeled as easy
may be a good starting point.
If you are considering larger contributions outside the traditional coding work,
please contact us through the mailing list.
[![Powered by NumFOCUS](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](https://numfocus.org)

128
deps/numpy/THANKS.txt vendored
View File

@ -1,64 +1,64 @@
Travis Oliphant for the NumPy core, the NumPy guide, various
bug-fixes and code contributions.
Paul Dubois, who implemented the original Masked Arrays.
Pearu Peterson for f2py, numpy.distutils and help with code
organization.
Robert Kern for mtrand, bug fixes, help with distutils, code
organization, strided tricks and much more.
Eric Jones for planning and code contributions.
Fernando Perez for code snippets, ideas, bugfixes, and testing.
Ed Schofield for matrix.py patches, bugfixes, testing, and docstrings.
Robert Cimrman for array set operations and numpy.distutils help.
John Hunter for code snippets from matplotlib.
Chris Hanley for help with records.py, testing, and bug fixes.
Travis Vaught for administration, community coordination and
marketing.
Joe Cooper, Jeff Strunk for administration.
Eric Firing for bugfixes.
Arnd Baecker for 64-bit testing.
David Cooke for many code improvements including the auto-generated C-API,
and optimizations.
Andrew Straw for help with the web-page, documentation, packaging and
testing.
Alexander Belopolsky (Sasha) for Masked array bug-fixes and tests,
rank-0 array improvements, scalar math help and other code additions.
Francesc Altet for unicode, work on nested record arrays, and bug-fixes.
Tim Hochberg for getting the build working on MSVC, optimization
improvements, and code review.
Charles (Chuck) Harris for the sorting code originally written for
Numarray and for improvements to polyfit, many bug fixes, delving
into the C code, release management, and documentation.
David Huard for histogram improvements including 2-D and d-D code and
other bug-fixes.
Stefan van der Walt for numerous bug-fixes, testing and documentation.
Albert Strasheim for documentation, bug-fixes, regression tests and
Valgrind expertise.
David Cournapeau for build support, doc-and-bug fixes, and code
contributions including fast_clipping.
Jarrod Millman for release management, community coordination, and code
clean up.
Chris Burns for work on memory mapped arrays and bug-fixes.
Pauli Virtanen for documentation, bug-fixes, lookfor and the
documentation editor.
A.M. Archibald for no-copy-reshape code, strided array tricks,
documentation and bug-fixes.
Pierre Gerard-Marchant for rewriting masked array functionality.
Roberto de Almeida for the buffered array iterator.
Alan McIntyre for updating the NumPy test framework to use nose, improve
the test coverage, and enhancing the test system documentation.
Joe Harrington for administering the 2008 Documentation Sprint.
Mark Wiebe for the new NumPy iterator, the float16 data type, improved
low-level data type operations, and other NumPy core improvements.
NumPy is based on the Numeric (Jim Hugunin, Paul Dubois, Konrad
Hinsen, and David Ascher) and NumArray (Perry Greenfield, J Todd
Miller, Rick White and Paul Barrett) projects. We thank them for
paving the way ahead.
Institutions
------------
Enthought for providing resources and finances for development of NumPy.
UC Berkeley for providing travel money and hosting numerous sprints.
The University of Central Florida for funding the 2008 Documentation Marathon.
The University of Stellenbosch for hosting the buildbot.
Travis Oliphant for the NumPy core, the NumPy guide, various
bug-fixes and code contributions.
Paul Dubois, who implemented the original Masked Arrays.
Pearu Peterson for f2py, numpy.distutils and help with code
organization.
Robert Kern for mtrand, bug fixes, help with distutils, code
organization, strided tricks and much more.
Eric Jones for planning and code contributions.
Fernando Perez for code snippets, ideas, bugfixes, and testing.
Ed Schofield for matrix.py patches, bugfixes, testing, and docstrings.
Robert Cimrman for array set operations and numpy.distutils help.
John Hunter for code snippets from matplotlib.
Chris Hanley for help with records.py, testing, and bug fixes.
Travis Vaught for administration, community coordination and
marketing.
Joe Cooper, Jeff Strunk for administration.
Eric Firing for bugfixes.
Arnd Baecker for 64-bit testing.
David Cooke for many code improvements including the auto-generated C-API,
and optimizations.
Andrew Straw for help with the web-page, documentation, packaging and
testing.
Alexander Belopolsky (Sasha) for Masked array bug-fixes and tests,
rank-0 array improvements, scalar math help and other code additions.
Francesc Altet for unicode, work on nested record arrays, and bug-fixes.
Tim Hochberg for getting the build working on MSVC, optimization
improvements, and code review.
Charles (Chuck) Harris for the sorting code originally written for
Numarray and for improvements to polyfit, many bug fixes, delving
into the C code, release management, and documentation.
David Huard for histogram improvements including 2-D and d-D code and
other bug-fixes.
Stefan van der Walt for numerous bug-fixes, testing and documentation.
Albert Strasheim for documentation, bug-fixes, regression tests and
Valgrind expertise.
David Cournapeau for build support, doc-and-bug fixes, and code
contributions including fast_clipping.
Jarrod Millman for release management, community coordination, and code
clean up.
Chris Burns for work on memory mapped arrays and bug-fixes.
Pauli Virtanen for documentation, bug-fixes, lookfor and the
documentation editor.
A.M. Archibald for no-copy-reshape code, strided array tricks,
documentation and bug-fixes.
Pierre Gerard-Marchant for rewriting masked array functionality.
Roberto de Almeida for the buffered array iterator.
Alan McIntyre for updating the NumPy test framework to use nose, improve
the test coverage, and enhancing the test system documentation.
Joe Harrington for administering the 2008 Documentation Sprint.
Mark Wiebe for the new NumPy iterator, the float16 data type, improved
low-level data type operations, and other NumPy core improvements.
NumPy is based on the Numeric (Jim Hugunin, Paul Dubois, Konrad
Hinsen, and David Ascher) and NumArray (Perry Greenfield, J Todd
Miller, Rick White and Paul Barrett) projects. We thank them for
paving the way ahead.
Institutions
------------
Enthought for providing resources and finances for development of NumPy.
UC Berkeley for providing travel money and hosting numerous sprints.
The University of Central Florida for funding the 2008 Documentation Marathon.
The University of Stellenbosch for hosting the buildbot.

View File

@ -1,277 +1,277 @@
trigger:
# start a new build for every push
batch: False
branches:
include:
- master
- maintenance/*
pr:
branches:
include:
- '*' # must quote since "*" is a YAML reserved character; we want a string
stages:
- stage: InitialTests
jobs:
- job: WindowsFast
pool:
vmImage: 'VS2017-Win2016'
strategy:
matrix:
Python36-64bit-fast:
PYTHON_VERSION: '3.6'
PYTHON_ARCH: 'x64'
TEST_MODE: fast
BITS: 64
steps:
- template: azure-steps-windows.yml
- stage: ComprehensiveTests
jobs:
- job: Linux_Python_38_32bit_full_with_asserts
pool:
vmImage: 'ubuntu-18.04'
steps:
- script: |
docker pull quay.io/pypa/manylinux2010_i686
docker run -v $(pwd):/numpy -e CFLAGS="-msse2 -std=c99 -UNDEBUG" \
-e F77=gfortran-5 -e F90=gfortran-5 quay.io/pypa/manylinux2010_i686 \
/bin/bash -xc "cd numpy && \
/opt/python/cp38-cp38/bin/python -mvenv venv &&\
source venv/bin/activate && \
target=\$(python3 tools/openblas_support.py) && \
cp -r \$target/lib/* /usr/lib && \
cp \$target/include/* /usr/include && \
python3 -m pip install -r test_requirements.txt && \
echo CFLAGS \$CFLAGS && \
python3 -m pip install -v . && \
python3 runtests.py -n --debug-info --mode=full -- -rsx --junitxml=junit/test-results.xml && \
python3 tools/openblas_support.py --check_version"
displayName: 'Run 32-bit manylinux2010 Docker Build / Tests'
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
failTaskOnFailedTests: true
testRunTitle: 'Publish test results for Python 3.8-32 bit full Linux'
- job: macOS
pool:
# NOTE: at time of writing, there is a danger
# that using an invalid vmIMage string for macOS
# image silently redirects to a Windows build on Azure;
# for now, use the only image name officially present in
# the docs even though i.e., numba uses another in their
# azure config for mac os -- Microsoft has indicated
# they will patch this issue
vmImage: macOS-10.14
strategy:
maxParallel: 3
matrix:
Python36:
PYTHON_VERSION: '3.6'
USE_OPENBLAS: '1'
Python39:
PYTHON_VERSION: '3.9'
USE_OPENBLAS: '1'
Python36-ILP64:
PYTHON_VERSION: '3.6'
NPY_USE_BLAS_ILP64: '1'
USE_OPENBLAS: '1'
USE_XCODE_10: '1'
Accelerate:
PYTHON_VERSION: '3.6'
USE_OPENBLAS: '0'
steps:
# the @0 refers to the (major) version of the *task* on Microsoft's
# end, not the order in the build matrix nor anything to do
# with version of Python selected
- task: UsePythonVersion@0
inputs:
versionSpec: $(PYTHON_VERSION)
addToPath: true
architecture: 'x64'
- script: |
set -xe
[ -n "$USE_XCODE_10" ] && /bin/bash -c "sudo xcode-select -s /Applications/Xcode_10.app/Contents/Developer"
clang --version
displayName: 'report clang version'
# NOTE: might be better if we could avoid installing
# two C compilers, but with homebrew looks like we're
# now stuck getting the full gcc toolchain instead of
# just pulling in gfortran
- script: |
set -xe
# same version of gfortran as the open-libs and numpy-wheel builds
curl -L https://github.com/MacPython/gfortran-install/raw/master/archives/gfortran-4.9.0-Mavericks.dmg -o gfortran.dmg
GFORTRAN_SHA256=$(shasum -a 256 gfortran.dmg)
KNOWN_SHA256="d2d5ca5ba8332d63bbe23a07201c4a0a5d7e09ee56f0298a96775f928c3c4b30 gfortran.dmg"
if [ "$GFORTRAN_SHA256" != "$KNOWN_SHA256" ]; then
echo sha256 mismatch
exit 1
fi
hdiutil attach -mountpoint /Volumes/gfortran gfortran.dmg
sudo installer -pkg /Volumes/gfortran/gfortran.pkg -target /
otool -L /usr/local/gfortran/lib/libgfortran.3.dylib
# Manually symlink gfortran-4.9 to plain gfortran for f2py.
# No longer needed after Feb 13 2020 as gfortran is already present
# and the attempted link errors. Keep this for future reference.
# ln -s /usr/local/bin/gfortran-4.9 /usr/local/bin/gfortran
displayName: 'make libgfortran available on mac os for openblas'
# use the pre-built openblas binary that most closely
# matches our MacOS wheel builds -- currently based
# primarily on file size / name details
- script: |
set -xe
target=$(python tools/openblas_support.py)
ls -lR $target
# manually link to appropriate system paths
cp $target/lib/lib* /usr/local/lib/
cp $target/include/* /usr/local/include/
otool -L /usr/local/lib/libopenblas*
displayName: 'install pre-built openblas'
condition: eq(variables['USE_OPENBLAS'], '1')
- script: python -m pip install --upgrade pip 'setuptools<49.2.0' wheel
displayName: 'Install tools'
- script: |
python -m pip install -r test_requirements.txt
python -m pip install vulture docutils sphinx==2.2.0 numpydoc
displayName: 'Install dependencies; some are optional to avoid test skips'
- script: /bin/bash -c "! vulture . --min-confidence 100 --exclude doc/,numpy/distutils/ | grep 'unreachable'"
displayName: 'Check for unreachable code paths in Python modules'
# prefer usage of clang over gcc proper
# to match likely scenario on many user mac machines
- script: python setup.py build -j 4 build_src --verbose-cfg install
displayName: 'Build NumPy'
env:
BLAS: None
LAPACK: None
ATLAS: None
ACCELERATE: None
CC: /usr/bin/clang
condition: eq(variables['USE_OPENBLAS'], '1')
- script: python setup.py build -j 4 build_ext --inplace install
displayName: 'Build NumPy without OpenBLAS'
env:
BLAS: None
LAPACK: None
ATLAS: None
CC: /usr/bin/clang
condition: eq(variables['USE_OPENBLAS'], '0')
# wait until after dev build of NumPy to pip
# install matplotlib to avoid pip install of older numpy
- script: python -m pip install matplotlib
displayName: 'Install matplotlib before refguide run'
- script: python runtests.py -g --refguide-check
displayName: 'Run Refuide Check'
condition: eq(variables['USE_OPENBLAS'], '1')
- script: python runtests.py -n --mode=full -- -rsx --junitxml=junit/test-results.xml
displayName: 'Run Full NumPy Test Suite'
condition: eq(variables['USE_OPENBLAS'], '1')
- bash: python tools/openblas_support.py --check_version
displayName: 'Verify OpenBLAS version'
condition: eq(variables['USE_OPENBLAS'], '1')
# import doesn't work when in numpy src directory , so do a pip dev install of build lib to test
- script: |
#!/bin/bash -v
set +e
python -c "import numpy as np" > test_output.log 2>&1
check_output_code=$?
cat test_output.log
grep "buggy Accelerate backend" test_output.log
check_message=$?
if [ $check_output_code == 1 ] && [ $check_message == 0 ]; then exit 0; else exit 1;fi
displayName: "Check if numpy import fails with accelerate"
condition: eq(variables['USE_OPENBLAS'], '0')
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
failTaskOnFailedTests: true
testRunTitle: 'Publish test results for Python 3.6 64-bit full Mac OS'
- job: Windows
pool:
vmImage: 'VS2017-Win2016'
strategy:
maxParallel: 6
matrix:
Python36-32bit-fast:
PYTHON_VERSION: '3.6'
PYTHON_ARCH: 'x86'
TEST_MODE: fast
BITS: 32
Python37-32bit-fast:
PYTHON_VERSION: '3.7'
PYTHON_ARCH: 'x86'
TEST_MODE: fast
BITS: 32
Python38-32bit-fast:
PYTHON_VERSION: '3.8'
PYTHON_ARCH: 'x86'
TEST_MODE: fast
BITS: 32
Python39-32bit-fast:
PYTHON_VERSION: '3.9'
PYTHON_ARCH: 'x86'
TEST_MODE: fast
BITS: 32
Python36-64bit-full:
PYTHON_VERSION: '3.6'
PYTHON_ARCH: 'x64'
TEST_MODE: full
BITS: 64
Python37-64bit-full:
PYTHON_VERSION: '3.7'
PYTHON_ARCH: 'x64'
TEST_MODE: full
BITS: 64
Python38-64bit-full:
PYTHON_VERSION: '3.8'
PYTHON_ARCH: 'x64'
TEST_MODE: full
BITS: 64
Python39-64bit-full:
PYTHON_VERSION: '3.9'
PYTHON_ARCH: 'x64'
TEST_MODE: full
BITS: 64
NPY_USE_BLAS_ILP64: '1'
OPENBLAS_SUFFIX: '64_'
steps:
- template: azure-steps-windows.yml
- job: Linux_PyPy3
pool:
vmIMage: 'ubuntu-18.04'
steps:
- script: source tools/pypy-test.sh
displayName: 'Run PyPy3 Build / Tests'
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
testRunTitle: 'Publish test results for PyPy3'
failTaskOnFailedTests: true
- job: Linux_gcc48
pool:
vmImage: 'ubuntu-18.04'
steps:
- script: |
if ! `gcc-4.8 2>/dev/null`; then
sudo apt install gcc-4.8
fi
displayName: 'add gcc 4.8'
- script: |
# python3 has no setuptools, so install one to get us going
python3 -m pip install --user --upgrade pip 'setuptools<49.2.0'
python3 -m pip install --user -r test_requirements.txt
CPPFLAGS='' CC=gcc-4.8 F77=gfortran-5 F90=gfortran-5 \
python3 runtests.py --debug-info --mode=full -- -rsx --junitxml=junit/test-results.xml
displayName: 'Run gcc4.8 Build / Tests'
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
failTaskOnFailedTests: true
testRunTitle: 'Publish test results for gcc 4.8'
trigger:
# start a new build for every push
batch: False
branches:
include:
- master
- maintenance/*
pr:
branches:
include:
- '*' # must quote since "*" is a YAML reserved character; we want a string
stages:
- stage: InitialTests
jobs:
- job: WindowsFast
pool:
vmImage: 'VS2017-Win2016'
strategy:
matrix:
Python36-64bit-fast:
PYTHON_VERSION: '3.6'
PYTHON_ARCH: 'x64'
TEST_MODE: fast
BITS: 64
steps:
- template: azure-steps-windows.yml
- stage: ComprehensiveTests
jobs:
- job: Linux_Python_38_32bit_full_with_asserts
pool:
vmImage: 'ubuntu-18.04'
steps:
- script: |
docker pull quay.io/pypa/manylinux2010_i686
docker run -v $(pwd):/numpy -e CFLAGS="-msse2 -std=c99 -UNDEBUG" \
-e F77=gfortran-5 -e F90=gfortran-5 quay.io/pypa/manylinux2010_i686 \
/bin/bash -xc "cd numpy && \
/opt/python/cp38-cp38/bin/python -mvenv venv &&\
source venv/bin/activate && \
target=\$(python3 tools/openblas_support.py) && \
cp -r \$target/lib/* /usr/lib && \
cp \$target/include/* /usr/include && \
python3 -m pip install -r test_requirements.txt && \
echo CFLAGS \$CFLAGS && \
python3 -m pip install -v . && \
python3 runtests.py -n --debug-info --mode=full -- -rsx --junitxml=junit/test-results.xml && \
python3 tools/openblas_support.py --check_version"
displayName: 'Run 32-bit manylinux2010 Docker Build / Tests'
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
failTaskOnFailedTests: true
testRunTitle: 'Publish test results for Python 3.8-32 bit full Linux'
- job: macOS
pool:
# NOTE: at time of writing, there is a danger
# that using an invalid vmIMage string for macOS
# image silently redirects to a Windows build on Azure;
# for now, use the only image name officially present in
# the docs even though i.e., numba uses another in their
# azure config for mac os -- Microsoft has indicated
# they will patch this issue
vmImage: macOS-10.14
strategy:
maxParallel: 3
matrix:
Python36:
PYTHON_VERSION: '3.6'
USE_OPENBLAS: '1'
Python39:
PYTHON_VERSION: '3.9'
USE_OPENBLAS: '1'
Python36-ILP64:
PYTHON_VERSION: '3.6'
NPY_USE_BLAS_ILP64: '1'
USE_OPENBLAS: '1'
USE_XCODE_10: '1'
Accelerate:
PYTHON_VERSION: '3.6'
USE_OPENBLAS: '0'
steps:
# the @0 refers to the (major) version of the *task* on Microsoft's
# end, not the order in the build matrix nor anything to do
# with version of Python selected
- task: UsePythonVersion@0
inputs:
versionSpec: $(PYTHON_VERSION)
addToPath: true
architecture: 'x64'
- script: |
set -xe
[ -n "$USE_XCODE_10" ] && /bin/bash -c "sudo xcode-select -s /Applications/Xcode_10.app/Contents/Developer"
clang --version
displayName: 'report clang version'
# NOTE: might be better if we could avoid installing
# two C compilers, but with homebrew looks like we're
# now stuck getting the full gcc toolchain instead of
# just pulling in gfortran
- script: |
set -xe
# same version of gfortran as the open-libs and numpy-wheel builds
curl -L https://github.com/MacPython/gfortran-install/raw/master/archives/gfortran-4.9.0-Mavericks.dmg -o gfortran.dmg
GFORTRAN_SHA256=$(shasum -a 256 gfortran.dmg)
KNOWN_SHA256="d2d5ca5ba8332d63bbe23a07201c4a0a5d7e09ee56f0298a96775f928c3c4b30 gfortran.dmg"
if [ "$GFORTRAN_SHA256" != "$KNOWN_SHA256" ]; then
echo sha256 mismatch
exit 1
fi
hdiutil attach -mountpoint /Volumes/gfortran gfortran.dmg
sudo installer -pkg /Volumes/gfortran/gfortran.pkg -target /
otool -L /usr/local/gfortran/lib/libgfortran.3.dylib
# Manually symlink gfortran-4.9 to plain gfortran for f2py.
# No longer needed after Feb 13 2020 as gfortran is already present
# and the attempted link errors. Keep this for future reference.
# ln -s /usr/local/bin/gfortran-4.9 /usr/local/bin/gfortran
displayName: 'make libgfortran available on mac os for openblas'
# use the pre-built openblas binary that most closely
# matches our MacOS wheel builds -- currently based
# primarily on file size / name details
- script: |
set -xe
target=$(python tools/openblas_support.py)
ls -lR $target
# manually link to appropriate system paths
cp $target/lib/lib* /usr/local/lib/
cp $target/include/* /usr/local/include/
otool -L /usr/local/lib/libopenblas*
displayName: 'install pre-built openblas'
condition: eq(variables['USE_OPENBLAS'], '1')
- script: python -m pip install --upgrade pip 'setuptools<49.2.0' wheel
displayName: 'Install tools'
- script: |
python -m pip install -r test_requirements.txt
python -m pip install vulture docutils sphinx==2.2.0 numpydoc
displayName: 'Install dependencies; some are optional to avoid test skips'
- script: /bin/bash -c "! vulture . --min-confidence 100 --exclude doc/,numpy/distutils/ | grep 'unreachable'"
displayName: 'Check for unreachable code paths in Python modules'
# prefer usage of clang over gcc proper
# to match likely scenario on many user mac machines
- script: python setup.py build -j 4 build_src --verbose-cfg install
displayName: 'Build NumPy'
env:
BLAS: None
LAPACK: None
ATLAS: None
ACCELERATE: None
CC: /usr/bin/clang
condition: eq(variables['USE_OPENBLAS'], '1')
- script: python setup.py build -j 4 build_ext --inplace install
displayName: 'Build NumPy without OpenBLAS'
env:
BLAS: None
LAPACK: None
ATLAS: None
CC: /usr/bin/clang
condition: eq(variables['USE_OPENBLAS'], '0')
# wait until after dev build of NumPy to pip
# install matplotlib to avoid pip install of older numpy
- script: python -m pip install matplotlib
displayName: 'Install matplotlib before refguide run'
- script: python runtests.py -g --refguide-check
displayName: 'Run Refuide Check'
condition: eq(variables['USE_OPENBLAS'], '1')
- script: python runtests.py -n --mode=full -- -rsx --junitxml=junit/test-results.xml
displayName: 'Run Full NumPy Test Suite'
condition: eq(variables['USE_OPENBLAS'], '1')
- bash: python tools/openblas_support.py --check_version
displayName: 'Verify OpenBLAS version'
condition: eq(variables['USE_OPENBLAS'], '1')
# import doesn't work when in numpy src directory , so do a pip dev install of build lib to test
- script: |
#!/bin/bash -v
set +e
python -c "import numpy as np" > test_output.log 2>&1
check_output_code=$?
cat test_output.log
grep "buggy Accelerate backend" test_output.log
check_message=$?
if [ $check_output_code == 1 ] && [ $check_message == 0 ]; then exit 0; else exit 1;fi
displayName: "Check if numpy import fails with accelerate"
condition: eq(variables['USE_OPENBLAS'], '0')
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
failTaskOnFailedTests: true
testRunTitle: 'Publish test results for Python 3.6 64-bit full Mac OS'
- job: Windows
pool:
vmImage: 'VS2017-Win2016'
strategy:
maxParallel: 6
matrix:
Python36-32bit-fast:
PYTHON_VERSION: '3.6'
PYTHON_ARCH: 'x86'
TEST_MODE: fast
BITS: 32
Python37-32bit-fast:
PYTHON_VERSION: '3.7'
PYTHON_ARCH: 'x86'
TEST_MODE: fast
BITS: 32
Python38-32bit-fast:
PYTHON_VERSION: '3.8'
PYTHON_ARCH: 'x86'
TEST_MODE: fast
BITS: 32
Python39-32bit-fast:
PYTHON_VERSION: '3.9'
PYTHON_ARCH: 'x86'
TEST_MODE: fast
BITS: 32
Python36-64bit-full:
PYTHON_VERSION: '3.6'
PYTHON_ARCH: 'x64'
TEST_MODE: full
BITS: 64
Python37-64bit-full:
PYTHON_VERSION: '3.7'
PYTHON_ARCH: 'x64'
TEST_MODE: full
BITS: 64
Python38-64bit-full:
PYTHON_VERSION: '3.8'
PYTHON_ARCH: 'x64'
TEST_MODE: full
BITS: 64
Python39-64bit-full:
PYTHON_VERSION: '3.9'
PYTHON_ARCH: 'x64'
TEST_MODE: full
BITS: 64
NPY_USE_BLAS_ILP64: '1'
OPENBLAS_SUFFIX: '64_'
steps:
- template: azure-steps-windows.yml
- job: Linux_PyPy3
pool:
vmIMage: 'ubuntu-18.04'
steps:
- script: source tools/pypy-test.sh
displayName: 'Run PyPy3 Build / Tests'
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
testRunTitle: 'Publish test results for PyPy3'
failTaskOnFailedTests: true
- job: Linux_gcc48
pool:
vmImage: 'ubuntu-18.04'
steps:
- script: |
if ! `gcc-4.8 2>/dev/null`; then
sudo apt install gcc-4.8
fi
displayName: 'add gcc 4.8'
- script: |
# python3 has no setuptools, so install one to get us going
python3 -m pip install --user --upgrade pip 'setuptools<49.2.0'
python3 -m pip install --user -r test_requirements.txt
CPPFLAGS='' CC=gcc-4.8 F77=gfortran-5 F90=gfortran-5 \
python3 runtests.py --debug-info --mode=full -- -rsx --junitxml=junit/test-results.xml
displayName: 'Run gcc4.8 Build / Tests'
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
failTaskOnFailedTests: true
testRunTitle: 'Publish test results for gcc 4.8'

View File

@ -1,72 +1,72 @@
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: $(PYTHON_VERSION)
addToPath: true
architecture: $(PYTHON_ARCH)
- script: python -m pip install --upgrade pip wheel
displayName: 'Install tools'
- script: python -m pip install -r test_requirements.txt
displayName: 'Install dependencies; some are optional to avoid test skips'
- powershell: |
$ErrorActionPreference = "Stop"
# Download and get the path to "openblas.a". We cannot copy it
# to $PYTHON_EXE's directory since that is on a different drive which
# mingw does not like. Instead copy it to a directory and set OPENBLAS,
# since OPENBLAS will be picked up by the openblas discovery
$target = $(python tools/openblas_support.py)
mkdir openblas
echo "Copying $target to openblas/openblas$env:OPENBLAS_SUFFIX.a"
cp $target openblas/openblas$env:OPENBLAS_SUFFIX.a
If ( Test-Path env:NPY_USE_BLAS_ILP64 ){
echo "##vso[task.setvariable variable=OPENBLAS64_]$pwd\openblas"
} else {
echo "##vso[task.setvariable variable=OPENBLAS]$pwd\openblas"
}
displayName: 'Download / Install OpenBLAS'
- powershell: |
choco install -y mingw --forcex86 --force --version=7.3.0
refreshenv
displayName: 'Install 32-bit mingw for 32-bit builds'
condition: eq(variables['BITS'], 32)
# NOTE: for Windows builds it seems much more tractable to use runtests.py
# vs. manual setup.py and then runtests.py for testing only
- powershell: |
If ($(BITS) -eq 32) {
$env:CFLAGS = "-m32"
$env:LDFLAGS = "-m32"
$env:PATH = "C:\\ProgramData\\chocolatey\\lib\\mingw\\tools\\install\\mingw$(BITS)\\bin;" + $env:PATH
}
python -c "from tools import openblas_support; openblas_support.make_init('numpy')"
python -m pip wheel -v -v -v --no-build-isolation --no-use-pep517 --wheel-dir=dist .
ls dist -r | Foreach-Object {
python -m pip install $_.FullName
}
displayName: 'Build NumPy'
- bash: |
pushd . && cd .. && target=$(python -c "import numpy, os; print(os.path.abspath(os.path.join(os.path.dirname(numpy.__file__), '.libs')))") && popd
python -m pip download -d destination --only-binary :all: --no-deps numpy==1.14
cd destination && unzip numpy*.whl && cp numpy/.libs/*.dll $target
ls $target
displayName: 'Add extraneous & older DLL to numpy/.libs to probe DLL handling robustness'
condition: eq(variables['PYTHON_VERSION'], '3.6')
- script: pushd . && cd .. && python -c "from ctypes import windll; windll.kernel32.SetDefaultDllDirectories(0x00000800); import numpy" && popd
displayName: 'For gh-12667; Windows DLL resolution'
condition: eq(variables['PYTHON_VERSION'], '3.6')
- script: python runtests.py -n --show-build-log --mode=$(TEST_MODE) -- -rsx --junitxml=junit/test-results.xml
displayName: 'Run NumPy Test Suite'
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
failTaskOnFailedTests: true
testRunTitle: 'Publish test results for Python $(PYTHON_VERSION) $(BITS)-bit $(TEST_MODE) Windows'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: $(PYTHON_VERSION)
addToPath: true
architecture: $(PYTHON_ARCH)
- script: python -m pip install --upgrade pip wheel
displayName: 'Install tools'
- script: python -m pip install -r test_requirements.txt
displayName: 'Install dependencies; some are optional to avoid test skips'
- powershell: |
$ErrorActionPreference = "Stop"
# Download and get the path to "openblas.a". We cannot copy it
# to $PYTHON_EXE's directory since that is on a different drive which
# mingw does not like. Instead copy it to a directory and set OPENBLAS,
# since OPENBLAS will be picked up by the openblas discovery
$target = $(python tools/openblas_support.py)
mkdir openblas
echo "Copying $target to openblas/openblas$env:OPENBLAS_SUFFIX.a"
cp $target openblas/openblas$env:OPENBLAS_SUFFIX.a
If ( Test-Path env:NPY_USE_BLAS_ILP64 ){
echo "##vso[task.setvariable variable=OPENBLAS64_]$pwd\openblas"
} else {
echo "##vso[task.setvariable variable=OPENBLAS]$pwd\openblas"
}
displayName: 'Download / Install OpenBLAS'
- powershell: |
choco install -y mingw --forcex86 --force --version=7.3.0
refreshenv
displayName: 'Install 32-bit mingw for 32-bit builds'
condition: eq(variables['BITS'], 32)
# NOTE: for Windows builds it seems much more tractable to use runtests.py
# vs. manual setup.py and then runtests.py for testing only
- powershell: |
If ($(BITS) -eq 32) {
$env:CFLAGS = "-m32"
$env:LDFLAGS = "-m32"
$env:PATH = "C:\\ProgramData\\chocolatey\\lib\\mingw\\tools\\install\\mingw$(BITS)\\bin;" + $env:PATH
}
python -c "from tools import openblas_support; openblas_support.make_init('numpy')"
python -m pip wheel -v -v -v --no-build-isolation --no-use-pep517 --wheel-dir=dist .
ls dist -r | Foreach-Object {
python -m pip install $_.FullName
}
displayName: 'Build NumPy'
- bash: |
pushd . && cd .. && target=$(python -c "import numpy, os; print(os.path.abspath(os.path.join(os.path.dirname(numpy.__file__), '.libs')))") && popd
python -m pip download -d destination --only-binary :all: --no-deps numpy==1.14
cd destination && unzip numpy*.whl && cp numpy/.libs/*.dll $target
ls $target
displayName: 'Add extraneous & older DLL to numpy/.libs to probe DLL handling robustness'
condition: eq(variables['PYTHON_VERSION'], '3.6')
- script: pushd . && cd .. && python -c "from ctypes import windll; windll.kernel32.SetDefaultDllDirectories(0x00000800); import numpy" && popd
displayName: 'For gh-12667; Windows DLL resolution'
condition: eq(variables['PYTHON_VERSION'], '3.6')
- script: python runtests.py -n --show-build-log --mode=$(TEST_MODE) -- -rsx --junitxml=junit/test-results.xml
displayName: 'Run NumPy Test Suite'
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
failTaskOnFailedTests: true
testRunTitle: 'Publish test results for Python $(PYTHON_VERSION) $(BITS)-bit $(TEST_MODE) Windows'

View File

@ -1,101 +1,101 @@
.. -*- rst -*-
================
NumPy benchmarks
================
Benchmarking NumPy with Airspeed Velocity.
Usage
-----
Airspeed Velocity manages building and Python virtualenvs by itself,
unless told otherwise. Some of the benchmarking features in
``runtests.py`` also tell ASV to use the NumPy compiled by
``runtests.py``. To run the benchmarks, you do not need to install a
development version of NumPy to your current Python environment.
Before beginning, ensure that *airspeed velocity* is installed.
By default, `asv` ships with support for anaconda and virtualenv::
pip install asv
pip install virtualenv
After contributing new benchmarks, you should test them locally
before submitting a pull request.
To run all benchmarks, navigate to the root NumPy directory at
the command line and execute::
python runtests.py --bench
where ``--bench`` activates the benchmark suite instead of the
test suite. This builds NumPy and runs all available benchmarks
defined in ``benchmarks/``. (Note: this could take a while. Each
benchmark is run multiple times to measure the distribution in
execution times.)
To run benchmarks from a particular benchmark module, such as
``bench_core.py``, simply append the filename without the extension::
python runtests.py --bench bench_core
To run a benchmark defined in a class, such as ``Mandelbrot``
from ``bench_avx.py``::
python runtests.py --bench bench_avx.Mandelbrot
Compare change in benchmark results to another version/commit/branch::
python runtests.py --bench-compare v1.6.2 bench_core
python runtests.py --bench-compare 8bf4e9b bench_core
python runtests.py --bench-compare master bench_core
All of the commands above display the results in plain text in
the console, and the results are not saved for comparison with
future commits. For greater control, a graphical view, and to
have results saved for future comparison you can run ASV commands
(record results and generate HTML)::
cd benchmarks
asv run -n -e --python=same
asv publish
asv preview
More on how to use ``asv`` can be found in `ASV documentation`_
Command-line help is available as usual via ``asv --help`` and
``asv run --help``.
.. _ASV documentation: https://asv.readthedocs.io/
Writing benchmarks
------------------
See `ASV documentation`_ for basics on how to write benchmarks.
Some things to consider:
- The benchmark suite should be importable with any NumPy version.
- The benchmark parameters etc. should not depend on which NumPy version
is installed.
- Try to keep the runtime of the benchmark reasonable.
- Prefer ASV's ``time_`` methods for benchmarking times rather than cooking up
time measurements via ``time.clock``, even if it requires some juggling when
writing the benchmark.
- Preparing arrays etc. should generally be put in the ``setup`` method rather
than the ``time_`` methods, to avoid counting preparation time together with
the time of the benchmarked operation.
- Be mindful that large arrays created with ``np.empty`` or ``np.zeros`` might
not be allocated in physical memory until the memory is accessed. If this is
desired behaviour, make sure to comment it in your setup function. If
you are benchmarking an algorithm, it is unlikely that a user will be
executing said algorithm on a newly created empty/zero array. One can force
pagefaults to occur in the setup phase either by calling ``np.ones`` or
``arr.fill(value)`` after creating the array,
.. -*- rst -*-
================
NumPy benchmarks
================
Benchmarking NumPy with Airspeed Velocity.
Usage
-----
Airspeed Velocity manages building and Python virtualenvs by itself,
unless told otherwise. Some of the benchmarking features in
``runtests.py`` also tell ASV to use the NumPy compiled by
``runtests.py``. To run the benchmarks, you do not need to install a
development version of NumPy to your current Python environment.
Before beginning, ensure that *airspeed velocity* is installed.
By default, `asv` ships with support for anaconda and virtualenv::
pip install asv
pip install virtualenv
After contributing new benchmarks, you should test them locally
before submitting a pull request.
To run all benchmarks, navigate to the root NumPy directory at
the command line and execute::
python runtests.py --bench
where ``--bench`` activates the benchmark suite instead of the
test suite. This builds NumPy and runs all available benchmarks
defined in ``benchmarks/``. (Note: this could take a while. Each
benchmark is run multiple times to measure the distribution in
execution times.)
To run benchmarks from a particular benchmark module, such as
``bench_core.py``, simply append the filename without the extension::
python runtests.py --bench bench_core
To run a benchmark defined in a class, such as ``Mandelbrot``
from ``bench_avx.py``::
python runtests.py --bench bench_avx.Mandelbrot
Compare change in benchmark results to another version/commit/branch::
python runtests.py --bench-compare v1.6.2 bench_core
python runtests.py --bench-compare 8bf4e9b bench_core
python runtests.py --bench-compare master bench_core
All of the commands above display the results in plain text in
the console, and the results are not saved for comparison with
future commits. For greater control, a graphical view, and to
have results saved for future comparison you can run ASV commands
(record results and generate HTML)::
cd benchmarks
asv run -n -e --python=same
asv publish
asv preview
More on how to use ``asv`` can be found in `ASV documentation`_
Command-line help is available as usual via ``asv --help`` and
``asv run --help``.
.. _ASV documentation: https://asv.readthedocs.io/
Writing benchmarks
------------------
See `ASV documentation`_ for basics on how to write benchmarks.
Some things to consider:
- The benchmark suite should be importable with any NumPy version.
- The benchmark parameters etc. should not depend on which NumPy version
is installed.
- Try to keep the runtime of the benchmark reasonable.
- Prefer ASV's ``time_`` methods for benchmarking times rather than cooking up
time measurements via ``time.clock``, even if it requires some juggling when
writing the benchmark.
- Preparing arrays etc. should generally be put in the ``setup`` method rather
than the ``time_`` methods, to avoid counting preparation time together with
the time of the benchmarked operation.
- Be mindful that large arrays created with ``np.empty`` or ``np.zeros`` might
not be allocated in physical memory until the memory is accessed. If this is
desired behaviour, make sure to comment it in your setup function. If
you are benchmarking an algorithm, it is unlikely that a user will be
executing said algorithm on a newly created empty/zero array. One can force
pagefaults to occur in the setup phase either by calling ``np.ones`` or
``arr.fill(value)`` after creating the array,

View File

@ -1,85 +1,85 @@
{
// The version of the config file format. Do not change, unless
// you know what you are doing.
"version": 1,
// The name of the project being benchmarked
"project": "numpy",
// The project's homepage
"project_url": "https://www.numpy.org/",
// The URL or local path of the source code repository for the
// project being benchmarked
"repo": "..",
// List of branches to benchmark. If not provided, defaults to "master"
// (for git) or "tip" (for mercurial).
"branches": ["HEAD"],
// The DVCS being used. If not set, it will be automatically
// determined from "repo" by looking at the protocol in the URL
// (if remote), or by looking for special directories, such as
// ".git" (if local).
"dvcs": "git",
// The tool to use to create environments. May be "conda",
// "virtualenv" or other value depending on the plugins in use.
// If missing or the empty string, the tool will be automatically
// determined by looking for tools on the PATH environment
// variable.
"environment_type": "virtualenv",
// the base URL to show a commit for the project.
"show_commit_url": "https://github.com/numpy/numpy/commit/",
// The Pythons you'd like to test against. If not provided, defaults
// to the current version of Python used to run `asv`.
"pythons": ["3.7"],
// The matrix of dependencies to test. Each key is the name of a
// package (in PyPI) and the values are version numbers. An empty
// list indicates to just test against the default (latest)
// version.
"matrix": {
"Cython": [],
},
// The directory (relative to the current directory) that benchmarks are
// stored in. If not provided, defaults to "benchmarks"
"benchmark_dir": "benchmarks",
// The directory (relative to the current directory) to cache the Python
// environments in. If not provided, defaults to "env"
"env_dir": "env",
// The directory (relative to the current directory) that raw benchmark
// results are stored in. If not provided, defaults to "results".
"results_dir": "results",
// The directory (relative to the current directory) that the html tree
// should be written to. If not provided, defaults to "html".
"html_dir": "html",
// The number of characters to retain in the commit hashes.
// "hash_length": 8,
// `asv` will cache wheels of the recent builds in each
// environment, making them faster to install next time. This is
// number of builds to keep, per environment.
"build_cache_size": 8,
// The commits after which the regression search in `asv publish`
// should start looking for regressions. Dictionary whose keys are
// regexps matching to benchmark names, and values corresponding to
// the commit (exclusive) after which to start looking for
// regressions. The default is to start from the first commit
// with results. If the commit is `null`, regression detection is
// skipped for the matching benchmark.
//
// "regressions_first_commits": {
// "some_benchmark": "352cdf", // Consider regressions only after this commit
// "another_benchmark": null, // Skip regression detection altogether
// }
}
{
// The version of the config file format. Do not change, unless
// you know what you are doing.
"version": 1,
// The name of the project being benchmarked
"project": "numpy",
// The project's homepage
"project_url": "https://www.numpy.org/",
// The URL or local path of the source code repository for the
// project being benchmarked
"repo": "..",
// List of branches to benchmark. If not provided, defaults to "master"
// (for git) or "tip" (for mercurial).
"branches": ["HEAD"],
// The DVCS being used. If not set, it will be automatically
// determined from "repo" by looking at the protocol in the URL
// (if remote), or by looking for special directories, such as
// ".git" (if local).
"dvcs": "git",
// The tool to use to create environments. May be "conda",
// "virtualenv" or other value depending on the plugins in use.
// If missing or the empty string, the tool will be automatically
// determined by looking for tools on the PATH environment
// variable.
"environment_type": "virtualenv",
// the base URL to show a commit for the project.
"show_commit_url": "https://github.com/numpy/numpy/commit/",
// The Pythons you'd like to test against. If not provided, defaults
// to the current version of Python used to run `asv`.
"pythons": ["3.7"],
// The matrix of dependencies to test. Each key is the name of a
// package (in PyPI) and the values are version numbers. An empty
// list indicates to just test against the default (latest)
// version.
"matrix": {
"Cython": [],
},
// The directory (relative to the current directory) that benchmarks are
// stored in. If not provided, defaults to "benchmarks"
"benchmark_dir": "benchmarks",
// The directory (relative to the current directory) to cache the Python
// environments in. If not provided, defaults to "env"
"env_dir": "env",
// The directory (relative to the current directory) that raw benchmark
// results are stored in. If not provided, defaults to "results".
"results_dir": "results",
// The directory (relative to the current directory) that the html tree
// should be written to. If not provided, defaults to "html".
"html_dir": "html",
// The number of characters to retain in the commit hashes.
// "hash_length": 8,
// `asv` will cache wheels of the recent builds in each
// environment, making them faster to install next time. This is
// number of builds to keep, per environment.
"build_cache_size": 8,
// The commits after which the regression search in `asv publish`
// should start looking for regressions. Dictionary whose keys are
// regexps matching to benchmark names, and values corresponding to
// the commit (exclusive) after which to start looking for
// regressions. The default is to start from the first commit
// with results. If the commit is `null`, regression detection is
// skipped for the matching benchmark.
//
// "regressions_first_commits": {
// "some_benchmark": "352cdf", // Consider regressions only after this commit
// "another_benchmark": null, // Skip regression detection altogether
// }
}

View File

@ -1 +1 @@
from . import common
from . import common

View File

@ -1,85 +1,85 @@
from .common import Benchmark
import numpy as np
class LaplaceInplace(Benchmark):
params = ['inplace', 'normal']
param_names = ['update']
def setup(self, update):
N = 150
Niter = 1000
dx = 0.1
dy = 0.1
dx2 = (dx * dx)
dy2 = (dy * dy)
def num_update(u, dx2, dy2):
u[1:(-1), 1:(-1)] = ((((u[2:, 1:(-1)] + u[:(-2), 1:(-1)]) * dy2) +
((u[1:(-1), 2:] + u[1:(-1), :(-2)]) * dx2))
/ (2 * (dx2 + dy2)))
def num_inplace(u, dx2, dy2):
tmp = u[:(-2), 1:(-1)].copy()
np.add(tmp, u[2:, 1:(-1)], out=tmp)
np.multiply(tmp, dy2, out=tmp)
tmp2 = u[1:(-1), 2:].copy()
np.add(tmp2, u[1:(-1), :(-2)], out=tmp2)
np.multiply(tmp2, dx2, out=tmp2)
np.add(tmp, tmp2, out=tmp)
np.multiply(tmp, (1.0 / (2.0 * (dx2 + dy2))),
out=u[1:(-1), 1:(-1)])
def laplace(N, Niter=100, func=num_update, args=()):
u = np.zeros([N, N], order='C')
u[0] = 1
for i in range(Niter):
func(u, *args)
return u
func = {'inplace': num_inplace, 'normal': num_update}[update]
def run():
laplace(N, Niter, func, args=(dx2, dy2))
self.run = run
def time_it(self, update):
self.run()
class MaxesOfDots(Benchmark):
def setup(self):
np.random.seed(1)
nsubj = 5
nfeat = 100
ntime = 200
self.arrays = [np.random.normal(size=(ntime, nfeat))
for i in range(nsubj)]
def maxes_of_dots(self, arrays):
"""
A magical feature score for each feature in each dataset
:ref:`Haxby et al., Neuron (2011) <HGC+11>`.
If arrays are column-wise zscore-d before computation it
results in characterizing each column in each array with
sum of maximal correlations of that column with columns
in other arrays.
Arrays must agree only on the first dimension.
For numpy it a join benchmark of dot products and max()
on a set of arrays.
"""
feature_scores = ([0] * len(arrays))
for (i, sd) in enumerate(arrays):
for (j, sd2) in enumerate(arrays[(i + 1):]):
corr_temp = np.dot(sd.T, sd2)
feature_scores[i] += np.max(corr_temp, axis=1)
feature_scores[((j + i) + 1)] += np.max(corr_temp, axis=0)
return feature_scores
def time_it(self):
self.maxes_of_dots(self.arrays)
from .common import Benchmark
import numpy as np
class LaplaceInplace(Benchmark):
params = ['inplace', 'normal']
param_names = ['update']
def setup(self, update):
N = 150
Niter = 1000
dx = 0.1
dy = 0.1
dx2 = (dx * dx)
dy2 = (dy * dy)
def num_update(u, dx2, dy2):
u[1:(-1), 1:(-1)] = ((((u[2:, 1:(-1)] + u[:(-2), 1:(-1)]) * dy2) +
((u[1:(-1), 2:] + u[1:(-1), :(-2)]) * dx2))
/ (2 * (dx2 + dy2)))
def num_inplace(u, dx2, dy2):
tmp = u[:(-2), 1:(-1)].copy()
np.add(tmp, u[2:, 1:(-1)], out=tmp)
np.multiply(tmp, dy2, out=tmp)
tmp2 = u[1:(-1), 2:].copy()
np.add(tmp2, u[1:(-1), :(-2)], out=tmp2)
np.multiply(tmp2, dx2, out=tmp2)
np.add(tmp, tmp2, out=tmp)
np.multiply(tmp, (1.0 / (2.0 * (dx2 + dy2))),
out=u[1:(-1), 1:(-1)])
def laplace(N, Niter=100, func=num_update, args=()):
u = np.zeros([N, N], order='C')
u[0] = 1
for i in range(Niter):
func(u, *args)
return u
func = {'inplace': num_inplace, 'normal': num_update}[update]
def run():
laplace(N, Niter, func, args=(dx2, dy2))
self.run = run
def time_it(self, update):
self.run()
class MaxesOfDots(Benchmark):
def setup(self):
np.random.seed(1)
nsubj = 5
nfeat = 100
ntime = 200
self.arrays = [np.random.normal(size=(ntime, nfeat))
for i in range(nsubj)]
def maxes_of_dots(self, arrays):
"""
A magical feature score for each feature in each dataset
:ref:`Haxby et al., Neuron (2011) <HGC+11>`.
If arrays are column-wise zscore-d before computation it
results in characterizing each column in each array with
sum of maximal correlations of that column with columns
in other arrays.
Arrays must agree only on the first dimension.
For numpy it a join benchmark of dot products and max()
on a set of arrays.
"""
feature_scores = ([0] * len(arrays))
for (i, sd) in enumerate(arrays):
for (j, sd2) in enumerate(arrays[(i + 1):]):
corr_temp = np.dot(sd.T, sd2)
feature_scores[i] += np.max(corr_temp, axis=1)
feature_scores[((j + i) + 1)] += np.max(corr_temp, axis=0)
return feature_scores
def time_it(self):
self.maxes_of_dots(self.arrays)

View File

@ -1,57 +1,57 @@
from __future__ import absolute_import, division, print_function
from .common import Benchmark
import numpy as np
class ArrayCoercionSmall(Benchmark):
# More detailed benchmarks for array coercion,
# some basic benchmarks are in `bench_core.py`.
params = [[range(3), [1], 1, np.array([5], dtype=np.int64), np.int64(5)]]
param_names = ['array_like']
int64 = np.dtype(np.int64)
def time_array_invalid_kwarg(self, array_like):
try:
np.array(array_like, ndmin="not-integer")
except TypeError:
pass
def time_array(self, array_like):
np.array(array_like)
def time_array_dtype_not_kwargs(self, array_like):
np.array(array_like, self.int64)
def time_array_no_copy(self, array_like):
np.array(array_like, copy=False)
def time_array_subok(self, array_like):
np.array(array_like, subok=True)
def time_array_all_kwargs(self, array_like):
np.array(array_like, dtype=self.int64, copy=False, order="F",
subok=False, ndmin=2)
def time_asarray(self, array_like):
np.asarray(array_like)
def time_asarray_dtype(self, array_like):
np.array(array_like, dtype=self.int64)
def time_asarray_dtype(self, array_like):
np.array(array_like, dtype=self.int64, order="F")
def time_asanyarray(self, array_like):
np.asarray(array_like)
def time_asanyarray_dtype(self, array_like):
np.array(array_like, dtype=self.int64)
def time_asanyarray_dtype(self, array_like):
np.array(array_like, dtype=self.int64, order="F")
def time_ascontiguousarray(self, array_like):
np.ascontiguousarray(array_like)
from __future__ import absolute_import, division, print_function
from .common import Benchmark
import numpy as np
class ArrayCoercionSmall(Benchmark):
# More detailed benchmarks for array coercion,
# some basic benchmarks are in `bench_core.py`.
params = [[range(3), [1], 1, np.array([5], dtype=np.int64), np.int64(5)]]
param_names = ['array_like']
int64 = np.dtype(np.int64)
def time_array_invalid_kwarg(self, array_like):
try:
np.array(array_like, ndmin="not-integer")
except TypeError:
pass
def time_array(self, array_like):
np.array(array_like)
def time_array_dtype_not_kwargs(self, array_like):
np.array(array_like, self.int64)
def time_array_no_copy(self, array_like):
np.array(array_like, copy=False)
def time_array_subok(self, array_like):
np.array(array_like, subok=True)
def time_array_all_kwargs(self, array_like):
np.array(array_like, dtype=self.int64, copy=False, order="F",
subok=False, ndmin=2)
def time_asarray(self, array_like):
np.asarray(array_like)
def time_asarray_dtype(self, array_like):
np.array(array_like, dtype=self.int64)
def time_asarray_dtype(self, array_like):
np.array(array_like, dtype=self.int64, order="F")
def time_asanyarray(self, array_like):
np.asarray(array_like)
def time_asanyarray_dtype(self, array_like):
np.array(array_like, dtype=self.int64)
def time_asanyarray_dtype(self, array_like):
np.array(array_like, dtype=self.int64, order="F")
def time_ascontiguousarray(self, array_like):
np.ascontiguousarray(array_like)

View File

@ -1,159 +1,159 @@
from .common import Benchmark
import numpy as np
avx_ufuncs = ['sin',
'cos',
'exp',
'log',
'sqrt',
'absolute',
'reciprocal',
'square',
'rint',
'floor',
'ceil' ,
'trunc']
stride = [1, 2, 4]
dtype = ['f', 'd']
class AVX_UFunc(Benchmark):
params = [avx_ufuncs, stride, dtype]
param_names = ['avx_based_ufunc', 'stride', 'dtype']
timeout = 10
def setup(self, ufuncname, stride, dtype):
np.seterr(all='ignore')
try:
self.f = getattr(np, ufuncname)
except AttributeError:
raise NotImplementedError()
N = 10000
self.arr = np.ones(stride*N, dtype)
def time_ufunc(self, ufuncname, stride, dtype):
self.f(self.arr[::stride])
avx_bfuncs = ['maximum',
'minimum']
class AVX_BFunc(Benchmark):
params = [avx_bfuncs, dtype, stride]
param_names = ['avx_based_bfunc', 'dtype', 'stride']
timeout = 10
def setup(self, ufuncname, dtype, stride):
np.seterr(all='ignore')
try:
self.f = getattr(np, ufuncname)
except AttributeError:
raise NotImplementedError()
N = 10000
self.arr1 = np.array(np.random.rand(stride*N), dtype=dtype)
self.arr2 = np.array(np.random.rand(stride*N), dtype=dtype)
def time_ufunc(self, ufuncname, dtype, stride):
self.f(self.arr1[::stride], self.arr2[::stride])
cmplx_bfuncs = ['add',
'subtract',
'multiply',
'divide']
cmplxstride = [1, 2, 4]
cmplxdtype = ['F', 'D']
class AVX_cmplx_arithmetic(Benchmark):
params = [cmplx_bfuncs, cmplxstride, cmplxdtype]
param_names = ['bfunc', 'stride', 'dtype']
timeout = 10
def setup(self, bfuncname, stride, dtype):
np.seterr(all='ignore')
try:
self.f = getattr(np, bfuncname)
except AttributeError:
raise NotImplementedError()
N = 10000
self.arr1 = np.ones(stride*N, dtype)
self.arr2 = np.ones(stride*N, dtype)
def time_ufunc(self, bfuncname, stride, dtype):
self.f(self.arr1[::stride], self.arr2[::stride])
cmplx_ufuncs = ['reciprocal',
'absolute',
'square',
'conjugate']
class AVX_cmplx_funcs(Benchmark):
params = [cmplx_ufuncs, cmplxstride, cmplxdtype]
param_names = ['bfunc', 'stride', 'dtype']
timeout = 10
def setup(self, bfuncname, stride, dtype):
np.seterr(all='ignore')
try:
self.f = getattr(np, bfuncname)
except AttributeError:
raise NotImplementedError()
N = 10000
self.arr1 = np.ones(stride*N, dtype)
def time_ufunc(self, bfuncname, stride, dtype):
self.f(self.arr1[::stride])
class Mandelbrot(Benchmark):
def f(self,z):
return np.abs(z) < 4.0
def g(self,z,c):
return np.sum(np.multiply(z,z) + c)
def mandelbrot_numpy(self, c, maxiter):
output = np.zeros(c.shape, np.int)
z = np.empty(c.shape, np.complex64)
for it in range(maxiter):
notdone = self.f(z)
output[notdone] = it
z[notdone] = self.g(z[notdone],c[notdone])
output[output == maxiter-1] = 0
return output
def mandelbrot_set(self,xmin,xmax,ymin,ymax,width,height,maxiter):
r1 = np.linspace(xmin, xmax, width, dtype=np.float32)
r2 = np.linspace(ymin, ymax, height, dtype=np.float32)
c = r1 + r2[:,None]*1j
n3 = self.mandelbrot_numpy(c,maxiter)
return (r1,r2,n3.T)
def time_mandel(self):
self.mandelbrot_set(-0.74877,-0.74872,0.06505,0.06510,1000,1000,2048)
class LogisticRegression(Benchmark):
param_names = ['dtype']
params = [np.float32, np.float64]
timeout = 1000
def train(self, max_epoch):
for epoch in range(max_epoch):
z = np.matmul(self.X_train, self.W)
A = 1 / (1 + np.exp(-z)) # sigmoid(z)
loss = -np.mean(self.Y_train * np.log(A) + (1-self.Y_train) * np.log(1-A))
dz = A - self.Y_train
dw = (1/self.size) * np.matmul(self.X_train.T, dz)
self.W = self.W - self.alpha*dw
def setup(self, dtype):
np.random.seed(42)
self.size = 250
features = 16
self.X_train = np.random.rand(self.size,features).astype(dtype)
self.Y_train = np.random.choice(2,self.size).astype(dtype)
# Initialize weights
self.W = np.zeros((features,1), dtype=dtype)
self.b = np.zeros((1,1), dtype=dtype)
self.alpha = 0.1
def time_train(self, dtype):
self.train(1000)
from .common import Benchmark
import numpy as np
avx_ufuncs = ['sin',
'cos',
'exp',
'log',
'sqrt',
'absolute',
'reciprocal',
'square',
'rint',
'floor',
'ceil' ,
'trunc']
stride = [1, 2, 4]
dtype = ['f', 'd']
class AVX_UFunc(Benchmark):
params = [avx_ufuncs, stride, dtype]
param_names = ['avx_based_ufunc', 'stride', 'dtype']
timeout = 10
def setup(self, ufuncname, stride, dtype):
np.seterr(all='ignore')
try:
self.f = getattr(np, ufuncname)
except AttributeError:
raise NotImplementedError()
N = 10000
self.arr = np.ones(stride*N, dtype)
def time_ufunc(self, ufuncname, stride, dtype):
self.f(self.arr[::stride])
avx_bfuncs = ['maximum',
'minimum']
class AVX_BFunc(Benchmark):
params = [avx_bfuncs, dtype, stride]
param_names = ['avx_based_bfunc', 'dtype', 'stride']
timeout = 10
def setup(self, ufuncname, dtype, stride):
np.seterr(all='ignore')
try:
self.f = getattr(np, ufuncname)
except AttributeError:
raise NotImplementedError()
N = 10000
self.arr1 = np.array(np.random.rand(stride*N), dtype=dtype)
self.arr2 = np.array(np.random.rand(stride*N), dtype=dtype)
def time_ufunc(self, ufuncname, dtype, stride):
self.f(self.arr1[::stride], self.arr2[::stride])
cmplx_bfuncs = ['add',
'subtract',
'multiply',
'divide']
cmplxstride = [1, 2, 4]
cmplxdtype = ['F', 'D']
class AVX_cmplx_arithmetic(Benchmark):
params = [cmplx_bfuncs, cmplxstride, cmplxdtype]
param_names = ['bfunc', 'stride', 'dtype']
timeout = 10
def setup(self, bfuncname, stride, dtype):
np.seterr(all='ignore')
try:
self.f = getattr(np, bfuncname)
except AttributeError:
raise NotImplementedError()
N = 10000
self.arr1 = np.ones(stride*N, dtype)
self.arr2 = np.ones(stride*N, dtype)
def time_ufunc(self, bfuncname, stride, dtype):
self.f(self.arr1[::stride], self.arr2[::stride])
cmplx_ufuncs = ['reciprocal',
'absolute',
'square',
'conjugate']
class AVX_cmplx_funcs(Benchmark):
params = [cmplx_ufuncs, cmplxstride, cmplxdtype]
param_names = ['bfunc', 'stride', 'dtype']
timeout = 10
def setup(self, bfuncname, stride, dtype):
np.seterr(all='ignore')
try:
self.f = getattr(np, bfuncname)
except AttributeError:
raise NotImplementedError()
N = 10000
self.arr1 = np.ones(stride*N, dtype)
def time_ufunc(self, bfuncname, stride, dtype):
self.f(self.arr1[::stride])
class Mandelbrot(Benchmark):
def f(self,z):
return np.abs(z) < 4.0
def g(self,z,c):
return np.sum(np.multiply(z,z) + c)
def mandelbrot_numpy(self, c, maxiter):
output = np.zeros(c.shape, np.int)
z = np.empty(c.shape, np.complex64)
for it in range(maxiter):
notdone = self.f(z)
output[notdone] = it
z[notdone] = self.g(z[notdone],c[notdone])
output[output == maxiter-1] = 0
return output
def mandelbrot_set(self,xmin,xmax,ymin,ymax,width,height,maxiter):
r1 = np.linspace(xmin, xmax, width, dtype=np.float32)
r2 = np.linspace(ymin, ymax, height, dtype=np.float32)
c = r1 + r2[:,None]*1j
n3 = self.mandelbrot_numpy(c,maxiter)
return (r1,r2,n3.T)
def time_mandel(self):
self.mandelbrot_set(-0.74877,-0.74872,0.06505,0.06510,1000,1000,2048)
class LogisticRegression(Benchmark):
param_names = ['dtype']
params = [np.float32, np.float64]
timeout = 1000
def train(self, max_epoch):
for epoch in range(max_epoch):
z = np.matmul(self.X_train, self.W)
A = 1 / (1 + np.exp(-z)) # sigmoid(z)
loss = -np.mean(self.Y_train * np.log(A) + (1-self.Y_train) * np.log(1-A))
dz = A - self.Y_train
dw = (1/self.size) * np.matmul(self.X_train.T, dz)
self.W = self.W - self.alpha*dw
def setup(self, dtype):
np.random.seed(42)
self.size = 250
features = 16
self.X_train = np.random.rand(self.size,features).astype(dtype)
self.Y_train = np.random.choice(2,self.size).astype(dtype)
# Initialize weights
self.W = np.zeros((features,1), dtype=dtype)
self.b = np.zeros((1,1), dtype=dtype)
self.alpha = 0.1
def time_train(self, dtype):
self.train(1000)

View File

@ -1,193 +1,193 @@
from .common import Benchmark
import numpy as np
class Core(Benchmark):
def setup(self):
self.l100 = range(100)
self.l50 = range(50)
self.l = [np.arange(1000), np.arange(1000)]
self.l_view = [memoryview(a) for a in self.l]
self.l10x10 = np.ones((10, 10))
def time_array_1(self):
np.array(1)
def time_array_empty(self):
np.array([])
def time_array_l1(self):
np.array([1])
def time_array_l100(self):
np.array(self.l100)
def time_array_l(self):
np.array(self.l)
def time_array_l_view(self):
np.array(self.l_view)
def time_vstack_l(self):
np.vstack(self.l)
def time_hstack_l(self):
np.hstack(self.l)
def time_dstack_l(self):
np.dstack(self.l)
def time_arange_100(self):
np.arange(100)
def time_zeros_100(self):
np.zeros(100)
def time_ones_100(self):
np.ones(100)
def time_empty_100(self):
np.empty(100)
def time_eye_100(self):
np.eye(100)
def time_identity_100(self):
np.identity(100)
def time_eye_3000(self):
np.eye(3000)
def time_identity_3000(self):
np.identity(3000)
def time_diag_l100(self):
np.diag(self.l100)
def time_diagflat_l100(self):
np.diagflat(self.l100)
def time_diagflat_l50_l50(self):
np.diagflat([self.l50, self.l50])
def time_triu_l10x10(self):
np.triu(self.l10x10)
def time_tril_l10x10(self):
np.tril(self.l10x10)
class Temporaries(Benchmark):
def setup(self):
self.amid = np.ones(50000)
self.bmid = np.ones(50000)
self.alarge = np.ones(1000000)
self.blarge = np.ones(1000000)
def time_mid(self):
(self.amid * 2) + self.bmid
def time_mid2(self):
(self.amid + self.bmid) - 2
def time_large(self):
(self.alarge * 2) + self.blarge
def time_large2(self):
(self.alarge + self.blarge) - 2
class CorrConv(Benchmark):
params = [[50, 1000, int(1e5)],
[10, 100, 1000, int(1e4)],
['valid', 'same', 'full']]
param_names = ['size1', 'size2', 'mode']
def setup(self, size1, size2, mode):
self.x1 = np.linspace(0, 1, num=size1)
self.x2 = np.cos(np.linspace(0, 2*np.pi, num=size2))
def time_correlate(self, size1, size2, mode):
np.correlate(self.x1, self.x2, mode=mode)
def time_convolve(self, size1, size2, mode):
np.convolve(self.x1, self.x2, mode=mode)
class CountNonzero(Benchmark):
param_names = ['numaxes', 'size', 'dtype']
params = [
[1, 2, 3],
[100, 10000, 1000000],
[bool, int, str, object]
]
def setup(self, numaxes, size, dtype):
self.x = np.arange(numaxes * size).reshape(numaxes, size)
self.x = (self.x % 3).astype(dtype)
def time_count_nonzero(self, numaxes, size, dtype):
np.count_nonzero(self.x)
def time_count_nonzero_axis(self, numaxes, size, dtype):
np.count_nonzero(self.x, axis=self.x.ndim - 1)
def time_count_nonzero_multi_axis(self, numaxes, size, dtype):
if self.x.ndim >= 2:
np.count_nonzero(self.x, axis=(
self.x.ndim - 1, self.x.ndim - 2))
class PackBits(Benchmark):
param_names = ['dtype']
params = [[bool, np.uintp]]
def setup(self, dtype):
self.d = np.ones(10000, dtype=dtype)
self.d2 = np.ones((200, 1000), dtype=dtype)
def time_packbits(self, dtype):
np.packbits(self.d)
def time_packbits_axis0(self, dtype):
np.packbits(self.d2, axis=0)
def time_packbits_axis1(self, dtype):
np.packbits(self.d2, axis=1)
class UnpackBits(Benchmark):
def setup(self):
self.d = np.ones(10000, dtype=np.uint8)
self.d2 = np.ones((200, 1000), dtype=np.uint8)
def time_unpackbits(self):
np.unpackbits(self.d)
def time_unpackbits_little(self):
np.unpackbits(self.d, bitorder="little")
def time_unpackbits_axis0(self):
np.unpackbits(self.d2, axis=0)
def time_unpackbits_axis1(self):
np.unpackbits(self.d2, axis=1)
def time_unpackbits_axis1_little(self):
np.unpackbits(self.d2, bitorder="little", axis=1)
class Indices(Benchmark):
def time_indices(self):
np.indices((1000, 500))
class VarComplex(Benchmark):
params = [10**n for n in range(1, 9)]
def setup(self, n):
self.arr = np.random.randn(n) + 1j * np.random.randn(n)
def teardown(self, n):
del self.arr
def time_var(self, n):
self.arr.var()
from .common import Benchmark
import numpy as np
class Core(Benchmark):
def setup(self):
self.l100 = range(100)
self.l50 = range(50)
self.l = [np.arange(1000), np.arange(1000)]
self.l_view = [memoryview(a) for a in self.l]
self.l10x10 = np.ones((10, 10))
def time_array_1(self):
np.array(1)
def time_array_empty(self):
np.array([])
def time_array_l1(self):
np.array([1])
def time_array_l100(self):
np.array(self.l100)
def time_array_l(self):
np.array(self.l)
def time_array_l_view(self):
np.array(self.l_view)
def time_vstack_l(self):
np.vstack(self.l)
def time_hstack_l(self):
np.hstack(self.l)
def time_dstack_l(self):
np.dstack(self.l)
def time_arange_100(self):
np.arange(100)
def time_zeros_100(self):
np.zeros(100)
def time_ones_100(self):
np.ones(100)
def time_empty_100(self):
np.empty(100)
def time_eye_100(self):
np.eye(100)
def time_identity_100(self):
np.identity(100)
def time_eye_3000(self):
np.eye(3000)
def time_identity_3000(self):
np.identity(3000)
def time_diag_l100(self):
np.diag(self.l100)
def time_diagflat_l100(self):
np.diagflat(self.l100)
def time_diagflat_l50_l50(self):
np.diagflat([self.l50, self.l50])
def time_triu_l10x10(self):
np.triu(self.l10x10)
def time_tril_l10x10(self):
np.tril(self.l10x10)
class Temporaries(Benchmark):
def setup(self):
self.amid = np.ones(50000)
self.bmid = np.ones(50000)
self.alarge = np.ones(1000000)
self.blarge = np.ones(1000000)
def time_mid(self):
(self.amid * 2) + self.bmid
def time_mid2(self):
(self.amid + self.bmid) - 2
def time_large(self):
(self.alarge * 2) + self.blarge
def time_large2(self):
(self.alarge + self.blarge) - 2
class CorrConv(Benchmark):
params = [[50, 1000, int(1e5)],
[10, 100, 1000, int(1e4)],
['valid', 'same', 'full']]
param_names = ['size1', 'size2', 'mode']
def setup(self, size1, size2, mode):
self.x1 = np.linspace(0, 1, num=size1)
self.x2 = np.cos(np.linspace(0, 2*np.pi, num=size2))
def time_correlate(self, size1, size2, mode):
np.correlate(self.x1, self.x2, mode=mode)
def time_convolve(self, size1, size2, mode):
np.convolve(self.x1, self.x2, mode=mode)
class CountNonzero(Benchmark):
param_names = ['numaxes', 'size', 'dtype']
params = [
[1, 2, 3],
[100, 10000, 1000000],
[bool, int, str, object]
]
def setup(self, numaxes, size, dtype):
self.x = np.arange(numaxes * size).reshape(numaxes, size)
self.x = (self.x % 3).astype(dtype)
def time_count_nonzero(self, numaxes, size, dtype):
np.count_nonzero(self.x)
def time_count_nonzero_axis(self, numaxes, size, dtype):
np.count_nonzero(self.x, axis=self.x.ndim - 1)
def time_count_nonzero_multi_axis(self, numaxes, size, dtype):
if self.x.ndim >= 2:
np.count_nonzero(self.x, axis=(
self.x.ndim - 1, self.x.ndim - 2))
class PackBits(Benchmark):
param_names = ['dtype']
params = [[bool, np.uintp]]
def setup(self, dtype):
self.d = np.ones(10000, dtype=dtype)
self.d2 = np.ones((200, 1000), dtype=dtype)
def time_packbits(self, dtype):
np.packbits(self.d)
def time_packbits_axis0(self, dtype):
np.packbits(self.d2, axis=0)
def time_packbits_axis1(self, dtype):
np.packbits(self.d2, axis=1)
class UnpackBits(Benchmark):
def setup(self):
self.d = np.ones(10000, dtype=np.uint8)
self.d2 = np.ones((200, 1000), dtype=np.uint8)
def time_unpackbits(self):
np.unpackbits(self.d)
def time_unpackbits_little(self):
np.unpackbits(self.d, bitorder="little")
def time_unpackbits_axis0(self):
np.unpackbits(self.d2, axis=0)
def time_unpackbits_axis1(self):
np.unpackbits(self.d2, axis=1)
def time_unpackbits_axis1_little(self):
np.unpackbits(self.d2, bitorder="little", axis=1)
class Indices(Benchmark):
def time_indices(self):
np.indices((1000, 500))
class VarComplex(Benchmark):
params = [10**n for n in range(1, 9)]
def setup(self, n):
self.arr = np.random.randn(n) + 1j * np.random.randn(n)
def teardown(self, n):
del self.arr
def time_var(self, n):
self.arr.var()

View File

@ -1,287 +1,287 @@
from .common import Benchmark
import numpy as np
class Histogram1D(Benchmark):
def setup(self):
self.d = np.linspace(0, 100, 100000)
def time_full_coverage(self):
np.histogram(self.d, 200, (0, 100))
def time_small_coverage(self):
np.histogram(self.d, 200, (50, 51))
def time_fine_binning(self):
np.histogram(self.d, 10000, (0, 100))
class Histogram2D(Benchmark):
def setup(self):
self.d = np.linspace(0, 100, 200000).reshape((-1,2))
def time_full_coverage(self):
np.histogramdd(self.d, (200, 200), ((0, 100), (0, 100)))
def time_small_coverage(self):
np.histogramdd(self.d, (200, 200), ((50, 51), (50, 51)))
def time_fine_binning(self):
np.histogramdd(self.d, (10000, 10000), ((0, 100), (0, 100)))
class Bincount(Benchmark):
def setup(self):
self.d = np.arange(80000, dtype=np.intp)
self.e = self.d.astype(np.float64)
def time_bincount(self):
np.bincount(self.d)
def time_weights(self):
np.bincount(self.d, weights=self.e)
class Median(Benchmark):
def setup(self):
self.e = np.arange(10000, dtype=np.float32)
self.o = np.arange(10001, dtype=np.float32)
def time_even(self):
np.median(self.e)
def time_odd(self):
np.median(self.o)
def time_even_inplace(self):
np.median(self.e, overwrite_input=True)
def time_odd_inplace(self):
np.median(self.o, overwrite_input=True)
def time_even_small(self):
np.median(self.e[:500], overwrite_input=True)
def time_odd_small(self):
np.median(self.o[:500], overwrite_input=True)
class Percentile(Benchmark):
def setup(self):
self.e = np.arange(10000, dtype=np.float32)
self.o = np.arange(10001, dtype=np.float32)
def time_quartile(self):
np.percentile(self.e, [25, 75])
def time_percentile(self):
np.percentile(self.e, [25, 35, 55, 65, 75])
class Select(Benchmark):
def setup(self):
self.d = np.arange(20000)
self.e = self.d.copy()
self.cond = [(self.d > 4), (self.d < 2)]
self.cond_large = [(self.d > 4), (self.d < 2)] * 10
def time_select(self):
np.select(self.cond, [self.d, self.e])
def time_select_larger(self):
np.select(self.cond_large, ([self.d, self.e] * 10))
def memoize(f):
_memoized = {}
def wrapped(*args):
if args not in _memoized:
_memoized[args] = f(*args)
return _memoized[args].copy()
return f
class SortGenerator:
# The size of the unsorted area in the "random unsorted area"
# benchmarks
AREA_SIZE = 100
# The size of the "partially ordered" sub-arrays
BUBBLE_SIZE = 100
@staticmethod
@memoize
def random(size, dtype):
"""
Returns a randomly-shuffled array.
"""
arr = np.arange(size, dtype=dtype)
np.random.shuffle(arr)
return arr
@staticmethod
@memoize
def ordered(size, dtype):
"""
Returns an ordered array.
"""
return np.arange(size, dtype=dtype)
@staticmethod
@memoize
def reversed(size, dtype):
"""
Returns an array that's in descending order.
"""
return np.arange(size-1, -1, -1, dtype=dtype)
@staticmethod
@memoize
def uniform(size, dtype):
"""
Returns an array that has the same value everywhere.
"""
return np.ones(size, dtype=dtype)
@staticmethod
@memoize
def swapped_pair(size, dtype, swap_frac):
"""
Returns an ordered array, but one that has ``swap_frac * size``
pairs swapped.
"""
a = np.arange(size, dtype=dtype)
for _ in range(int(size * swap_frac)):
x, y = np.random.randint(0, size, 2)
a[x], a[y] = a[y], a[x]
return a
@staticmethod
@memoize
def sorted_block(size, dtype, block_size):
"""
Returns an array with blocks that are all sorted.
"""
a = np.arange(size, dtype=dtype)
b = []
if size < block_size:
return a
block_num = size // block_size
for i in range(block_num):
b.extend(a[i::block_num])
return np.array(b)
@classmethod
@memoize
def random_unsorted_area(cls, size, dtype, frac, area_size=None):
"""
This type of array has random unsorted areas such that they
compose the fraction ``frac`` of the original array.
"""
if area_size is None:
area_size = cls.AREA_SIZE
area_num = int(size * frac / area_size)
a = np.arange(size, dtype=dtype)
for _ in range(area_num):
start = np.random.randint(size-area_size)
end = start + area_size
np.random.shuffle(a[start:end])
return a
@classmethod
@memoize
def random_bubble(cls, size, dtype, bubble_num, bubble_size=None):
"""
This type of array has ``bubble_num`` random unsorted areas.
"""
if bubble_size is None:
bubble_size = cls.BUBBLE_SIZE
frac = bubble_size * bubble_num / size
return cls.random_unsorted_area(size, dtype, frac, bubble_size)
class Sort(Benchmark):
"""
This benchmark tests sorting performance with several
different types of arrays that are likely to appear in
real-world applications.
"""
params = [
# In NumPy 1.17 and newer, 'merge' can be one of several
# stable sorts, it isn't necessarily merge sort.
['quick', 'merge', 'heap'],
['float64', 'int64', 'int16'],
[
('random',),
('ordered',),
('reversed',),
('uniform',),
('sorted_block', 10),
('sorted_block', 100),
('sorted_block', 1000),
# ('swapped_pair', 0.01),
# ('swapped_pair', 0.1),
# ('swapped_pair', 0.5),
# ('random_unsorted_area', 0.5),
# ('random_unsorted_area', 0.1),
# ('random_unsorted_area', 0.01),
# ('random_bubble', 1),
# ('random_bubble', 5),
# ('random_bubble', 10),
],
]
param_names = ['kind', 'dtype', 'array_type']
# The size of the benchmarked arrays.
ARRAY_SIZE = 10000
def setup(self, kind, dtype, array_type):
np.random.seed(1234)
array_class = array_type[0]
self.arr = getattr(SortGenerator, array_class)(self.ARRAY_SIZE, dtype, *array_type[1:])
def time_sort(self, kind, dtype, array_type):
# Using np.sort(...) instead of arr.sort(...) because it makes a copy.
# This is important because the data is prepared once per benchmark, but
# used across multiple runs.
np.sort(self.arr, kind=kind)
def time_argsort(self, kind, dtype, array_type):
np.argsort(self.arr, kind=kind)
class SortWorst(Benchmark):
def setup(self):
# quicksort median of 3 worst case
self.worst = np.arange(1000000)
x = self.worst
while x.size > 3:
mid = x.size // 2
x[mid], x[-2] = x[-2], x[mid]
x = x[:-2]
def time_sort_worst(self):
np.sort(self.worst)
# Retain old benchmark name for backward compatibility
time_sort_worst.benchmark_name = "bench_function_base.Sort.time_sort_worst"
class Where(Benchmark):
def setup(self):
self.d = np.arange(20000)
self.e = self.d.copy()
self.cond = (self.d > 5000)
def time_1(self):
np.where(self.cond)
def time_2(self):
np.where(self.cond, self.d, self.e)
def time_2_broadcast(self):
np.where(self.cond, self.d, 0)
from .common import Benchmark
import numpy as np
class Histogram1D(Benchmark):
def setup(self):
self.d = np.linspace(0, 100, 100000)
def time_full_coverage(self):
np.histogram(self.d, 200, (0, 100))
def time_small_coverage(self):
np.histogram(self.d, 200, (50, 51))
def time_fine_binning(self):
np.histogram(self.d, 10000, (0, 100))
class Histogram2D(Benchmark):
def setup(self):
self.d = np.linspace(0, 100, 200000).reshape((-1,2))
def time_full_coverage(self):
np.histogramdd(self.d, (200, 200), ((0, 100), (0, 100)))
def time_small_coverage(self):
np.histogramdd(self.d, (200, 200), ((50, 51), (50, 51)))
def time_fine_binning(self):
np.histogramdd(self.d, (10000, 10000), ((0, 100), (0, 100)))
class Bincount(Benchmark):
def setup(self):
self.d = np.arange(80000, dtype=np.intp)
self.e = self.d.astype(np.float64)
def time_bincount(self):
np.bincount(self.d)
def time_weights(self):
np.bincount(self.d, weights=self.e)
class Median(Benchmark):
def setup(self):
self.e = np.arange(10000, dtype=np.float32)
self.o = np.arange(10001, dtype=np.float32)
def time_even(self):
np.median(self.e)
def time_odd(self):
np.median(self.o)
def time_even_inplace(self):
np.median(self.e, overwrite_input=True)
def time_odd_inplace(self):
np.median(self.o, overwrite_input=True)
def time_even_small(self):
np.median(self.e[:500], overwrite_input=True)
def time_odd_small(self):
np.median(self.o[:500], overwrite_input=True)
class Percentile(Benchmark):
def setup(self):
self.e = np.arange(10000, dtype=np.float32)
self.o = np.arange(10001, dtype=np.float32)
def time_quartile(self):
np.percentile(self.e, [25, 75])
def time_percentile(self):
np.percentile(self.e, [25, 35, 55, 65, 75])
class Select(Benchmark):
def setup(self):
self.d = np.arange(20000)
self.e = self.d.copy()
self.cond = [(self.d > 4), (self.d < 2)]
self.cond_large = [(self.d > 4), (self.d < 2)] * 10
def time_select(self):
np.select(self.cond, [self.d, self.e])
def time_select_larger(self):
np.select(self.cond_large, ([self.d, self.e] * 10))
def memoize(f):
_memoized = {}
def wrapped(*args):
if args not in _memoized:
_memoized[args] = f(*args)
return _memoized[args].copy()
return f
class SortGenerator:
# The size of the unsorted area in the "random unsorted area"
# benchmarks
AREA_SIZE = 100
# The size of the "partially ordered" sub-arrays
BUBBLE_SIZE = 100
@staticmethod
@memoize
def random(size, dtype):
"""
Returns a randomly-shuffled array.
"""
arr = np.arange(size, dtype=dtype)
np.random.shuffle(arr)
return arr
@staticmethod
@memoize
def ordered(size, dtype):
"""
Returns an ordered array.
"""
return np.arange(size, dtype=dtype)
@staticmethod
@memoize
def reversed(size, dtype):
"""
Returns an array that's in descending order.
"""
return np.arange(size-1, -1, -1, dtype=dtype)
@staticmethod
@memoize
def uniform(size, dtype):
"""
Returns an array that has the same value everywhere.
"""
return np.ones(size, dtype=dtype)
@staticmethod
@memoize
def swapped_pair(size, dtype, swap_frac):
"""
Returns an ordered array, but one that has ``swap_frac * size``
pairs swapped.
"""
a = np.arange(size, dtype=dtype)
for _ in range(int(size * swap_frac)):
x, y = np.random.randint(0, size, 2)
a[x], a[y] = a[y], a[x]
return a
@staticmethod
@memoize
def sorted_block(size, dtype, block_size):
"""
Returns an array with blocks that are all sorted.
"""
a = np.arange(size, dtype=dtype)
b = []
if size < block_size:
return a
block_num = size // block_size
for i in range(block_num):
b.extend(a[i::block_num])
return np.array(b)
@classmethod
@memoize
def random_unsorted_area(cls, size, dtype, frac, area_size=None):
"""
This type of array has random unsorted areas such that they
compose the fraction ``frac`` of the original array.
"""
if area_size is None:
area_size = cls.AREA_SIZE
area_num = int(size * frac / area_size)
a = np.arange(size, dtype=dtype)
for _ in range(area_num):
start = np.random.randint(size-area_size)
end = start + area_size
np.random.shuffle(a[start:end])
return a
@classmethod
@memoize
def random_bubble(cls, size, dtype, bubble_num, bubble_size=None):
"""
This type of array has ``bubble_num`` random unsorted areas.
"""
if bubble_size is None:
bubble_size = cls.BUBBLE_SIZE
frac = bubble_size * bubble_num / size
return cls.random_unsorted_area(size, dtype, frac, bubble_size)
class Sort(Benchmark):
"""
This benchmark tests sorting performance with several
different types of arrays that are likely to appear in
real-world applications.
"""
params = [
# In NumPy 1.17 and newer, 'merge' can be one of several
# stable sorts, it isn't necessarily merge sort.
['quick', 'merge', 'heap'],
['float64', 'int64', 'int16'],
[
('random',),
('ordered',),
('reversed',),
('uniform',),
('sorted_block', 10),
('sorted_block', 100),
('sorted_block', 1000),
# ('swapped_pair', 0.01),
# ('swapped_pair', 0.1),
# ('swapped_pair', 0.5),
# ('random_unsorted_area', 0.5),
# ('random_unsorted_area', 0.1),
# ('random_unsorted_area', 0.01),
# ('random_bubble', 1),
# ('random_bubble', 5),
# ('random_bubble', 10),
],
]
param_names = ['kind', 'dtype', 'array_type']
# The size of the benchmarked arrays.
ARRAY_SIZE = 10000
def setup(self, kind, dtype, array_type):
np.random.seed(1234)
array_class = array_type[0]
self.arr = getattr(SortGenerator, array_class)(self.ARRAY_SIZE, dtype, *array_type[1:])
def time_sort(self, kind, dtype, array_type):
# Using np.sort(...) instead of arr.sort(...) because it makes a copy.
# This is important because the data is prepared once per benchmark, but
# used across multiple runs.
np.sort(self.arr, kind=kind)
def time_argsort(self, kind, dtype, array_type):
np.argsort(self.arr, kind=kind)
class SortWorst(Benchmark):
def setup(self):
# quicksort median of 3 worst case
self.worst = np.arange(1000000)
x = self.worst
while x.size > 3:
mid = x.size // 2
x[mid], x[-2] = x[-2], x[mid]
x = x[:-2]
def time_sort_worst(self):
np.sort(self.worst)
# Retain old benchmark name for backward compatibility
time_sort_worst.benchmark_name = "bench_function_base.Sort.time_sort_worst"
class Where(Benchmark):
def setup(self):
self.d = np.arange(20000)
self.e = self.d.copy()
self.cond = (self.d > 5000)
def time_1(self):
np.where(self.cond)
def time_2(self):
np.where(self.cond, self.d, self.e)
def time_2_broadcast(self):
np.where(self.cond, self.d, 0)

View File

@ -1,34 +1,34 @@
from subprocess import call
from sys import executable
from timeit import default_timer
from .common import Benchmark
class Import(Benchmark):
timer = default_timer
def execute(self, command):
call((executable, '-c', command))
def time_numpy(self):
self.execute('import numpy')
def time_numpy_inspect(self):
# What are the savings from avoiding to import the inspect module?
self.execute('import numpy, inspect')
def time_fft(self):
self.execute('from numpy import fft')
def time_linalg(self):
self.execute('from numpy import linalg')
def time_ma(self):
self.execute('from numpy import ma')
def time_matlib(self):
self.execute('from numpy import matlib')
def time_random(self):
self.execute('from numpy import random')
from subprocess import call
from sys import executable
from timeit import default_timer
from .common import Benchmark
class Import(Benchmark):
timer = default_timer
def execute(self, command):
call((executable, '-c', command))
def time_numpy(self):
self.execute('import numpy')
def time_numpy_inspect(self):
# What are the savings from avoiding to import the inspect module?
self.execute('import numpy, inspect')
def time_fft(self):
self.execute('from numpy import fft')
def time_linalg(self):
self.execute('from numpy import linalg')
def time_ma(self):
self.execute('from numpy import ma')
def time_matlib(self):
self.execute('from numpy import matlib')
def time_random(self):
self.execute('from numpy import random')

View File

@ -1,74 +1,74 @@
from .common import Benchmark, get_squares_, get_indexes_, get_indexes_rand_
from os.path import join as pjoin
import shutil
from numpy import memmap, float32, array
import numpy as np
from tempfile import mkdtemp
class Indexing(Benchmark):
params = [["indexes_", "indexes_rand_"],
['I', ':,I', 'np.ix_(I, I)'],
['', '=1']]
param_names = ['indexes', 'sel', 'op']
def setup(self, indexes, sel, op):
sel = sel.replace('I', indexes)
ns = {'squares_': get_squares_(),
'np': np,
'indexes_': get_indexes_(),
'indexes_rand_': get_indexes_rand_()}
code = "def run():\n for a in squares_.values(): a[%s]%s"
code = code % (sel, op)
exec(code, ns)
self.func = ns['run']
def time_op(self, indexes, sel, op):
self.func()
class IndexingSeparate(Benchmark):
def setup(self):
self.tmp_dir = mkdtemp()
self.fp = memmap(pjoin(self.tmp_dir, 'tmp.dat'),
dtype=float32, mode='w+', shape=(50, 60))
self.indexes = array([3, 4, 6, 10, 20])
def teardown(self):
del self.fp
shutil.rmtree(self.tmp_dir)
def time_mmap_slicing(self):
for i in range(1000):
self.fp[5:10]
def time_mmap_fancy_indexing(self):
for i in range(1000):
self.fp[self.indexes]
class IndexingStructured0D(Benchmark):
def setup(self):
self.dt = np.dtype([('a', 'f4', 256)])
self.A = np.zeros((), self.dt)
self.B = self.A.copy()
self.a = np.zeros(1, self.dt)[0]
self.b = self.a.copy()
def time_array_slice(self):
self.B['a'][:] = self.A['a']
def time_array_all(self):
self.B['a'] = self.A['a']
def time_scalar_slice(self):
self.b['a'][:] = self.a['a']
def time_scalar_all(self):
self.b['a'] = self.a['a']
from .common import Benchmark, get_squares_, get_indexes_, get_indexes_rand_
from os.path import join as pjoin
import shutil
from numpy import memmap, float32, array
import numpy as np
from tempfile import mkdtemp
class Indexing(Benchmark):
params = [["indexes_", "indexes_rand_"],
['I', ':,I', 'np.ix_(I, I)'],
['', '=1']]
param_names = ['indexes', 'sel', 'op']
def setup(self, indexes, sel, op):
sel = sel.replace('I', indexes)
ns = {'squares_': get_squares_(),
'np': np,
'indexes_': get_indexes_(),
'indexes_rand_': get_indexes_rand_()}
code = "def run():\n for a in squares_.values(): a[%s]%s"
code = code % (sel, op)
exec(code, ns)
self.func = ns['run']
def time_op(self, indexes, sel, op):
self.func()
class IndexingSeparate(Benchmark):
def setup(self):
self.tmp_dir = mkdtemp()
self.fp = memmap(pjoin(self.tmp_dir, 'tmp.dat'),
dtype=float32, mode='w+', shape=(50, 60))
self.indexes = array([3, 4, 6, 10, 20])
def teardown(self):
del self.fp
shutil.rmtree(self.tmp_dir)
def time_mmap_slicing(self):
for i in range(1000):
self.fp[5:10]
def time_mmap_fancy_indexing(self):
for i in range(1000):
self.fp[self.indexes]
class IndexingStructured0D(Benchmark):
def setup(self):
self.dt = np.dtype([('a', 'f4', 256)])
self.A = np.zeros((), self.dt)
self.B = self.A.copy()
self.a = np.zeros(1, self.dt)[0]
self.b = self.a.copy()
def time_array_slice(self):
self.B['a'][:] = self.A['a']
def time_array_all(self):
self.B['a'] = self.A['a']
def time_scalar_slice(self):
self.b['a'][:] = self.a['a']
def time_scalar_all(self):
self.b['a'] = self.a['a']

View File

@ -1,244 +1,244 @@
from .common import Benchmark, get_squares
import numpy as np
from io import StringIO
class Copy(Benchmark):
params = ["int8", "int16", "float32", "float64",
"complex64", "complex128"]
param_names = ['type']
def setup(self, typename):
dtype = np.dtype(typename)
self.d = np.arange((50 * 500), dtype=dtype).reshape((500, 50))
self.e = np.arange((50 * 500), dtype=dtype).reshape((50, 500))
self.e_d = self.e.reshape(self.d.shape)
self.dflat = np.arange((50 * 500), dtype=dtype)
def time_memcpy(self, typename):
self.d[...] = self.e_d
def time_memcpy_large_out_of_place(self, typename):
l = np.ones(1024**2, dtype=np.dtype(typename))
l.copy()
def time_cont_assign(self, typename):
self.d[...] = 1
def time_strided_copy(self, typename):
self.d[...] = self.e.T
def time_strided_assign(self, typename):
self.dflat[::2] = 2
class CopyTo(Benchmark):
def setup(self):
self.d = np.ones(50000)
self.e = self.d.copy()
self.m = (self.d == 1)
self.im = (~ self.m)
self.m8 = self.m.copy()
self.m8[::8] = (~ self.m[::8])
self.im8 = (~ self.m8)
def time_copyto(self):
np.copyto(self.d, self.e)
def time_copyto_sparse(self):
np.copyto(self.d, self.e, where=self.m)
def time_copyto_dense(self):
np.copyto(self.d, self.e, where=self.im)
def time_copyto_8_sparse(self):
np.copyto(self.d, self.e, where=self.m8)
def time_copyto_8_dense(self):
np.copyto(self.d, self.e, where=self.im8)
class Savez(Benchmark):
def setup(self):
self.squares = get_squares()
def time_vb_savez_squares(self):
np.savez('tmp.npz', **self.squares)
class LoadtxtCSVComments(Benchmark):
# benchmarks for np.loadtxt comment handling
# when reading in CSV files
params = [10, int(1e2), int(1e4), int(1e5)]
param_names = ['num_lines']
def setup(self, num_lines):
data = [u'1,2,3 # comment'] * num_lines
# unfortunately, timeit will only run setup()
# between repeat events, but not for iterations
# within repeats, so the StringIO object
# will have to be rewinded in the benchmark proper
self.data_comments = StringIO(u'\n'.join(data))
def time_comment_loadtxt_csv(self, num_lines):
# benchmark handling of lines with comments
# when loading in from csv files
# inspired by similar benchmark in pandas
# for read_csv
# need to rewind StringIO object (unfortunately
# confounding timing result somewhat) for every
# call to timing test proper
np.loadtxt(self.data_comments,
delimiter=u',')
self.data_comments.seek(0)
class LoadtxtCSVdtypes(Benchmark):
# benchmarks for np.loadtxt operating with
# different dtypes parsed / cast from CSV files
params = (['float32', 'float64', 'int32', 'int64',
'complex128', 'str', 'object'],
[10, int(1e2), int(1e4), int(1e5)])
param_names = ['dtype', 'num_lines']
def setup(self, dtype, num_lines):
data = [u'5, 7, 888'] * num_lines
self.csv_data = StringIO(u'\n'.join(data))
def time_loadtxt_dtypes_csv(self, dtype, num_lines):
# benchmark loading arrays of various dtypes
# from csv files
# state-dependent timing benchmark requires
# rewind of StringIO object
np.loadtxt(self.csv_data,
delimiter=u',',
dtype=dtype)
self.csv_data.seek(0)
class LoadtxtCSVStructured(Benchmark):
# benchmarks for np.loadtxt operating with
# a structured data type & CSV file
def setup(self):
num_lines = 50000
data = [u"M, 21, 72, X, 155"] * num_lines
self.csv_data = StringIO(u'\n'.join(data))
def time_loadtxt_csv_struct_dtype(self):
# obligate rewind of StringIO object
# between iterations of a repeat:
np.loadtxt(self.csv_data,
delimiter=u',',
dtype=[('category_1', 'S1'),
('category_2', 'i4'),
('category_3', 'f8'),
('category_4', 'S1'),
('category_5', 'f8')])
self.csv_data.seek(0)
class LoadtxtCSVSkipRows(Benchmark):
# benchmarks for loadtxt row skipping when
# reading in csv file data; a similar benchmark
# is present in the pandas asv suite
params = [0, 500, 10000]
param_names = ['skiprows']
def setup(self, skiprows):
np.random.seed(123)
test_array = np.random.rand(100000, 3)
self.fname = 'test_array.csv'
np.savetxt(fname=self.fname,
X=test_array,
delimiter=',')
def time_skiprows_csv(self, skiprows):
np.loadtxt(self.fname,
delimiter=',',
skiprows=skiprows)
class LoadtxtReadUint64Integers(Benchmark):
# pandas has a similar CSV reading benchmark
# modified to suit np.loadtxt
params = [550, 1000, 10000]
param_names = ['size']
def setup(self, size):
arr = np.arange(size).astype('uint64') + 2**63
self.data1 = StringIO(u'\n'.join(arr.astype(str).tolist()))
arr = arr.astype(object)
arr[500] = -1
self.data2 = StringIO(u'\n'.join(arr.astype(str).tolist()))
def time_read_uint64(self, size):
# mandatory rewind of StringIO object
# between iterations of a repeat:
np.loadtxt(self.data1)
self.data1.seek(0)
def time_read_uint64_neg_values(self, size):
# mandatory rewind of StringIO object
# between iterations of a repeat:
np.loadtxt(self.data2)
self.data2.seek(0)
class LoadtxtUseColsCSV(Benchmark):
# benchmark selective column reading from CSV files
# using np.loadtxt
params = [2, [1, 3], [1, 3, 5, 7]]
param_names = ['usecols']
def setup(self, usecols):
num_lines = 5000
data = [u'0, 1, 2, 3, 4, 5, 6, 7, 8, 9'] * num_lines
self.csv_data = StringIO(u'\n'.join(data))
def time_loadtxt_usecols_csv(self, usecols):
# must rewind StringIO because of state
# dependence of file reading
np.loadtxt(self.csv_data,
delimiter=u',',
usecols=usecols)
self.csv_data.seek(0)
class LoadtxtCSVDateTime(Benchmark):
# benchmarks for np.loadtxt operating with
# datetime data in a CSV file
params = [20, 200, 2000, 20000]
param_names = ['num_lines']
def setup(self, num_lines):
# create the equivalent of a two-column CSV file
# with date strings in the first column and random
# floating point data in the second column
dates = np.arange('today', 20, dtype=np.datetime64)
np.random.seed(123)
values = np.random.rand(20)
date_line = u''
for date, value in zip(dates, values):
date_line += (str(date) + ',' + str(value) + '\n')
# expand data to specified number of lines
data = date_line * (num_lines // 20)
self.csv_data = StringIO(data)
def time_loadtxt_csv_datetime(self, num_lines):
# rewind StringIO object -- the timing iterations
# are state-dependent
X = np.loadtxt(self.csv_data,
delimiter=u',',
dtype=([('dates', 'M8[us]'),
('values', 'float64')]))
self.csv_data.seek(0)
from .common import Benchmark, get_squares
import numpy as np
from io import StringIO
class Copy(Benchmark):
params = ["int8", "int16", "float32", "float64",
"complex64", "complex128"]
param_names = ['type']
def setup(self, typename):
dtype = np.dtype(typename)
self.d = np.arange((50 * 500), dtype=dtype).reshape((500, 50))
self.e = np.arange((50 * 500), dtype=dtype).reshape((50, 500))
self.e_d = self.e.reshape(self.d.shape)
self.dflat = np.arange((50 * 500), dtype=dtype)
def time_memcpy(self, typename):
self.d[...] = self.e_d
def time_memcpy_large_out_of_place(self, typename):
l = np.ones(1024**2, dtype=np.dtype(typename))
l.copy()
def time_cont_assign(self, typename):
self.d[...] = 1
def time_strided_copy(self, typename):
self.d[...] = self.e.T
def time_strided_assign(self, typename):
self.dflat[::2] = 2
class CopyTo(Benchmark):
def setup(self):
self.d = np.ones(50000)
self.e = self.d.copy()
self.m = (self.d == 1)
self.im = (~ self.m)
self.m8 = self.m.copy()
self.m8[::8] = (~ self.m[::8])
self.im8 = (~ self.m8)
def time_copyto(self):
np.copyto(self.d, self.e)
def time_copyto_sparse(self):
np.copyto(self.d, self.e, where=self.m)
def time_copyto_dense(self):
np.copyto(self.d, self.e, where=self.im)
def time_copyto_8_sparse(self):
np.copyto(self.d, self.e, where=self.m8)
def time_copyto_8_dense(self):
np.copyto(self.d, self.e, where=self.im8)
class Savez(Benchmark):
def setup(self):
self.squares = get_squares()
def time_vb_savez_squares(self):
np.savez('tmp.npz', **self.squares)
class LoadtxtCSVComments(Benchmark):
# benchmarks for np.loadtxt comment handling
# when reading in CSV files
params = [10, int(1e2), int(1e4), int(1e5)]
param_names = ['num_lines']
def setup(self, num_lines):
data = [u'1,2,3 # comment'] * num_lines
# unfortunately, timeit will only run setup()
# between repeat events, but not for iterations
# within repeats, so the StringIO object
# will have to be rewinded in the benchmark proper
self.data_comments = StringIO(u'\n'.join(data))
def time_comment_loadtxt_csv(self, num_lines):
# benchmark handling of lines with comments
# when loading in from csv files
# inspired by similar benchmark in pandas
# for read_csv
# need to rewind StringIO object (unfortunately
# confounding timing result somewhat) for every
# call to timing test proper
np.loadtxt(self.data_comments,
delimiter=u',')
self.data_comments.seek(0)
class LoadtxtCSVdtypes(Benchmark):
# benchmarks for np.loadtxt operating with
# different dtypes parsed / cast from CSV files
params = (['float32', 'float64', 'int32', 'int64',
'complex128', 'str', 'object'],
[10, int(1e2), int(1e4), int(1e5)])
param_names = ['dtype', 'num_lines']
def setup(self, dtype, num_lines):
data = [u'5, 7, 888'] * num_lines
self.csv_data = StringIO(u'\n'.join(data))
def time_loadtxt_dtypes_csv(self, dtype, num_lines):
# benchmark loading arrays of various dtypes
# from csv files
# state-dependent timing benchmark requires
# rewind of StringIO object
np.loadtxt(self.csv_data,
delimiter=u',',
dtype=dtype)
self.csv_data.seek(0)
class LoadtxtCSVStructured(Benchmark):
# benchmarks for np.loadtxt operating with
# a structured data type & CSV file
def setup(self):
num_lines = 50000
data = [u"M, 21, 72, X, 155"] * num_lines
self.csv_data = StringIO(u'\n'.join(data))
def time_loadtxt_csv_struct_dtype(self):
# obligate rewind of StringIO object
# between iterations of a repeat:
np.loadtxt(self.csv_data,
delimiter=u',',
dtype=[('category_1', 'S1'),
('category_2', 'i4'),
('category_3', 'f8'),
('category_4', 'S1'),
('category_5', 'f8')])
self.csv_data.seek(0)
class LoadtxtCSVSkipRows(Benchmark):
# benchmarks for loadtxt row skipping when
# reading in csv file data; a similar benchmark
# is present in the pandas asv suite
params = [0, 500, 10000]
param_names = ['skiprows']
def setup(self, skiprows):
np.random.seed(123)
test_array = np.random.rand(100000, 3)
self.fname = 'test_array.csv'
np.savetxt(fname=self.fname,
X=test_array,
delimiter=',')
def time_skiprows_csv(self, skiprows):
np.loadtxt(self.fname,
delimiter=',',
skiprows=skiprows)
class LoadtxtReadUint64Integers(Benchmark):
# pandas has a similar CSV reading benchmark
# modified to suit np.loadtxt
params = [550, 1000, 10000]
param_names = ['size']
def setup(self, size):
arr = np.arange(size).astype('uint64') + 2**63
self.data1 = StringIO(u'\n'.join(arr.astype(str).tolist()))
arr = arr.astype(object)
arr[500] = -1
self.data2 = StringIO(u'\n'.join(arr.astype(str).tolist()))
def time_read_uint64(self, size):
# mandatory rewind of StringIO object
# between iterations of a repeat:
np.loadtxt(self.data1)
self.data1.seek(0)
def time_read_uint64_neg_values(self, size):
# mandatory rewind of StringIO object
# between iterations of a repeat:
np.loadtxt(self.data2)
self.data2.seek(0)
class LoadtxtUseColsCSV(Benchmark):
# benchmark selective column reading from CSV files
# using np.loadtxt
params = [2, [1, 3], [1, 3, 5, 7]]
param_names = ['usecols']
def setup(self, usecols):
num_lines = 5000
data = [u'0, 1, 2, 3, 4, 5, 6, 7, 8, 9'] * num_lines
self.csv_data = StringIO(u'\n'.join(data))
def time_loadtxt_usecols_csv(self, usecols):
# must rewind StringIO because of state
# dependence of file reading
np.loadtxt(self.csv_data,
delimiter=u',',
usecols=usecols)
self.csv_data.seek(0)
class LoadtxtCSVDateTime(Benchmark):
# benchmarks for np.loadtxt operating with
# datetime data in a CSV file
params = [20, 200, 2000, 20000]
param_names = ['num_lines']
def setup(self, num_lines):
# create the equivalent of a two-column CSV file
# with date strings in the first column and random
# floating point data in the second column
dates = np.arange('today', 20, dtype=np.datetime64)
np.random.seed(123)
values = np.random.rand(20)
date_line = u''
for date, value in zip(dates, values):
date_line += (str(date) + ',' + str(value) + '\n')
# expand data to specified number of lines
data = date_line * (num_lines // 20)
self.csv_data = StringIO(data)
def time_loadtxt_csv_datetime(self, num_lines):
# rewind StringIO object -- the timing iterations
# are state-dependent
X = np.loadtxt(self.csv_data,
delimiter=u',',
dtype=([('dates', 'M8[us]'),
('values', 'float64')]))
self.csv_data.seek(0)

View File

@ -1,45 +1,45 @@
from __future__ import absolute_import, division, print_function
from .common import Benchmark, TYPES1
import numpy as np
class Take(Benchmark):
params = [
[(1000, 1), (1000, 2), (2, 1000, 1), (1000, 3)],
["raise", "wrap", "clip"],
TYPES1]
param_names = ["shape", "mode", "dtype"]
def setup(self, shape, mode, dtype):
self.arr = np.ones(shape, dtype)
self.indices = np.arange(1000)
def time_contiguous(self, shape, mode, dtype):
self.arr.take(self.indices, axis=-2, mode=mode)
class PutMask(Benchmark):
params = [
[True, False],
TYPES1]
param_names = ["values_is_scalar", "dtype"]
def setup(self, values_is_scalar, dtype):
if values_is_scalar:
self.vals = np.array(1., dtype=dtype)
else:
self.vals = np.ones(1000, dtype=dtype)
self.arr = np.ones(1000, dtype=dtype)
self.dense_mask = np.ones(1000, dtype="bool")
self.sparse_mask = np.zeros(1000, dtype="bool")
def time_dense(self, values_is_scalar, dtype):
np.putmask(self.arr, self.dense_mask, self.vals)
def time_sparse(self, values_is_scalar, dtype):
np.putmask(self.arr, self.sparse_mask, self.vals)
from __future__ import absolute_import, division, print_function
from .common import Benchmark, TYPES1
import numpy as np
class Take(Benchmark):
params = [
[(1000, 1), (1000, 2), (2, 1000, 1), (1000, 3)],
["raise", "wrap", "clip"],
TYPES1]
param_names = ["shape", "mode", "dtype"]
def setup(self, shape, mode, dtype):
self.arr = np.ones(shape, dtype)
self.indices = np.arange(1000)
def time_contiguous(self, shape, mode, dtype):
self.arr.take(self.indices, axis=-2, mode=mode)
class PutMask(Benchmark):
params = [
[True, False],
TYPES1]
param_names = ["values_is_scalar", "dtype"]
def setup(self, values_is_scalar, dtype):
if values_is_scalar:
self.vals = np.array(1., dtype=dtype)
else:
self.vals = np.ones(1000, dtype=dtype)
self.arr = np.ones(1000, dtype=dtype)
self.dense_mask = np.ones(1000, dtype="bool")
self.sparse_mask = np.zeros(1000, dtype="bool")
def time_dense(self, values_is_scalar, dtype):
np.putmask(self.arr, self.dense_mask, self.vals)
def time_sparse(self, values_is_scalar, dtype):
np.putmask(self.arr, self.sparse_mask, self.vals)

View File

@ -1,115 +1,115 @@
"""Benchmarks for `numpy.lib`."""
from .common import Benchmark
import numpy as np
class Pad(Benchmark):
"""Benchmarks for `numpy.pad`.
When benchmarking the pad function it is useful to cover scenarios where
the ratio between the size of the input array and the output array differs
significantly (original area vs. padded area). This allows to evaluate for
which scenario a padding algorithm is optimized. Furthermore involving
large range of array sizes ensures that the effects of CPU-bound caching is
visible.
The table below shows the sizes of the arrays involved in this benchmark:
+-----------------+----------+-----------+-----------+-----------------+
| shape | original | padded: 1 | padded: 8 | padded: (0, 32) |
+=================+==========+===========+===========+=================+
| (2 ** 22,) | 32 MiB | 32.0 MiB | 32.0 MiB | 32.0 MiB |
+-----------------+----------+-----------+-----------+-----------------+
| (1024, 1024) | 8 MiB | 8.03 MiB | 8.25 MiB | 8.51 MiB |
+-----------------+----------+-----------+-----------+-----------------+
| (256, 256, 1) | 256 KiB | 786 KiB | 5.08 MiB | 11.6 MiB |
+-----------------+----------+-----------+-----------+-----------------+
| (4, 4, 4, 4) | 2 KiB | 10.1 KiB | 1.22 MiB | 12.8 MiB |
+-----------------+----------+-----------+-----------+-----------------+
| (1, 1, 1, 1, 1) | 8 B | 1.90 MiB | 10.8 MiB | 299 MiB |
+-----------------+----------+-----------+-----------+-----------------+
"""
param_names = ["shape", "pad_width", "mode"]
params = [
# Shape of the input arrays
[(2 ** 22,), (1024, 1024), (256, 128, 1),
(4, 4, 4, 4), (1, 1, 1, 1, 1)],
# Tested pad widths
[1, 8, (0, 32)],
# Tested modes: mean, median, minimum & maximum use the same code path
# reflect & symmetric share a lot of their code path
["constant", "edge", "linear_ramp", "mean", "reflect", "wrap"],
]
def setup(self, shape, pad_width, mode):
# Make sure to fill the array to make the OS page fault
# in the setup phase and not the timed phase
self.array = np.full(shape, fill_value=1, dtype=np.float64)
def time_pad(self, shape, pad_width, mode):
np.pad(self.array, pad_width, mode)
class Nan(Benchmark):
"""Benchmarks for nan functions"""
param_names = ["array_size", "percent_nans"]
params = [
# sizes of the 1D arrays
[200, int(2e5)],
# percent of np.nan in arrays
[0, 0.1, 2., 50., 90.],
]
def setup(self, array_size, percent_nans):
np.random.seed(123)
# produce a randomly shuffled array with the
# approximate desired percentage np.nan content
base_array = np.random.uniform(size=array_size)
base_array[base_array < percent_nans / 100.] = np.nan
self.arr = base_array
def time_nanmin(self, array_size, percent_nans):
np.nanmin(self.arr)
def time_nanmax(self, array_size, percent_nans):
np.nanmax(self.arr)
def time_nanargmin(self, array_size, percent_nans):
np.nanargmin(self.arr)
def time_nanargmax(self, array_size, percent_nans):
np.nanargmax(self.arr)
def time_nansum(self, array_size, percent_nans):
np.nansum(self.arr)
def time_nanprod(self, array_size, percent_nans):
np.nanprod(self.arr)
def time_nancumsum(self, array_size, percent_nans):
np.nancumsum(self.arr)
def time_nancumprod(self, array_size, percent_nans):
np.nancumprod(self.arr)
def time_nanmean(self, array_size, percent_nans):
np.nanmean(self.arr)
def time_nanvar(self, array_size, percent_nans):
np.nanvar(self.arr)
def time_nanstd(self, array_size, percent_nans):
np.nanstd(self.arr)
def time_nanmedian(self, array_size, percent_nans):
np.nanmedian(self.arr)
def time_nanquantile(self, array_size, percent_nans):
np.nanquantile(self.arr, q=0.2)
def time_nanpercentile(self, array_size, percent_nans):
np.nanpercentile(self.arr, q=50)
"""Benchmarks for `numpy.lib`."""
from .common import Benchmark
import numpy as np
class Pad(Benchmark):
"""Benchmarks for `numpy.pad`.
When benchmarking the pad function it is useful to cover scenarios where
the ratio between the size of the input array and the output array differs
significantly (original area vs. padded area). This allows to evaluate for
which scenario a padding algorithm is optimized. Furthermore involving
large range of array sizes ensures that the effects of CPU-bound caching is
visible.
The table below shows the sizes of the arrays involved in this benchmark:
+-----------------+----------+-----------+-----------+-----------------+
| shape | original | padded: 1 | padded: 8 | padded: (0, 32) |
+=================+==========+===========+===========+=================+
| (2 ** 22,) | 32 MiB | 32.0 MiB | 32.0 MiB | 32.0 MiB |
+-----------------+----------+-----------+-----------+-----------------+
| (1024, 1024) | 8 MiB | 8.03 MiB | 8.25 MiB | 8.51 MiB |
+-----------------+----------+-----------+-----------+-----------------+
| (256, 256, 1) | 256 KiB | 786 KiB | 5.08 MiB | 11.6 MiB |
+-----------------+----------+-----------+-----------+-----------------+
| (4, 4, 4, 4) | 2 KiB | 10.1 KiB | 1.22 MiB | 12.8 MiB |
+-----------------+----------+-----------+-----------+-----------------+
| (1, 1, 1, 1, 1) | 8 B | 1.90 MiB | 10.8 MiB | 299 MiB |
+-----------------+----------+-----------+-----------+-----------------+
"""
param_names = ["shape", "pad_width", "mode"]
params = [
# Shape of the input arrays
[(2 ** 22,), (1024, 1024), (256, 128, 1),
(4, 4, 4, 4), (1, 1, 1, 1, 1)],
# Tested pad widths
[1, 8, (0, 32)],
# Tested modes: mean, median, minimum & maximum use the same code path
# reflect & symmetric share a lot of their code path
["constant", "edge", "linear_ramp", "mean", "reflect", "wrap"],
]
def setup(self, shape, pad_width, mode):
# Make sure to fill the array to make the OS page fault
# in the setup phase and not the timed phase
self.array = np.full(shape, fill_value=1, dtype=np.float64)
def time_pad(self, shape, pad_width, mode):
np.pad(self.array, pad_width, mode)
class Nan(Benchmark):
"""Benchmarks for nan functions"""
param_names = ["array_size", "percent_nans"]
params = [
# sizes of the 1D arrays
[200, int(2e5)],
# percent of np.nan in arrays
[0, 0.1, 2., 50., 90.],
]
def setup(self, array_size, percent_nans):
np.random.seed(123)
# produce a randomly shuffled array with the
# approximate desired percentage np.nan content
base_array = np.random.uniform(size=array_size)
base_array[base_array < percent_nans / 100.] = np.nan
self.arr = base_array
def time_nanmin(self, array_size, percent_nans):
np.nanmin(self.arr)
def time_nanmax(self, array_size, percent_nans):
np.nanmax(self.arr)
def time_nanargmin(self, array_size, percent_nans):
np.nanargmin(self.arr)
def time_nanargmax(self, array_size, percent_nans):
np.nanargmax(self.arr)
def time_nansum(self, array_size, percent_nans):
np.nansum(self.arr)
def time_nanprod(self, array_size, percent_nans):
np.nanprod(self.arr)
def time_nancumsum(self, array_size, percent_nans):
np.nancumsum(self.arr)
def time_nancumprod(self, array_size, percent_nans):
np.nancumprod(self.arr)
def time_nanmean(self, array_size, percent_nans):
np.nanmean(self.arr)
def time_nanvar(self, array_size, percent_nans):
np.nanvar(self.arr)
def time_nanstd(self, array_size, percent_nans):
np.nanstd(self.arr)
def time_nanmedian(self, array_size, percent_nans):
np.nanmedian(self.arr)
def time_nanquantile(self, array_size, percent_nans):
np.nanquantile(self.arr, q=0.2)
def time_nanpercentile(self, array_size, percent_nans):
np.nanpercentile(self.arr, q=50)

View File

@ -1,107 +1,107 @@
from .common import Benchmark, get_squares_, get_indexes_rand, TYPES1
import numpy as np
class Eindot(Benchmark):
def setup(self):
self.a = np.arange(60000.0).reshape(150, 400)
self.ac = self.a.copy()
self.at = self.a.T
self.atc = self.a.T.copy()
self.b = np.arange(240000.0).reshape(400, 600)
self.c = np.arange(600)
self.d = np.arange(400)
self.a3 = np.arange(480000.).reshape(60, 80, 100)
self.b3 = np.arange(192000.).reshape(80, 60, 40)
def time_dot_a_b(self):
np.dot(self.a, self.b)
def time_dot_d_dot_b_c(self):
np.dot(self.d, np.dot(self.b, self.c))
def time_dot_trans_a_at(self):
np.dot(self.a, self.at)
def time_dot_trans_a_atc(self):
np.dot(self.a, self.atc)
def time_dot_trans_at_a(self):
np.dot(self.at, self.a)
def time_dot_trans_atc_a(self):
np.dot(self.atc, self.a)
def time_einsum_i_ij_j(self):
np.einsum('i,ij,j', self.d, self.b, self.c)
def time_einsum_ij_jk_a_b(self):
np.einsum('ij,jk', self.a, self.b)
def time_einsum_ijk_jil_kl(self):
np.einsum('ijk,jil->kl', self.a3, self.b3)
def time_inner_trans_a_a(self):
np.inner(self.a, self.a)
def time_inner_trans_a_ac(self):
np.inner(self.a, self.ac)
def time_matmul_a_b(self):
np.matmul(self.a, self.b)
def time_matmul_d_matmul_b_c(self):
np.matmul(self.d, np.matmul(self.b, self.c))
def time_matmul_trans_a_at(self):
np.matmul(self.a, self.at)
def time_matmul_trans_a_atc(self):
np.matmul(self.a, self.atc)
def time_matmul_trans_at_a(self):
np.matmul(self.at, self.a)
def time_matmul_trans_atc_a(self):
np.matmul(self.atc, self.a)
def time_tensordot_a_b_axes_1_0_0_1(self):
np.tensordot(self.a3, self.b3, axes=([1, 0], [0, 1]))
class Linalg(Benchmark):
params = [['svd', 'pinv', 'det', 'norm'],
TYPES1]
param_names = ['op', 'type']
def setup(self, op, typename):
np.seterr(all='ignore')
self.func = getattr(np.linalg, op)
if op == 'cholesky':
# we need a positive definite
self.a = np.dot(get_squares_()[typename],
get_squares_()[typename].T)
else:
self.a = get_squares_()[typename]
# check that dtype is supported at all
try:
self.func(self.a[:2, :2])
except TypeError:
raise NotImplementedError()
def time_op(self, op, typename):
self.func(self.a)
class Lstsq(Benchmark):
def setup(self):
self.a = get_squares_()['float64']
self.b = get_indexes_rand()[:100].astype(np.float64)
def time_numpy_linalg_lstsq_a__b_float64(self):
np.linalg.lstsq(self.a, self.b, rcond=-1)
from .common import Benchmark, get_squares_, get_indexes_rand, TYPES1
import numpy as np
class Eindot(Benchmark):
def setup(self):
self.a = np.arange(60000.0).reshape(150, 400)
self.ac = self.a.copy()
self.at = self.a.T
self.atc = self.a.T.copy()
self.b = np.arange(240000.0).reshape(400, 600)
self.c = np.arange(600)
self.d = np.arange(400)
self.a3 = np.arange(480000.).reshape(60, 80, 100)
self.b3 = np.arange(192000.).reshape(80, 60, 40)
def time_dot_a_b(self):
np.dot(self.a, self.b)
def time_dot_d_dot_b_c(self):
np.dot(self.d, np.dot(self.b, self.c))
def time_dot_trans_a_at(self):
np.dot(self.a, self.at)
def time_dot_trans_a_atc(self):
np.dot(self.a, self.atc)
def time_dot_trans_at_a(self):
np.dot(self.at, self.a)
def time_dot_trans_atc_a(self):
np.dot(self.atc, self.a)
def time_einsum_i_ij_j(self):
np.einsum('i,ij,j', self.d, self.b, self.c)
def time_einsum_ij_jk_a_b(self):
np.einsum('ij,jk', self.a, self.b)
def time_einsum_ijk_jil_kl(self):
np.einsum('ijk,jil->kl', self.a3, self.b3)
def time_inner_trans_a_a(self):
np.inner(self.a, self.a)
def time_inner_trans_a_ac(self):
np.inner(self.a, self.ac)
def time_matmul_a_b(self):
np.matmul(self.a, self.b)
def time_matmul_d_matmul_b_c(self):
np.matmul(self.d, np.matmul(self.b, self.c))
def time_matmul_trans_a_at(self):
np.matmul(self.a, self.at)
def time_matmul_trans_a_atc(self):
np.matmul(self.a, self.atc)
def time_matmul_trans_at_a(self):
np.matmul(self.at, self.a)
def time_matmul_trans_atc_a(self):
np.matmul(self.atc, self.a)
def time_tensordot_a_b_axes_1_0_0_1(self):
np.tensordot(self.a3, self.b3, axes=([1, 0], [0, 1]))
class Linalg(Benchmark):
params = [['svd', 'pinv', 'det', 'norm'],
TYPES1]
param_names = ['op', 'type']
def setup(self, op, typename):
np.seterr(all='ignore')
self.func = getattr(np.linalg, op)
if op == 'cholesky':
# we need a positive definite
self.a = np.dot(get_squares_()[typename],
get_squares_()[typename].T)
else:
self.a = get_squares_()[typename]
# check that dtype is supported at all
try:
self.func(self.a[:2, :2])
except TypeError:
raise NotImplementedError()
def time_op(self, op, typename):
self.func(self.a)
class Lstsq(Benchmark):
def setup(self):
self.a = get_squares_()['float64']
self.b = get_indexes_rand()[:100].astype(np.float64)
def time_numpy_linalg_lstsq_a__b_float64(self):
np.linalg.lstsq(self.a, self.b, rcond=-1)

View File

@ -1,113 +1,113 @@
from .common import Benchmark
import numpy as np
class MA(Benchmark):
def setup(self):
self.l100 = range(100)
self.t100 = ([True] * 100)
def time_masked_array(self):
np.ma.masked_array()
def time_masked_array_l100(self):
np.ma.masked_array(self.l100)
def time_masked_array_l100_t100(self):
np.ma.masked_array(self.l100, self.t100)
class Indexing(Benchmark):
param_names = ['masked', 'ndim', 'size']
params = [[True, False],
[1, 2],
[10, 100, 1000]]
def setup(self, masked, ndim, size):
x = np.arange(size**ndim).reshape(ndim * (size,))
if masked:
self.m = np.ma.array(x, mask=x%2 == 0)
else:
self.m = np.ma.array(x)
self.idx_scalar = (size//2,) * ndim
self.idx_0d = (size//2,) * ndim + (Ellipsis,)
self.idx_1d = (size//2,) * (ndim - 1)
def time_scalar(self, masked, ndim, size):
self.m[self.idx_scalar]
def time_0d(self, masked, ndim, size):
self.m[self.idx_0d]
def time_1d(self, masked, ndim, size):
self.m[self.idx_1d]
class UFunc(Benchmark):
param_names = ['a_masked', 'b_masked', 'size']
params = [[True, False],
[True, False],
[10, 100, 1000]]
def setup(self, a_masked, b_masked, size):
x = np.arange(size).astype(np.uint8)
self.a_scalar = np.ma.masked if a_masked else 5
self.b_scalar = np.ma.masked if b_masked else 3
self.a_1d = np.ma.array(x, mask=x%2 == 0 if a_masked else np.ma.nomask)
self.b_1d = np.ma.array(x, mask=x%3 == 0 if b_masked else np.ma.nomask)
self.a_2d = self.a_1d.reshape(1, -1)
self.b_2d = self.a_1d.reshape(-1, 1)
def time_scalar(self, a_masked, b_masked, size):
np.ma.add(self.a_scalar, self.b_scalar)
def time_scalar_1d(self, a_masked, b_masked, size):
np.ma.add(self.a_scalar, self.b_1d)
def time_1d(self, a_masked, b_masked, size):
np.ma.add(self.a_1d, self.b_1d)
def time_2d(self, a_masked, b_masked, size):
# broadcasting happens this time
np.ma.add(self.a_2d, self.b_2d)
class Concatenate(Benchmark):
param_names = ['mode', 'n']
params = [
['ndarray', 'unmasked',
'ndarray+masked', 'unmasked+masked',
'masked'],
[2, 100, 2000]
]
def setup(self, mode, n):
# avoid np.zeros's lazy allocation that cause page faults during benchmark.
# np.fill will cause pagefaults to happen during setup.
normal = np.full((n, n), 0, int)
unmasked = np.ma.zeros((n, n), int)
masked = np.ma.array(normal, mask=True)
mode_parts = mode.split('+')
base = mode_parts[0]
promote = 'masked' in mode_parts[1:]
if base == 'ndarray':
args = 10 * (normal,)
elif base == 'unmasked':
args = 10 * (unmasked,)
else:
args = 10 * (masked,)
if promote:
args = args[:-1] + (masked,)
self.args = args
def time_it(self, mode, n):
np.ma.concatenate(self.args)
from .common import Benchmark
import numpy as np
class MA(Benchmark):
def setup(self):
self.l100 = range(100)
self.t100 = ([True] * 100)
def time_masked_array(self):
np.ma.masked_array()
def time_masked_array_l100(self):
np.ma.masked_array(self.l100)
def time_masked_array_l100_t100(self):
np.ma.masked_array(self.l100, self.t100)
class Indexing(Benchmark):
param_names = ['masked', 'ndim', 'size']
params = [[True, False],
[1, 2],
[10, 100, 1000]]
def setup(self, masked, ndim, size):
x = np.arange(size**ndim).reshape(ndim * (size,))
if masked:
self.m = np.ma.array(x, mask=x%2 == 0)
else:
self.m = np.ma.array(x)
self.idx_scalar = (size//2,) * ndim
self.idx_0d = (size//2,) * ndim + (Ellipsis,)
self.idx_1d = (size//2,) * (ndim - 1)
def time_scalar(self, masked, ndim, size):
self.m[self.idx_scalar]
def time_0d(self, masked, ndim, size):
self.m[self.idx_0d]
def time_1d(self, masked, ndim, size):
self.m[self.idx_1d]
class UFunc(Benchmark):
param_names = ['a_masked', 'b_masked', 'size']
params = [[True, False],
[True, False],
[10, 100, 1000]]
def setup(self, a_masked, b_masked, size):
x = np.arange(size).astype(np.uint8)
self.a_scalar = np.ma.masked if a_masked else 5
self.b_scalar = np.ma.masked if b_masked else 3
self.a_1d = np.ma.array(x, mask=x%2 == 0 if a_masked else np.ma.nomask)
self.b_1d = np.ma.array(x, mask=x%3 == 0 if b_masked else np.ma.nomask)
self.a_2d = self.a_1d.reshape(1, -1)
self.b_2d = self.a_1d.reshape(-1, 1)
def time_scalar(self, a_masked, b_masked, size):
np.ma.add(self.a_scalar, self.b_scalar)
def time_scalar_1d(self, a_masked, b_masked, size):
np.ma.add(self.a_scalar, self.b_1d)
def time_1d(self, a_masked, b_masked, size):
np.ma.add(self.a_1d, self.b_1d)
def time_2d(self, a_masked, b_masked, size):
# broadcasting happens this time
np.ma.add(self.a_2d, self.b_2d)
class Concatenate(Benchmark):
param_names = ['mode', 'n']
params = [
['ndarray', 'unmasked',
'ndarray+masked', 'unmasked+masked',
'masked'],
[2, 100, 2000]
]
def setup(self, mode, n):
# avoid np.zeros's lazy allocation that cause page faults during benchmark.
# np.fill will cause pagefaults to happen during setup.
normal = np.full((n, n), 0, int)
unmasked = np.ma.zeros((n, n), int)
masked = np.ma.array(normal, mask=True)
mode_parts = mode.split('+')
base = mode_parts[0]
promote = 'masked' in mode_parts[1:]
if base == 'ndarray':
args = 10 * (normal,)
elif base == 'unmasked':
args = 10 * (unmasked,)
else:
args = 10 * (masked,)
if promote:
args = args[:-1] + (masked,)
self.args = args
def time_it(self, mode, n):
np.ma.concatenate(self.args)

View File

@ -1,67 +1,67 @@
from .common import Benchmark
try:
from numpy.core.overrides import array_function_dispatch
except ImportError:
# Don't fail at import time with old Numpy versions
def array_function_dispatch(*args, **kwargs):
def wrap(*args, **kwargs):
return None
return wrap
import numpy as np
def _broadcast_to_dispatcher(array, shape, subok=None):
return (array,)
@array_function_dispatch(_broadcast_to_dispatcher)
def mock_broadcast_to(array, shape, subok=False):
pass
def _concatenate_dispatcher(arrays, axis=None, out=None):
if out is not None:
arrays = list(arrays)
arrays.append(out)
return arrays
@array_function_dispatch(_concatenate_dispatcher)
def mock_concatenate(arrays, axis=0, out=None):
pass
class DuckArray:
def __array_function__(self, func, types, args, kwargs):
pass
class ArrayFunction(Benchmark):
def setup(self):
self.numpy_array = np.array(1)
self.numpy_arrays = [np.array(1), np.array(2)]
self.many_arrays = 500 * self.numpy_arrays
self.duck_array = DuckArray()
self.duck_arrays = [DuckArray(), DuckArray()]
self.mixed_arrays = [np.array(1), DuckArray()]
def time_mock_broadcast_to_numpy(self):
mock_broadcast_to(self.numpy_array, ())
def time_mock_broadcast_to_duck(self):
mock_broadcast_to(self.duck_array, ())
def time_mock_concatenate_numpy(self):
mock_concatenate(self.numpy_arrays, axis=0)
def time_mock_concatenate_many(self):
mock_concatenate(self.many_arrays, axis=0)
def time_mock_concatenate_duck(self):
mock_concatenate(self.duck_arrays, axis=0)
def time_mock_concatenate_mixed(self):
mock_concatenate(self.mixed_arrays, axis=0)
from .common import Benchmark
try:
from numpy.core.overrides import array_function_dispatch
except ImportError:
# Don't fail at import time with old Numpy versions
def array_function_dispatch(*args, **kwargs):
def wrap(*args, **kwargs):
return None
return wrap
import numpy as np
def _broadcast_to_dispatcher(array, shape, subok=None):
return (array,)
@array_function_dispatch(_broadcast_to_dispatcher)
def mock_broadcast_to(array, shape, subok=False):
pass
def _concatenate_dispatcher(arrays, axis=None, out=None):
if out is not None:
arrays = list(arrays)
arrays.append(out)
return arrays
@array_function_dispatch(_concatenate_dispatcher)
def mock_concatenate(arrays, axis=0, out=None):
pass
class DuckArray:
def __array_function__(self, func, types, args, kwargs):
pass
class ArrayFunction(Benchmark):
def setup(self):
self.numpy_array = np.array(1)
self.numpy_arrays = [np.array(1), np.array(2)]
self.many_arrays = 500 * self.numpy_arrays
self.duck_array = DuckArray()
self.duck_arrays = [DuckArray(), DuckArray()]
self.mixed_arrays = [np.array(1), DuckArray()]
def time_mock_broadcast_to_numpy(self):
mock_broadcast_to(self.numpy_array, ())
def time_mock_broadcast_to_duck(self):
mock_broadcast_to(self.duck_array, ())
def time_mock_concatenate_numpy(self):
mock_concatenate(self.numpy_arrays, axis=0)
def time_mock_concatenate_many(self):
mock_concatenate(self.many_arrays, axis=0)
def time_mock_concatenate_duck(self):
mock_concatenate(self.duck_arrays, axis=0)
def time_mock_concatenate_mixed(self):
mock_concatenate(self.mixed_arrays, axis=0)

View File

@ -1,184 +1,184 @@
from .common import Benchmark
import numpy as np
try:
from numpy.random import Generator
except ImportError:
pass
class Random(Benchmark):
params = ['normal', 'uniform', 'weibull 1', 'binomial 10 0.5',
'poisson 10']
def setup(self, name):
items = name.split()
name = items.pop(0)
params = [float(x) for x in items]
self.func = getattr(np.random, name)
self.params = tuple(params) + ((100, 100),)
def time_rng(self, name):
self.func(*self.params)
class Shuffle(Benchmark):
def setup(self):
self.a = np.arange(100000)
def time_100000(self):
np.random.shuffle(self.a)
class Randint(Benchmark):
def time_randint_fast(self):
"""Compare to uint32 below"""
np.random.randint(0, 2**30, size=10**5)
def time_randint_slow(self):
"""Compare to uint32 below"""
np.random.randint(0, 2**30 + 1, size=10**5)
class Randint_dtype(Benchmark):
high = {
'bool': 1,
'uint8': 2**7,
'uint16': 2**15,
'uint32': 2**31,
'uint64': 2**63
}
param_names = ['dtype']
params = ['bool', 'uint8', 'uint16', 'uint32', 'uint64']
def setup(self, name):
from numpy.lib import NumpyVersion
if NumpyVersion(np.__version__) < '1.11.0.dev0':
raise NotImplementedError
def time_randint_fast(self, name):
high = self.high[name]
np.random.randint(0, high, size=10**5, dtype=name)
def time_randint_slow(self, name):
high = self.high[name]
np.random.randint(0, high + 1, size=10**5, dtype=name)
class Permutation(Benchmark):
def setup(self):
self.n = 10000
self.a_1d = np.random.random(self.n)
self.a_2d = np.random.random((self.n, 2))
def time_permutation_1d(self):
np.random.permutation(self.a_1d)
def time_permutation_2d(self):
np.random.permutation(self.a_2d)
def time_permutation_int(self):
np.random.permutation(self.n)
nom_size = 100000
class RNG(Benchmark):
param_names = ['rng']
params = ['PCG64', 'MT19937', 'Philox', 'SFC64', 'numpy']
def setup(self, bitgen):
if bitgen == 'numpy':
self.rg = np.random.RandomState()
else:
self.rg = Generator(getattr(np.random, bitgen)())
self.rg.random()
self.int32info = np.iinfo(np.int32)
self.uint32info = np.iinfo(np.uint32)
self.uint64info = np.iinfo(np.uint64)
def time_raw(self, bitgen):
if bitgen == 'numpy':
self.rg.random_integers(self.int32info.max, size=nom_size)
else:
self.rg.integers(self.int32info.max, size=nom_size, endpoint=True)
def time_32bit(self, bitgen):
min, max = self.uint32info.min, self.uint32info.max
if bitgen == 'numpy':
self.rg.randint(min, max + 1, nom_size, dtype=np.uint32)
else:
self.rg.integers(min, max + 1, nom_size, dtype=np.uint32)
def time_64bit(self, bitgen):
min, max = self.uint64info.min, self.uint64info.max
if bitgen == 'numpy':
self.rg.randint(min, max + 1, nom_size, dtype=np.uint64)
else:
self.rg.integers(min, max + 1, nom_size, dtype=np.uint64)
def time_normal_zig(self, bitgen):
self.rg.standard_normal(nom_size)
class Bounded(Benchmark):
u8 = np.uint8
u16 = np.uint16
u32 = np.uint32
u64 = np.uint64
param_names = ['rng', 'dt_max']
params = [['PCG64', 'MT19937', 'Philox', 'SFC64', 'numpy'],
[[u8, 95],
[u8, 64], # Worst case for legacy
[u8, 127], # Best case for legacy
[u16, 95],
[u16, 1024], # Worst case for legacy
[u16, 1535], # Typ. avg. case for legacy
[u16, 2047], # Best case for legacy
[u32, 1024], # Worst case for legacy
[u32, 1535], # Typ. avg. case for legacy
[u32, 2047], # Best case for legacy
[u64, 95],
[u64, 1024], # Worst case for legacy
[u64, 1535], # Typ. avg. case for legacy
[u64, 2047], # Best case for legacy
]]
def setup(self, bitgen, args):
if bitgen == 'numpy':
self.rg = np.random.RandomState()
else:
self.rg = Generator(getattr(np.random, bitgen)())
self.rg.random()
def time_bounded(self, bitgen, args):
"""
Timer for 8-bit bounded values.
Parameters (packed as args)
----------
dt : {uint8, uint16, uint32, unit64}
output dtype
max : int
Upper bound for range. Lower is always 0. Must be <= 2**bits.
"""
dt, max = args
if bitgen == 'numpy':
self.rg.randint(0, max + 1, nom_size, dtype=dt)
else:
self.rg.integers(0, max + 1, nom_size, dtype=dt)
class Choice(Benchmark):
params = [1e3, 1e6, 1e8]
def setup(self, v):
self.a = np.arange(v)
self.rng = np.random.default_rng()
def time_legacy_choice(self, v):
np.random.choice(self.a, 1000, replace=False)
def time_choice(self, v):
self.rng.choice(self.a, 1000, replace=False)
from .common import Benchmark
import numpy as np
try:
from numpy.random import Generator
except ImportError:
pass
class Random(Benchmark):
params = ['normal', 'uniform', 'weibull 1', 'binomial 10 0.5',
'poisson 10']
def setup(self, name):
items = name.split()
name = items.pop(0)
params = [float(x) for x in items]
self.func = getattr(np.random, name)
self.params = tuple(params) + ((100, 100),)
def time_rng(self, name):
self.func(*self.params)
class Shuffle(Benchmark):
def setup(self):
self.a = np.arange(100000)
def time_100000(self):
np.random.shuffle(self.a)
class Randint(Benchmark):
def time_randint_fast(self):
"""Compare to uint32 below"""
np.random.randint(0, 2**30, size=10**5)
def time_randint_slow(self):
"""Compare to uint32 below"""
np.random.randint(0, 2**30 + 1, size=10**5)
class Randint_dtype(Benchmark):
high = {
'bool': 1,
'uint8': 2**7,
'uint16': 2**15,
'uint32': 2**31,
'uint64': 2**63
}
param_names = ['dtype']
params = ['bool', 'uint8', 'uint16', 'uint32', 'uint64']
def setup(self, name):
from numpy.lib import NumpyVersion
if NumpyVersion(np.__version__) < '1.11.0.dev0':
raise NotImplementedError
def time_randint_fast(self, name):
high = self.high[name]
np.random.randint(0, high, size=10**5, dtype=name)
def time_randint_slow(self, name):
high = self.high[name]
np.random.randint(0, high + 1, size=10**5, dtype=name)
class Permutation(Benchmark):
def setup(self):
self.n = 10000
self.a_1d = np.random.random(self.n)
self.a_2d = np.random.random((self.n, 2))
def time_permutation_1d(self):
np.random.permutation(self.a_1d)
def time_permutation_2d(self):
np.random.permutation(self.a_2d)
def time_permutation_int(self):
np.random.permutation(self.n)
nom_size = 100000
class RNG(Benchmark):
param_names = ['rng']
params = ['PCG64', 'MT19937', 'Philox', 'SFC64', 'numpy']
def setup(self, bitgen):
if bitgen == 'numpy':
self.rg = np.random.RandomState()
else:
self.rg = Generator(getattr(np.random, bitgen)())
self.rg.random()
self.int32info = np.iinfo(np.int32)
self.uint32info = np.iinfo(np.uint32)
self.uint64info = np.iinfo(np.uint64)
def time_raw(self, bitgen):
if bitgen == 'numpy':
self.rg.random_integers(self.int32info.max, size=nom_size)
else:
self.rg.integers(self.int32info.max, size=nom_size, endpoint=True)
def time_32bit(self, bitgen):
min, max = self.uint32info.min, self.uint32info.max
if bitgen == 'numpy':
self.rg.randint(min, max + 1, nom_size, dtype=np.uint32)
else:
self.rg.integers(min, max + 1, nom_size, dtype=np.uint32)
def time_64bit(self, bitgen):
min, max = self.uint64info.min, self.uint64info.max
if bitgen == 'numpy':
self.rg.randint(min, max + 1, nom_size, dtype=np.uint64)
else:
self.rg.integers(min, max + 1, nom_size, dtype=np.uint64)
def time_normal_zig(self, bitgen):
self.rg.standard_normal(nom_size)
class Bounded(Benchmark):
u8 = np.uint8
u16 = np.uint16
u32 = np.uint32
u64 = np.uint64
param_names = ['rng', 'dt_max']
params = [['PCG64', 'MT19937', 'Philox', 'SFC64', 'numpy'],
[[u8, 95],
[u8, 64], # Worst case for legacy
[u8, 127], # Best case for legacy
[u16, 95],
[u16, 1024], # Worst case for legacy
[u16, 1535], # Typ. avg. case for legacy
[u16, 2047], # Best case for legacy
[u32, 1024], # Worst case for legacy
[u32, 1535], # Typ. avg. case for legacy
[u32, 2047], # Best case for legacy
[u64, 95],
[u64, 1024], # Worst case for legacy
[u64, 1535], # Typ. avg. case for legacy
[u64, 2047], # Best case for legacy
]]
def setup(self, bitgen, args):
if bitgen == 'numpy':
self.rg = np.random.RandomState()
else:
self.rg = Generator(getattr(np.random, bitgen)())
self.rg.random()
def time_bounded(self, bitgen, args):
"""
Timer for 8-bit bounded values.
Parameters (packed as args)
----------
dt : {uint8, uint16, uint32, unit64}
output dtype
max : int
Upper bound for range. Lower is always 0. Must be <= 2**bits.
"""
dt, max = args
if bitgen == 'numpy':
self.rg.randint(0, max + 1, nom_size, dtype=dt)
else:
self.rg.integers(0, max + 1, nom_size, dtype=dt)
class Choice(Benchmark):
params = [1e3, 1e6, 1e8]
def setup(self, v):
self.a = np.arange(v)
self.rng = np.random.default_rng()
def time_legacy_choice(self, v):
np.random.choice(self.a, 1000, replace=False)
def time_choice(self, v):
self.rng.choice(self.a, 1000, replace=False)

View File

@ -1,40 +1,40 @@
from .common import Benchmark
import numpy as np
class Records(Benchmark):
def setup(self):
self.l50 = np.arange(1000)
self.fields_number = 10000
self.arrays = [self.l50 for _ in range(self.fields_number)]
self.formats = [self.l50.dtype.str for _ in range(self.fields_number)]
self.formats_str = ','.join(self.formats)
self.dtype_ = np.dtype(
[
('field_{}'.format(i), self.l50.dtype.str)
for i in range(self.fields_number)
]
)
self.buffer = self.l50.tostring() * self.fields_number
def time_fromarrays_w_dtype(self):
np.core.records.fromarrays(self.arrays, dtype=self.dtype_)
def time_fromarrays_wo_dtype(self):
np.core.records.fromarrays(self.arrays)
def time_fromarrays_formats_as_list(self):
np.core.records.fromarrays(self.arrays, formats=self.formats)
def time_fromarrays_formats_as_string(self):
np.core.records.fromarrays(self.arrays, formats=self.formats_str)
def time_fromstring_w_dtype(self):
np.core.records.fromstring(self.buffer, dtype=self.dtype_)
def time_fromstring_formats_as_list(self):
np.core.records.fromstring(self.buffer, formats=self.formats)
def time_fromstring_formats_as_string(self):
np.core.records.fromstring(self.buffer, formats=self.formats_str)
from .common import Benchmark
import numpy as np
class Records(Benchmark):
def setup(self):
self.l50 = np.arange(1000)
self.fields_number = 10000
self.arrays = [self.l50 for _ in range(self.fields_number)]
self.formats = [self.l50.dtype.str for _ in range(self.fields_number)]
self.formats_str = ','.join(self.formats)
self.dtype_ = np.dtype(
[
('field_{}'.format(i), self.l50.dtype.str)
for i in range(self.fields_number)
]
)
self.buffer = self.l50.tostring() * self.fields_number
def time_fromarrays_w_dtype(self):
np.core.records.fromarrays(self.arrays, dtype=self.dtype_)
def time_fromarrays_wo_dtype(self):
np.core.records.fromarrays(self.arrays)
def time_fromarrays_formats_as_list(self):
np.core.records.fromarrays(self.arrays, formats=self.formats)
def time_fromarrays_formats_as_string(self):
np.core.records.fromarrays(self.arrays, formats=self.formats_str)
def time_fromstring_w_dtype(self):
np.core.records.fromstring(self.buffer, dtype=self.dtype_)
def time_fromstring_formats_as_list(self):
np.core.records.fromstring(self.buffer, formats=self.formats)
def time_fromstring_formats_as_string(self):
np.core.records.fromstring(self.buffer, formats=self.formats_str)

View File

@ -1,67 +1,67 @@
from .common import Benchmark, TYPES1, get_squares
import numpy as np
class AddReduce(Benchmark):
def setup(self):
self.squares = get_squares().values()
def time_axis_0(self):
[np.add.reduce(a, axis=0) for a in self.squares]
def time_axis_1(self):
[np.add.reduce(a, axis=1) for a in self.squares]
class AddReduceSeparate(Benchmark):
params = [[0, 1], TYPES1]
param_names = ['axis', 'type']
def setup(self, axis, typename):
self.a = get_squares()[typename]
def time_reduce(self, axis, typename):
np.add.reduce(self.a, axis=axis)
class AnyAll(Benchmark):
def setup(self):
# avoid np.zeros's lazy allocation that would
# cause page faults during benchmark
self.zeros = np.full(100000, 0, bool)
self.ones = np.full(100000, 1, bool)
def time_all_fast(self):
self.zeros.all()
def time_all_slow(self):
self.ones.all()
def time_any_fast(self):
self.ones.any()
def time_any_slow(self):
self.zeros.any()
class MinMax(Benchmark):
params = [np.float32, np.float64, np.intp]
param_names = ['dtype']
def setup(self, dtype):
self.d = np.ones(20000, dtype=dtype)
def time_min(self, dtype):
np.min(self.d)
def time_max(self, dtype):
np.max(self.d)
class SmallReduction(Benchmark):
def setup(self):
self.d = np.ones(100, dtype=np.float32)
def time_small(self):
np.sum(self.d)
from .common import Benchmark, TYPES1, get_squares
import numpy as np
class AddReduce(Benchmark):
def setup(self):
self.squares = get_squares().values()
def time_axis_0(self):
[np.add.reduce(a, axis=0) for a in self.squares]
def time_axis_1(self):
[np.add.reduce(a, axis=1) for a in self.squares]
class AddReduceSeparate(Benchmark):
params = [[0, 1], TYPES1]
param_names = ['axis', 'type']
def setup(self, axis, typename):
self.a = get_squares()[typename]
def time_reduce(self, axis, typename):
np.add.reduce(self.a, axis=axis)
class AnyAll(Benchmark):
def setup(self):
# avoid np.zeros's lazy allocation that would
# cause page faults during benchmark
self.zeros = np.full(100000, 0, bool)
self.ones = np.full(100000, 1, bool)
def time_all_fast(self):
self.zeros.all()
def time_all_slow(self):
self.ones.all()
def time_any_fast(self):
self.ones.any()
def time_any_slow(self):
self.zeros.any()
class MinMax(Benchmark):
params = [np.float32, np.float64, np.intp]
param_names = ['dtype']
def setup(self, dtype):
self.d = np.ones(20000, dtype=dtype)
def time_min(self, dtype):
np.min(self.d)
def time_max(self, dtype):
np.max(self.d)
class SmallReduction(Benchmark):
def setup(self):
self.d = np.ones(100, dtype=np.float32)
def time_small(self):
np.sum(self.d)

View File

@ -1,136 +1,136 @@
from .common import Benchmark
import numpy as np
class Block(Benchmark):
params = [1, 10, 100]
param_names = ['size']
def setup(self, n):
self.a_2d = np.ones((2 * n, 2 * n))
self.b_1d = np.ones(2 * n)
self.b_2d = 2 * self.a_2d
self.a = np.ones(3 * n)
self.b = np.ones(3 * n)
self.one_2d = np.ones((1 * n, 3 * n))
self.two_2d = np.ones((1 * n, 3 * n))
self.three_2d = np.ones((1 * n, 6 * n))
self.four_1d = np.ones(6 * n)
self.five_0d = np.ones(1 * n)
self.six_1d = np.ones(5 * n)
# avoid np.zeros's lazy allocation that might cause
# page faults during benchmark
self.zero_2d = np.full((2 * n, 6 * n), 0)
self.one = np.ones(3 * n)
self.two = 2 * np.ones((3, 3 * n))
self.three = 3 * np.ones(3 * n)
self.four = 4 * np.ones(3 * n)
self.five = 5 * np.ones(1 * n)
self.six = 6 * np.ones(5 * n)
# avoid np.zeros's lazy allocation that might cause
# page faults during benchmark
self.zero = np.full((2 * n, 6 * n), 0)
def time_block_simple_row_wise(self, n):
np.block([self.a_2d, self.b_2d])
def time_block_simple_column_wise(self, n):
np.block([[self.a_2d], [self.b_2d]])
def time_block_complicated(self, n):
np.block([[self.one_2d, self.two_2d],
[self.three_2d],
[self.four_1d],
[self.five_0d, self.six_1d],
[self.zero_2d]])
def time_nested(self, n):
np.block([
[
np.block([
[self.one],
[self.three],
[self.four]
]),
self.two
],
[self.five, self.six],
[self.zero]
])
def time_no_lists(self, n):
np.block(1)
np.block(np.eye(3 * n))
class Block2D(Benchmark):
params = [[(16, 16), (32, 32), (64, 64), (128, 128), (256, 256), (512, 512), (1024, 1024)],
['uint8', 'uint16', 'uint32', 'uint64'],
[(2, 2), (4, 4)]]
param_names = ['shape', 'dtype', 'n_chunks']
def setup(self, shape, dtype, n_chunks):
self.block_list = [
[np.full(shape=[s//n_chunk for s, n_chunk in zip(shape, n_chunks)],
fill_value=1, dtype=dtype) for _ in range(n_chunks[1])]
for _ in range(n_chunks[0])
]
def time_block2d(self, shape, dtype, n_chunks):
np.block(self.block_list)
class Block3D(Benchmark):
"""This benchmark concatenates an array of size ``(5n)^3``"""
# Having copy as a `mode` of the block3D
# allows us to directly compare the benchmark of block
# to that of a direct memory copy into new buffers with
# the ASV framework.
# block and copy will be plotted on the same graph
# as opposed to being displayed as separate benchmarks
params = [[1, 10, 100],
['block', 'copy']]
param_names = ['n', 'mode']
def setup(self, n, mode):
# Slow setup method: hence separated from the others above
self.a000 = np.ones((2 * n, 2 * n, 2 * n), int) * 1
self.a100 = np.ones((3 * n, 2 * n, 2 * n), int) * 2
self.a010 = np.ones((2 * n, 3 * n, 2 * n), int) * 3
self.a001 = np.ones((2 * n, 2 * n, 3 * n), int) * 4
self.a011 = np.ones((2 * n, 3 * n, 3 * n), int) * 5
self.a101 = np.ones((3 * n, 2 * n, 3 * n), int) * 6
self.a110 = np.ones((3 * n, 3 * n, 2 * n), int) * 7
self.a111 = np.ones((3 * n, 3 * n, 3 * n), int) * 8
self.block = [
[
[self.a000, self.a001],
[self.a010, self.a011],
],
[
[self.a100, self.a101],
[self.a110, self.a111],
]
]
self.arr_list = [a
for two_d in self.block
for one_d in two_d
for a in one_d]
def time_3d(self, n, mode):
if mode == 'block':
np.block(self.block)
else: # mode == 'copy'
[arr.copy() for arr in self.arr_list]
# Retain old benchmark name for backward compat
time_3d.benchmark_name = "bench_shape_base.Block.time_3d"
from .common import Benchmark
import numpy as np
class Block(Benchmark):
params = [1, 10, 100]
param_names = ['size']
def setup(self, n):
self.a_2d = np.ones((2 * n, 2 * n))
self.b_1d = np.ones(2 * n)
self.b_2d = 2 * self.a_2d
self.a = np.ones(3 * n)
self.b = np.ones(3 * n)
self.one_2d = np.ones((1 * n, 3 * n))
self.two_2d = np.ones((1 * n, 3 * n))
self.three_2d = np.ones((1 * n, 6 * n))
self.four_1d = np.ones(6 * n)
self.five_0d = np.ones(1 * n)
self.six_1d = np.ones(5 * n)
# avoid np.zeros's lazy allocation that might cause
# page faults during benchmark
self.zero_2d = np.full((2 * n, 6 * n), 0)
self.one = np.ones(3 * n)
self.two = 2 * np.ones((3, 3 * n))
self.three = 3 * np.ones(3 * n)
self.four = 4 * np.ones(3 * n)
self.five = 5 * np.ones(1 * n)
self.six = 6 * np.ones(5 * n)
# avoid np.zeros's lazy allocation that might cause
# page faults during benchmark
self.zero = np.full((2 * n, 6 * n), 0)
def time_block_simple_row_wise(self, n):
np.block([self.a_2d, self.b_2d])
def time_block_simple_column_wise(self, n):
np.block([[self.a_2d], [self.b_2d]])
def time_block_complicated(self, n):
np.block([[self.one_2d, self.two_2d],
[self.three_2d],
[self.four_1d],
[self.five_0d, self.six_1d],
[self.zero_2d]])
def time_nested(self, n):
np.block([
[
np.block([
[self.one],
[self.three],
[self.four]
]),
self.two
],
[self.five, self.six],
[self.zero]
])
def time_no_lists(self, n):
np.block(1)
np.block(np.eye(3 * n))
class Block2D(Benchmark):
params = [[(16, 16), (32, 32), (64, 64), (128, 128), (256, 256), (512, 512), (1024, 1024)],
['uint8', 'uint16', 'uint32', 'uint64'],
[(2, 2), (4, 4)]]
param_names = ['shape', 'dtype', 'n_chunks']
def setup(self, shape, dtype, n_chunks):
self.block_list = [
[np.full(shape=[s//n_chunk for s, n_chunk in zip(shape, n_chunks)],
fill_value=1, dtype=dtype) for _ in range(n_chunks[1])]
for _ in range(n_chunks[0])
]
def time_block2d(self, shape, dtype, n_chunks):
np.block(self.block_list)
class Block3D(Benchmark):
"""This benchmark concatenates an array of size ``(5n)^3``"""
# Having copy as a `mode` of the block3D
# allows us to directly compare the benchmark of block
# to that of a direct memory copy into new buffers with
# the ASV framework.
# block and copy will be plotted on the same graph
# as opposed to being displayed as separate benchmarks
params = [[1, 10, 100],
['block', 'copy']]
param_names = ['n', 'mode']
def setup(self, n, mode):
# Slow setup method: hence separated from the others above
self.a000 = np.ones((2 * n, 2 * n, 2 * n), int) * 1
self.a100 = np.ones((3 * n, 2 * n, 2 * n), int) * 2
self.a010 = np.ones((2 * n, 3 * n, 2 * n), int) * 3
self.a001 = np.ones((2 * n, 2 * n, 3 * n), int) * 4
self.a011 = np.ones((2 * n, 3 * n, 3 * n), int) * 5
self.a101 = np.ones((3 * n, 2 * n, 3 * n), int) * 6
self.a110 = np.ones((3 * n, 3 * n, 2 * n), int) * 7
self.a111 = np.ones((3 * n, 3 * n, 3 * n), int) * 8
self.block = [
[
[self.a000, self.a001],
[self.a010, self.a011],
],
[
[self.a100, self.a101],
[self.a110, self.a111],
]
]
self.arr_list = [a
for two_d in self.block
for one_d in two_d
for a in one_d]
def time_3d(self, n, mode):
if mode == 'block':
np.block(self.block)
else: # mode == 'copy'
[arr.copy() for arr in self.arr_list]
# Retain old benchmark name for backward compat
time_3d.benchmark_name = "bench_shape_base.Block.time_3d"

View File

@ -1,209 +1,209 @@
from .common import Benchmark, get_squares_
import numpy as np
ufuncs = ['abs', 'absolute', 'add', 'arccos', 'arccosh', 'arcsin', 'arcsinh',
'arctan', 'arctan2', 'arctanh', 'bitwise_and', 'bitwise_not',
'bitwise_or', 'bitwise_xor', 'cbrt', 'ceil', 'conj', 'conjugate',
'copysign', 'cos', 'cosh', 'deg2rad', 'degrees', 'divide', 'divmod',
'equal', 'exp', 'exp2', 'expm1', 'fabs', 'float_power', 'floor',
'floor_divide', 'fmax', 'fmin', 'fmod', 'frexp', 'gcd', 'greater',
'greater_equal', 'heaviside', 'hypot', 'invert', 'isfinite',
'isinf', 'isnan', 'isnat', 'lcm', 'ldexp', 'left_shift', 'less',
'less_equal', 'log', 'log10', 'log1p', 'log2', 'logaddexp',
'logaddexp2', 'logical_and', 'logical_not', 'logical_or',
'logical_xor', 'matmul', 'maximum', 'minimum', 'mod', 'modf', 'multiply',
'negative', 'nextafter', 'not_equal', 'positive', 'power',
'rad2deg', 'radians', 'reciprocal', 'remainder', 'right_shift',
'rint', 'sign', 'signbit', 'sin', 'sinh', 'spacing', 'sqrt',
'square', 'subtract', 'tan', 'tanh', 'true_divide', 'trunc']
for name in dir(np):
if isinstance(getattr(np, name, None), np.ufunc) and name not in ufuncs:
print("Missing ufunc %r" % (name,))
class Broadcast(Benchmark):
def setup(self):
self.d = np.ones((50000, 100), dtype=np.float64)
self.e = np.ones((100,), dtype=np.float64)
def time_broadcast(self):
self.d - self.e
class UFunc(Benchmark):
params = [ufuncs]
param_names = ['ufunc']
timeout = 10
def setup(self, ufuncname):
np.seterr(all='ignore')
try:
self.f = getattr(np, ufuncname)
except AttributeError:
raise NotImplementedError()
self.args = []
for t, a in get_squares_().items():
arg = (a,) * self.f.nin
try:
self.f(*arg)
except TypeError:
continue
self.args.append(arg)
def time_ufunc_types(self, ufuncname):
[self.f(*arg) for arg in self.args]
class Custom(Benchmark):
def setup(self):
self.b = np.ones(20000, dtype=bool)
def time_nonzero(self):
np.nonzero(self.b)
def time_not_bool(self):
(~self.b)
def time_and_bool(self):
(self.b & self.b)
def time_or_bool(self):
(self.b | self.b)
class CustomInplace(Benchmark):
def setup(self):
self.c = np.ones(500000, dtype=np.int8)
self.i = np.ones(150000, dtype=np.int32)
self.f = np.zeros(150000, dtype=np.float32)
self.d = np.zeros(75000, dtype=np.float64)
# fault memory
self.f *= 1.
self.d *= 1.
def time_char_or(self):
np.bitwise_or(self.c, 0, out=self.c)
np.bitwise_or(0, self.c, out=self.c)
def time_char_or_temp(self):
0 | self.c | 0
def time_int_or(self):
np.bitwise_or(self.i, 0, out=self.i)
np.bitwise_or(0, self.i, out=self.i)
def time_int_or_temp(self):
0 | self.i | 0
def time_float_add(self):
np.add(self.f, 1., out=self.f)
np.add(1., self.f, out=self.f)
def time_float_add_temp(self):
1. + self.f + 1.
def time_double_add(self):
np.add(self.d, 1., out=self.d)
np.add(1., self.d, out=self.d)
def time_double_add_temp(self):
1. + self.d + 1.
class CustomScalar(Benchmark):
params = [np.float32, np.float64]
param_names = ['dtype']
def setup(self, dtype):
self.d = np.ones(20000, dtype=dtype)
def time_add_scalar2(self, dtype):
np.add(self.d, 1)
def time_divide_scalar2(self, dtype):
np.divide(self.d, 1)
def time_divide_scalar2_inplace(self, dtype):
np.divide(self.d, 1, out=self.d)
def time_less_than_scalar2(self, dtype):
(self.d < 1)
class Scalar(Benchmark):
def setup(self):
self.x = np.asarray(1.0)
self.y = np.asarray((1.0 + 1j))
self.z = complex(1.0, 1.0)
def time_add_scalar(self):
(self.x + self.x)
def time_add_scalar_conv(self):
(self.x + 1.0)
def time_add_scalar_conv_complex(self):
(self.y + self.z)
class ArgPack:
__slots__ = ['args', 'kwargs']
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs
def __repr__(self):
return '({})'.format(', '.join(
[repr(a) for a in self.args] +
['{}={}'.format(k, repr(v)) for k, v in self.kwargs.items()]
))
class ArgParsing(Benchmark):
# In order to benchmark the speed of argument parsing, all but the
# out arguments are chosen such that they have no effect on the
# calculation. In particular, subok=True and where=True are
# defaults, and the dtype is the correct one (the latter will
# still have some effect on the search for the correct inner loop).
x = np.array(1.)
y = np.array(2.)
out = np.array(3.)
param_names = ['arg_kwarg']
params = [[
ArgPack(x, y),
ArgPack(x, y, out),
ArgPack(x, y, out=out),
ArgPack(x, y, out=(out,)),
ArgPack(x, y, out=out, subok=True, where=True),
ArgPack(x, y, subok=True),
ArgPack(x, y, subok=True, where=True),
ArgPack(x, y, out, subok=True, where=True)
]]
def time_add_arg_parsing(self, arg_pack):
np.add(*arg_pack.args, **arg_pack.kwargs)
class ArgParsingReduce(Benchmark):
# In order to benchmark the speed of argument parsing, all but the
# out arguments are chosen such that they have minimal effect on the
# calculation.
a = np.arange(2.)
out = np.array(0.)
param_names = ['arg_kwarg']
params = [[
ArgPack(a,),
ArgPack(a, 0),
ArgPack(a, axis=0),
ArgPack(a, 0, None),
ArgPack(a, axis=0, dtype=None),
ArgPack(a, 0, None, out),
ArgPack(a, axis=0, dtype=None, out=out),
ArgPack(a, out=out)
]]
def time_add_reduce_arg_parsing(self, arg_pack):
np.add.reduce(*arg_pack.args, **arg_pack.kwargs)
from .common import Benchmark, get_squares_
import numpy as np
ufuncs = ['abs', 'absolute', 'add', 'arccos', 'arccosh', 'arcsin', 'arcsinh',
'arctan', 'arctan2', 'arctanh', 'bitwise_and', 'bitwise_not',
'bitwise_or', 'bitwise_xor', 'cbrt', 'ceil', 'conj', 'conjugate',
'copysign', 'cos', 'cosh', 'deg2rad', 'degrees', 'divide', 'divmod',
'equal', 'exp', 'exp2', 'expm1', 'fabs', 'float_power', 'floor',
'floor_divide', 'fmax', 'fmin', 'fmod', 'frexp', 'gcd', 'greater',
'greater_equal', 'heaviside', 'hypot', 'invert', 'isfinite',
'isinf', 'isnan', 'isnat', 'lcm', 'ldexp', 'left_shift', 'less',
'less_equal', 'log', 'log10', 'log1p', 'log2', 'logaddexp',
'logaddexp2', 'logical_and', 'logical_not', 'logical_or',
'logical_xor', 'matmul', 'maximum', 'minimum', 'mod', 'modf', 'multiply',
'negative', 'nextafter', 'not_equal', 'positive', 'power',
'rad2deg', 'radians', 'reciprocal', 'remainder', 'right_shift',
'rint', 'sign', 'signbit', 'sin', 'sinh', 'spacing', 'sqrt',
'square', 'subtract', 'tan', 'tanh', 'true_divide', 'trunc']
for name in dir(np):
if isinstance(getattr(np, name, None), np.ufunc) and name not in ufuncs:
print("Missing ufunc %r" % (name,))
class Broadcast(Benchmark):
def setup(self):
self.d = np.ones((50000, 100), dtype=np.float64)
self.e = np.ones((100,), dtype=np.float64)
def time_broadcast(self):
self.d - self.e
class UFunc(Benchmark):
params = [ufuncs]
param_names = ['ufunc']
timeout = 10
def setup(self, ufuncname):
np.seterr(all='ignore')
try:
self.f = getattr(np, ufuncname)
except AttributeError:
raise NotImplementedError()
self.args = []
for t, a in get_squares_().items():
arg = (a,) * self.f.nin
try:
self.f(*arg)
except TypeError:
continue
self.args.append(arg)
def time_ufunc_types(self, ufuncname):
[self.f(*arg) for arg in self.args]
class Custom(Benchmark):
def setup(self):
self.b = np.ones(20000, dtype=bool)
def time_nonzero(self):
np.nonzero(self.b)
def time_not_bool(self):
(~self.b)
def time_and_bool(self):
(self.b & self.b)
def time_or_bool(self):
(self.b | self.b)
class CustomInplace(Benchmark):
def setup(self):
self.c = np.ones(500000, dtype=np.int8)
self.i = np.ones(150000, dtype=np.int32)
self.f = np.zeros(150000, dtype=np.float32)
self.d = np.zeros(75000, dtype=np.float64)
# fault memory
self.f *= 1.
self.d *= 1.
def time_char_or(self):
np.bitwise_or(self.c, 0, out=self.c)
np.bitwise_or(0, self.c, out=self.c)
def time_char_or_temp(self):
0 | self.c | 0
def time_int_or(self):
np.bitwise_or(self.i, 0, out=self.i)
np.bitwise_or(0, self.i, out=self.i)
def time_int_or_temp(self):
0 | self.i | 0
def time_float_add(self):
np.add(self.f, 1., out=self.f)
np.add(1., self.f, out=self.f)
def time_float_add_temp(self):
1. + self.f + 1.
def time_double_add(self):
np.add(self.d, 1., out=self.d)
np.add(1., self.d, out=self.d)
def time_double_add_temp(self):
1. + self.d + 1.
class CustomScalar(Benchmark):
params = [np.float32, np.float64]
param_names = ['dtype']
def setup(self, dtype):
self.d = np.ones(20000, dtype=dtype)
def time_add_scalar2(self, dtype):
np.add(self.d, 1)
def time_divide_scalar2(self, dtype):
np.divide(self.d, 1)
def time_divide_scalar2_inplace(self, dtype):
np.divide(self.d, 1, out=self.d)
def time_less_than_scalar2(self, dtype):
(self.d < 1)
class Scalar(Benchmark):
def setup(self):
self.x = np.asarray(1.0)
self.y = np.asarray((1.0 + 1j))
self.z = complex(1.0, 1.0)
def time_add_scalar(self):
(self.x + self.x)
def time_add_scalar_conv(self):
(self.x + 1.0)
def time_add_scalar_conv_complex(self):
(self.y + self.z)
class ArgPack:
__slots__ = ['args', 'kwargs']
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs
def __repr__(self):
return '({})'.format(', '.join(
[repr(a) for a in self.args] +
['{}={}'.format(k, repr(v)) for k, v in self.kwargs.items()]
))
class ArgParsing(Benchmark):
# In order to benchmark the speed of argument parsing, all but the
# out arguments are chosen such that they have no effect on the
# calculation. In particular, subok=True and where=True are
# defaults, and the dtype is the correct one (the latter will
# still have some effect on the search for the correct inner loop).
x = np.array(1.)
y = np.array(2.)
out = np.array(3.)
param_names = ['arg_kwarg']
params = [[
ArgPack(x, y),
ArgPack(x, y, out),
ArgPack(x, y, out=out),
ArgPack(x, y, out=(out,)),
ArgPack(x, y, out=out, subok=True, where=True),
ArgPack(x, y, subok=True),
ArgPack(x, y, subok=True, where=True),
ArgPack(x, y, out, subok=True, where=True)
]]
def time_add_arg_parsing(self, arg_pack):
np.add(*arg_pack.args, **arg_pack.kwargs)
class ArgParsingReduce(Benchmark):
# In order to benchmark the speed of argument parsing, all but the
# out arguments are chosen such that they have minimal effect on the
# calculation.
a = np.arange(2.)
out = np.array(0.)
param_names = ['arg_kwarg']
params = [[
ArgPack(a,),
ArgPack(a, 0),
ArgPack(a, axis=0),
ArgPack(a, 0, None),
ArgPack(a, axis=0, dtype=None),
ArgPack(a, 0, None, out),
ArgPack(a, axis=0, dtype=None, out=out),
ArgPack(a, out=out)
]]
def time_add_reduce_arg_parsing(self, arg_pack):
np.add.reduce(*arg_pack.args, **arg_pack.kwargs)

View File

@ -1,114 +1,114 @@
import numpy
import random
# Various pre-crafted datasets/variables for testing
# !!! Must not be changed -- only appended !!!
# while testing numpy we better not rely on numpy to produce random
# sequences
random.seed(1)
# but will seed it nevertheless
numpy.random.seed(1)
nx, ny = 1000, 1000
# reduced squares based on indexes_rand, primarily for testing more
# time-consuming functions (ufunc, linalg, etc)
nxs, nys = 100, 100
# a set of interesting types to test
TYPES1 = [
'int16', 'float16',
'int32', 'float32',
'int64', 'float64', 'complex64',
'longfloat', 'complex128',
]
if 'complex256' in numpy.typeDict:
TYPES1.append('complex256')
def memoize(func):
result = []
def wrapper():
if not result:
result.append(func())
return result[0]
return wrapper
# values which will be used to construct our sample data matrices
# replicate 10 times to speed up initial imports of this helper
# and generate some redundancy
@memoize
def get_values():
rnd = numpy.random.RandomState(1)
values = numpy.tile(rnd.uniform(0, 100, size=nx*ny//10), 10)
return values
@memoize
def get_squares():
values = get_values()
squares = {t: numpy.array(values,
dtype=getattr(numpy, t)).reshape((nx, ny))
for t in TYPES1}
# adjust complex ones to have non-degenerated imagery part -- use
# original data transposed for that
for t, v in squares.items():
if t.startswith('complex'):
v += v.T*1j
return squares
@memoize
def get_squares_():
# smaller squares
squares_ = {t: s[:nxs, :nys] for t, s in get_squares().items()}
return squares_
@memoize
def get_vectors():
# vectors
vectors = {t: s[0] for t, s in get_squares().items()}
return vectors
@memoize
def get_indexes():
indexes = list(range(nx))
# so we do not have all items
indexes.pop(5)
indexes.pop(95)
indexes = numpy.array(indexes)
return indexes
@memoize
def get_indexes_rand():
rnd = random.Random(1)
indexes_rand = get_indexes().tolist() # copy
rnd.shuffle(indexes_rand) # in-place shuffle
indexes_rand = numpy.array(indexes_rand)
return indexes_rand
@memoize
def get_indexes_():
# smaller versions
indexes = get_indexes()
indexes_ = indexes[indexes < nxs]
return indexes_
@memoize
def get_indexes_rand_():
indexes_rand = get_indexes_rand()
indexes_rand_ = indexes_rand[indexes_rand < nxs]
return indexes_rand_
class Benchmark:
goal_time = 0.25
import numpy
import random
# Various pre-crafted datasets/variables for testing
# !!! Must not be changed -- only appended !!!
# while testing numpy we better not rely on numpy to produce random
# sequences
random.seed(1)
# but will seed it nevertheless
numpy.random.seed(1)
nx, ny = 1000, 1000
# reduced squares based on indexes_rand, primarily for testing more
# time-consuming functions (ufunc, linalg, etc)
nxs, nys = 100, 100
# a set of interesting types to test
TYPES1 = [
'int16', 'float16',
'int32', 'float32',
'int64', 'float64', 'complex64',
'longfloat', 'complex128',
]
if 'complex256' in numpy.typeDict:
TYPES1.append('complex256')
def memoize(func):
result = []
def wrapper():
if not result:
result.append(func())
return result[0]
return wrapper
# values which will be used to construct our sample data matrices
# replicate 10 times to speed up initial imports of this helper
# and generate some redundancy
@memoize
def get_values():
rnd = numpy.random.RandomState(1)
values = numpy.tile(rnd.uniform(0, 100, size=nx*ny//10), 10)
return values
@memoize
def get_squares():
values = get_values()
squares = {t: numpy.array(values,
dtype=getattr(numpy, t)).reshape((nx, ny))
for t in TYPES1}
# adjust complex ones to have non-degenerated imagery part -- use
# original data transposed for that
for t, v in squares.items():
if t.startswith('complex'):
v += v.T*1j
return squares
@memoize
def get_squares_():
# smaller squares
squares_ = {t: s[:nxs, :nys] for t, s in get_squares().items()}
return squares_
@memoize
def get_vectors():
# vectors
vectors = {t: s[0] for t, s in get_squares().items()}
return vectors
@memoize
def get_indexes():
indexes = list(range(nx))
# so we do not have all items
indexes.pop(5)
indexes.pop(95)
indexes = numpy.array(indexes)
return indexes
@memoize
def get_indexes_rand():
rnd = random.Random(1)
indexes_rand = get_indexes().tolist() # copy
rnd.shuffle(indexes_rand) # in-place shuffle
indexes_rand = numpy.array(indexes_rand)
return indexes_rand
@memoize
def get_indexes_():
# smaller versions
indexes = get_indexes()
indexes_ = indexes[indexes < nxs]
return indexes_
@memoize
def get_indexes_rand_():
indexes_rand = get_indexes_rand()
indexes_rand_ = indexes_rand[indexes_rand < nxs]
return indexes_rand_
class Benchmark:
goal_time = 0.25

View File

@ -1,211 +1,211 @@
===================
NumPy C Style Guide
===================
The NumPy C coding conventions are based on Python PEP-0007 by Guido van
Rossum with a few added strictures. There are many C coding conventions and
it must be emphasized that the primary goal of the NumPy conventions isn't
to choose the 'best', about which there is certain to be disagreement, but
to achieve uniformity. Because the NumPy conventions are very close to
those in PEP-0007, that PEP is used as a template below with the NumPy
additions and variations in the appropriate spots.
Introduction
------------
This document gives coding conventions for the C code comprising
the C implementation of NumPy. Note, rules are there to be broken.
Two good reasons to break a particular rule:
1. When applying the rule would make the code less readable, even
for someone who is used to reading code that follows the rules.
2. To be consistent with surrounding code that also breaks it
(maybe for historic reasons) -- although this is also an
opportunity to clean up someone else's mess.
C dialect
---------
* Use C99 (that is, the standard defined by ISO/IEC 9899:1999).
* Don't use GCC extensions (e.g. don't write multi-line strings
without trailing backslashes). Preferably break long strings
up onto separate lines like so::
"blah blah"
"blah blah"
This will work with MSVC, which otherwise chokes on very long
strings.
* All function declarations and definitions must use full
prototypes (i.e. specify the types of all arguments).
* No compiler warnings with major compilers (gcc, VC++, a few others).
Note: NumPy still produces compiler warnings that need to be addressed.
Code lay-out
------------
* Use 4-space indents and no tabs at all.
* No line should be longer than 80 characters. If this and the
previous rule together don't give you enough room to code, your code is
too complicated, consider using subroutines.
* No line should end in whitespace. If you think you need
significant trailing whitespace, think again, somebody's editor might
delete it as a matter of routine.
* Function definition style: function name in column 1, outermost
curly braces in column 1, blank line after local variable declarations::
static int
extra_ivars(PyTypeObject *type, PyTypeObject *base)
{
int t_size = PyType_BASICSIZE(type);
int b_size = PyType_BASICSIZE(base);
assert(t_size >= b_size); /* type smaller than base! */
...
return 1;
}
If the transition to C++ goes through it is possible that this form will
be relaxed so that short class methods meant to be inlined can have the
return type on the same line as the function name. However, that is yet to
be determined.
* Code structure: one space between keywords like ``if``, ``for`` and
the following left parenthesis; no spaces inside the parenthesis; braces
around all ``if`` branches and no statements on the same line as the
``if``. They should be formatted as shown::
if (mro != NULL) {
one_line_statement;
}
else {
...
}
for (i = 0; i < n; i++) {
one_line_statement;
}
while (isstuff) {
dostuff;
}
do {
stuff;
} while (isstuff);
switch (kind) {
/* Boolean kind */
case 'b':
return 0;
/* Unsigned int kind */
case 'u':
...
/* Anything else */
default:
return 3;
}
* The return statement should *not* get redundant parentheses::
return Py_None; /* correct */
return(Py_None); /* incorrect */
* Function and macro call style: ``foo(a, b, c)``, no space before
the open paren, no spaces inside the parens, no spaces before
commas, one space after each comma.
* Always put spaces around the assignment, Boolean and comparison
operators. In expressions using a lot of operators, add spaces
around the outermost (lowest priority) operators.
* Breaking long lines: if you can, break after commas in the
outermost argument list. Always indent continuation lines
appropriately, e.g., ::
PyErr_SetString(PyExc_TypeError,
"Oh dear, you messed up.");
Here appropriately means at least two tabs. It isn't necessary to
line everything up with the opening parenthesis of the function
call.
* When you break a long expression at a binary operator, the
operator goes at the end of the previous line, e.g., ::
if (type > tp_dictoffset != 0 &&
base > tp_dictoffset == 0 &&
type > tp_dictoffset == b_size &&
(size_t)t_size == b_size + sizeof(PyObject *)) {
return 0;
}
Note that the terms in the multi-line Boolean expression are indented so
as to make the beginning of the code block clearly visible.
* Put blank lines around functions, structure definitions, and
major sections inside functions.
* Comments go before the code they describe. Multi-line comments should
be like so::
/*
* This would be a long
* explanatory comment.
*/
Trailing comments should be used sparingly. Instead of ::
if (yes) { // Success!
do ::
if (yes) {
// Success!
* All functions and global variables should be declared static
when they aren't needed outside the current compilation unit.
* Declare external functions and variables in a header file.
Naming conventions
------------------
* There has been no consistent prefix for NumPy public functions, but
they all begin with a prefix of some sort, followed by an underscore, and
are in camel case: ``PyArray_DescrAlignConverter``, ``NpyIter_GetIterNext``.
In the future the names should be of the form ``Npy*_PublicFunction``,
where the star is something appropriate.
* Public Macros should have a ``NPY_`` prefix and then use upper case,
for example, ``NPY_DOUBLE``.
* Private functions should be lower case with underscores, for example:
``array_real_get``. Single leading underscores should not be used, but
some current function names violate that rule due to historical accident.
Those functions should be renamed at some point.
Function documentation
----------------------
NumPy doesn't have a C function documentation standard at this time, but
needs one. Most numpy functions are not documented in the code and that
should change. One possibility is Doxygen with a plugin so that the same
NumPy style used for Python functions can also be used for documenting
C functions, see the files in doc/cdoc/.
===================
NumPy C Style Guide
===================
The NumPy C coding conventions are based on Python PEP-0007 by Guido van
Rossum with a few added strictures. There are many C coding conventions and
it must be emphasized that the primary goal of the NumPy conventions isn't
to choose the 'best', about which there is certain to be disagreement, but
to achieve uniformity. Because the NumPy conventions are very close to
those in PEP-0007, that PEP is used as a template below with the NumPy
additions and variations in the appropriate spots.
Introduction
------------
This document gives coding conventions for the C code comprising
the C implementation of NumPy. Note, rules are there to be broken.
Two good reasons to break a particular rule:
1. When applying the rule would make the code less readable, even
for someone who is used to reading code that follows the rules.
2. To be consistent with surrounding code that also breaks it
(maybe for historic reasons) -- although this is also an
opportunity to clean up someone else's mess.
C dialect
---------
* Use C99 (that is, the standard defined by ISO/IEC 9899:1999).
* Don't use GCC extensions (e.g. don't write multi-line strings
without trailing backslashes). Preferably break long strings
up onto separate lines like so::
"blah blah"
"blah blah"
This will work with MSVC, which otherwise chokes on very long
strings.
* All function declarations and definitions must use full
prototypes (i.e. specify the types of all arguments).
* No compiler warnings with major compilers (gcc, VC++, a few others).
Note: NumPy still produces compiler warnings that need to be addressed.
Code lay-out
------------
* Use 4-space indents and no tabs at all.
* No line should be longer than 80 characters. If this and the
previous rule together don't give you enough room to code, your code is
too complicated, consider using subroutines.
* No line should end in whitespace. If you think you need
significant trailing whitespace, think again, somebody's editor might
delete it as a matter of routine.
* Function definition style: function name in column 1, outermost
curly braces in column 1, blank line after local variable declarations::
static int
extra_ivars(PyTypeObject *type, PyTypeObject *base)
{
int t_size = PyType_BASICSIZE(type);
int b_size = PyType_BASICSIZE(base);
assert(t_size >= b_size); /* type smaller than base! */
...
return 1;
}
If the transition to C++ goes through it is possible that this form will
be relaxed so that short class methods meant to be inlined can have the
return type on the same line as the function name. However, that is yet to
be determined.
* Code structure: one space between keywords like ``if``, ``for`` and
the following left parenthesis; no spaces inside the parenthesis; braces
around all ``if`` branches and no statements on the same line as the
``if``. They should be formatted as shown::
if (mro != NULL) {
one_line_statement;
}
else {
...
}
for (i = 0; i < n; i++) {
one_line_statement;
}
while (isstuff) {
dostuff;
}
do {
stuff;
} while (isstuff);
switch (kind) {
/* Boolean kind */
case 'b':
return 0;
/* Unsigned int kind */
case 'u':
...
/* Anything else */
default:
return 3;
}
* The return statement should *not* get redundant parentheses::
return Py_None; /* correct */
return(Py_None); /* incorrect */
* Function and macro call style: ``foo(a, b, c)``, no space before
the open paren, no spaces inside the parens, no spaces before
commas, one space after each comma.
* Always put spaces around the assignment, Boolean and comparison
operators. In expressions using a lot of operators, add spaces
around the outermost (lowest priority) operators.
* Breaking long lines: if you can, break after commas in the
outermost argument list. Always indent continuation lines
appropriately, e.g., ::
PyErr_SetString(PyExc_TypeError,
"Oh dear, you messed up.");
Here appropriately means at least two tabs. It isn't necessary to
line everything up with the opening parenthesis of the function
call.
* When you break a long expression at a binary operator, the
operator goes at the end of the previous line, e.g., ::
if (type > tp_dictoffset != 0 &&
base > tp_dictoffset == 0 &&
type > tp_dictoffset == b_size &&
(size_t)t_size == b_size + sizeof(PyObject *)) {
return 0;
}
Note that the terms in the multi-line Boolean expression are indented so
as to make the beginning of the code block clearly visible.
* Put blank lines around functions, structure definitions, and
major sections inside functions.
* Comments go before the code they describe. Multi-line comments should
be like so::
/*
* This would be a long
* explanatory comment.
*/
Trailing comments should be used sparingly. Instead of ::
if (yes) { // Success!
do ::
if (yes) {
// Success!
* All functions and global variables should be declared static
when they aren't needed outside the current compilation unit.
* Declare external functions and variables in a header file.
Naming conventions
------------------
* There has been no consistent prefix for NumPy public functions, but
they all begin with a prefix of some sort, followed by an underscore, and
are in camel case: ``PyArray_DescrAlignConverter``, ``NpyIter_GetIterNext``.
In the future the names should be of the form ``Npy*_PublicFunction``,
where the star is something appropriate.
* Public Macros should have a ``NPY_`` prefix and then use upper case,
for example, ``NPY_DOUBLE``.
* Private functions should be lower case with underscores, for example:
``array_real_get``. Single leading underscores should not be used, but
some current function names violate that rule due to historical accident.
Those functions should be renamed at some point.
Function documentation
----------------------
NumPy doesn't have a C function documentation standard at this time, but
needs one. Most numpy functions are not documented in the code and that
should change. One possibility is Doxygen with a plugin so that the same
NumPy style used for Python functions can also be used for documenting
C functions, see the files in doc/cdoc/.

File diff suppressed because it is too large Load Diff

View File

@ -1,103 +1,103 @@
.. Here follows an example docstring for a C-function. Note that the
signature is given. This is done only for functions written is C,
since Python cannot find their signature by inspection. For all
other functions, start with the one line description.
multivariate_normal(mean, cov[, shape])
Draw samples from a multivariate normal distribution.
The multivariate normal, multinormal or Gaussian distribution is a
generalisation of the one-dimensional normal distribution to higher
dimensions.
Such a distribution is specified by its mean and covariance matrix,
which are analogous to the mean (average or "centre") and variance
(standard deviation squared or "width") of the one-dimensional normal
distribution.
Parameters
----------
mean : (N,) ndarray
Mean of the N-dimensional distribution.
cov : (N,N) ndarray
Covariance matrix of the distribution.
shape : tuple of ints, optional
Given a shape of, for example, (m,n,k), m*n*k samples are
generated, and packed in an m-by-n-by-k arrangement. Because each
sample is N-dimensional, the output shape is (m,n,k,N). If no
shape is specified, a single sample is returned.
Returns
-------
out : ndarray
The drawn samples, arranged according to `shape`. If the
shape given is (m,n,...), then the shape of `out` is
(m,n,...,N).
In other words, each entry ``out[i,j,...,:]`` is an N-dimensional
value drawn from the distribution.
See Also
--------
normal
scipy.stats.norm : Provides random variates, as well as probability density
function, cumulative density function, etc.
Notes
-----
The mean is a coordinate in N-dimensional space, which represents the
location where samples are most likely to be generated. This is
analogous to the peak of the bell curve for the one-dimensional or
univariate normal distribution.
Covariance indicates the level to which two variables vary together.
From the multivariate normal distribution, we draw N-dimensional
samples, :math:`X = [x_1, x_2, ... x_N]`. The covariance matrix
element :math:`C_ij` is the covariance of :math:`x_i` and :math:`x_j`.
The element :math:`C_ii` is the variance of :math:`x_i` (i.e. its
"spread").
Instead of specifying the full covariance matrix, popular
approximations include:
- Spherical covariance (`cov` is a multiple of the identity matrix)
- Diagonal covariance (`cov` has non-negative elements, and only on
the diagonal)
This geometrical property can be seen in two dimensions by plotting
generated data-points:
>>> mean = [0,0]
>>> cov = [[1,0],[0,100]] # diagonal covariance, points lie on x or y-axis
>>> x,y = np.random.multivariate_normal(mean,cov,5000).T
>>> import matplotlib.pyplot as plt
>>> plt.plot(x,y,'x'); plt.axis('equal'); pyplot.show()
Note that the covariance matrix must be non-negative definite.
References
----------
.. [1] A. Papoulis, "Probability, Random Variables, and Stochastic
Processes," 3rd ed., McGraw-Hill Companies, 1991
.. [2] R.O. Duda, P.E. Hart, and D.G. Stork, "Pattern Classification,"
2nd ed., Wiley, 2001.
Examples
--------
>>> mean = (1,2)
>>> cov = [[1,0],[1,0]]
>>> x = np.random.multivariate_normal(mean,cov,(3,3))
>>> x.shape
(3, 3, 2)
The following is probably true, given that 0.6 is roughly twice the
standard deviation:
>>> print list( (x[0,0,:] - mean) < 0.6 )
[True, True]
.. index:
:refguide: random:distributions
.. Here follows an example docstring for a C-function. Note that the
signature is given. This is done only for functions written is C,
since Python cannot find their signature by inspection. For all
other functions, start with the one line description.
multivariate_normal(mean, cov[, shape])
Draw samples from a multivariate normal distribution.
The multivariate normal, multinormal or Gaussian distribution is a
generalisation of the one-dimensional normal distribution to higher
dimensions.
Such a distribution is specified by its mean and covariance matrix,
which are analogous to the mean (average or "centre") and variance
(standard deviation squared or "width") of the one-dimensional normal
distribution.
Parameters
----------
mean : (N,) ndarray
Mean of the N-dimensional distribution.
cov : (N,N) ndarray
Covariance matrix of the distribution.
shape : tuple of ints, optional
Given a shape of, for example, (m,n,k), m*n*k samples are
generated, and packed in an m-by-n-by-k arrangement. Because each
sample is N-dimensional, the output shape is (m,n,k,N). If no
shape is specified, a single sample is returned.
Returns
-------
out : ndarray
The drawn samples, arranged according to `shape`. If the
shape given is (m,n,...), then the shape of `out` is
(m,n,...,N).
In other words, each entry ``out[i,j,...,:]`` is an N-dimensional
value drawn from the distribution.
See Also
--------
normal
scipy.stats.norm : Provides random variates, as well as probability density
function, cumulative density function, etc.
Notes
-----
The mean is a coordinate in N-dimensional space, which represents the
location where samples are most likely to be generated. This is
analogous to the peak of the bell curve for the one-dimensional or
univariate normal distribution.
Covariance indicates the level to which two variables vary together.
From the multivariate normal distribution, we draw N-dimensional
samples, :math:`X = [x_1, x_2, ... x_N]`. The covariance matrix
element :math:`C_ij` is the covariance of :math:`x_i` and :math:`x_j`.
The element :math:`C_ii` is the variance of :math:`x_i` (i.e. its
"spread").
Instead of specifying the full covariance matrix, popular
approximations include:
- Spherical covariance (`cov` is a multiple of the identity matrix)
- Diagonal covariance (`cov` has non-negative elements, and only on
the diagonal)
This geometrical property can be seen in two dimensions by plotting
generated data-points:
>>> mean = [0,0]
>>> cov = [[1,0],[0,100]] # diagonal covariance, points lie on x or y-axis
>>> x,y = np.random.multivariate_normal(mean,cov,5000).T
>>> import matplotlib.pyplot as plt
>>> plt.plot(x,y,'x'); plt.axis('equal'); pyplot.show()
Note that the covariance matrix must be non-negative definite.
References
----------
.. [1] A. Papoulis, "Probability, Random Variables, and Stochastic
Processes," 3rd ed., McGraw-Hill Companies, 1991
.. [2] R.O. Duda, P.E. Hart, and D.G. Stork, "Pattern Classification,"
2nd ed., Wiley, 2001.
Examples
--------
>>> mean = (1,2)
>>> cov = [[1,0],[1,0]]
>>> x = np.random.multivariate_normal(mean,cov,(3,3))
>>> x.shape
(3, 3, 2)
The following is probably true, given that 0.6 is roughly twice the
standard deviation:
>>> print list( (x[0,0,:] - mean) < 0.6 )
[True, True]
.. index:
:refguide: random:distributions

View File

@ -1 +1 @@
This document has been replaced, see https://numpydoc.readthedocs.io/en/latest/format.html#docstring-standard
This document has been replaced, see https://numpydoc.readthedocs.io/en/latest/format.html#docstring-standard

View File

@ -1,491 +1,491 @@
This file gives an overview of what is necessary to build binary releases for
NumPy.
Current build and release info
==============================
The current info on building and releasing NumPy and SciPy is scattered in
several places. It should be summarized in one place, updated, and where
necessary described in more detail. The sections below list all places where
useful info can be found.
Source tree
-----------
- INSTALL.rst.txt
- release.sh
- pavement.py
NumPy Docs
----------
- https://github.com/numpy/numpy/blob/master/doc/HOWTO_RELEASE.rst.txt
- http://projects.scipy.org/numpy/wiki/MicrosoftToolchainSupport (dead link)
SciPy.org wiki
--------------
- https://www.scipy.org/Installing_SciPy and links on that page.
- http://new.scipy.org/building/windows.html (dead link)
Doc wiki
--------
- http://docs.scipy.org/numpy/docs/numpy-docs/user/install.rst/ (dead link)
Release Scripts
---------------
- https://github.com/numpy/numpy-vendor
Supported platforms and versions
================================
`NEP 29`_ outlines which Python versions are supported; For the first half of
2020, this will be Python >= 3.6. We test NumPy against all these versions
every time we merge code to master. Binary installers may be available for a
subset of these versions (see below).
OS X
----
OS X versions >= 10.9 are supported, for Python version support see `NEP 29`_.
We build binary wheels for OSX that are compatible with Python.org Python,
system Python, homebrew and macports - see this `OSX wheel building summary
<https://github.com/MacPython/wiki/wiki/Spinning-wheels>`_ for details.
Windows
-------
We build 32- and 64-bit wheels on Windows. Windows 7, 8 and 10 are supported.
We build NumPy using the `mingw-w64 toolchain`_ on Appveyor.
Linux
-----
We build and ship `manylinux1 <https://www.python.org/dev/peps/pep-0513>`_
wheels for NumPy. Many Linux distributions include their own binary builds
of NumPy.
BSD / Solaris
-------------
No binaries are provided, but successful builds on Solaris and BSD have been
reported.
Tool chain
==========
We build all our wheels on cloud infrastructure - so this list of compilers is
for information and debugging builds locally. See the ``.travis.yml`` and
``appveyor.yml`` scripts in the `numpy wheels`_ repo for the definitive source
of the build recipes. Packages that are available using pip are noted.
Compilers
---------
The same gcc version is used as the one with which Python itself is built on
each platform. At the moment this means:
- OS X builds on travis currently use `clang`. It appears that binary wheels
for OSX >= 10.6 can be safely built from the travis-ci OSX 10.9 VMs
when building against the Python from the Python.org installers;
- Windows builds use the `mingw-w64 toolchain`_;
- Manylinux1 wheels use the gcc provided on the Manylinux docker images.
You will need Cython for building the binaries. Cython compiles the ``.pyx``
files in the NumPy distribution to ``.c`` files.
.. _mingw-w64 toolchain : https://mingwpy.github.io
.. _NEP 29 : https://numpy.org/neps/nep-0029-deprecation_policy.html
OpenBLAS
------------
All the wheels link to a version of OpenBLAS_ supplied via the openblas-libs_ repo.
The shared object (or DLL) is shipped with in the wheel, renamed to prevent name
collisions with other OpenBLAS shared objects that may exist in the filesystem.
.. _OpenBLAS: https://github.com/xianyi/OpenBLAS
.. _openblas-libs: https://github.com/MacPython/openblas-libs
Building source archives and wheels
-----------------------------------
You will need write permission for numpy-wheels in order to trigger wheel
builds.
- Python(s) from `python.org <https://python.org>`_ or linux distro.
- cython (pip)
- virtualenv (pip)
- Paver (pip)
- pandoc `pandoc.org <https://www.pandoc.org>`_ or linux distro.
- numpy-wheels `<https://github.com/MacPython/numpy-wheels>`_ (clone)
Building docs
-------------
Building the documents requires a number of latex ``.sty`` files. Install them
all to avoid aggravation.
- Sphinx (pip)
- numpydoc (pip)
- Matplotlib
- Texlive (or MikTeX on Windows)
Uploading to PyPI
-----------------
- terryfy `<https://github.com/MacPython/terryfy>`_ (clone).
- beautifulsoup4 (pip)
- delocate (pip)
- auditwheel (pip)
- twine (pip)
Generating author/pr lists
--------------------------
You will need a personal access token
`<https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/>`_
so that scripts can access the github NumPy repository.
- gitpython (pip)
- pygithub (pip)
Virtualenv
----------
Virtualenv is a very useful tool to keep several versions of packages around.
It is also used in the Paver script to build the docs.
What is released
================
Wheels
------
We currently support Python 3.6-3.8 on Windows, OSX, and Linux
* Windows: 32-bit and 64-bit wheels built using Appveyor;
* OSX: x64_86 OSX wheels built using travis-ci;
* Linux: 32-bit and 64-bit Manylinux1 wheels built using travis-ci.
See the `numpy wheels`_ building repository for more detail.
.. _numpy wheels : https://github.com/MacPython/numpy-wheels
Other
-----
- Release Notes
- Changelog
Source distribution
-------------------
We build source releases in both .zip and .tar.gz formats.
Release process
===============
Agree on a release schedule
---------------------------
A typical release schedule is one beta, two release candidates and a final
release. It's best to discuss the timing on the mailing list first, in order
for people to get their commits in on time, get doc wiki edits merged, etc.
After a date is set, create a new maintenance/x.y.z branch, add new empty
release notes for the next version in the master branch and update the Trac
Milestones.
Make sure current branch builds a package correctly
---------------------------------------------------
::
git clean -fxd
python setup.py bdist
python setup.py sdist
To actually build the binaries after everything is set up correctly, the
release.sh script can be used. For details of the build process itself, it is
best to read the pavement.py script.
.. note:: The following steps are repeated for the beta(s), release
candidates(s) and the final release.
Check deprecations
------------------
Before the release branch is made, it should be checked that all deprecated
code that should be removed is actually removed, and all new deprecations say
in the docstring or deprecation warning at what version the code will be
removed.
Check the C API version number
------------------------------
The C API version needs to be tracked in three places
- numpy/core/setup_common.py
- numpy/core/code_generators/cversions.txt
- numpy/core/include/numpy/numpyconfig.h
There are three steps to the process.
1. If the API has changed, increment the C_API_VERSION in setup_common.py. The
API is unchanged only if any code compiled against the current API will be
backward compatible with the last released NumPy version. Any changes to
C structures or additions to the public interface will make the new API
not backward compatible.
2. If the C_API_VERSION in the first step has changed, or if the hash of
the API has changed, the cversions.txt file needs to be updated. To check
the hash, run the script numpy/core/cversions.py and note the API hash that
is printed. If that hash does not match the last hash in
numpy/core/code_generators/cversions.txt the hash has changed. Using both
the appropriate C_API_VERSION and hash, add a new entry to cversions.txt.
If the API version was not changed, but the hash differs, you will need to
comment out the previous entry for that API version. For instance, in NumPy
1.9 annotations were added, which changed the hash, but the API was the
same as in 1.8. The hash serves as a check for API changes, but it is not
definitive.
If steps 1 and 2 are done correctly, compiling the release should not give
a warning "API mismatch detect at the beginning of the build".
3. The numpy/core/include/numpy/numpyconfig.h will need a new
NPY_X_Y_API_VERSION macro, where X and Y are the major and minor version
numbers of the release. The value given to that macro only needs to be
increased from the previous version if some of the functions or macros in
the include files were deprecated.
The C ABI version number in numpy/core/setup_common.py should only be
updated for a major release.
Check the release notes
-----------------------
Use `towncrier`_ to build the release note and
commit the changes. This will remove all the fragments from
``doc/release/upcoming_changes`` and add ``doc/release/<version>-note.rst``.
Note that currently towncrier must be installed from its master branch as the
last release (19.2.0) is outdated.
towncrier --version "<version>"
git commit -m"Create release note"
Check that the release notes are up-to-date.
Update the release notes with a Highlights section. Mention some of the
following:
- major new features
- deprecated and removed features
- supported Python versions
- for SciPy, supported NumPy version(s)
- outlook for the near future
.. _towncrier: https://github.com/hawkowl/towncrier
Update the release status and create a release "tag"
----------------------------------------------------
Identify the commit hash of the release, e.g. 1b2e1d63ff.
::
git co 1b2e1d63ff # gives warning about detached head
First, change/check the following variables in ``pavement.py`` depending on the
release version::
RELEASE_NOTES = 'doc/release/1.7.0-notes.rst'
LOG_START = 'v1.6.0'
LOG_END = 'maintenance/1.7.x'
Do any other changes. When you are ready to release, do the following
changes::
diff --git a/setup.py b/setup.py
index b1f53e3..8b36dbe 100755
--- a/setup.py
+++ b/setup.py
@@ -57,7 +57,7 @@ PLATFORMS = ["Windows", "Linux", "Solaris", "Mac OS-
MAJOR = 1
MINOR = 7
MICRO = 0
-ISRELEASED = False
+ISRELEASED = True
VERSION = '%d.%d.%drc1' % (MAJOR, MINOR, MICRO)
# Return the git revision as a string
And make sure the ``VERSION`` variable is set properly.
Now you can make the release commit and tag. We recommend you don't push
the commit or tag immediately, just in case you need to do more cleanup. We
prefer to defer the push of the tag until we're confident this is the exact
form of the released code (see: :ref:`push-tag-and-commit`):
git commit -s -m "REL: Release." setup.py
git tag -s <version>
The ``-s`` flag makes a PGP (usually GPG) signed tag. Please do sign the
release tags.
The release tag should have the release number in the annotation (tag
message). Unfortunately, the name of a tag can be changed without breaking the
signature, the contents of the message cannot.
See: https://github.com/scipy/scipy/issues/4919 for a discussion of signing
release tags, and https://keyring.debian.org/creating-key.html for instructions
on creating a GPG key if you do not have one.
To make your key more readily identifiable as you, consider sending your key
to public keyservers, with a command such as::
gpg --send-keys <yourkeyid>
Update the version of the master branch
---------------------------------------
Increment the release number in setup.py. Release candidates should have "rc1"
(or "rc2", "rcN") appended to the X.Y.Z format.
Also create a new version hash in cversions.txt and a corresponding version
define NPY_x_y_API_VERSION in numpyconfig.h
Trigger the wheel builds
------------------------
See the `MacPython/numpy wheels` repository.
In that repository edit the files:
- ``azure/posix.yml``
- ``azure/windows.yml``.
In both cases, set the ``BUILD_COMMIT`` variable to the current release tag -
e.g. ``v1.19.0``::
$ gvim azure/posix.yml azure/windows.yml
$ git commit -a
$ git push upstream HEAD
Make sure that the release tag has been pushed.
Trigger a build by pushing a commit of your edits to the repository. Note that
you can do this on a branch, but it must be pushed upstream to the
``MacPython/numpy-wheels`` repository to trigger uploads since only
that repo has the appropriate tokens to allow uploads.
The wheels, once built, appear at https://anaconda.org/multibuild-wheels-staging/numpy
Make the release
----------------
Build the changelog and notes for upload with::
paver write_release
Build and archive documentation
-------------------------------
Do::
cd doc/
make dist
to check that the documentation is in a buildable state. Then, after tagging,
create an archive of the documentation in the numpy/doc repo::
# This checks out github.com/numpy/doc and adds (``git add``) the
# documentation to the checked out repo.
make merge-doc
# Now edit the ``index.html`` file in the repo to reflect the new content,
# and commit the changes
git -C build/merge commit -am "Add documentation for <version>"
# Push to numpy/doc repo
git -C build/merge push
Update PyPI
-----------
The wheels and source should be uploaded to PyPI.
You should upload the wheels first, and the source formats last, to make sure
that pip users don't accidentally get a source install when they were
expecting a binary wheel.
You can do this automatically using the ``wheel-uploader`` script from
https://github.com/MacPython/terryfy. Here is the recommended incantation for
downloading all the Windows, Manylinux, OSX wheels and uploading to PyPI. ::
NPY_WHLS=~/wheelhouse # local directory to cache wheel downloads
CDN_URL=https://anaconda.org/multibuild-wheels-staging/numpy/files
wheel-uploader -u $CDN_URL -w $NPY_WHLS -v -s -t win numpy 1.11.1rc1
wheel-uploader -u $CDN_URL -w warehouse -v -s -t macosx numpy 1.11.1rc1
wheel-uploader -u $CDN_URL -w warehouse -v -s -t manylinux1 numpy 1.11.1rc1
The ``-v`` flag gives verbose feedback, ``-s`` causes the script to sign the
wheels with your GPG key before upload. Don't forget to upload the wheels
before the source tarball, so there is no period for which people switch from
an expected binary install to a source install from PyPI.
There are two ways to update the source release on PyPI, the first one is::
$ git clean -fxd # to be safe
$ python setup.py sdist --formats=gztar,zip # to check
# python setup.py sdist --formats=gztar,zip upload --sign
This will ask for your key PGP passphrase, in order to sign the built source
packages.
The second way is to upload the PKG_INFO file inside the sdist dir in the
web interface of PyPI. The source tarball can also be uploaded through this
interface.
.. _push-tag-and-commit:
Push the release tag and commit
-------------------------------
Finally, now you are confident this tag correctly defines the source code that
you released you can push the tag and release commit up to github::
git push # Push release commit
git push upstream <version> # Push tag named <version>
where ``upstream`` points to the main https://github.com/numpy/numpy.git
repository.
Update scipy.org
----------------
A release announcement with a link to the download site should be placed in the
sidebar of the front page of scipy.org.
The scipy.org should be a PR at https://github.com/scipy/scipy.org. The file
that needs modification is ``www/index.rst``. Search for ``News``.
Announce to the lists
---------------------
The release should be announced on the mailing lists of
NumPy and SciPy, to python-announce, and possibly also those of
Matplotlib, IPython and/or Pygame.
During the beta/RC phase, an explicit request for testing the binaries with
several other libraries (SciPy/Matplotlib/Pygame) should be posted on the
mailing list.
Announce to Linux Weekly News
-----------------------------
Email the editor of LWN to let them know of the release. Directions at:
https://lwn.net/op/FAQ.lwn#contact
After the final release
-----------------------
After the final release is announced, a few administrative tasks are left to be
done:
- Forward port changes in the release branch to release notes and release
scripts, if any, to master branch.
- Update the Milestones in Trac.
This file gives an overview of what is necessary to build binary releases for
NumPy.
Current build and release info
==============================
The current info on building and releasing NumPy and SciPy is scattered in
several places. It should be summarized in one place, updated, and where
necessary described in more detail. The sections below list all places where
useful info can be found.
Source tree
-----------
- INSTALL.rst.txt
- release.sh
- pavement.py
NumPy Docs
----------
- https://github.com/numpy/numpy/blob/master/doc/HOWTO_RELEASE.rst.txt
- http://projects.scipy.org/numpy/wiki/MicrosoftToolchainSupport (dead link)
SciPy.org wiki
--------------
- https://www.scipy.org/Installing_SciPy and links on that page.
- http://new.scipy.org/building/windows.html (dead link)
Doc wiki
--------
- http://docs.scipy.org/numpy/docs/numpy-docs/user/install.rst/ (dead link)
Release Scripts
---------------
- https://github.com/numpy/numpy-vendor
Supported platforms and versions
================================
`NEP 29`_ outlines which Python versions are supported; For the first half of
2020, this will be Python >= 3.6. We test NumPy against all these versions
every time we merge code to master. Binary installers may be available for a
subset of these versions (see below).
OS X
----
OS X versions >= 10.9 are supported, for Python version support see `NEP 29`_.
We build binary wheels for OSX that are compatible with Python.org Python,
system Python, homebrew and macports - see this `OSX wheel building summary
<https://github.com/MacPython/wiki/wiki/Spinning-wheels>`_ for details.
Windows
-------
We build 32- and 64-bit wheels on Windows. Windows 7, 8 and 10 are supported.
We build NumPy using the `mingw-w64 toolchain`_ on Appveyor.
Linux
-----
We build and ship `manylinux1 <https://www.python.org/dev/peps/pep-0513>`_
wheels for NumPy. Many Linux distributions include their own binary builds
of NumPy.
BSD / Solaris
-------------
No binaries are provided, but successful builds on Solaris and BSD have been
reported.
Tool chain
==========
We build all our wheels on cloud infrastructure - so this list of compilers is
for information and debugging builds locally. See the ``.travis.yml`` and
``appveyor.yml`` scripts in the `numpy wheels`_ repo for the definitive source
of the build recipes. Packages that are available using pip are noted.
Compilers
---------
The same gcc version is used as the one with which Python itself is built on
each platform. At the moment this means:
- OS X builds on travis currently use `clang`. It appears that binary wheels
for OSX >= 10.6 can be safely built from the travis-ci OSX 10.9 VMs
when building against the Python from the Python.org installers;
- Windows builds use the `mingw-w64 toolchain`_;
- Manylinux1 wheels use the gcc provided on the Manylinux docker images.
You will need Cython for building the binaries. Cython compiles the ``.pyx``
files in the NumPy distribution to ``.c`` files.
.. _mingw-w64 toolchain : https://mingwpy.github.io
.. _NEP 29 : https://numpy.org/neps/nep-0029-deprecation_policy.html
OpenBLAS
------------
All the wheels link to a version of OpenBLAS_ supplied via the openblas-libs_ repo.
The shared object (or DLL) is shipped with in the wheel, renamed to prevent name
collisions with other OpenBLAS shared objects that may exist in the filesystem.
.. _OpenBLAS: https://github.com/xianyi/OpenBLAS
.. _openblas-libs: https://github.com/MacPython/openblas-libs
Building source archives and wheels
-----------------------------------
You will need write permission for numpy-wheels in order to trigger wheel
builds.
- Python(s) from `python.org <https://python.org>`_ or linux distro.
- cython (pip)
- virtualenv (pip)
- Paver (pip)
- pandoc `pandoc.org <https://www.pandoc.org>`_ or linux distro.
- numpy-wheels `<https://github.com/MacPython/numpy-wheels>`_ (clone)
Building docs
-------------
Building the documents requires a number of latex ``.sty`` files. Install them
all to avoid aggravation.
- Sphinx (pip)
- numpydoc (pip)
- Matplotlib
- Texlive (or MikTeX on Windows)
Uploading to PyPI
-----------------
- terryfy `<https://github.com/MacPython/terryfy>`_ (clone).
- beautifulsoup4 (pip)
- delocate (pip)
- auditwheel (pip)
- twine (pip)
Generating author/pr lists
--------------------------
You will need a personal access token
`<https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/>`_
so that scripts can access the github NumPy repository.
- gitpython (pip)
- pygithub (pip)
Virtualenv
----------
Virtualenv is a very useful tool to keep several versions of packages around.
It is also used in the Paver script to build the docs.
What is released
================
Wheels
------
We currently support Python 3.6-3.8 on Windows, OSX, and Linux
* Windows: 32-bit and 64-bit wheels built using Appveyor;
* OSX: x64_86 OSX wheels built using travis-ci;
* Linux: 32-bit and 64-bit Manylinux1 wheels built using travis-ci.
See the `numpy wheels`_ building repository for more detail.
.. _numpy wheels : https://github.com/MacPython/numpy-wheels
Other
-----
- Release Notes
- Changelog
Source distribution
-------------------
We build source releases in both .zip and .tar.gz formats.
Release process
===============
Agree on a release schedule
---------------------------
A typical release schedule is one beta, two release candidates and a final
release. It's best to discuss the timing on the mailing list first, in order
for people to get their commits in on time, get doc wiki edits merged, etc.
After a date is set, create a new maintenance/x.y.z branch, add new empty
release notes for the next version in the master branch and update the Trac
Milestones.
Make sure current branch builds a package correctly
---------------------------------------------------
::
git clean -fxd
python setup.py bdist
python setup.py sdist
To actually build the binaries after everything is set up correctly, the
release.sh script can be used. For details of the build process itself, it is
best to read the pavement.py script.
.. note:: The following steps are repeated for the beta(s), release
candidates(s) and the final release.
Check deprecations
------------------
Before the release branch is made, it should be checked that all deprecated
code that should be removed is actually removed, and all new deprecations say
in the docstring or deprecation warning at what version the code will be
removed.
Check the C API version number
------------------------------
The C API version needs to be tracked in three places
- numpy/core/setup_common.py
- numpy/core/code_generators/cversions.txt
- numpy/core/include/numpy/numpyconfig.h
There are three steps to the process.
1. If the API has changed, increment the C_API_VERSION in setup_common.py. The
API is unchanged only if any code compiled against the current API will be
backward compatible with the last released NumPy version. Any changes to
C structures or additions to the public interface will make the new API
not backward compatible.
2. If the C_API_VERSION in the first step has changed, or if the hash of
the API has changed, the cversions.txt file needs to be updated. To check
the hash, run the script numpy/core/cversions.py and note the API hash that
is printed. If that hash does not match the last hash in
numpy/core/code_generators/cversions.txt the hash has changed. Using both
the appropriate C_API_VERSION and hash, add a new entry to cversions.txt.
If the API version was not changed, but the hash differs, you will need to
comment out the previous entry for that API version. For instance, in NumPy
1.9 annotations were added, which changed the hash, but the API was the
same as in 1.8. The hash serves as a check for API changes, but it is not
definitive.
If steps 1 and 2 are done correctly, compiling the release should not give
a warning "API mismatch detect at the beginning of the build".
3. The numpy/core/include/numpy/numpyconfig.h will need a new
NPY_X_Y_API_VERSION macro, where X and Y are the major and minor version
numbers of the release. The value given to that macro only needs to be
increased from the previous version if some of the functions or macros in
the include files were deprecated.
The C ABI version number in numpy/core/setup_common.py should only be
updated for a major release.
Check the release notes
-----------------------
Use `towncrier`_ to build the release note and
commit the changes. This will remove all the fragments from
``doc/release/upcoming_changes`` and add ``doc/release/<version>-note.rst``.
Note that currently towncrier must be installed from its master branch as the
last release (19.2.0) is outdated.
towncrier --version "<version>"
git commit -m"Create release note"
Check that the release notes are up-to-date.
Update the release notes with a Highlights section. Mention some of the
following:
- major new features
- deprecated and removed features
- supported Python versions
- for SciPy, supported NumPy version(s)
- outlook for the near future
.. _towncrier: https://github.com/hawkowl/towncrier
Update the release status and create a release "tag"
----------------------------------------------------
Identify the commit hash of the release, e.g. 1b2e1d63ff.
::
git co 1b2e1d63ff # gives warning about detached head
First, change/check the following variables in ``pavement.py`` depending on the
release version::
RELEASE_NOTES = 'doc/release/1.7.0-notes.rst'
LOG_START = 'v1.6.0'
LOG_END = 'maintenance/1.7.x'
Do any other changes. When you are ready to release, do the following
changes::
diff --git a/setup.py b/setup.py
index b1f53e3..8b36dbe 100755
--- a/setup.py
+++ b/setup.py
@@ -57,7 +57,7 @@ PLATFORMS = ["Windows", "Linux", "Solaris", "Mac OS-
MAJOR = 1
MINOR = 7
MICRO = 0
-ISRELEASED = False
+ISRELEASED = True
VERSION = '%d.%d.%drc1' % (MAJOR, MINOR, MICRO)
# Return the git revision as a string
And make sure the ``VERSION`` variable is set properly.
Now you can make the release commit and tag. We recommend you don't push
the commit or tag immediately, just in case you need to do more cleanup. We
prefer to defer the push of the tag until we're confident this is the exact
form of the released code (see: :ref:`push-tag-and-commit`):
git commit -s -m "REL: Release." setup.py
git tag -s <version>
The ``-s`` flag makes a PGP (usually GPG) signed tag. Please do sign the
release tags.
The release tag should have the release number in the annotation (tag
message). Unfortunately, the name of a tag can be changed without breaking the
signature, the contents of the message cannot.
See: https://github.com/scipy/scipy/issues/4919 for a discussion of signing
release tags, and https://keyring.debian.org/creating-key.html for instructions
on creating a GPG key if you do not have one.
To make your key more readily identifiable as you, consider sending your key
to public keyservers, with a command such as::
gpg --send-keys <yourkeyid>
Update the version of the master branch
---------------------------------------
Increment the release number in setup.py. Release candidates should have "rc1"
(or "rc2", "rcN") appended to the X.Y.Z format.
Also create a new version hash in cversions.txt and a corresponding version
define NPY_x_y_API_VERSION in numpyconfig.h
Trigger the wheel builds
------------------------
See the `MacPython/numpy wheels` repository.
In that repository edit the files:
- ``azure/posix.yml``
- ``azure/windows.yml``.
In both cases, set the ``BUILD_COMMIT`` variable to the current release tag -
e.g. ``v1.19.0``::
$ gvim azure/posix.yml azure/windows.yml
$ git commit -a
$ git push upstream HEAD
Make sure that the release tag has been pushed.
Trigger a build by pushing a commit of your edits to the repository. Note that
you can do this on a branch, but it must be pushed upstream to the
``MacPython/numpy-wheels`` repository to trigger uploads since only
that repo has the appropriate tokens to allow uploads.
The wheels, once built, appear at https://anaconda.org/multibuild-wheels-staging/numpy
Make the release
----------------
Build the changelog and notes for upload with::
paver write_release
Build and archive documentation
-------------------------------
Do::
cd doc/
make dist
to check that the documentation is in a buildable state. Then, after tagging,
create an archive of the documentation in the numpy/doc repo::
# This checks out github.com/numpy/doc and adds (``git add``) the
# documentation to the checked out repo.
make merge-doc
# Now edit the ``index.html`` file in the repo to reflect the new content,
# and commit the changes
git -C build/merge commit -am "Add documentation for <version>"
# Push to numpy/doc repo
git -C build/merge push
Update PyPI
-----------
The wheels and source should be uploaded to PyPI.
You should upload the wheels first, and the source formats last, to make sure
that pip users don't accidentally get a source install when they were
expecting a binary wheel.
You can do this automatically using the ``wheel-uploader`` script from
https://github.com/MacPython/terryfy. Here is the recommended incantation for
downloading all the Windows, Manylinux, OSX wheels and uploading to PyPI. ::
NPY_WHLS=~/wheelhouse # local directory to cache wheel downloads
CDN_URL=https://anaconda.org/multibuild-wheels-staging/numpy/files
wheel-uploader -u $CDN_URL -w $NPY_WHLS -v -s -t win numpy 1.11.1rc1
wheel-uploader -u $CDN_URL -w warehouse -v -s -t macosx numpy 1.11.1rc1
wheel-uploader -u $CDN_URL -w warehouse -v -s -t manylinux1 numpy 1.11.1rc1
The ``-v`` flag gives verbose feedback, ``-s`` causes the script to sign the
wheels with your GPG key before upload. Don't forget to upload the wheels
before the source tarball, so there is no period for which people switch from
an expected binary install to a source install from PyPI.
There are two ways to update the source release on PyPI, the first one is::
$ git clean -fxd # to be safe
$ python setup.py sdist --formats=gztar,zip # to check
# python setup.py sdist --formats=gztar,zip upload --sign
This will ask for your key PGP passphrase, in order to sign the built source
packages.
The second way is to upload the PKG_INFO file inside the sdist dir in the
web interface of PyPI. The source tarball can also be uploaded through this
interface.
.. _push-tag-and-commit:
Push the release tag and commit
-------------------------------
Finally, now you are confident this tag correctly defines the source code that
you released you can push the tag and release commit up to github::
git push # Push release commit
git push upstream <version> # Push tag named <version>
where ``upstream`` points to the main https://github.com/numpy/numpy.git
repository.
Update scipy.org
----------------
A release announcement with a link to the download site should be placed in the
sidebar of the front page of scipy.org.
The scipy.org should be a PR at https://github.com/scipy/scipy.org. The file
that needs modification is ``www/index.rst``. Search for ``News``.
Announce to the lists
---------------------
The release should be announced on the mailing lists of
NumPy and SciPy, to python-announce, and possibly also those of
Matplotlib, IPython and/or Pygame.
During the beta/RC phase, an explicit request for testing the binaries with
several other libraries (SciPy/Matplotlib/Pygame) should be posted on the
mailing list.
Announce to Linux Weekly News
-----------------------------
Email the editor of LWN to let them know of the release. Directions at:
https://lwn.net/op/FAQ.lwn#contact
After the final release
-----------------------
After the final release is announced, a few administrative tasks are left to be
done:
- Forward port changes in the release branch to release notes and release
scripts, if any, to master branch.
- Update the Milestones in Trac.

View File

@ -1,255 +1,255 @@
# Makefile for Sphinx documentation
#
# PYVER needs to be major.minor, just "3" doesn't work - it will result in
# issues with the amendments to PYTHONPATH and install paths (see DIST_VARS).
# Use explicit "version_info" indexing since make cannot handle colon characters, and
# evaluate it now to allow easier debugging when printing the variable
PYVER:=$(shell python3 -c 'from sys import version_info as v; print("{0}.{1}".format(v[0], v[1]))')
PYTHON = python$(PYVER)
# You can set these variables from the command line.
SPHINXOPTS ?=
SPHINXBUILD ?= LANG=C sphinx-build
PAPER ?=
# For merging a documentation archive into a git checkout of numpy/doc
# Turn a tag like v1.18.0 into 1.18
# Use sed -n -e 's/patttern/match/p' to return a blank value if no match
TAG ?= $(shell git describe --tag | sed -n -e's,v\([1-9]\.[0-9]*\)\.[0-9].*,\1,p')
FILES=
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -WT --keep-going -d build/doctrees $(PAPEROPT_$(PAPER)) \
$(SPHINXOPTS) source
.PHONY: help clean html web pickle htmlhelp latex changes linkcheck \
dist dist-build gitwash-update version-check html-build latex-build \
merge-doc
#------------------------------------------------------------------------------
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " html-scipyorg to make standalone HTML files with scipy.org theming"
@echo " pickle to make pickle files (usable by e.g. sphinx-web)"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " changes to make an overview over all changed/added/deprecated items"
@echo " linkcheck to check all external links for integrity"
@echo " dist PYVER=... to make a distribution-ready tree"
@echo " gitwash-update GITWASH=path/to/gitwash update gitwash developer docs"
@echo " upload USERNAME=... RELEASE=... to upload built docs to docs.scipy.org"
@echo " merge-doc TAG=... to clone numpy/doc and archive documentation into it"
clean:
-rm -rf build/*
find . -name generated -type d -prune -exec rm -rf "{}" ";"
gitwash-update:
rm -rf source/dev/gitwash
install -d source/dev/gitwash
python $(GITWASH)/gitwash_dumper.py source/dev NumPy \
--repo-name=numpy \
--github-user=numpy
cat source/dev/gitwash_links.txt >> source/dev/gitwash/git_links.inc
#------------------------------------------------------------------------------
# Automated generation of all documents
#------------------------------------------------------------------------------
# Build the current numpy version, and extract docs from it.
# We have to be careful of some issues:
#
# - Everything must be done using the same Python version
# - We must use eggs (otherwise they might override PYTHONPATH on import).
# - Different versions of easy_install install to different directories (!)
#
INSTALL_DIR = $(CURDIR)/build/inst-dist
INSTALL_PPH = $(INSTALL_DIR)/lib/python$(PYVER)/site-packages:$(INSTALL_DIR)/local/lib/python$(PYVER)/site-packages:$(INSTALL_DIR)/lib/python$(PYVER)/dist-packages:$(INSTALL_DIR)/local/lib/python$(PYVER)/dist-packages
UPLOAD_DIR=/srv/docs_scipy_org/doc/numpy-$(RELEASE)
DIST_VARS=SPHINXBUILD="LANG=C PYTHONPATH=$(INSTALL_PPH) python$(PYVER) `which sphinx-build`" PYTHON="PYTHONPATH=$(INSTALL_PPH) python$(PYVER)"
NUMPYVER:=$(shell $(PYTHON) -c "import numpy; print(numpy.version.git_revision[:10])" 2>/dev/null)
GITVER ?= $(shell cd ..; $(PYTHON) -c "from setup import git_version; \
print(git_version()[:10])")
version-check:
ifeq "$(GITVER)" "Unknown"
# @echo sdist build with unlabeled sources
else ifeq ("", "$(NUMPYVER)")
@echo numpy not found, cannot build documentation without successful \"import numpy\"
@exit 1
else ifneq ($(NUMPYVER),$(GITVER))
@echo installed numpy $(NUMPYVER) != current repo git version \'$(GITVER)\'
@echo use '"make dist"' or '"GITVER=$(NUMPYVER) make $(MAKECMDGOALS) ..."'
@exit 1
else
# for testing
# @echo installed numpy $(NUMPYVER) matches git version $(GITVER); exit 1
endif
dist: build/dist.tar.gz
build/dist.tar.gz:
make $(DIST_VARS) real-dist
real-dist: dist-build html-build
test -d build/latex || make latex-build
make -C build/latex all-pdf
-rm -rf build/dist
cp -r build/html build/dist
cd build/html && zip -9r ../dist/numpy-html.zip .
cp build/latex/numpy-ref.pdf build/dist
cp build/latex/numpy-user.pdf build/dist
cd build/dist && tar czf ../dist.tar.gz *
chmod ug=rwX,o=rX -R build/dist
find build/dist -type d -print0 | xargs -0r chmod g+s
dist-build:
rm -f ../dist/*.egg
cd .. && $(PYTHON) setup.py bdist_egg
install -d $(subst :, ,$(INSTALL_PPH))
$(PYTHON) `which easy_install` --prefix=$(INSTALL_DIR) ../dist/*.egg
upload: build/dist.tar.gz
# SSH must be correctly configured for this to work.
# Assumes that ``make dist`` was already run
# Example usage: ``make upload USERNAME=rgommers RELEASE=1.10.1``
ssh $(USERNAME)@docs.scipy.org mkdir $(UPLOAD_DIR)
scp build/dist.tar.gz $(USERNAME)@docs.scipy.org:$(UPLOAD_DIR)
ssh $(USERNAME)@docs.scipy.org tar xvC $(UPLOAD_DIR) \
-zf $(UPLOAD_DIR)/dist.tar.gz
ssh $(USERNAME)@docs.scipy.org mv $(UPLOAD_DIR)/numpy-ref.pdf \
$(UPLOAD_DIR)/numpy-ref-$(RELEASE).pdf
ssh $(USERNAME)@docs.scipy.org mv $(UPLOAD_DIR)/numpy-user.pdf \
$(UPLOAD_DIR)/numpy-user-$(RELEASE).pdf
ssh $(USERNAME)@docs.scipy.org mv $(UPLOAD_DIR)/numpy-html.zip \
$(UPLOAD_DIR)/numpy-html-$(RELEASE).zip
ssh $(USERNAME)@docs.scipy.org rm $(UPLOAD_DIR)/dist.tar.gz
ssh $(USERNAME)@docs.scipy.org ln -snf numpy-$(RELEASE) /srv/docs_scipy_org/doc/numpy
merge-doc: build/dist.tar.gz
ifeq "$(TAG)" ""
echo tag "$(TAG)" not of the form 1.18;
exit 1;
endif
@# Only clone if the directory does not exist
@if ! test -d build/merge; then \
git clone https://github.com/numpy/doc build/merge; \
fi;
@# Remove any old content and copy in the new, add it to git
-rm -rf build/merge/$(TAG)/*
-mkdir -p build/merge/$(TAG)
@# -C changes working directory
tar -C build/merge/$(TAG) -xf build/dist.tar.gz
git -C build/merge add $(TAG)
@# For now, the user must do this. If it is onerous, automate it and change
@# the instructions in doc/HOWTO_RELEASE.rst.txt
@echo " "
@echo New documentation archive added to ./build/merge.
@echo Now add/modify the appropriate section after
@echo " <!-- insert here -->"
@echo in build/merge/index.html,
@echo then \"git commit\", \"git push\"
#------------------------------------------------------------------------------
# Basic Sphinx generation rules for different formats
#------------------------------------------------------------------------------
generate: build/generate-stamp
build/generate-stamp: $(wildcard source/reference/*.rst)
mkdir -p build
touch build/generate-stamp
html: version-check html-build
html-build: generate
mkdir -p build/html build/doctrees
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html $(FILES)
$(PYTHON) postprocess.py html build/html/*.html
@echo
@echo "Build finished. The HTML pages are in build/html."
html-scipyorg:
mkdir -p build/html build/doctrees
$(SPHINXBUILD) -t scipyorg -b html $(ALLSPHINXOPTS) build/html-scipyorg $(FILES)
@echo
@echo "Build finished. The HTML pages are in build/html."
pickle: generate version-check
mkdir -p build/pickle build/doctrees
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle $(FILES)
@echo
@echo "Build finished; now you can process the pickle files or run"
@echo " sphinx-web build/pickle"
@echo "to start the sphinx-web server."
web: pickle
htmlhelp: generate version-check
mkdir -p build/htmlhelp build/doctrees
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp $(FILES)
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in build/htmlhelp."
htmlhelp-build: htmlhelp build/htmlhelp/numpy.chm
%.chm: %.hhp
-hhc.exe $^
qthelp: generate version-check
mkdir -p build/qthelp build/doctrees
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) build/qthelp $(FILES)
latex: version-check latex-build
latex-build: generate
mkdir -p build/latex build/doctrees
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex $(FILES)
$(PYTHON) postprocess.py tex build/latex/*.tex
perl -pi -e 's/LATEXOPTS =/LATEXOPTS ?= --halt-on-error/' build/latex/Makefile
@echo
@echo "Build finished; the LaTeX files are in build/latex."
@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
"run these through (pdf)latex."
coverage: build version-check
mkdir -p build/coverage build/doctrees
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) build/coverage $(FILES)
@echo "Coverage finished; see c.txt and python.txt in build/coverage"
changes: generate version-check
mkdir -p build/changes build/doctrees
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes $(FILES)
@echo
@echo "The overview file is in build/changes."
linkcheck: generate version-check
mkdir -p build/linkcheck build/doctrees
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck $(FILES)
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in build/linkcheck/output.txt."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) build/texinfo
@echo
@echo "Build finished. The Texinfo files are in build/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) build/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C build/texinfo info
@echo "makeinfo finished; the Info files are in build/texinfo."
# Makefile for Sphinx documentation
#
# PYVER needs to be major.minor, just "3" doesn't work - it will result in
# issues with the amendments to PYTHONPATH and install paths (see DIST_VARS).
# Use explicit "version_info" indexing since make cannot handle colon characters, and
# evaluate it now to allow easier debugging when printing the variable
PYVER:=$(shell python3 -c 'from sys import version_info as v; print("{0}.{1}".format(v[0], v[1]))')
PYTHON = python$(PYVER)
# You can set these variables from the command line.
SPHINXOPTS ?=
SPHINXBUILD ?= LANG=C sphinx-build
PAPER ?=
# For merging a documentation archive into a git checkout of numpy/doc
# Turn a tag like v1.18.0 into 1.18
# Use sed -n -e 's/patttern/match/p' to return a blank value if no match
TAG ?= $(shell git describe --tag | sed -n -e's,v\([1-9]\.[0-9]*\)\.[0-9].*,\1,p')
FILES=
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -WT --keep-going -d build/doctrees $(PAPEROPT_$(PAPER)) \
$(SPHINXOPTS) source
.PHONY: help clean html web pickle htmlhelp latex changes linkcheck \
dist dist-build gitwash-update version-check html-build latex-build \
merge-doc
#------------------------------------------------------------------------------
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " html-scipyorg to make standalone HTML files with scipy.org theming"
@echo " pickle to make pickle files (usable by e.g. sphinx-web)"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " changes to make an overview over all changed/added/deprecated items"
@echo " linkcheck to check all external links for integrity"
@echo " dist PYVER=... to make a distribution-ready tree"
@echo " gitwash-update GITWASH=path/to/gitwash update gitwash developer docs"
@echo " upload USERNAME=... RELEASE=... to upload built docs to docs.scipy.org"
@echo " merge-doc TAG=... to clone numpy/doc and archive documentation into it"
clean:
-rm -rf build/*
find . -name generated -type d -prune -exec rm -rf "{}" ";"
gitwash-update:
rm -rf source/dev/gitwash
install -d source/dev/gitwash
python $(GITWASH)/gitwash_dumper.py source/dev NumPy \
--repo-name=numpy \
--github-user=numpy
cat source/dev/gitwash_links.txt >> source/dev/gitwash/git_links.inc
#------------------------------------------------------------------------------
# Automated generation of all documents
#------------------------------------------------------------------------------
# Build the current numpy version, and extract docs from it.
# We have to be careful of some issues:
#
# - Everything must be done using the same Python version
# - We must use eggs (otherwise they might override PYTHONPATH on import).
# - Different versions of easy_install install to different directories (!)
#
INSTALL_DIR = $(CURDIR)/build/inst-dist
INSTALL_PPH = $(INSTALL_DIR)/lib/python$(PYVER)/site-packages:$(INSTALL_DIR)/local/lib/python$(PYVER)/site-packages:$(INSTALL_DIR)/lib/python$(PYVER)/dist-packages:$(INSTALL_DIR)/local/lib/python$(PYVER)/dist-packages
UPLOAD_DIR=/srv/docs_scipy_org/doc/numpy-$(RELEASE)
DIST_VARS=SPHINXBUILD="LANG=C PYTHONPATH=$(INSTALL_PPH) python$(PYVER) `which sphinx-build`" PYTHON="PYTHONPATH=$(INSTALL_PPH) python$(PYVER)"
NUMPYVER:=$(shell $(PYTHON) -c "import numpy; print(numpy.version.git_revision[:10])" 2>/dev/null)
GITVER ?= $(shell cd ..; $(PYTHON) -c "from setup import git_version; \
print(git_version()[:10])")
version-check:
ifeq "$(GITVER)" "Unknown"
# @echo sdist build with unlabeled sources
else ifeq ("", "$(NUMPYVER)")
@echo numpy not found, cannot build documentation without successful \"import numpy\"
@exit 1
else ifneq ($(NUMPYVER),$(GITVER))
@echo installed numpy $(NUMPYVER) != current repo git version \'$(GITVER)\'
@echo use '"make dist"' or '"GITVER=$(NUMPYVER) make $(MAKECMDGOALS) ..."'
@exit 1
else
# for testing
# @echo installed numpy $(NUMPYVER) matches git version $(GITVER); exit 1
endif
dist: build/dist.tar.gz
build/dist.tar.gz:
make $(DIST_VARS) real-dist
real-dist: dist-build html-build
test -d build/latex || make latex-build
make -C build/latex all-pdf
-rm -rf build/dist
cp -r build/html build/dist
cd build/html && zip -9r ../dist/numpy-html.zip .
cp build/latex/numpy-ref.pdf build/dist
cp build/latex/numpy-user.pdf build/dist
cd build/dist && tar czf ../dist.tar.gz *
chmod ug=rwX,o=rX -R build/dist
find build/dist -type d -print0 | xargs -0r chmod g+s
dist-build:
rm -f ../dist/*.egg
cd .. && $(PYTHON) setup.py bdist_egg
install -d $(subst :, ,$(INSTALL_PPH))
$(PYTHON) `which easy_install` --prefix=$(INSTALL_DIR) ../dist/*.egg
upload: build/dist.tar.gz
# SSH must be correctly configured for this to work.
# Assumes that ``make dist`` was already run
# Example usage: ``make upload USERNAME=rgommers RELEASE=1.10.1``
ssh $(USERNAME)@docs.scipy.org mkdir $(UPLOAD_DIR)
scp build/dist.tar.gz $(USERNAME)@docs.scipy.org:$(UPLOAD_DIR)
ssh $(USERNAME)@docs.scipy.org tar xvC $(UPLOAD_DIR) \
-zf $(UPLOAD_DIR)/dist.tar.gz
ssh $(USERNAME)@docs.scipy.org mv $(UPLOAD_DIR)/numpy-ref.pdf \
$(UPLOAD_DIR)/numpy-ref-$(RELEASE).pdf
ssh $(USERNAME)@docs.scipy.org mv $(UPLOAD_DIR)/numpy-user.pdf \
$(UPLOAD_DIR)/numpy-user-$(RELEASE).pdf
ssh $(USERNAME)@docs.scipy.org mv $(UPLOAD_DIR)/numpy-html.zip \
$(UPLOAD_DIR)/numpy-html-$(RELEASE).zip
ssh $(USERNAME)@docs.scipy.org rm $(UPLOAD_DIR)/dist.tar.gz
ssh $(USERNAME)@docs.scipy.org ln -snf numpy-$(RELEASE) /srv/docs_scipy_org/doc/numpy
merge-doc: build/dist.tar.gz
ifeq "$(TAG)" ""
echo tag "$(TAG)" not of the form 1.18;
exit 1;
endif
@# Only clone if the directory does not exist
@if ! test -d build/merge; then \
git clone https://github.com/numpy/doc build/merge; \
fi;
@# Remove any old content and copy in the new, add it to git
-rm -rf build/merge/$(TAG)/*
-mkdir -p build/merge/$(TAG)
@# -C changes working directory
tar -C build/merge/$(TAG) -xf build/dist.tar.gz
git -C build/merge add $(TAG)
@# For now, the user must do this. If it is onerous, automate it and change
@# the instructions in doc/HOWTO_RELEASE.rst.txt
@echo " "
@echo New documentation archive added to ./build/merge.
@echo Now add/modify the appropriate section after
@echo " <!-- insert here -->"
@echo in build/merge/index.html,
@echo then \"git commit\", \"git push\"
#------------------------------------------------------------------------------
# Basic Sphinx generation rules for different formats
#------------------------------------------------------------------------------
generate: build/generate-stamp
build/generate-stamp: $(wildcard source/reference/*.rst)
mkdir -p build
touch build/generate-stamp
html: version-check html-build
html-build: generate
mkdir -p build/html build/doctrees
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html $(FILES)
$(PYTHON) postprocess.py html build/html/*.html
@echo
@echo "Build finished. The HTML pages are in build/html."
html-scipyorg:
mkdir -p build/html build/doctrees
$(SPHINXBUILD) -t scipyorg -b html $(ALLSPHINXOPTS) build/html-scipyorg $(FILES)
@echo
@echo "Build finished. The HTML pages are in build/html."
pickle: generate version-check
mkdir -p build/pickle build/doctrees
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle $(FILES)
@echo
@echo "Build finished; now you can process the pickle files or run"
@echo " sphinx-web build/pickle"
@echo "to start the sphinx-web server."
web: pickle
htmlhelp: generate version-check
mkdir -p build/htmlhelp build/doctrees
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp $(FILES)
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in build/htmlhelp."
htmlhelp-build: htmlhelp build/htmlhelp/numpy.chm
%.chm: %.hhp
-hhc.exe $^
qthelp: generate version-check
mkdir -p build/qthelp build/doctrees
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) build/qthelp $(FILES)
latex: version-check latex-build
latex-build: generate
mkdir -p build/latex build/doctrees
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex $(FILES)
$(PYTHON) postprocess.py tex build/latex/*.tex
perl -pi -e 's/LATEXOPTS =/LATEXOPTS ?= --halt-on-error/' build/latex/Makefile
@echo
@echo "Build finished; the LaTeX files are in build/latex."
@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
"run these through (pdf)latex."
coverage: build version-check
mkdir -p build/coverage build/doctrees
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) build/coverage $(FILES)
@echo "Coverage finished; see c.txt and python.txt in build/coverage"
changes: generate version-check
mkdir -p build/changes build/doctrees
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes $(FILES)
@echo
@echo "The overview file is in build/changes."
linkcheck: generate version-check
mkdir -p build/linkcheck build/doctrees
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck $(FILES)
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in build/linkcheck/output.txt."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) build/texinfo
@echo
@echo "Build finished. The Texinfo files are in build/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) build/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C build/texinfo info
@echo "makeinfo finished; the Info files are in build/texinfo."

File diff suppressed because it is too large Load Diff

View File

@ -1,312 +1,312 @@
This file contains a walkthrough of the NumPy 1.14.5 release on Linux, modified
for building on azure and uploading to anaconda.org
The commands can be copied into the command line, but be sure to
replace 1.14.5 by the correct version.
This should be read together with the general directions in `releasing`.
Release Walkthrough
====================
Note that in the code snippets below, ``upstream`` refers to the root repository on
github and ``origin`` to a fork in your personal account. You may need to make adjustments
if you have not forked the repository but simply cloned it locally. You can
also edit ``.git/config`` and add ``upstream`` if it isn't already present.
Backport Pull Requests
----------------------
Changes that have been marked for this release must be backported to the
maintenance/1.14.x branch.
Update Release documentation
----------------------------
The file ``doc/changelog/1.14.5-changelog.rst`` should be updated to reflect
the final list of changes and contributors. This text can be generated by::
$ python tools/changelog.py $GITHUB v1.14.4..maintenance/1.14.x > doc/changelog/1.14.5-changelog.rst
where ``GITHUB`` contains your github access token. This text may also be
appended to ``doc/release/1.14.5-notes.rst`` for release updates, though not
for new releases like ``1.14.0``, as the changelogs for ``*.0`` releases tend to be
excessively long. The ``doc/source/release.rst`` file should also be
updated with a link to the new release notes. These changes should be committed
to the maintenance branch, and later will be forward ported to master.
Finish the Release Note
-----------------------
.. note:
This has changed now that we use ``towncrier``. See the instructions for
creating the release note in ``doc/release/upcoming_changes/README.rst``.
Fill out the release note ``doc/release/1.14.5-notes.rst`` calling out
significant changes.
Prepare the release commit
--------------------------
Checkout the branch for the release, make sure it is up to date, and clean the
repository::
$ git checkout maintenance/1.14.x
$ git pull upstream maintenance/1.14.x
$ git submodule update
$ git clean -xdfq
Edit pavement.py and setup.py as detailed in HOWTO_RELEASE::
$ gvim pavement.py setup.py
$ git commit -a -m"REL: NumPy 1.14.5 release."
Sanity check::
$ python3 runtests.py -m "full"
Push this release directly onto the end of the maintenance branch. This
requires write permission to the numpy repository::
$ git push upstream maintenance/1.14.x
As an example, see the 1.14.3 REL commit: `<https://github.com/numpy/numpy/commit/73299826729be58cec179b52c656adfcaefada93>`_.
Build source releases
---------------------
Paver is used to build the source releases. It will create the ``release`` and
``release/installers`` directories and put the ``*.zip`` and ``*.tar.gz``
source releases in the latter. ::
$ python3 -m cython --version # check for correct cython version
$ paver sdist # sdist will do a git clean -xdf, so we omit that
Build wheels
------------
Trigger the wheels build by pointing the numpy-wheels repository at this
commit. This can take up to an hour. The numpy-wheels repository is cloned from
`<https://github.com/MacPython/numpy-wheels>`_. Start with a pull as the repo
may have been accessed and changed by someone else and a push will fail::
$ cd ../numpy-wheels
$ git pull upstream master
$ git branch <new version> # only when starting new numpy version
$ git checkout v1.14.x # v1.14.x already existed for the 1.14.4 release
Edit the ``azure/posix.yml`` and ``azure/windows.yml`` files to make sure they
have the correct version, and put in the commit hash for the ``REL`` commit
created above for ``BUILD_COMMIT``, see an _example::
$ gvim azure/posix.yml azure/windows.yml
$ git commit -a
$ git push upstream HEAD
Now wait. If you get nervous at the amount of time taken -- the builds can take
a while -- you can check the build progress by following the links
provided at `<https://github.com/MacPython/numpy-wheels>`_ to check the
build status. Check if all the needed wheels have been built and
uploaded before proceeding. There should currently be 21 of them at
`<https://anaconda.org/multibuild-wheels-staging/numpy/files>`_, 3 for Mac, 6
for Windows, and 12 for Linux.
.. example_: https://github.com/MacPython/numpy-wheels/pull/80/commits/cbf4af4
Note that sometimes builds, like tests, fail for unrelated reasons and
you will need to restart them.
Download wheels
---------------
When the wheels have all been successfully built, download them using the ``wheel-uploader``
in the ``terryfy`` repository. The terryfy repository may be cloned from
`<https://github.com/MacPython/terryfy>`_ if you don't already have it. The
wheels can also be uploaded using the ``wheel-uploader``, but we prefer to
download all the wheels to the ``../numpy/release/installers`` directory and
upload later using ``twine``::
$ cd ../terryfy
$ git pull upstream master
$ CDN_URL=https://anaconda.org/multibuild-wheels-staging/numpy/files
$ NPY_WHLS=../numpy/release/installers
$ ./wheel-uploader -u $CDN_URL -n -v -w $NPY_WHLS -t win numpy 1.14.5
$ ./wheel-uploader -u $CDN_URL -n -v -w $NPY_WHLS -t manylinux1 numpy 1.14.5
$ ./wheel-uploader -u $CDN_URL -n -v -w $NPY_WHLS -t macosx numpy 1.14.5
If you do this often, consider making CDN_URL and NPY_WHLS part of your default
environment.
Generate the README files
-------------------------
This needs to be done after all installers are downloaded, but before the pavement
file is updated for continued development::
$ cd ../numpy
$ paver write_release
Tag the release
---------------
Once the wheels have been built and downloaded without errors, go back to your
numpy repository in the maintenance branch and tag the ``REL`` commit, signing
it with your gpg key::
$ git tag -s v1.14.5
You should upload your public gpg key to github, so that the tag will appear
"verified" there.
Check that the files in ``release/installers`` have the correct versions, then
push the tag upstream::
$ git push upstream v1.14.5
We wait until this point to push the tag because it is public and should not
be changed after it has been pushed.
Reset the maintenance branch into a development state
-----------------------------------------------------
Add another ``REL`` commit to the numpy maintenance branch, which resets the
``ISREALEASED`` flag to ``False`` and increments the version counter::
$ gvim pavement.py setup.py
Create release notes for next release and edit them to set the version::
$ cp doc/source/release/template.rst doc/source/release/1.14.6-notes.rst
$ gvim doc/source/release/1.14.6-notes.rst
$ git add doc/source/release/1.14.6-notes.rst
Add new release notes to the documentation release list::
$ gvim doc/source/release.rst
Commit the result::
$ git commit -a -m"REL: prepare 1.14.x for further development"
$ git push upstream maintenance/1.14.x
Upload to PyPI
--------------
Upload to PyPI using ``twine``. A recent version of ``twine`` of is needed
after recent PyPI changes, version ``1.11.0`` was used here.
.. code-block:: sh
$ cd ../numpy
$ twine upload release/installers/*.whl
$ twine upload release/installers/numpy-1.14.5.zip # Upload last.
If one of the commands breaks in the middle, which is not uncommon, you may
need to selectively upload the remaining files because PyPI does not allow the
same file to be uploaded twice. The source file should be uploaded last to
avoid synchronization problems if pip users access the files while this is in
process. Note that PyPI only allows a single source distribution, here we have
chosen the zip archive.
Upload files to github
----------------------
Go to `<https://github.com/numpy/numpy/releases>`_, there should be a ``v1.14.5
tag``, click on it and hit the edit button for that tag. There are two ways to
add files, using an editable text window and as binary uploads.
- Cut and paste the ``release/README.md`` file contents into the text window.
- Upload ``release/installers/numpy-1.14.5.tar.gz`` as a binary file.
- Upload ``release/installers/numpy-1.14.5.zip`` as a binary file.
- Upload ``release/README.rst`` as a binary file.
- Upload ``doc/changelog/1.14.5-changelog.rst`` as a binary file.
- Check the pre-release button if this is a pre-releases.
- Hit the ``{Publish,Update} release`` button at the bottom.
Upload documents to numpy.org
-----------------------------
This step is only needed for final releases and can be skipped for
pre-releases. ``make merge-doc`` clones the ``numpy/doc`` repo into
``doc/build/merge`` and updates it with the new documentation::
$ pushd doc
$ make dist
$ make merge-doc
$ popd
If the release series is a new one, you will need to add a new section to the
``doc/build/merge/index.html`` front page just after the "insert here" comment::
$ gvim doc/build/merge/index.html +/'insert here'
Otherwise, only the ``zip`` and ``pdf`` links should be updated with the
new tag name::
$ gvim doc/build/merge/index.html +/'tag v1.14'
You can "test run" the new documentation in a browser to make sure the links
work::
$ firefox doc/build/merge/index.html
Once everything seems satisfactory, commit and upload the changes::
$ pushd doc/build/merge
$ git commit -am"Add documentation for v1.14.5"
$ git push
$ popd
Announce the release on scipy.org
---------------------------------
This assumes that you have forked `<https://github.com/scipy/scipy.org>`_::
$ cd ../scipy.org
$ git checkout master
$ git pull upstream master
$ git checkout -b numpy-1.14.5
$ gvim www/index.rst # edit the News section
$ git commit -a
$ git push origin HEAD
Now go to your fork and make a pull request for the branch.
Announce to mailing lists
-------------------------
The release should be announced on the numpy-discussion, scipy-devel,
scipy-user, and python-announce-list mailing lists. Look at previous
announcements for the basic template. The contributor and PR lists are the same
as generated for the release notes above. If you crosspost, make sure that
python-announce-list is BCC so that replies will not be sent to that list.
Post-Release Tasks
------------------
Checkout master and forward port the documentation changes::
$ git checkout -b update-after-1.14.5-release
$ git checkout maintenance/1.14.x doc/source/release/1.14.5-notes.rst
$ git checkout maintenance/1.14.x doc/changelog/1.14.5-changelog.rst
$ gvim doc/source/release.rst # Add link to new notes
$ git add doc/changelog/1.14.5-changelog.rst doc/source/release/1.14.5-notes.rst
$ git status # check status before commit
$ git commit -a -m"REL: Update master after 1.14.5 release."
$ git push origin HEAD
Go to github and make a PR.
This file contains a walkthrough of the NumPy 1.14.5 release on Linux, modified
for building on azure and uploading to anaconda.org
The commands can be copied into the command line, but be sure to
replace 1.14.5 by the correct version.
This should be read together with the general directions in `releasing`.
Release Walkthrough
====================
Note that in the code snippets below, ``upstream`` refers to the root repository on
github and ``origin`` to a fork in your personal account. You may need to make adjustments
if you have not forked the repository but simply cloned it locally. You can
also edit ``.git/config`` and add ``upstream`` if it isn't already present.
Backport Pull Requests
----------------------
Changes that have been marked for this release must be backported to the
maintenance/1.14.x branch.
Update Release documentation
----------------------------
The file ``doc/changelog/1.14.5-changelog.rst`` should be updated to reflect
the final list of changes and contributors. This text can be generated by::
$ python tools/changelog.py $GITHUB v1.14.4..maintenance/1.14.x > doc/changelog/1.14.5-changelog.rst
where ``GITHUB`` contains your github access token. This text may also be
appended to ``doc/release/1.14.5-notes.rst`` for release updates, though not
for new releases like ``1.14.0``, as the changelogs for ``*.0`` releases tend to be
excessively long. The ``doc/source/release.rst`` file should also be
updated with a link to the new release notes. These changes should be committed
to the maintenance branch, and later will be forward ported to master.
Finish the Release Note
-----------------------
.. note:
This has changed now that we use ``towncrier``. See the instructions for
creating the release note in ``doc/release/upcoming_changes/README.rst``.
Fill out the release note ``doc/release/1.14.5-notes.rst`` calling out
significant changes.
Prepare the release commit
--------------------------
Checkout the branch for the release, make sure it is up to date, and clean the
repository::
$ git checkout maintenance/1.14.x
$ git pull upstream maintenance/1.14.x
$ git submodule update
$ git clean -xdfq
Edit pavement.py and setup.py as detailed in HOWTO_RELEASE::
$ gvim pavement.py setup.py
$ git commit -a -m"REL: NumPy 1.14.5 release."
Sanity check::
$ python3 runtests.py -m "full"
Push this release directly onto the end of the maintenance branch. This
requires write permission to the numpy repository::
$ git push upstream maintenance/1.14.x
As an example, see the 1.14.3 REL commit: `<https://github.com/numpy/numpy/commit/73299826729be58cec179b52c656adfcaefada93>`_.
Build source releases
---------------------
Paver is used to build the source releases. It will create the ``release`` and
``release/installers`` directories and put the ``*.zip`` and ``*.tar.gz``
source releases in the latter. ::
$ python3 -m cython --version # check for correct cython version
$ paver sdist # sdist will do a git clean -xdf, so we omit that
Build wheels
------------
Trigger the wheels build by pointing the numpy-wheels repository at this
commit. This can take up to an hour. The numpy-wheels repository is cloned from
`<https://github.com/MacPython/numpy-wheels>`_. Start with a pull as the repo
may have been accessed and changed by someone else and a push will fail::
$ cd ../numpy-wheels
$ git pull upstream master
$ git branch <new version> # only when starting new numpy version
$ git checkout v1.14.x # v1.14.x already existed for the 1.14.4 release
Edit the ``azure/posix.yml`` and ``azure/windows.yml`` files to make sure they
have the correct version, and put in the commit hash for the ``REL`` commit
created above for ``BUILD_COMMIT``, see an _example::
$ gvim azure/posix.yml azure/windows.yml
$ git commit -a
$ git push upstream HEAD
Now wait. If you get nervous at the amount of time taken -- the builds can take
a while -- you can check the build progress by following the links
provided at `<https://github.com/MacPython/numpy-wheels>`_ to check the
build status. Check if all the needed wheels have been built and
uploaded before proceeding. There should currently be 21 of them at
`<https://anaconda.org/multibuild-wheels-staging/numpy/files>`_, 3 for Mac, 6
for Windows, and 12 for Linux.
.. example_: https://github.com/MacPython/numpy-wheels/pull/80/commits/cbf4af4
Note that sometimes builds, like tests, fail for unrelated reasons and
you will need to restart them.
Download wheels
---------------
When the wheels have all been successfully built, download them using the ``wheel-uploader``
in the ``terryfy`` repository. The terryfy repository may be cloned from
`<https://github.com/MacPython/terryfy>`_ if you don't already have it. The
wheels can also be uploaded using the ``wheel-uploader``, but we prefer to
download all the wheels to the ``../numpy/release/installers`` directory and
upload later using ``twine``::
$ cd ../terryfy
$ git pull upstream master
$ CDN_URL=https://anaconda.org/multibuild-wheels-staging/numpy/files
$ NPY_WHLS=../numpy/release/installers
$ ./wheel-uploader -u $CDN_URL -n -v -w $NPY_WHLS -t win numpy 1.14.5
$ ./wheel-uploader -u $CDN_URL -n -v -w $NPY_WHLS -t manylinux1 numpy 1.14.5
$ ./wheel-uploader -u $CDN_URL -n -v -w $NPY_WHLS -t macosx numpy 1.14.5
If you do this often, consider making CDN_URL and NPY_WHLS part of your default
environment.
Generate the README files
-------------------------
This needs to be done after all installers are downloaded, but before the pavement
file is updated for continued development::
$ cd ../numpy
$ paver write_release
Tag the release
---------------
Once the wheels have been built and downloaded without errors, go back to your
numpy repository in the maintenance branch and tag the ``REL`` commit, signing
it with your gpg key::
$ git tag -s v1.14.5
You should upload your public gpg key to github, so that the tag will appear
"verified" there.
Check that the files in ``release/installers`` have the correct versions, then
push the tag upstream::
$ git push upstream v1.14.5
We wait until this point to push the tag because it is public and should not
be changed after it has been pushed.
Reset the maintenance branch into a development state
-----------------------------------------------------
Add another ``REL`` commit to the numpy maintenance branch, which resets the
``ISREALEASED`` flag to ``False`` and increments the version counter::
$ gvim pavement.py setup.py
Create release notes for next release and edit them to set the version::
$ cp doc/source/release/template.rst doc/source/release/1.14.6-notes.rst
$ gvim doc/source/release/1.14.6-notes.rst
$ git add doc/source/release/1.14.6-notes.rst
Add new release notes to the documentation release list::
$ gvim doc/source/release.rst
Commit the result::
$ git commit -a -m"REL: prepare 1.14.x for further development"
$ git push upstream maintenance/1.14.x
Upload to PyPI
--------------
Upload to PyPI using ``twine``. A recent version of ``twine`` of is needed
after recent PyPI changes, version ``1.11.0`` was used here.
.. code-block:: sh
$ cd ../numpy
$ twine upload release/installers/*.whl
$ twine upload release/installers/numpy-1.14.5.zip # Upload last.
If one of the commands breaks in the middle, which is not uncommon, you may
need to selectively upload the remaining files because PyPI does not allow the
same file to be uploaded twice. The source file should be uploaded last to
avoid synchronization problems if pip users access the files while this is in
process. Note that PyPI only allows a single source distribution, here we have
chosen the zip archive.
Upload files to github
----------------------
Go to `<https://github.com/numpy/numpy/releases>`_, there should be a ``v1.14.5
tag``, click on it and hit the edit button for that tag. There are two ways to
add files, using an editable text window and as binary uploads.
- Cut and paste the ``release/README.md`` file contents into the text window.
- Upload ``release/installers/numpy-1.14.5.tar.gz`` as a binary file.
- Upload ``release/installers/numpy-1.14.5.zip`` as a binary file.
- Upload ``release/README.rst`` as a binary file.
- Upload ``doc/changelog/1.14.5-changelog.rst`` as a binary file.
- Check the pre-release button if this is a pre-releases.
- Hit the ``{Publish,Update} release`` button at the bottom.
Upload documents to numpy.org
-----------------------------
This step is only needed for final releases and can be skipped for
pre-releases. ``make merge-doc`` clones the ``numpy/doc`` repo into
``doc/build/merge`` and updates it with the new documentation::
$ pushd doc
$ make dist
$ make merge-doc
$ popd
If the release series is a new one, you will need to add a new section to the
``doc/build/merge/index.html`` front page just after the "insert here" comment::
$ gvim doc/build/merge/index.html +/'insert here'
Otherwise, only the ``zip`` and ``pdf`` links should be updated with the
new tag name::
$ gvim doc/build/merge/index.html +/'tag v1.14'
You can "test run" the new documentation in a browser to make sure the links
work::
$ firefox doc/build/merge/index.html
Once everything seems satisfactory, commit and upload the changes::
$ pushd doc/build/merge
$ git commit -am"Add documentation for v1.14.5"
$ git push
$ popd
Announce the release on scipy.org
---------------------------------
This assumes that you have forked `<https://github.com/scipy/scipy.org>`_::
$ cd ../scipy.org
$ git checkout master
$ git pull upstream master
$ git checkout -b numpy-1.14.5
$ gvim www/index.rst # edit the News section
$ git commit -a
$ git push origin HEAD
Now go to your fork and make a pull request for the branch.
Announce to mailing lists
-------------------------
The release should be announced on the numpy-discussion, scipy-devel,
scipy-user, and python-announce-list mailing lists. Look at previous
announcements for the basic template. The contributor and PR lists are the same
as generated for the release notes above. If you crosspost, make sure that
python-announce-list is BCC so that replies will not be sent to that list.
Post-Release Tasks
------------------
Checkout master and forward port the documentation changes::
$ git checkout -b update-after-1.14.5-release
$ git checkout maintenance/1.14.x doc/source/release/1.14.5-notes.rst
$ git checkout maintenance/1.14.x doc/changelog/1.14.5-changelog.rst
$ gvim doc/source/release.rst # Add link to new notes
$ git add doc/changelog/1.14.5-changelog.rst doc/source/release/1.14.5-notes.rst
$ git status # check status before commit
$ git commit -a -m"REL: Update master after 1.14.5 release."
$ git push origin HEAD
Go to github and make a PR.

View File

@ -1,397 +1,397 @@
NumPy/SciPy Testing Guidelines
==============================
.. contents::
Introduction
''''''''''''
Until the 1.15 release, NumPy used the `nose`_ testing framework, it now uses
the `pytest`_ framework. The older framework is still maintained in order to
support downstream projects that use the old numpy framework, but all tests
for NumPy should use pytest.
Our goal is that every module and package in NumPy
should have a thorough set of unit
tests. These tests should exercise the full functionality of a given
routine as well as its robustness to erroneous or unexpected input
arguments. Long experience has shown that by far the best time to
write the tests is before you write or change the code - this is
`test-driven development
<https://en.wikipedia.org/wiki/Test-driven_development>`__. The
arguments for this can sound rather abstract, but we can assure you
that you will find that writing the tests first leads to more robust
and better designed code. Well-designed tests with good coverage make
an enormous difference to the ease of refactoring. Whenever a new bug
is found in a routine, you should write a new test for that specific
case and add it to the test suite to prevent that bug from creeping
back in unnoticed.
.. note::
SciPy uses the testing framework from :mod:`numpy.testing`,
so all of the NumPy examples shown below are also applicable to SciPy
Testing NumPy
'''''''''''''
NumPy can be tested in a number of ways, choose any way you feel comfortable.
Running tests from inside Python
--------------------------------
You can test an installed NumPy by `numpy.test`, for example,
To run NumPy's full test suite, use the following::
>>> import numpy
>>> numpy.test(label='slow')
The test method may take two or more arguments; the first ``label`` is a
string specifying what should be tested and the second ``verbose`` is an
integer giving the level of output verbosity. See the docstring
`numpy.test`
for details. The default value for ``label`` is 'fast' - which
will run the standard tests. The string 'full' will run the full battery
of tests, including those identified as being slow to run. If ``verbose``
is 1 or less, the tests will just show information messages about the tests
that are run; but if it is greater than 1, then the tests will also provide
warnings on missing tests. So if you want to run every test and get
messages about which modules don't have tests::
>>> numpy.test(label='full', verbose=2) # or numpy.test('full', 2)
Finally, if you are only interested in testing a subset of NumPy, for
example, the ``core`` module, use the following::
>>> numpy.core.test()
Running tests from the command line
-----------------------------------
If you want to build NumPy in order to work on NumPy itself, use
``runtests.py``.To run NumPy's full test suite::
$ python runtests.py
Testing a subset of NumPy::
$python runtests.py -t numpy/core/tests
For detailed info on testing, see :ref:`testing-builds`
Other methods of running tests
------------------------------
Run tests using your favourite IDE such as `vscode`_ or `pycharm`_
Writing your own tests
''''''''''''''''''''''
If you are writing a package that you'd like to become part of NumPy,
please write the tests as you develop the package.
Every Python module, extension module, or subpackage in the NumPy
package directory should have a corresponding ``test_<name>.py`` file.
Pytest examines these files for test methods (named ``test*``) and test
classes (named ``Test*``).
Suppose you have a NumPy module ``numpy/xxx/yyy.py`` containing a
function ``zzz()``. To test this function you would create a test
module called ``test_yyy.py``. If you only need to test one aspect of
``zzz``, you can simply add a test function::
def test_zzz():
assert_(zzz() == 'Hello from zzz')
More often, we need to group a number of tests together, so we create
a test class::
from numpy.testing import assert_, assert_raises
# import xxx symbols
from numpy.xxx.yyy import zzz
class TestZzz:
def test_simple(self):
assert_(zzz() == 'Hello from zzz')
def test_invalid_parameter(self):
assert_raises(...)
Within these test methods, ``assert_()`` and related functions are used to test
whether a certain assumption is valid. If the assertion fails, the test fails.
Note that the Python builtin ``assert`` should not be used, because it is
stripped during compilation with ``-O``.
Note that ``test_`` functions or methods should not have a docstring, because
that makes it hard to identify the test from the output of running the test
suite with ``verbose=2`` (or similar verbosity setting). Use plain comments
(``#``) if necessary.
Also since much of NumPy is legacy code that was
originally written without unit tests, there are still several modules
that don't have tests yet. Please feel free to choose one of these
modules and develop tests for it.
Labeling tests
--------------
As an alternative to ``pytest.mark.<label>``, there are a number of labels you
can use.
Unlabeled tests like the ones above are run in the default
``numpy.test()`` run. If you want to label your test as slow - and
therefore reserved for a full ``numpy.test(label='full')`` run, you
can label it with a decorator::
# numpy.testing module includes 'import decorators as dec'
from numpy.testing import dec, assert_
@dec.slow
def test_big(self):
print 'Big, slow test'
Similarly for methods::
class test_zzz:
@dec.slow
def test_simple(self):
assert_(zzz() == 'Hello from zzz')
Available labels are:
- ``slow``: marks a test as taking a long time
- ``setastest(tf)``: work-around for test discovery when the test name is
non conformant
- ``skipif(condition, msg=None)``: skips the test when ``eval(condition)`` is
``True``
- ``knownfailureif(fail_cond, msg=None)``: will avoid running the test if
``eval(fail_cond)`` is ``True``, useful for tests that conditionally segfault
- ``deprecated(conditional=True)``: filters deprecation warnings emitted in the
test
- ``paramaterize(var, input)``: an alternative to
`pytest.mark.paramaterized
<https://docs.pytest.org/en/latest/parametrize.html>`_
Easier setup and teardown functions / methods
---------------------------------------------
Testing looks for module-level or class-level setup and teardown functions by
name; thus::
def setup():
"""Module-level setup"""
print 'doing setup'
def teardown():
"""Module-level teardown"""
print 'doing teardown'
class TestMe:
def setup():
"""Class-level setup"""
print 'doing setup'
def teardown():
"""Class-level teardown"""
print 'doing teardown'
Setup and teardown functions to functions and methods are known as "fixtures",
and their use is not encouraged.
Parametric tests
----------------
One very nice feature of testing is allowing easy testing across a range
of parameters - a nasty problem for standard unit tests. Use the
``dec.paramaterize`` decorator.
Doctests
--------
Doctests are a convenient way of documenting the behavior of a function
and allowing that behavior to be tested at the same time. The output
of an interactive Python session can be included in the docstring of a
function, and the test framework can run the example and compare the
actual output to the expected output.
The doctests can be run by adding the ``doctests`` argument to the
``test()`` call; for example, to run all tests (including doctests)
for numpy.lib::
>>> import numpy as np
>>> np.lib.test(doctests=True)
The doctests are run as if they are in a fresh Python instance which
has executed ``import numpy as np``. Tests that are part of a NumPy
subpackage will have that subpackage already imported. E.g. for a test
in ``numpy/linalg/tests/``, the namespace will be created such that
``from numpy import linalg`` has already executed.
``tests/``
----------
Rather than keeping the code and the tests in the same directory, we
put all the tests for a given subpackage in a ``tests/``
subdirectory. For our example, if it doesn't already exist you will
need to create a ``tests/`` directory in ``numpy/xxx/``. So the path
for ``test_yyy.py`` is ``numpy/xxx/tests/test_yyy.py``.
Once the ``numpy/xxx/tests/test_yyy.py`` is written, its possible to
run the tests by going to the ``tests/`` directory and typing::
python test_yyy.py
Or if you add ``numpy/xxx/tests/`` to the Python path, you could run
the tests interactively in the interpreter like this::
>>> import test_yyy
>>> test_yyy.test()
``__init__.py`` and ``setup.py``
--------------------------------
Usually, however, adding the ``tests/`` directory to the python path
isn't desirable. Instead it would better to invoke the test straight
from the module ``xxx``. To this end, simply place the following lines
at the end of your package's ``__init__.py`` file::
...
def test(level=1, verbosity=1):
from numpy.testing import Tester
return Tester().test(level, verbosity)
You will also need to add the tests directory in the configuration
section of your setup.py::
...
def configuration(parent_package='', top_path=None):
...
config.add_subpackage('tests')
return config
...
Now you can do the following to test your module::
>>> import numpy
>>> numpy.xxx.test()
Also, when invoking the entire NumPy test suite, your tests will be
found and run::
>>> import numpy
>>> numpy.test()
# your tests are included and run automatically!
Tips & Tricks
'''''''''''''
Creating many similar tests
---------------------------
If you have a collection of tests that must be run multiple times with
minor variations, it can be helpful to create a base class containing
all the common tests, and then create a subclass for each variation.
Several examples of this technique exist in NumPy; below are excerpts
from one in `numpy/linalg/tests/test_linalg.py
<https://github.com/numpy/numpy/blob/master/numpy/linalg/tests/test_linalg.py>`__::
class LinalgTestCase:
def test_single(self):
a = array([[1.,2.], [3.,4.]], dtype=single)
b = array([2., 1.], dtype=single)
self.do(a, b)
def test_double(self):
a = array([[1.,2.], [3.,4.]], dtype=double)
b = array([2., 1.], dtype=double)
self.do(a, b)
...
class TestSolve(LinalgTestCase):
def do(self, a, b):
x = linalg.solve(a, b)
assert_almost_equal(b, dot(a, x))
assert_(imply(isinstance(b, matrix), isinstance(x, matrix)))
class TestInv(LinalgTestCase):
def do(self, a, b):
a_inv = linalg.inv(a)
assert_almost_equal(dot(a, a_inv), identity(asarray(a).shape[0]))
assert_(imply(isinstance(a, matrix), isinstance(a_inv, matrix)))
In this case, we wanted to test solving a linear algebra problem using
matrices of several data types, using ``linalg.solve`` and
``linalg.inv``. The common test cases (for single-precision,
double-precision, etc. matrices) are collected in ``LinalgTestCase``.
Known failures & skipping tests
-------------------------------
Sometimes you might want to skip a test or mark it as a known failure,
such as when the test suite is being written before the code it's
meant to test, or if a test only fails on a particular architecture.
To skip a test, simply use ``skipif``::
import pytest
@pytest.mark.skipif(SkipMyTest, reason="Skipping this test because...")
def test_something(foo):
...
The test is marked as skipped if ``SkipMyTest`` evaluates to nonzero,
and the message in verbose test output is the second argument given to
``skipif``. Similarly, a test can be marked as a known failure by
using ``xfail``::
import pytest
@pytest.mark.xfail(MyTestFails, reason="This test is known to fail because...")
def test_something_else(foo):
...
Of course, a test can be unconditionally skipped or marked as a known
failure by using ``skip`` or ``xfail`` without argument, respectively.
A total of the number of skipped and known failing tests is displayed
at the end of the test run. Skipped tests are marked as ``'S'`` in
the test results (or ``'SKIPPED'`` for ``verbose > 1``), and known
failing tests are marked as ``'x'`` (or ``'XFAIL'`` if ``verbose >
1``).
Tests on random data
--------------------
Tests on random data are good, but since test failures are meant to expose
new bugs or regressions, a test that passes most of the time but fails
occasionally with no code changes is not helpful. Make the random data
deterministic by setting the random number seed before generating it. Use
either Python's ``random.seed(some_number)`` or NumPy's
``numpy.random.seed(some_number)``, depending on the source of random numbers.
Alternatively, you can use `Hypothesis`_ to generate arbitrary data.
Hypothesis manages both Python's and Numpy's random seeds for you, and
provides a very concise and powerful way to describe data (including
``hypothesis.extra.numpy``, e.g. for a set of mutually-broadcastable shapes).
The advantages over random generation include tools to replay and share
failures without requiring a fixed seed, reporting *minimal* examples for
each failure, and better-than-naive-random techniques for triggering bugs.
Documentation for ``numpy.test``
--------------------------------
.. autofunction:: numpy.test
.. _nose: https://nose.readthedocs.io/en/latest/
.. _pytest: https://pytest.readthedocs.io
.. _parameterization: https://docs.pytest.org/en/latest/parametrize.html
.. _Hypothesis: https://hypothesis.readthedocs.io/en/latest/
.. _vscode: https://code.visualstudio.com/docs/python/testing#_enable-a-test-framework
.. _pycharm: https://www.jetbrains.com/help/pycharm/testing-your-first-python-application.html
NumPy/SciPy Testing Guidelines
==============================
.. contents::
Introduction
''''''''''''
Until the 1.15 release, NumPy used the `nose`_ testing framework, it now uses
the `pytest`_ framework. The older framework is still maintained in order to
support downstream projects that use the old numpy framework, but all tests
for NumPy should use pytest.
Our goal is that every module and package in NumPy
should have a thorough set of unit
tests. These tests should exercise the full functionality of a given
routine as well as its robustness to erroneous or unexpected input
arguments. Long experience has shown that by far the best time to
write the tests is before you write or change the code - this is
`test-driven development
<https://en.wikipedia.org/wiki/Test-driven_development>`__. The
arguments for this can sound rather abstract, but we can assure you
that you will find that writing the tests first leads to more robust
and better designed code. Well-designed tests with good coverage make
an enormous difference to the ease of refactoring. Whenever a new bug
is found in a routine, you should write a new test for that specific
case and add it to the test suite to prevent that bug from creeping
back in unnoticed.
.. note::
SciPy uses the testing framework from :mod:`numpy.testing`,
so all of the NumPy examples shown below are also applicable to SciPy
Testing NumPy
'''''''''''''
NumPy can be tested in a number of ways, choose any way you feel comfortable.
Running tests from inside Python
--------------------------------
You can test an installed NumPy by `numpy.test`, for example,
To run NumPy's full test suite, use the following::
>>> import numpy
>>> numpy.test(label='slow')
The test method may take two or more arguments; the first ``label`` is a
string specifying what should be tested and the second ``verbose`` is an
integer giving the level of output verbosity. See the docstring
`numpy.test`
for details. The default value for ``label`` is 'fast' - which
will run the standard tests. The string 'full' will run the full battery
of tests, including those identified as being slow to run. If ``verbose``
is 1 or less, the tests will just show information messages about the tests
that are run; but if it is greater than 1, then the tests will also provide
warnings on missing tests. So if you want to run every test and get
messages about which modules don't have tests::
>>> numpy.test(label='full', verbose=2) # or numpy.test('full', 2)
Finally, if you are only interested in testing a subset of NumPy, for
example, the ``core`` module, use the following::
>>> numpy.core.test()
Running tests from the command line
-----------------------------------
If you want to build NumPy in order to work on NumPy itself, use
``runtests.py``.To run NumPy's full test suite::
$ python runtests.py
Testing a subset of NumPy::
$python runtests.py -t numpy/core/tests
For detailed info on testing, see :ref:`testing-builds`
Other methods of running tests
------------------------------
Run tests using your favourite IDE such as `vscode`_ or `pycharm`_
Writing your own tests
''''''''''''''''''''''
If you are writing a package that you'd like to become part of NumPy,
please write the tests as you develop the package.
Every Python module, extension module, or subpackage in the NumPy
package directory should have a corresponding ``test_<name>.py`` file.
Pytest examines these files for test methods (named ``test*``) and test
classes (named ``Test*``).
Suppose you have a NumPy module ``numpy/xxx/yyy.py`` containing a
function ``zzz()``. To test this function you would create a test
module called ``test_yyy.py``. If you only need to test one aspect of
``zzz``, you can simply add a test function::
def test_zzz():
assert_(zzz() == 'Hello from zzz')
More often, we need to group a number of tests together, so we create
a test class::
from numpy.testing import assert_, assert_raises
# import xxx symbols
from numpy.xxx.yyy import zzz
class TestZzz:
def test_simple(self):
assert_(zzz() == 'Hello from zzz')
def test_invalid_parameter(self):
assert_raises(...)
Within these test methods, ``assert_()`` and related functions are used to test
whether a certain assumption is valid. If the assertion fails, the test fails.
Note that the Python builtin ``assert`` should not be used, because it is
stripped during compilation with ``-O``.
Note that ``test_`` functions or methods should not have a docstring, because
that makes it hard to identify the test from the output of running the test
suite with ``verbose=2`` (or similar verbosity setting). Use plain comments
(``#``) if necessary.
Also since much of NumPy is legacy code that was
originally written without unit tests, there are still several modules
that don't have tests yet. Please feel free to choose one of these
modules and develop tests for it.
Labeling tests
--------------
As an alternative to ``pytest.mark.<label>``, there are a number of labels you
can use.
Unlabeled tests like the ones above are run in the default
``numpy.test()`` run. If you want to label your test as slow - and
therefore reserved for a full ``numpy.test(label='full')`` run, you
can label it with a decorator::
# numpy.testing module includes 'import decorators as dec'
from numpy.testing import dec, assert_
@dec.slow
def test_big(self):
print 'Big, slow test'
Similarly for methods::
class test_zzz:
@dec.slow
def test_simple(self):
assert_(zzz() == 'Hello from zzz')
Available labels are:
- ``slow``: marks a test as taking a long time
- ``setastest(tf)``: work-around for test discovery when the test name is
non conformant
- ``skipif(condition, msg=None)``: skips the test when ``eval(condition)`` is
``True``
- ``knownfailureif(fail_cond, msg=None)``: will avoid running the test if
``eval(fail_cond)`` is ``True``, useful for tests that conditionally segfault
- ``deprecated(conditional=True)``: filters deprecation warnings emitted in the
test
- ``paramaterize(var, input)``: an alternative to
`pytest.mark.paramaterized
<https://docs.pytest.org/en/latest/parametrize.html>`_
Easier setup and teardown functions / methods
---------------------------------------------
Testing looks for module-level or class-level setup and teardown functions by
name; thus::
def setup():
"""Module-level setup"""
print 'doing setup'
def teardown():
"""Module-level teardown"""
print 'doing teardown'
class TestMe:
def setup():
"""Class-level setup"""
print 'doing setup'
def teardown():
"""Class-level teardown"""
print 'doing teardown'
Setup and teardown functions to functions and methods are known as "fixtures",
and their use is not encouraged.
Parametric tests
----------------
One very nice feature of testing is allowing easy testing across a range
of parameters - a nasty problem for standard unit tests. Use the
``dec.paramaterize`` decorator.
Doctests
--------
Doctests are a convenient way of documenting the behavior of a function
and allowing that behavior to be tested at the same time. The output
of an interactive Python session can be included in the docstring of a
function, and the test framework can run the example and compare the
actual output to the expected output.
The doctests can be run by adding the ``doctests`` argument to the
``test()`` call; for example, to run all tests (including doctests)
for numpy.lib::
>>> import numpy as np
>>> np.lib.test(doctests=True)
The doctests are run as if they are in a fresh Python instance which
has executed ``import numpy as np``. Tests that are part of a NumPy
subpackage will have that subpackage already imported. E.g. for a test
in ``numpy/linalg/tests/``, the namespace will be created such that
``from numpy import linalg`` has already executed.
``tests/``
----------
Rather than keeping the code and the tests in the same directory, we
put all the tests for a given subpackage in a ``tests/``
subdirectory. For our example, if it doesn't already exist you will
need to create a ``tests/`` directory in ``numpy/xxx/``. So the path
for ``test_yyy.py`` is ``numpy/xxx/tests/test_yyy.py``.
Once the ``numpy/xxx/tests/test_yyy.py`` is written, its possible to
run the tests by going to the ``tests/`` directory and typing::
python test_yyy.py
Or if you add ``numpy/xxx/tests/`` to the Python path, you could run
the tests interactively in the interpreter like this::
>>> import test_yyy
>>> test_yyy.test()
``__init__.py`` and ``setup.py``
--------------------------------
Usually, however, adding the ``tests/`` directory to the python path
isn't desirable. Instead it would better to invoke the test straight
from the module ``xxx``. To this end, simply place the following lines
at the end of your package's ``__init__.py`` file::
...
def test(level=1, verbosity=1):
from numpy.testing import Tester
return Tester().test(level, verbosity)
You will also need to add the tests directory in the configuration
section of your setup.py::
...
def configuration(parent_package='', top_path=None):
...
config.add_subpackage('tests')
return config
...
Now you can do the following to test your module::
>>> import numpy
>>> numpy.xxx.test()
Also, when invoking the entire NumPy test suite, your tests will be
found and run::
>>> import numpy
>>> numpy.test()
# your tests are included and run automatically!
Tips & Tricks
'''''''''''''
Creating many similar tests
---------------------------
If you have a collection of tests that must be run multiple times with
minor variations, it can be helpful to create a base class containing
all the common tests, and then create a subclass for each variation.
Several examples of this technique exist in NumPy; below are excerpts
from one in `numpy/linalg/tests/test_linalg.py
<https://github.com/numpy/numpy/blob/master/numpy/linalg/tests/test_linalg.py>`__::
class LinalgTestCase:
def test_single(self):
a = array([[1.,2.], [3.,4.]], dtype=single)
b = array([2., 1.], dtype=single)
self.do(a, b)
def test_double(self):
a = array([[1.,2.], [3.,4.]], dtype=double)
b = array([2., 1.], dtype=double)
self.do(a, b)
...
class TestSolve(LinalgTestCase):
def do(self, a, b):
x = linalg.solve(a, b)
assert_almost_equal(b, dot(a, x))
assert_(imply(isinstance(b, matrix), isinstance(x, matrix)))
class TestInv(LinalgTestCase):
def do(self, a, b):
a_inv = linalg.inv(a)
assert_almost_equal(dot(a, a_inv), identity(asarray(a).shape[0]))
assert_(imply(isinstance(a, matrix), isinstance(a_inv, matrix)))
In this case, we wanted to test solving a linear algebra problem using
matrices of several data types, using ``linalg.solve`` and
``linalg.inv``. The common test cases (for single-precision,
double-precision, etc. matrices) are collected in ``LinalgTestCase``.
Known failures & skipping tests
-------------------------------
Sometimes you might want to skip a test or mark it as a known failure,
such as when the test suite is being written before the code it's
meant to test, or if a test only fails on a particular architecture.
To skip a test, simply use ``skipif``::
import pytest
@pytest.mark.skipif(SkipMyTest, reason="Skipping this test because...")
def test_something(foo):
...
The test is marked as skipped if ``SkipMyTest`` evaluates to nonzero,
and the message in verbose test output is the second argument given to
``skipif``. Similarly, a test can be marked as a known failure by
using ``xfail``::
import pytest
@pytest.mark.xfail(MyTestFails, reason="This test is known to fail because...")
def test_something_else(foo):
...
Of course, a test can be unconditionally skipped or marked as a known
failure by using ``skip`` or ``xfail`` without argument, respectively.
A total of the number of skipped and known failing tests is displayed
at the end of the test run. Skipped tests are marked as ``'S'`` in
the test results (or ``'SKIPPED'`` for ``verbose > 1``), and known
failing tests are marked as ``'x'`` (or ``'XFAIL'`` if ``verbose >
1``).
Tests on random data
--------------------
Tests on random data are good, but since test failures are meant to expose
new bugs or regressions, a test that passes most of the time but fails
occasionally with no code changes is not helpful. Make the random data
deterministic by setting the random number seed before generating it. Use
either Python's ``random.seed(some_number)`` or NumPy's
``numpy.random.seed(some_number)``, depending on the source of random numbers.
Alternatively, you can use `Hypothesis`_ to generate arbitrary data.
Hypothesis manages both Python's and Numpy's random seeds for you, and
provides a very concise and powerful way to describe data (including
``hypothesis.extra.numpy``, e.g. for a set of mutually-broadcastable shapes).
The advantages over random generation include tools to replay and share
failures without requiring a fixed seed, reporting *minimal* examples for
each failure, and better-than-naive-random techniques for triggering bugs.
Documentation for ``numpy.test``
--------------------------------
.. autofunction:: numpy.test
.. _nose: https://nose.readthedocs.io/en/latest/
.. _pytest: https://pytest.readthedocs.io
.. _parameterization: https://docs.pytest.org/en/latest/parametrize.html
.. _Hypothesis: https://hypothesis.readthedocs.io/en/latest/
.. _vscode: https://code.visualstudio.com/docs/python/testing#_enable-a-test-framework
.. _pycharm: https://www.jetbrains.com/help/pycharm/testing-your-first-python-application.html

View File

@ -1,29 +1,29 @@
# Doxyfile for NumPy C API
# See http://www.doxygen.nl/manual/config.html
PROJECT_NAME = numpy
PROJECT_NUMBER = 2.0.0
OUTPUT_DIRECTORY = build
STRIP_FROM_PATH = ../../numpy/core
INHERIT_DOCS = YES
TAB_SIZE = 8
OPTIMIZE_OUTPUT_FOR_C = YES
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_STATIC = YES
CASE_SENSE_NAMES = NO
INPUT = ../../numpy/core/src \
../../numpy/core/include
FILE_PATTERNS = *.h *.c *.src
RECURSIVE = YES
INPUT_FILTER = ./numpyfilter.py
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
ALPHABETICAL_INDEX = NO
GENERATE_HTML = YES
HTML_TIMESTAMP = YES
GENERATE_TREEVIEW = YES
SEARCHENGINE = NO
GENERATE_LATEX = NO
PAPER_TYPE = a4wide
GENERATE_XML = NO
HAVE_DOT = NO
# Doxyfile for NumPy C API
# See http://www.doxygen.nl/manual/config.html
PROJECT_NAME = numpy
PROJECT_NUMBER = 2.0.0
OUTPUT_DIRECTORY = build
STRIP_FROM_PATH = ../../numpy/core
INHERIT_DOCS = YES
TAB_SIZE = 8
OPTIMIZE_OUTPUT_FOR_C = YES
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_STATIC = YES
CASE_SENSE_NAMES = NO
INPUT = ../../numpy/core/src \
../../numpy/core/include
FILE_PATTERNS = *.h *.c *.src
RECURSIVE = YES
INPUT_FILTER = ./numpyfilter.py
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
ALPHABETICAL_INDEX = NO
GENERATE_HTML = YES
HTML_TIMESTAMP = YES
GENERATE_TREEVIEW = YES
SEARCHENGINE = NO
GENERATE_LATEX = NO
PAPER_TYPE = a4wide
GENERATE_XML = NO
HAVE_DOT = NO

View File

@ -1,10 +1,10 @@
all: build
build:
doxygen
clean:
rm -rf build
.PHONY: all build clean
all: build
build:
doxygen
clean:
rm -rf build
.PHONY: all build clean

View File

@ -1,31 +1,31 @@
cdoc
====
This is a simple Doxygen project for building NumPy C code documentation,
with docstrings extracted from the C sources themselves.
The understood syntax for documentation in the C source is
/*
* Some text in reStructuredText format
*/
int function_to_which_the_text_applies()
{
...
}
/*
* More text in reStructuredText format
*/
struct
{
int variable_1; /* Documentation for variable_1 */
/*
* Documentation for variable_2
*/
int variable_2;
} struct_name_t;
Please do not use JavaDoc or Doxygen-specific formatting at the moment.
cdoc
====
This is a simple Doxygen project for building NumPy C code documentation,
with docstrings extracted from the C sources themselves.
The understood syntax for documentation in the C source is
/*
* Some text in reStructuredText format
*/
int function_to_which_the_text_applies()
{
...
}
/*
* More text in reStructuredText format
*/
struct
{
int variable_1; /* Documentation for variable_1 */
/*
* Documentation for variable_2
*/
int variable_2;
} struct_name_t;
Please do not use JavaDoc or Doxygen-specific formatting at the moment.

View File

@ -1,104 +1,104 @@
#!/usr/bin/env python3
"""
numpyfilter.py [-h] inputfile
Interpret C comments as ReStructuredText, and replace them by the HTML output.
Also, add Doxygen /** and /**< syntax automatically where appropriate.
"""
import sys
import re
import os
import textwrap
from numpy.compat import pickle
CACHE_FILE = 'build/rst-cache.pck'
def main():
import argparse
parser = argparse.ArgumentParser(usage=__doc__.strip())
parser.add_argument('input_file', help='input file')
args = parser.parse_args()
comment_re = re.compile(r'(\n.*?)/\*(.*?)\*/', re.S)
cache = load_cache()
try:
with open(args.input_file, 'r') as f:
text = f.read()
text = comment_re.sub(lambda m: process_match(m, cache), text)
sys.stdout.write(text)
finally:
save_cache(cache)
def filter_comment(text):
if text.startswith('NUMPY_API'):
text = text[9:].strip()
if text.startswith('UFUNC_API'):
text = text[9:].strip()
html = render_html(text)
return html
def process_match(m, cache=None):
pre, rawtext = m.groups()
preline = pre.split("\n")[-1]
if cache is not None and rawtext in cache:
text = cache[rawtext]
else:
text = re.compile(r'^\s*\*', re.M).sub('', rawtext)
text = textwrap.dedent(text)
text = filter_comment(text)
if cache is not None:
cache[rawtext] = text
if preline.strip():
return pre + "/**< " + text + " */"
else:
return pre + "/** " + text + " */"
def load_cache():
if os.path.exists(CACHE_FILE):
with open(CACHE_FILE, 'rb') as f:
try:
cache = pickle.load(f)
except Exception:
cache = {}
else:
cache = {}
return cache
def save_cache(cache):
with open(CACHE_FILE + '.new', 'wb') as f:
pickle.dump(cache, f)
os.rename(CACHE_FILE + '.new', CACHE_FILE)
def render_html(text):
import docutils.parsers.rst
import docutils.writers.html4css1
import docutils.core
docutils.parsers.rst.roles.DEFAULT_INTERPRETED_ROLE = 'title-reference'
writer = docutils.writers.html4css1.Writer()
parts = docutils.core.publish_parts(
text,
writer=writer,
settings_overrides = dict(halt_level=5,
traceback=True,
default_reference_context='title-reference',
stylesheet_path='',
# security settings:
raw_enabled=0,
file_insertion_enabled=0,
_disable_config=1,
)
)
return parts['html_body']
if __name__ == "__main__": main()
#!/usr/bin/env python3
"""
numpyfilter.py [-h] inputfile
Interpret C comments as ReStructuredText, and replace them by the HTML output.
Also, add Doxygen /** and /**< syntax automatically where appropriate.
"""
import sys
import re
import os
import textwrap
from numpy.compat import pickle
CACHE_FILE = 'build/rst-cache.pck'
def main():
import argparse
parser = argparse.ArgumentParser(usage=__doc__.strip())
parser.add_argument('input_file', help='input file')
args = parser.parse_args()
comment_re = re.compile(r'(\n.*?)/\*(.*?)\*/', re.S)
cache = load_cache()
try:
with open(args.input_file, 'r') as f:
text = f.read()
text = comment_re.sub(lambda m: process_match(m, cache), text)
sys.stdout.write(text)
finally:
save_cache(cache)
def filter_comment(text):
if text.startswith('NUMPY_API'):
text = text[9:].strip()
if text.startswith('UFUNC_API'):
text = text[9:].strip()
html = render_html(text)
return html
def process_match(m, cache=None):
pre, rawtext = m.groups()
preline = pre.split("\n")[-1]
if cache is not None and rawtext in cache:
text = cache[rawtext]
else:
text = re.compile(r'^\s*\*', re.M).sub('', rawtext)
text = textwrap.dedent(text)
text = filter_comment(text)
if cache is not None:
cache[rawtext] = text
if preline.strip():
return pre + "/**< " + text + " */"
else:
return pre + "/** " + text + " */"
def load_cache():
if os.path.exists(CACHE_FILE):
with open(CACHE_FILE, 'rb') as f:
try:
cache = pickle.load(f)
except Exception:
cache = {}
else:
cache = {}
return cache
def save_cache(cache):
with open(CACHE_FILE + '.new', 'wb') as f:
pickle.dump(cache, f)
os.rename(CACHE_FILE + '.new', CACHE_FILE)
def render_html(text):
import docutils.parsers.rst
import docutils.writers.html4css1
import docutils.core
docutils.parsers.rst.roles.DEFAULT_INTERPRETED_ROLE = 'title-reference'
writer = docutils.writers.html4css1.Writer()
parts = docutils.core.publish_parts(
text,
writer=writer,
settings_overrides = dict(halt_level=5,
traceback=True,
default_reference_context='title-reference',
stylesheet_path='',
# security settings:
raw_enabled=0,
file_insertion_enabled=0,
_disable_config=1,
)
)
return parts['html_body']
if __name__ == "__main__": main()

File diff suppressed because it is too large Load Diff

View File

@ -1,39 +1,39 @@
=========
Changelog
=========
Contributors
============
A total of 10 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Eric Wieser
* Greg Young
* Joerg Behrmann +
* John Kirkham
* Julian Taylor
* Marten van Kerkwijk
* Matthew Brett
* Shota Kawabuchi
* Jean Utke +
Pull requests merged
====================
* `#8483 <https://github.com/numpy/numpy/pull/8483>`__: BUG: Fix wrong future nat warning and equiv type logic error...
* `#8489 <https://github.com/numpy/numpy/pull/8489>`__: BUG: Fix wrong masked median for some special cases
* `#8490 <https://github.com/numpy/numpy/pull/8490>`__: DOC: Place np.average in inline code
* `#8491 <https://github.com/numpy/numpy/pull/8491>`__: TST: Work around isfinite inconsistency on i386
* `#8494 <https://github.com/numpy/numpy/pull/8494>`__: BUG: Guard against replacing constants without '_' spec in f2py.
* `#8524 <https://github.com/numpy/numpy/pull/8524>`__: BUG: Fix mean for float 16 non-array inputs for 1.12
* `#8571 <https://github.com/numpy/numpy/pull/8571>`__: BUG: Fix calling python api with error set and minor leaks for...
* `#8602 <https://github.com/numpy/numpy/pull/8602>`__: BUG: Make iscomplexobj compatible with custom dtypes again
* `#8618 <https://github.com/numpy/numpy/pull/8618>`__: BUG: Fix undefined behaviour induced by bad __array_wrap__
* `#8648 <https://github.com/numpy/numpy/pull/8648>`__: BUG: Fix MaskedArray.__setitem__
* `#8659 <https://github.com/numpy/numpy/pull/8659>`__: BUG: PPC64el machines are POWER for Fortran in f2py
* `#8665 <https://github.com/numpy/numpy/pull/8665>`__: BUG: Look up methods on MaskedArray in `_frommethod`
* `#8674 <https://github.com/numpy/numpy/pull/8674>`__: BUG: Remove extra digit in binary_repr at limit
* `#8704 <https://github.com/numpy/numpy/pull/8704>`__: BUG: Fix deepcopy regression for empty arrays.
* `#8707 <https://github.com/numpy/numpy/pull/8707>`__: BUG: Fix ma.median for empty ndarrays
=========
Changelog
=========
Contributors
============
A total of 10 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Eric Wieser
* Greg Young
* Joerg Behrmann +
* John Kirkham
* Julian Taylor
* Marten van Kerkwijk
* Matthew Brett
* Shota Kawabuchi
* Jean Utke +
Pull requests merged
====================
* `#8483 <https://github.com/numpy/numpy/pull/8483>`__: BUG: Fix wrong future nat warning and equiv type logic error...
* `#8489 <https://github.com/numpy/numpy/pull/8489>`__: BUG: Fix wrong masked median for some special cases
* `#8490 <https://github.com/numpy/numpy/pull/8490>`__: DOC: Place np.average in inline code
* `#8491 <https://github.com/numpy/numpy/pull/8491>`__: TST: Work around isfinite inconsistency on i386
* `#8494 <https://github.com/numpy/numpy/pull/8494>`__: BUG: Guard against replacing constants without '_' spec in f2py.
* `#8524 <https://github.com/numpy/numpy/pull/8524>`__: BUG: Fix mean for float 16 non-array inputs for 1.12
* `#8571 <https://github.com/numpy/numpy/pull/8571>`__: BUG: Fix calling python api with error set and minor leaks for...
* `#8602 <https://github.com/numpy/numpy/pull/8602>`__: BUG: Make iscomplexobj compatible with custom dtypes again
* `#8618 <https://github.com/numpy/numpy/pull/8618>`__: BUG: Fix undefined behaviour induced by bad __array_wrap__
* `#8648 <https://github.com/numpy/numpy/pull/8648>`__: BUG: Fix MaskedArray.__setitem__
* `#8659 <https://github.com/numpy/numpy/pull/8659>`__: BUG: PPC64el machines are POWER for Fortran in f2py
* `#8665 <https://github.com/numpy/numpy/pull/8665>`__: BUG: Look up methods on MaskedArray in `_frommethod`
* `#8674 <https://github.com/numpy/numpy/pull/8674>`__: BUG: Remove extra digit in binary_repr at limit
* `#8704 <https://github.com/numpy/numpy/pull/8704>`__: BUG: Fix deepcopy regression for empty arrays.
* `#8707 <https://github.com/numpy/numpy/pull/8707>`__: BUG: Fix ma.median for empty ndarrays

View File

@ -1,426 +1,426 @@
=========
Changelog
=========
Contributors
============
A total of 102 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* A. Jesse Jiryu Davis +
* Alessandro Pietro Bardelli +
* Alex Rothberg +
* Alexander Shadchin
* Allan Haldane
* Andres Guzman-Ballen +
* Antoine Pitrou
* Antony Lee
* B R S Recht +
* Baurzhan Muftakhidinov +
* Ben Rowland
* Benda Xu +
* Blake Griffith
* Bradley Wogsland +
* Brandon Carter +
* CJ Carey
* Charles Harris
* Christoph Gohlke
* Danny Hermes +
* David Hagen +
* Duke Vijitbenjaronk +
* Egor Klenin +
* Elliott Forney +
* Elliott M Forney +
* Endolith
* Eric Wieser
* Erik M. Bray
* Eugene +
* Evan Limanto +
* Felix Berkenkamp +
* François Bissey +
* Frederic Bastien
* Greg Young
* Gregory R. Lee
* Importance of Being Ernest +
* Jaime Fernandez
* Jakub Wilk +
* James Cowgill +
* James Sanders
* Jean Utke +
* Jesse Thoren +
* Jim Crist +
* Joerg Behrmann +
* John Kirkham
* Jonathan Helmus
* Jonathan L Long
* Jonathan Tammo Siebert +
* Joseph Fox-Rabinovitz
* Joshua Loyal +
* Juan Nunez-Iglesias +
* Julian Taylor
* Kirill Balunov +
* Likhith Chitneni +
* Loïc Estève
* Mads Ohm Larsen
* Marein Könings +
* Marten van Kerkwijk
* Martin Thoma
* Martino Sorbaro +
* Marvin Schmidt +
* Matthew Brett
* Matthias Bussonnier +
* Matthias C. M. Troffaes +
* Matti Picus
* Michael Seifert
* Mikhail Pak +
* Mortada Mehyar
* Nathaniel J. Smith
* Nick Papior
* Oscar Villellas +
* Pauli Virtanen
* Pavel Potocek
* Pete Peeradej Tanruangporn +
* Philipp A +
* Ralf Gommers
* Robert Kern
* Roland Kaufmann +
* Ronan Lamy
* Sami Salonen +
* Sanchez Gonzalez Alvaro
* Sebastian Berg
* Shota Kawabuchi
* Simon Gibbons
* Stefan Otte
* Stefan Peterson +
* Stephan Hoyer
* Søren Fuglede Jørgensen +
* Takuya Akiba
* Tom Boyd +
* Ville Skyttä +
* Warren Weckesser
* Wendell Smith
* Yu Feng
* Zixu Zhao +
* Zè Vinícius +
* aha66 +
* davidjn +
* drabach +
* drlvk +
* jsh9 +
* solarjoe +
* zengi +
Pull requests merged
====================
A total of 309 pull requests were merged for this release.
* `#3861 <https://github.com/numpy/numpy/pull/3861>`__: ENH: Make it possible to NpyIter_RemoveAxis an empty dimension
* `#5302 <https://github.com/numpy/numpy/pull/5302>`__: Fixed meshgrid to return arrays with same dtype as arguments.
* `#5726 <https://github.com/numpy/numpy/pull/5726>`__: BUG, API: np.random.multivariate_normal behavior with bad covariance...
* `#6632 <https://github.com/numpy/numpy/pull/6632>`__: TST/BUG: fromfile - fix test and expose bug with io class argument
* `#6659 <https://github.com/numpy/numpy/pull/6659>`__: BUG: Let linspace accept input that has an array_interface.
* `#7742 <https://github.com/numpy/numpy/pull/7742>`__: Add `axis` argument to numpy.unique
* `#7862 <https://github.com/numpy/numpy/pull/7862>`__: BLD: rewrite np.distutils.exec_command.exec_command()
* `#7997 <https://github.com/numpy/numpy/pull/7997>`__: ENH: avoid temporary arrays in expressions (again)
* `#8043 <https://github.com/numpy/numpy/pull/8043>`__: ENH: umath: ensure ufuncs are well-defined with memory overlapping...
* `#8106 <https://github.com/numpy/numpy/pull/8106>`__: DOC: Document release procedure with a walkthrough.
* `#8194 <https://github.com/numpy/numpy/pull/8194>`__: BUG: np.piecewise not working for scalars
* `#8235 <https://github.com/numpy/numpy/pull/8235>`__: BUG: add checks for some invalid structured dtypes. Fixes #2865.
* `#8241 <https://github.com/numpy/numpy/pull/8241>`__: MAINT: Prepare for 1.13.0 after 1.12.x branch
* `#8242 <https://github.com/numpy/numpy/pull/8242>`__: BUG: Update operator `**` tests for new behavior.
* `#8244 <https://github.com/numpy/numpy/pull/8244>`__: DOC: fix typos in arrayprint docstrings.
* `#8247 <https://github.com/numpy/numpy/pull/8247>`__: ENH: Add `__array_ufunc__`
* `#8251 <https://github.com/numpy/numpy/pull/8251>`__: MAINT: Cleaned up mailmap
* `#8267 <https://github.com/numpy/numpy/pull/8267>`__: DOC: Changed shape assignment example to reshape. Elaborated...
* `#8271 <https://github.com/numpy/numpy/pull/8271>`__: TST: Path test should resolve symlinks when comparing
* `#8277 <https://github.com/numpy/numpy/pull/8277>`__: DOC: improve comment in prepare_index
* `#8279 <https://github.com/numpy/numpy/pull/8279>`__: BUG: bool(dtype) is True
* `#8281 <https://github.com/numpy/numpy/pull/8281>`__: DOC: Update 1.12.0 release notes.
* `#8284 <https://github.com/numpy/numpy/pull/8284>`__: BUG: Fix iteration over reversed subspaces in mapiter_@name@
* `#8285 <https://github.com/numpy/numpy/pull/8285>`__: BUG: Fix pavement.py write_release_task.
* `#8287 <https://github.com/numpy/numpy/pull/8287>`__: DOC: Update 1.13.0 release notes.
* `#8290 <https://github.com/numpy/numpy/pull/8290>`__: MAINT: let average preserve subclass information.
* `#8297 <https://github.com/numpy/numpy/pull/8297>`__: DEP: Handle expired deprecations.
* `#8299 <https://github.com/numpy/numpy/pull/8299>`__: BUG: Make f2py respect kind specifications for real parameters
* `#8302 <https://github.com/numpy/numpy/pull/8302>`__: BUG: Fix PyPy crash in PyUFunc_GenericReduction.
* `#8308 <https://github.com/numpy/numpy/pull/8308>`__: BUG: do not link to Accelerate if OpenBLAS, MKL or BLIS are found.
* `#8312 <https://github.com/numpy/numpy/pull/8312>`__: DEP: Drop deprecated boolean indexing behavior and update to...
* `#8318 <https://github.com/numpy/numpy/pull/8318>`__: BLD: blacklist powl (longdouble power function) on OS X.
* `#8326 <https://github.com/numpy/numpy/pull/8326>`__: ENH: Vectorize packbits with SSE2
* `#8327 <https://github.com/numpy/numpy/pull/8327>`__: BUG: Fix packbits to correctly handle empty arrays
* `#8335 <https://github.com/numpy/numpy/pull/8335>`__: BUG: Fix ndarray.tofile large file corruption in append mode
* `#8337 <https://github.com/numpy/numpy/pull/8337>`__: BUG: fix test_api test that fails intermittently in python 3
* `#8343 <https://github.com/numpy/numpy/pull/8343>`__: TST: Ellipsis indexing creates a view
* `#8348 <https://github.com/numpy/numpy/pull/8348>`__: ENH: Allow bincount(..., minlength=0).
* `#8349 <https://github.com/numpy/numpy/pull/8349>`__: BUG: Apply more robust string converts in loadtxt
* `#8351 <https://github.com/numpy/numpy/pull/8351>`__: BUG: correct letter case
* `#8354 <https://github.com/numpy/numpy/pull/8354>`__: BUG: Fix suppress_warnings (again) for Python 3.6.
* `#8355 <https://github.com/numpy/numpy/pull/8355>`__: Fix building extensions with MinGW for Python 3.5
* `#8356 <https://github.com/numpy/numpy/pull/8356>`__: Allow extensions to be built with MinGW in a virtualenv
* `#8360 <https://github.com/numpy/numpy/pull/8360>`__: MAINT: Drop special case code for python2 < 2.7 and python3 <...
* `#8364 <https://github.com/numpy/numpy/pull/8364>`__: BUG: handle unmasked NaN in ma.median like normal median
* `#8366 <https://github.com/numpy/numpy/pull/8366>`__: BUG: fix nanpercentile not returning scalar with axis argument
* `#8367 <https://github.com/numpy/numpy/pull/8367>`__: xlocale.h is not available in newlib / Cygwin
* `#8368 <https://github.com/numpy/numpy/pull/8368>`__: ENH: Implement most linalg operations for 0x0 matrices
* `#8369 <https://github.com/numpy/numpy/pull/8369>`__: TST: Fix various incorrect linalg tests
* `#8374 <https://github.com/numpy/numpy/pull/8374>`__: DOC: Fixed minor typo in William Gosset's name
* `#8377 <https://github.com/numpy/numpy/pull/8377>`__: Switch to the PyPI version of plex to generate lapack_lite
* `#8380 <https://github.com/numpy/numpy/pull/8380>`__: DOC: Update 1.12.0-notes.rst.
* `#8381 <https://github.com/numpy/numpy/pull/8381>`__: MAINT: Rebuild lapack lite
* `#8382 <https://github.com/numpy/numpy/pull/8382>`__: DEP: Fix escaped string characters deprecated in Python 3.6.
* `#8384 <https://github.com/numpy/numpy/pull/8384>`__: ENH: Add tool to check for deprecated escaped characters.
* `#8388 <https://github.com/numpy/numpy/pull/8388>`__: API: Return scalars for scalar inputs to np.real/imag
* `#8389 <https://github.com/numpy/numpy/pull/8389>`__: ENH: retune apply_along_axis nanmedian cutoff
* `#8395 <https://github.com/numpy/numpy/pull/8395>`__: DOC: create 1.11.3 release notes.
* `#8398 <https://github.com/numpy/numpy/pull/8398>`__: BUG: Fix author search in announce.py
* `#8400 <https://github.com/numpy/numpy/pull/8400>`__: Fix `corrcoef` and `cov` rowvar param handling
* `#8401 <https://github.com/numpy/numpy/pull/8401>`__: DOC, MAINT: Update 1.12.0 notes and mailmap.
* `#8410 <https://github.com/numpy/numpy/pull/8410>`__: BUG: Fixed behavior of assert_array_less for +/-inf
* `#8414 <https://github.com/numpy/numpy/pull/8414>`__: BUG: fixed failure of np.ma.median for 1-D even arrays.
* `#8416 <https://github.com/numpy/numpy/pull/8416>`__: BUG operations involving MaskedArray with output given do not...
* `#8421 <https://github.com/numpy/numpy/pull/8421>`__: ENH: Add isnat function and make comparison tests NAT specific
* `#8423 <https://github.com/numpy/numpy/pull/8423>`__: Adding isin function for multidimensional arrays
* `#8426 <https://github.com/numpy/numpy/pull/8426>`__: BUG: Fix apply_along_axis() for when func1d() returns a non-ndarray
* `#8434 <https://github.com/numpy/numpy/pull/8434>`__: TST: Update 3.6-dev tests to 3.6 after Python final release.
* `#8441 <https://github.com/numpy/numpy/pull/8441>`__: BUG: Fix crash on 0d return value in apply_along_axis
* `#8443 <https://github.com/numpy/numpy/pull/8443>`__: BUG: fix set memmap offset attribute correctly when offset is...
* `#8445 <https://github.com/numpy/numpy/pull/8445>`__: BUG: correct norm='ortho' scaling for rfft when n != None
* `#8446 <https://github.com/numpy/numpy/pull/8446>`__: ENH: gradient support for unevenly spaced data
* `#8448 <https://github.com/numpy/numpy/pull/8448>`__: TST: remove a duplicate test. Closes gh-8447.
* `#8452 <https://github.com/numpy/numpy/pull/8452>`__: BUG: assert_almost_equal fails on subclasses that cannot handle...
* `#8454 <https://github.com/numpy/numpy/pull/8454>`__: MAINT: Fix building extensions with MinGW in WinPython 3.4
* `#8464 <https://github.com/numpy/numpy/pull/8464>`__: [DOC]Small release doc fix
* `#8468 <https://github.com/numpy/numpy/pull/8468>`__: BUG: Ensure inf/nan removal in assert_array_compare is matrix-safe.
* `#8470 <https://github.com/numpy/numpy/pull/8470>`__: DOC: Add example to np.savez_compressed
* `#8474 <https://github.com/numpy/numpy/pull/8474>`__: MAINT: use env in shebang instead of absolute path to python
* `#8475 <https://github.com/numpy/numpy/pull/8475>`__: DOC: improve clip docstring
* `#8478 <https://github.com/numpy/numpy/pull/8478>`__: MAINT: Forward port accumulated changes from the 1.12.0 release.
* `#8482 <https://github.com/numpy/numpy/pull/8482>`__: TST: switch to ubuntu yakkety for i386 testing
* `#8483 <https://github.com/numpy/numpy/pull/8483>`__: BUG: fix wrong future nat warning and equiv type logic error
* `#8486 <https://github.com/numpy/numpy/pull/8486>`__: BUG: Prevent crash for length-0 input to fromrecords
* `#8488 <https://github.com/numpy/numpy/pull/8488>`__: ENH: Improve the alignment of `recarray.__repr__`
* `#8489 <https://github.com/numpy/numpy/pull/8489>`__: BUG: fix wrong masked median for some special cases
* `#8490 <https://github.com/numpy/numpy/pull/8490>`__: DOC: Place np.average in inline code
* `#8491 <https://github.com/numpy/numpy/pull/8491>`__: TST: work around isfinite inconsistency on i386
* `#8494 <https://github.com/numpy/numpy/pull/8494>`__: BUG: guard against replacing constants without `'_'` spec
* `#8496 <https://github.com/numpy/numpy/pull/8496>`__: Update LICENSE.txt to 2017
* `#8497 <https://github.com/numpy/numpy/pull/8497>`__: BUG: Fix creating a np.matrix from string syntax involving booleans
* `#8501 <https://github.com/numpy/numpy/pull/8501>`__: Changing spurious Legendre reference to Chebyshev in chebfit...
* `#8504 <https://github.com/numpy/numpy/pull/8504>`__: ENH: hard-code finfo parameters for known types
* `#8508 <https://github.com/numpy/numpy/pull/8508>`__: BUG: Fix loss of dimensionality of np.ma.masked in ufunc
* `#8524 <https://github.com/numpy/numpy/pull/8524>`__: BUG: fix mean for float 16 non-array inputs
* `#8527 <https://github.com/numpy/numpy/pull/8527>`__: DOC: fix return value for PyArray_Resize
* `#8539 <https://github.com/numpy/numpy/pull/8539>`__: BUG: core: in dot(), make copies if out has memory overlap with...
* `#8540 <https://github.com/numpy/numpy/pull/8540>`__: DOC: Update arrays.ndarray.rst
* `#8541 <https://github.com/numpy/numpy/pull/8541>`__: DOC: Revert 8540 patch 1
* `#8542 <https://github.com/numpy/numpy/pull/8542>`__: MAINT: typo in histogram docstring
* `#8551 <https://github.com/numpy/numpy/pull/8551>`__: DOC: Missing backticks
* `#8555 <https://github.com/numpy/numpy/pull/8555>`__: Fixing docstring error in polyvander2d
* `#8558 <https://github.com/numpy/numpy/pull/8558>`__: DOC: Improve documentation of None as interval bounds in clip.
* `#8567 <https://github.com/numpy/numpy/pull/8567>`__: TST: core: use aligned memory for dot() out= arrays
* `#8568 <https://github.com/numpy/numpy/pull/8568>`__: TST: re-enable PPC longdouble spacing tests
* `#8569 <https://github.com/numpy/numpy/pull/8569>`__: ENH: Add missing `__tracebackhide__` to testing functions.
* `#8570 <https://github.com/numpy/numpy/pull/8570>`__: BUG: fix issue #8250 when np.array gets called on an invalid...
* `#8571 <https://github.com/numpy/numpy/pull/8571>`__: BUG: fix calling python api with error set and minor leaks
* `#8572 <https://github.com/numpy/numpy/pull/8572>`__: MAINT: remove ma out= workaround
* `#8575 <https://github.com/numpy/numpy/pull/8575>`__: DOC: fix several typos #8537.
* `#8584 <https://github.com/numpy/numpy/pull/8584>`__: MAINT: Use the same exception for all bad axis requests
* `#8586 <https://github.com/numpy/numpy/pull/8586>`__: MAINT: PyPy3 compatibility: sys.getsizeof()
* `#8590 <https://github.com/numpy/numpy/pull/8590>`__: BUG MaskedArray `__eq__` wrong for masked scalar, multi-d recarray
* `#8591 <https://github.com/numpy/numpy/pull/8591>`__: BUG: make np.squeeze always return an array, never a scalar
* `#8592 <https://github.com/numpy/numpy/pull/8592>`__: MAINT: Remove `__setslice__` and `__getslice__`
* `#8594 <https://github.com/numpy/numpy/pull/8594>`__: BUG: Fix `MaskedArray.__setitem__`
* `#8596 <https://github.com/numpy/numpy/pull/8596>`__: BUG: match hard-coded finfo to calculated MachAr
* `#8602 <https://github.com/numpy/numpy/pull/8602>`__: BUG: Make iscomplexobj compatible with custom dtypes again
* `#8605 <https://github.com/numpy/numpy/pull/8605>`__: DOC: gradient uses 1st order central difference in the interior
* `#8606 <https://github.com/numpy/numpy/pull/8606>`__: Revert "DOC: gradient uses 1st order central difference in the...
* `#8610 <https://github.com/numpy/numpy/pull/8610>`__: Revert "BUG: make np.squeeze always return an array, never a...
* `#8611 <https://github.com/numpy/numpy/pull/8611>`__: DOC: The axis argument of average can be a tuple of ints
* `#8612 <https://github.com/numpy/numpy/pull/8612>`__: MAINT: Decrease merge conflicts in release notes
* `#8614 <https://github.com/numpy/numpy/pull/8614>`__: BUG: Don't leak internal exceptions when given an empty array
* `#8617 <https://github.com/numpy/numpy/pull/8617>`__: BUG: Copy meshgrid after broadcasting
* `#8618 <https://github.com/numpy/numpy/pull/8618>`__: BUG: Fix undefined behaviour induced by bad `__array_wrap__`
* `#8619 <https://github.com/numpy/numpy/pull/8619>`__: BUG: blas_info should record include_dirs
* `#8625 <https://github.com/numpy/numpy/pull/8625>`__: DOC: Create 1.12.1 release notes.
* `#8629 <https://github.com/numpy/numpy/pull/8629>`__: ENH: Improve the efficiency of indices
* `#8631 <https://github.com/numpy/numpy/pull/8631>`__: Fix typo in fill_diagonal docstring.
* `#8633 <https://github.com/numpy/numpy/pull/8633>`__: DOC: Mention boolean arrays in the ix_ documentation.
* `#8636 <https://github.com/numpy/numpy/pull/8636>`__: MAINT: ensure benchmark suite is importable on old numpy versions
* `#8638 <https://github.com/numpy/numpy/pull/8638>`__: BUG: fix wrong odd determination in packbits
* `#8643 <https://github.com/numpy/numpy/pull/8643>`__: BUG: Fix double-wrapping of object scalars
* `#8645 <https://github.com/numpy/numpy/pull/8645>`__: MAINT: Use getmask where possible
* `#8646 <https://github.com/numpy/numpy/pull/8646>`__: ENH: Allow for an in-place nan_to_num conversion
* `#8647 <https://github.com/numpy/numpy/pull/8647>`__: Fix various bugs in np.ma.where
* `#8649 <https://github.com/numpy/numpy/pull/8649>`__: Upgrade to Lapack lite 3.2.2
* `#8650 <https://github.com/numpy/numpy/pull/8650>`__: DOC: Fix obsolete data in readme
* `#8651 <https://github.com/numpy/numpy/pull/8651>`__: MAINT: Split lapack_lite more logically across files
* `#8652 <https://github.com/numpy/numpy/pull/8652>`__: TST: Improve testing of read-only mmaps
* `#8655 <https://github.com/numpy/numpy/pull/8655>`__: MAINT: Squelch parenthesis warnings from GCC
* `#8656 <https://github.com/numpy/numpy/pull/8656>`__: BUG: allow for precision > 17 in longdouble repr test
* `#8658 <https://github.com/numpy/numpy/pull/8658>`__: BUG: fix denormal linspace test for longdouble
* `#8659 <https://github.com/numpy/numpy/pull/8659>`__: BUG: PPC64el machines are POWER for Fortran
* `#8663 <https://github.com/numpy/numpy/pull/8663>`__: ENH: Fix alignment of repr for array subclasses
* `#8665 <https://github.com/numpy/numpy/pull/8665>`__: BUG: Look up methods on MaskedArray in _frommethod
* `#8667 <https://github.com/numpy/numpy/pull/8667>`__: BUG: Preserve identity of dtypes in make_mask_descr
* `#8668 <https://github.com/numpy/numpy/pull/8668>`__: DOC: Add more examples for `np.c_`
* `#8669 <https://github.com/numpy/numpy/pull/8669>`__: MAINT: Warn users when calling np.ma.MaskedArray.partition function.
* `#8672 <https://github.com/numpy/numpy/pull/8672>`__: BUG: Use int for axes, not intp
* `#8674 <https://github.com/numpy/numpy/pull/8674>`__: BUG: Remove extra digit in binary_repr at limit
* `#8675 <https://github.com/numpy/numpy/pull/8675>`__: BUG: Fix problems detecting runtime for MSYS2 compiler on Windows
* `#8677 <https://github.com/numpy/numpy/pull/8677>`__: MAINT: We can now rely on itertools.izip_longest existing
* `#8678 <https://github.com/numpy/numpy/pull/8678>`__: BUG: Fix argsort vs sort in Masked arrays
* `#8680 <https://github.com/numpy/numpy/pull/8680>`__: DOC: Removed broken link
* `#8682 <https://github.com/numpy/numpy/pull/8682>`__: ENH: allow argument to matrix_rank to be stacked
* `#8685 <https://github.com/numpy/numpy/pull/8685>`__: ENH: add dtype.ndim
* `#8688 <https://github.com/numpy/numpy/pull/8688>`__: DOC: Added note to np.diff
* `#8692 <https://github.com/numpy/numpy/pull/8692>`__: MAINT: Fix deprecated escape sequences
* `#8694 <https://github.com/numpy/numpy/pull/8694>`__: BUG: missing comma disabled some header checks
* `#8695 <https://github.com/numpy/numpy/pull/8695>`__: MAINT: Remove numpy-macosx-installer and win32build directories.
* `#8698 <https://github.com/numpy/numpy/pull/8698>`__: DOC: fix incorrect mask value when value was changed
* `#8702 <https://github.com/numpy/numpy/pull/8702>`__: DOC: Fixed small mistakes in numpy.copy documentation.
* `#8704 <https://github.com/numpy/numpy/pull/8704>`__: BUG: Fix deepcopy regression for empty arrays.
* `#8705 <https://github.com/numpy/numpy/pull/8705>`__: BUG: fix ma.median for empty ndarrays
* `#8709 <https://github.com/numpy/numpy/pull/8709>`__: DOC: Fixed minor typos in temp_elide.c
* `#8713 <https://github.com/numpy/numpy/pull/8713>`__: BUG: Don't signal FP exceptions in np.absolute
* `#8716 <https://github.com/numpy/numpy/pull/8716>`__: MAINT: Mark some tests with slow decorator
* `#8718 <https://github.com/numpy/numpy/pull/8718>`__: BUG: Fix assert statements in random.choice tests
* `#8729 <https://github.com/numpy/numpy/pull/8729>`__: DOC: Add float_power to routines.math documentation autosummary
* `#8731 <https://github.com/numpy/numpy/pull/8731>`__: DOC: added linalg.multi_dot to doc
* `#8737 <https://github.com/numpy/numpy/pull/8737>`__: DOC: Mention that expand_dims and squeeze are inverses
* `#8744 <https://github.com/numpy/numpy/pull/8744>`__: MAINT: Remove files and constants that were only needed for Bento.
* `#8745 <https://github.com/numpy/numpy/pull/8745>`__: TST: Remove unused env from tox
* `#8746 <https://github.com/numpy/numpy/pull/8746>`__: DOC: Update 1.12.1 release notes.
* `#8749 <https://github.com/numpy/numpy/pull/8749>`__: DOC: Add 1.12.1 release notes to documentation.
* `#8750 <https://github.com/numpy/numpy/pull/8750>`__: BUG: Fix np.average for object arrays
* `#8754 <https://github.com/numpy/numpy/pull/8754>`__: ENH: Allows building npy_math with static inlining
* `#8756 <https://github.com/numpy/numpy/pull/8756>`__: BUG: Correct lapack ld* args
* `#8759 <https://github.com/numpy/numpy/pull/8759>`__: BUG: Add HOME to the git environment.
* `#8761 <https://github.com/numpy/numpy/pull/8761>`__: MAINT: better warning message when running build_src from sdist
* `#8762 <https://github.com/numpy/numpy/pull/8762>`__: BUG: Prevent crash in `poly1d.__eq__`
* `#8781 <https://github.com/numpy/numpy/pull/8781>`__: BUG: Revert gh-8570.
* `#8788 <https://github.com/numpy/numpy/pull/8788>`__: BUG: Fix scipy incompatibility with cleanup to poly1d
* `#8792 <https://github.com/numpy/numpy/pull/8792>`__: DOC: Fix typos
* `#8793 <https://github.com/numpy/numpy/pull/8793>`__: DOC: fix minor docstring typos
* `#8795 <https://github.com/numpy/numpy/pull/8795>`__: ENH: Add the 'heaviside' ufunc.
* `#8796 <https://github.com/numpy/numpy/pull/8796>`__: BUG: fix regex of determineexprtype_re_3 in numpy/f2py/crackfortran.py
* `#8799 <https://github.com/numpy/numpy/pull/8799>`__: DOC: Include np. prefix in meshgrid examples
* `#8801 <https://github.com/numpy/numpy/pull/8801>`__: BUG: fix the error msg of empty hstack input
* `#8806 <https://github.com/numpy/numpy/pull/8806>`__: BUG: Raise TypeError on ternary power
* `#8807 <https://github.com/numpy/numpy/pull/8807>`__: TST: Prove that poly1d coeffs are immutable
* `#8813 <https://github.com/numpy/numpy/pull/8813>`__: MAINT: tidy up some of npyio
* `#8816 <https://github.com/numpy/numpy/pull/8816>`__: BUG: `np.lib.index_tricks.r_` mutates its own state
* `#8820 <https://github.com/numpy/numpy/pull/8820>`__: DOC: Add 'heaviside' to the ufunc documentation.
* `#8822 <https://github.com/numpy/numpy/pull/8822>`__: DOC: Use gray and hsv colormaps in examples
* `#8824 <https://github.com/numpy/numpy/pull/8824>`__: MAINT: a couple distutils cleanups
* `#8825 <https://github.com/numpy/numpy/pull/8825>`__: STY: Fix bad style in umath_linalg
* `#8828 <https://github.com/numpy/numpy/pull/8828>`__: DOC: Add missing release note for #8584
* `#8830 <https://github.com/numpy/numpy/pull/8830>`__: DOC: added a whitespace so that sphinx directive displays correctly
* `#8832 <https://github.com/numpy/numpy/pull/8832>`__: MAINT: Remove python <2.7,<3.3 string/unicode workarounds
* `#8834 <https://github.com/numpy/numpy/pull/8834>`__: BENCH: use initialized memory for count_nonzero benchmark
* `#8835 <https://github.com/numpy/numpy/pull/8835>`__: DOC: Include nextafter and spacing function in documentation.
* `#8836 <https://github.com/numpy/numpy/pull/8836>`__: DOC: Several documentation fixes (broken links, incorrect sphinx...
* `#8837 <https://github.com/numpy/numpy/pull/8837>`__: DOC: Spell out note for `hstack`
* `#8840 <https://github.com/numpy/numpy/pull/8840>`__: DOC: update docs and comments for move of mailing list to python.org
* `#8843 <https://github.com/numpy/numpy/pull/8843>`__: MAINT: Use AxisError in more places
* `#8844 <https://github.com/numpy/numpy/pull/8844>`__: DOC: Spell out note for `dstack`
* `#8845 <https://github.com/numpy/numpy/pull/8845>`__: DOC: Add release note about np.real and np.conj
* `#8846 <https://github.com/numpy/numpy/pull/8846>`__: BUG: Buttress handling of extreme values in randint
* `#8847 <https://github.com/numpy/numpy/pull/8847>`__: DOC: Preliminary edit of 1.13.0 release notes.
* `#8850 <https://github.com/numpy/numpy/pull/8850>`__: DOC: Updated doc of nonzero()
* `#8852 <https://github.com/numpy/numpy/pull/8852>`__: MAINT: restore auto-vectorization of inplace operations
* `#8854 <https://github.com/numpy/numpy/pull/8854>`__: MAINT: Remove manual expansion of template loop for some ufuncs
* `#8857 <https://github.com/numpy/numpy/pull/8857>`__: DOC: remove empty jargon reference in glossary
* `#8859 <https://github.com/numpy/numpy/pull/8859>`__: DOC: Fixed README formatting
* `#8861 <https://github.com/numpy/numpy/pull/8861>`__: MAINT: Include the function name in all argument error messages
* `#8862 <https://github.com/numpy/numpy/pull/8862>`__: BUG: do not memcpy ptr to freed object
* `#8870 <https://github.com/numpy/numpy/pull/8870>`__: TST: Respect compiler customizations
* `#8871 <https://github.com/numpy/numpy/pull/8871>`__: DOC: Replace line that was errantly removed in #8850
* `#8873 <https://github.com/numpy/numpy/pull/8873>`__: BUG: Make runtests.py --shell behave better on windows
* `#8874 <https://github.com/numpy/numpy/pull/8874>`__: TST: Use explicit NaT in test_structure_format
* `#8876 <https://github.com/numpy/numpy/pull/8876>`__: MAINT: Minor ufunc cleanup
* `#8883 <https://github.com/numpy/numpy/pull/8883>`__: BUG: Ensure Errors are correctly checked when PyFloat_AsDouble...
* `#8884 <https://github.com/numpy/numpy/pull/8884>`__: BUG: Check for errors when PyInt_AsLong is called in np.random
* `#8885 <https://github.com/numpy/numpy/pull/8885>`__: ENH: add support for python3.6 memory tracing
* `#8886 <https://github.com/numpy/numpy/pull/8886>`__: ENH: add np.block to improve upon np.bmat
* `#8888 <https://github.com/numpy/numpy/pull/8888>`__: BUG: Don't modify types after PyType_Ready
* `#8890 <https://github.com/numpy/numpy/pull/8890>`__: DOC: proposed fixes for issues #7622 and #7914
* `#8894 <https://github.com/numpy/numpy/pull/8894>`__: MAINT: Use PyArray_FROM_* macros
* `#8895 <https://github.com/numpy/numpy/pull/8895>`__: BUG: return values of exec_command were swapped
* `#8896 <https://github.com/numpy/numpy/pull/8896>`__: ENH: do integer**2. inplace
* `#8897 <https://github.com/numpy/numpy/pull/8897>`__: ENH: don't rebuild unchanged files
* `#8898 <https://github.com/numpy/numpy/pull/8898>`__: BUG: Move ctypes ImportError catching to appropriate place
* `#8900 <https://github.com/numpy/numpy/pull/8900>`__: Fix typos.
* `#8903 <https://github.com/numpy/numpy/pull/8903>`__: BUG: Fix setitem on UNICODE, STRING, and LONGDOUBLE
* `#8905 <https://github.com/numpy/numpy/pull/8905>`__: BUG: Correctly distinguish between 0d arrays and scalars in `MaskedArray.__getitem__`
* `#8907 <https://github.com/numpy/numpy/pull/8907>`__: COMPAT: notify garbage collector when memory is allocated
* `#8911 <https://github.com/numpy/numpy/pull/8911>`__: BUG: check_api_dict does not correctly handle tuple values
* `#8914 <https://github.com/numpy/numpy/pull/8914>`__: DOC: Replace reference to np.swapaxis with np.swapaxes
* `#8918 <https://github.com/numpy/numpy/pull/8918>`__: DEP: deprecate calling ma.argsort without an axis
* `#8919 <https://github.com/numpy/numpy/pull/8919>`__: MAINT, TST: Remove duplicated code for testing the two types...
* `#8921 <https://github.com/numpy/numpy/pull/8921>`__: MAINT: avoid memcpy when i == j
* `#8925 <https://github.com/numpy/numpy/pull/8925>`__: DOC: Fix incorrect call to set_printoptions
* `#8928 <https://github.com/numpy/numpy/pull/8928>`__: BUG: runtests --bench fails on windows
* `#8929 <https://github.com/numpy/numpy/pull/8929>`__: BENCH: Masked array benchmarks
* `#8939 <https://github.com/numpy/numpy/pull/8939>`__: DEP: Deprecate `np.ma.MaskedArray.mini`
* `#8942 <https://github.com/numpy/numpy/pull/8942>`__: DOC: stop referring to 'S' dtype as string
* `#8948 <https://github.com/numpy/numpy/pull/8948>`__: DEP: Deprecate NPY_CHAR
* `#8949 <https://github.com/numpy/numpy/pull/8949>`__: REL: add `python_requires` to setup.py
* `#8951 <https://github.com/numpy/numpy/pull/8951>`__: ENH: Add ufunc.identity for hypot and logical_xor
* `#8953 <https://github.com/numpy/numpy/pull/8953>`__: DEP: Add back `ndarray.__[sg]etslice__`, but deprecate it
* `#8959 <https://github.com/numpy/numpy/pull/8959>`__: DEP: Remove alter/restore dot methods
* `#8961 <https://github.com/numpy/numpy/pull/8961>`__: MAINT: Update Intel compiler options.
* `#8962 <https://github.com/numpy/numpy/pull/8962>`__: DOC: Wrong return type of np.random.choice and wrong variable...
* `#8963 <https://github.com/numpy/numpy/pull/8963>`__: BUG: Prevent crash on repr of recursive array
* `#8964 <https://github.com/numpy/numpy/pull/8964>`__: BUG: don't create array with invalid memory in where
* `#8967 <https://github.com/numpy/numpy/pull/8967>`__: ENH: add np.positive ufunc
* `#8971 <https://github.com/numpy/numpy/pull/8971>`__: BUG: do not change size 0 description when viewing data
* `#8976 <https://github.com/numpy/numpy/pull/8976>`__: BUG: Prevent VOID_copyswapn ignoring strides
* `#8978 <https://github.com/numpy/numpy/pull/8978>`__: TST: enable shadowed test
* `#8980 <https://github.com/numpy/numpy/pull/8980>`__: DOC: Correct shape of edges in np.histogram2d
* `#8988 <https://github.com/numpy/numpy/pull/8988>`__: DOC: Explain the behavior of diff on unsigned types
* `#8989 <https://github.com/numpy/numpy/pull/8989>`__: ENH: Print object arrays containing lists unambiguously
* `#8996 <https://github.com/numpy/numpy/pull/8996>`__: BUG/DEP: Make ufunclike functions more ufunc-like
* `#8997 <https://github.com/numpy/numpy/pull/8997>`__: TST: fix io test that doesn't close file
* `#8998 <https://github.com/numpy/numpy/pull/8998>`__: DOC: Use ` instead of * to refer to a function parameter.
* `#8999 <https://github.com/numpy/numpy/pull/8999>`__: TST: Enable NPY_RELAXED_STRIDES_DEBUG environment variable.
* `#9002 <https://github.com/numpy/numpy/pull/9002>`__: MAINT: Document ufunc(where=...) as defaulting to True
* `#9012 <https://github.com/numpy/numpy/pull/9012>`__: MAINT: Set the `__name__` of generated methods
* `#9013 <https://github.com/numpy/numpy/pull/9013>`__: BUG: Fix np.lib.nanfunctions on object arrays
* `#9014 <https://github.com/numpy/numpy/pull/9014>`__: BUG: `__array_ufunc__= None` -> TypeError
* `#9015 <https://github.com/numpy/numpy/pull/9015>`__: ENH: Use `__array_ufunc__ = None` in polynomial convenience classes.
* `#9021 <https://github.com/numpy/numpy/pull/9021>`__: BUG: Make ndarray inplace operators forward calls when needed.
* `#9024 <https://github.com/numpy/numpy/pull/9024>`__: DOC: Correct default stop index value for negative stepping.
* `#9026 <https://github.com/numpy/numpy/pull/9026>`__: ENH: Show full PEP 457 argument lists for ufuncs
* `#9027 <https://github.com/numpy/numpy/pull/9027>`__: DOC: update binary-op / ufunc interactions and recommendations...
* `#9038 <https://github.com/numpy/numpy/pull/9038>`__: BUG: check compiler flags to determine the need for a rebuild
* `#9039 <https://github.com/numpy/numpy/pull/9039>`__: DOC: actually produce docs for as_strided
* `#9050 <https://github.com/numpy/numpy/pull/9050>`__: BUG: distutils, add compatibility python parallelization
* `#9054 <https://github.com/numpy/numpy/pull/9054>`__: BUG: Various fixes to _dtype_from_pep3118
* `#9058 <https://github.com/numpy/numpy/pull/9058>`__: MAINT: Update FutureWarning message.
* `#9060 <https://github.com/numpy/numpy/pull/9060>`__: DEP: deprecate ndarray.conjugate's no-op fall through for non-numeric...
* `#9061 <https://github.com/numpy/numpy/pull/9061>`__: BUG: ndarray.conjugate broken for custom dtypes (unlike np.conjugate)
* `#9062 <https://github.com/numpy/numpy/pull/9062>`__: STY: two blank lines between classes per PEP8
* `#9063 <https://github.com/numpy/numpy/pull/9063>`__: ENH: add np.divmod ufunc
* `#9070 <https://github.com/numpy/numpy/pull/9070>`__: BUG: Preserve field order in join_by, avoids FutureWarning
* `#9072 <https://github.com/numpy/numpy/pull/9072>`__: BUG: if importing multiarray fails, don't discard the error message
* `#9074 <https://github.com/numpy/numpy/pull/9074>`__: MAINT: Python 3.6 invalid escape sequence deprecation fixes
* `#9075 <https://github.com/numpy/numpy/pull/9075>`__: ENH: Spelling fixes
* `#9077 <https://github.com/numpy/numpy/pull/9077>`__: BUG: Prevent stackoverflow on self-containing arrays
* `#9080 <https://github.com/numpy/numpy/pull/9080>`__: MAINT, DOC: Update 1.13.0 release notes and .mailmap
* `#9087 <https://github.com/numpy/numpy/pull/9087>`__: BUG: `__array_ufunc__` should always be looked up on the type,...
* `#9091 <https://github.com/numpy/numpy/pull/9091>`__: MAINT: refine error message for `__array_ufunc__` not implemented
* `#9093 <https://github.com/numpy/numpy/pull/9093>`__: BUG remove memory leak in array ufunc override.
* `#9097 <https://github.com/numpy/numpy/pull/9097>`__: TST: fix test_basic failure on Windows
* `#9111 <https://github.com/numpy/numpy/pull/9111>`__: BUG: Array ufunc reduce out tuple
* `#9123 <https://github.com/numpy/numpy/pull/9123>`__: DOC: update 1.13 release note for MaskedArray, masked constants...
* `#9124 <https://github.com/numpy/numpy/pull/9124>`__: BUG: Do not elide complex abs() for 1.13
* `#9129 <https://github.com/numpy/numpy/pull/9129>`__: BUG: `ndarray.__pow__` does not check result of fast_scalar_power
* `#9133 <https://github.com/numpy/numpy/pull/9133>`__: DEP: Deprecate incorrect behavior of expand_dims.
* `#9135 <https://github.com/numpy/numpy/pull/9135>`__: BUG: delay calls of array repr in getlimits
* `#9136 <https://github.com/numpy/numpy/pull/9136>`__: BUG: Compilation crashes in MSVC when LIB or INCLUDE is not set
* `#9173 <https://github.com/numpy/numpy/pull/9173>`__: BUG: have as_strided() keep custom dtypes
* `#9175 <https://github.com/numpy/numpy/pull/9175>`__: BUG: ensure structured `ndarray.__eq__,__ne__` defer when appropriate.
* `#9196 <https://github.com/numpy/numpy/pull/9196>`__: BUG: pull request 9087 modifies a tuple after use
* `#9199 <https://github.com/numpy/numpy/pull/9199>`__: DOC: Update bincount docs to reflect gh-8348 (backport)
=========
Changelog
=========
Contributors
============
A total of 102 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* A. Jesse Jiryu Davis +
* Alessandro Pietro Bardelli +
* Alex Rothberg +
* Alexander Shadchin
* Allan Haldane
* Andres Guzman-Ballen +
* Antoine Pitrou
* Antony Lee
* B R S Recht +
* Baurzhan Muftakhidinov +
* Ben Rowland
* Benda Xu +
* Blake Griffith
* Bradley Wogsland +
* Brandon Carter +
* CJ Carey
* Charles Harris
* Christoph Gohlke
* Danny Hermes +
* David Hagen +
* Duke Vijitbenjaronk +
* Egor Klenin +
* Elliott Forney +
* Elliott M Forney +
* Endolith
* Eric Wieser
* Erik M. Bray
* Eugene +
* Evan Limanto +
* Felix Berkenkamp +
* François Bissey +
* Frederic Bastien
* Greg Young
* Gregory R. Lee
* Importance of Being Ernest +
* Jaime Fernandez
* Jakub Wilk +
* James Cowgill +
* James Sanders
* Jean Utke +
* Jesse Thoren +
* Jim Crist +
* Joerg Behrmann +
* John Kirkham
* Jonathan Helmus
* Jonathan L Long
* Jonathan Tammo Siebert +
* Joseph Fox-Rabinovitz
* Joshua Loyal +
* Juan Nunez-Iglesias +
* Julian Taylor
* Kirill Balunov +
* Likhith Chitneni +
* Loïc Estève
* Mads Ohm Larsen
* Marein Könings +
* Marten van Kerkwijk
* Martin Thoma
* Martino Sorbaro +
* Marvin Schmidt +
* Matthew Brett
* Matthias Bussonnier +
* Matthias C. M. Troffaes +
* Matti Picus
* Michael Seifert
* Mikhail Pak +
* Mortada Mehyar
* Nathaniel J. Smith
* Nick Papior
* Oscar Villellas +
* Pauli Virtanen
* Pavel Potocek
* Pete Peeradej Tanruangporn +
* Philipp A +
* Ralf Gommers
* Robert Kern
* Roland Kaufmann +
* Ronan Lamy
* Sami Salonen +
* Sanchez Gonzalez Alvaro
* Sebastian Berg
* Shota Kawabuchi
* Simon Gibbons
* Stefan Otte
* Stefan Peterson +
* Stephan Hoyer
* Søren Fuglede Jørgensen +
* Takuya Akiba
* Tom Boyd +
* Ville Skyttä +
* Warren Weckesser
* Wendell Smith
* Yu Feng
* Zixu Zhao +
* Zè Vinícius +
* aha66 +
* davidjn +
* drabach +
* drlvk +
* jsh9 +
* solarjoe +
* zengi +
Pull requests merged
====================
A total of 309 pull requests were merged for this release.
* `#3861 <https://github.com/numpy/numpy/pull/3861>`__: ENH: Make it possible to NpyIter_RemoveAxis an empty dimension
* `#5302 <https://github.com/numpy/numpy/pull/5302>`__: Fixed meshgrid to return arrays with same dtype as arguments.
* `#5726 <https://github.com/numpy/numpy/pull/5726>`__: BUG, API: np.random.multivariate_normal behavior with bad covariance...
* `#6632 <https://github.com/numpy/numpy/pull/6632>`__: TST/BUG: fromfile - fix test and expose bug with io class argument
* `#6659 <https://github.com/numpy/numpy/pull/6659>`__: BUG: Let linspace accept input that has an array_interface.
* `#7742 <https://github.com/numpy/numpy/pull/7742>`__: Add `axis` argument to numpy.unique
* `#7862 <https://github.com/numpy/numpy/pull/7862>`__: BLD: rewrite np.distutils.exec_command.exec_command()
* `#7997 <https://github.com/numpy/numpy/pull/7997>`__: ENH: avoid temporary arrays in expressions (again)
* `#8043 <https://github.com/numpy/numpy/pull/8043>`__: ENH: umath: ensure ufuncs are well-defined with memory overlapping...
* `#8106 <https://github.com/numpy/numpy/pull/8106>`__: DOC: Document release procedure with a walkthrough.
* `#8194 <https://github.com/numpy/numpy/pull/8194>`__: BUG: np.piecewise not working for scalars
* `#8235 <https://github.com/numpy/numpy/pull/8235>`__: BUG: add checks for some invalid structured dtypes. Fixes #2865.
* `#8241 <https://github.com/numpy/numpy/pull/8241>`__: MAINT: Prepare for 1.13.0 after 1.12.x branch
* `#8242 <https://github.com/numpy/numpy/pull/8242>`__: BUG: Update operator `**` tests for new behavior.
* `#8244 <https://github.com/numpy/numpy/pull/8244>`__: DOC: fix typos in arrayprint docstrings.
* `#8247 <https://github.com/numpy/numpy/pull/8247>`__: ENH: Add `__array_ufunc__`
* `#8251 <https://github.com/numpy/numpy/pull/8251>`__: MAINT: Cleaned up mailmap
* `#8267 <https://github.com/numpy/numpy/pull/8267>`__: DOC: Changed shape assignment example to reshape. Elaborated...
* `#8271 <https://github.com/numpy/numpy/pull/8271>`__: TST: Path test should resolve symlinks when comparing
* `#8277 <https://github.com/numpy/numpy/pull/8277>`__: DOC: improve comment in prepare_index
* `#8279 <https://github.com/numpy/numpy/pull/8279>`__: BUG: bool(dtype) is True
* `#8281 <https://github.com/numpy/numpy/pull/8281>`__: DOC: Update 1.12.0 release notes.
* `#8284 <https://github.com/numpy/numpy/pull/8284>`__: BUG: Fix iteration over reversed subspaces in mapiter_@name@
* `#8285 <https://github.com/numpy/numpy/pull/8285>`__: BUG: Fix pavement.py write_release_task.
* `#8287 <https://github.com/numpy/numpy/pull/8287>`__: DOC: Update 1.13.0 release notes.
* `#8290 <https://github.com/numpy/numpy/pull/8290>`__: MAINT: let average preserve subclass information.
* `#8297 <https://github.com/numpy/numpy/pull/8297>`__: DEP: Handle expired deprecations.
* `#8299 <https://github.com/numpy/numpy/pull/8299>`__: BUG: Make f2py respect kind specifications for real parameters
* `#8302 <https://github.com/numpy/numpy/pull/8302>`__: BUG: Fix PyPy crash in PyUFunc_GenericReduction.
* `#8308 <https://github.com/numpy/numpy/pull/8308>`__: BUG: do not link to Accelerate if OpenBLAS, MKL or BLIS are found.
* `#8312 <https://github.com/numpy/numpy/pull/8312>`__: DEP: Drop deprecated boolean indexing behavior and update to...
* `#8318 <https://github.com/numpy/numpy/pull/8318>`__: BLD: blacklist powl (longdouble power function) on OS X.
* `#8326 <https://github.com/numpy/numpy/pull/8326>`__: ENH: Vectorize packbits with SSE2
* `#8327 <https://github.com/numpy/numpy/pull/8327>`__: BUG: Fix packbits to correctly handle empty arrays
* `#8335 <https://github.com/numpy/numpy/pull/8335>`__: BUG: Fix ndarray.tofile large file corruption in append mode
* `#8337 <https://github.com/numpy/numpy/pull/8337>`__: BUG: fix test_api test that fails intermittently in python 3
* `#8343 <https://github.com/numpy/numpy/pull/8343>`__: TST: Ellipsis indexing creates a view
* `#8348 <https://github.com/numpy/numpy/pull/8348>`__: ENH: Allow bincount(..., minlength=0).
* `#8349 <https://github.com/numpy/numpy/pull/8349>`__: BUG: Apply more robust string converts in loadtxt
* `#8351 <https://github.com/numpy/numpy/pull/8351>`__: BUG: correct letter case
* `#8354 <https://github.com/numpy/numpy/pull/8354>`__: BUG: Fix suppress_warnings (again) for Python 3.6.
* `#8355 <https://github.com/numpy/numpy/pull/8355>`__: Fix building extensions with MinGW for Python 3.5
* `#8356 <https://github.com/numpy/numpy/pull/8356>`__: Allow extensions to be built with MinGW in a virtualenv
* `#8360 <https://github.com/numpy/numpy/pull/8360>`__: MAINT: Drop special case code for python2 < 2.7 and python3 <...
* `#8364 <https://github.com/numpy/numpy/pull/8364>`__: BUG: handle unmasked NaN in ma.median like normal median
* `#8366 <https://github.com/numpy/numpy/pull/8366>`__: BUG: fix nanpercentile not returning scalar with axis argument
* `#8367 <https://github.com/numpy/numpy/pull/8367>`__: xlocale.h is not available in newlib / Cygwin
* `#8368 <https://github.com/numpy/numpy/pull/8368>`__: ENH: Implement most linalg operations for 0x0 matrices
* `#8369 <https://github.com/numpy/numpy/pull/8369>`__: TST: Fix various incorrect linalg tests
* `#8374 <https://github.com/numpy/numpy/pull/8374>`__: DOC: Fixed minor typo in William Gosset's name
* `#8377 <https://github.com/numpy/numpy/pull/8377>`__: Switch to the PyPI version of plex to generate lapack_lite
* `#8380 <https://github.com/numpy/numpy/pull/8380>`__: DOC: Update 1.12.0-notes.rst.
* `#8381 <https://github.com/numpy/numpy/pull/8381>`__: MAINT: Rebuild lapack lite
* `#8382 <https://github.com/numpy/numpy/pull/8382>`__: DEP: Fix escaped string characters deprecated in Python 3.6.
* `#8384 <https://github.com/numpy/numpy/pull/8384>`__: ENH: Add tool to check for deprecated escaped characters.
* `#8388 <https://github.com/numpy/numpy/pull/8388>`__: API: Return scalars for scalar inputs to np.real/imag
* `#8389 <https://github.com/numpy/numpy/pull/8389>`__: ENH: retune apply_along_axis nanmedian cutoff
* `#8395 <https://github.com/numpy/numpy/pull/8395>`__: DOC: create 1.11.3 release notes.
* `#8398 <https://github.com/numpy/numpy/pull/8398>`__: BUG: Fix author search in announce.py
* `#8400 <https://github.com/numpy/numpy/pull/8400>`__: Fix `corrcoef` and `cov` rowvar param handling
* `#8401 <https://github.com/numpy/numpy/pull/8401>`__: DOC, MAINT: Update 1.12.0 notes and mailmap.
* `#8410 <https://github.com/numpy/numpy/pull/8410>`__: BUG: Fixed behavior of assert_array_less for +/-inf
* `#8414 <https://github.com/numpy/numpy/pull/8414>`__: BUG: fixed failure of np.ma.median for 1-D even arrays.
* `#8416 <https://github.com/numpy/numpy/pull/8416>`__: BUG operations involving MaskedArray with output given do not...
* `#8421 <https://github.com/numpy/numpy/pull/8421>`__: ENH: Add isnat function and make comparison tests NAT specific
* `#8423 <https://github.com/numpy/numpy/pull/8423>`__: Adding isin function for multidimensional arrays
* `#8426 <https://github.com/numpy/numpy/pull/8426>`__: BUG: Fix apply_along_axis() for when func1d() returns a non-ndarray
* `#8434 <https://github.com/numpy/numpy/pull/8434>`__: TST: Update 3.6-dev tests to 3.6 after Python final release.
* `#8441 <https://github.com/numpy/numpy/pull/8441>`__: BUG: Fix crash on 0d return value in apply_along_axis
* `#8443 <https://github.com/numpy/numpy/pull/8443>`__: BUG: fix set memmap offset attribute correctly when offset is...
* `#8445 <https://github.com/numpy/numpy/pull/8445>`__: BUG: correct norm='ortho' scaling for rfft when n != None
* `#8446 <https://github.com/numpy/numpy/pull/8446>`__: ENH: gradient support for unevenly spaced data
* `#8448 <https://github.com/numpy/numpy/pull/8448>`__: TST: remove a duplicate test. Closes gh-8447.
* `#8452 <https://github.com/numpy/numpy/pull/8452>`__: BUG: assert_almost_equal fails on subclasses that cannot handle...
* `#8454 <https://github.com/numpy/numpy/pull/8454>`__: MAINT: Fix building extensions with MinGW in WinPython 3.4
* `#8464 <https://github.com/numpy/numpy/pull/8464>`__: [DOC]Small release doc fix
* `#8468 <https://github.com/numpy/numpy/pull/8468>`__: BUG: Ensure inf/nan removal in assert_array_compare is matrix-safe.
* `#8470 <https://github.com/numpy/numpy/pull/8470>`__: DOC: Add example to np.savez_compressed
* `#8474 <https://github.com/numpy/numpy/pull/8474>`__: MAINT: use env in shebang instead of absolute path to python
* `#8475 <https://github.com/numpy/numpy/pull/8475>`__: DOC: improve clip docstring
* `#8478 <https://github.com/numpy/numpy/pull/8478>`__: MAINT: Forward port accumulated changes from the 1.12.0 release.
* `#8482 <https://github.com/numpy/numpy/pull/8482>`__: TST: switch to ubuntu yakkety for i386 testing
* `#8483 <https://github.com/numpy/numpy/pull/8483>`__: BUG: fix wrong future nat warning and equiv type logic error
* `#8486 <https://github.com/numpy/numpy/pull/8486>`__: BUG: Prevent crash for length-0 input to fromrecords
* `#8488 <https://github.com/numpy/numpy/pull/8488>`__: ENH: Improve the alignment of `recarray.__repr__`
* `#8489 <https://github.com/numpy/numpy/pull/8489>`__: BUG: fix wrong masked median for some special cases
* `#8490 <https://github.com/numpy/numpy/pull/8490>`__: DOC: Place np.average in inline code
* `#8491 <https://github.com/numpy/numpy/pull/8491>`__: TST: work around isfinite inconsistency on i386
* `#8494 <https://github.com/numpy/numpy/pull/8494>`__: BUG: guard against replacing constants without `'_'` spec
* `#8496 <https://github.com/numpy/numpy/pull/8496>`__: Update LICENSE.txt to 2017
* `#8497 <https://github.com/numpy/numpy/pull/8497>`__: BUG: Fix creating a np.matrix from string syntax involving booleans
* `#8501 <https://github.com/numpy/numpy/pull/8501>`__: Changing spurious Legendre reference to Chebyshev in chebfit...
* `#8504 <https://github.com/numpy/numpy/pull/8504>`__: ENH: hard-code finfo parameters for known types
* `#8508 <https://github.com/numpy/numpy/pull/8508>`__: BUG: Fix loss of dimensionality of np.ma.masked in ufunc
* `#8524 <https://github.com/numpy/numpy/pull/8524>`__: BUG: fix mean for float 16 non-array inputs
* `#8527 <https://github.com/numpy/numpy/pull/8527>`__: DOC: fix return value for PyArray_Resize
* `#8539 <https://github.com/numpy/numpy/pull/8539>`__: BUG: core: in dot(), make copies if out has memory overlap with...
* `#8540 <https://github.com/numpy/numpy/pull/8540>`__: DOC: Update arrays.ndarray.rst
* `#8541 <https://github.com/numpy/numpy/pull/8541>`__: DOC: Revert 8540 patch 1
* `#8542 <https://github.com/numpy/numpy/pull/8542>`__: MAINT: typo in histogram docstring
* `#8551 <https://github.com/numpy/numpy/pull/8551>`__: DOC: Missing backticks
* `#8555 <https://github.com/numpy/numpy/pull/8555>`__: Fixing docstring error in polyvander2d
* `#8558 <https://github.com/numpy/numpy/pull/8558>`__: DOC: Improve documentation of None as interval bounds in clip.
* `#8567 <https://github.com/numpy/numpy/pull/8567>`__: TST: core: use aligned memory for dot() out= arrays
* `#8568 <https://github.com/numpy/numpy/pull/8568>`__: TST: re-enable PPC longdouble spacing tests
* `#8569 <https://github.com/numpy/numpy/pull/8569>`__: ENH: Add missing `__tracebackhide__` to testing functions.
* `#8570 <https://github.com/numpy/numpy/pull/8570>`__: BUG: fix issue #8250 when np.array gets called on an invalid...
* `#8571 <https://github.com/numpy/numpy/pull/8571>`__: BUG: fix calling python api with error set and minor leaks
* `#8572 <https://github.com/numpy/numpy/pull/8572>`__: MAINT: remove ma out= workaround
* `#8575 <https://github.com/numpy/numpy/pull/8575>`__: DOC: fix several typos #8537.
* `#8584 <https://github.com/numpy/numpy/pull/8584>`__: MAINT: Use the same exception for all bad axis requests
* `#8586 <https://github.com/numpy/numpy/pull/8586>`__: MAINT: PyPy3 compatibility: sys.getsizeof()
* `#8590 <https://github.com/numpy/numpy/pull/8590>`__: BUG MaskedArray `__eq__` wrong for masked scalar, multi-d recarray
* `#8591 <https://github.com/numpy/numpy/pull/8591>`__: BUG: make np.squeeze always return an array, never a scalar
* `#8592 <https://github.com/numpy/numpy/pull/8592>`__: MAINT: Remove `__setslice__` and `__getslice__`
* `#8594 <https://github.com/numpy/numpy/pull/8594>`__: BUG: Fix `MaskedArray.__setitem__`
* `#8596 <https://github.com/numpy/numpy/pull/8596>`__: BUG: match hard-coded finfo to calculated MachAr
* `#8602 <https://github.com/numpy/numpy/pull/8602>`__: BUG: Make iscomplexobj compatible with custom dtypes again
* `#8605 <https://github.com/numpy/numpy/pull/8605>`__: DOC: gradient uses 1st order central difference in the interior
* `#8606 <https://github.com/numpy/numpy/pull/8606>`__: Revert "DOC: gradient uses 1st order central difference in the...
* `#8610 <https://github.com/numpy/numpy/pull/8610>`__: Revert "BUG: make np.squeeze always return an array, never a...
* `#8611 <https://github.com/numpy/numpy/pull/8611>`__: DOC: The axis argument of average can be a tuple of ints
* `#8612 <https://github.com/numpy/numpy/pull/8612>`__: MAINT: Decrease merge conflicts in release notes
* `#8614 <https://github.com/numpy/numpy/pull/8614>`__: BUG: Don't leak internal exceptions when given an empty array
* `#8617 <https://github.com/numpy/numpy/pull/8617>`__: BUG: Copy meshgrid after broadcasting
* `#8618 <https://github.com/numpy/numpy/pull/8618>`__: BUG: Fix undefined behaviour induced by bad `__array_wrap__`
* `#8619 <https://github.com/numpy/numpy/pull/8619>`__: BUG: blas_info should record include_dirs
* `#8625 <https://github.com/numpy/numpy/pull/8625>`__: DOC: Create 1.12.1 release notes.
* `#8629 <https://github.com/numpy/numpy/pull/8629>`__: ENH: Improve the efficiency of indices
* `#8631 <https://github.com/numpy/numpy/pull/8631>`__: Fix typo in fill_diagonal docstring.
* `#8633 <https://github.com/numpy/numpy/pull/8633>`__: DOC: Mention boolean arrays in the ix_ documentation.
* `#8636 <https://github.com/numpy/numpy/pull/8636>`__: MAINT: ensure benchmark suite is importable on old numpy versions
* `#8638 <https://github.com/numpy/numpy/pull/8638>`__: BUG: fix wrong odd determination in packbits
* `#8643 <https://github.com/numpy/numpy/pull/8643>`__: BUG: Fix double-wrapping of object scalars
* `#8645 <https://github.com/numpy/numpy/pull/8645>`__: MAINT: Use getmask where possible
* `#8646 <https://github.com/numpy/numpy/pull/8646>`__: ENH: Allow for an in-place nan_to_num conversion
* `#8647 <https://github.com/numpy/numpy/pull/8647>`__: Fix various bugs in np.ma.where
* `#8649 <https://github.com/numpy/numpy/pull/8649>`__: Upgrade to Lapack lite 3.2.2
* `#8650 <https://github.com/numpy/numpy/pull/8650>`__: DOC: Fix obsolete data in readme
* `#8651 <https://github.com/numpy/numpy/pull/8651>`__: MAINT: Split lapack_lite more logically across files
* `#8652 <https://github.com/numpy/numpy/pull/8652>`__: TST: Improve testing of read-only mmaps
* `#8655 <https://github.com/numpy/numpy/pull/8655>`__: MAINT: Squelch parenthesis warnings from GCC
* `#8656 <https://github.com/numpy/numpy/pull/8656>`__: BUG: allow for precision > 17 in longdouble repr test
* `#8658 <https://github.com/numpy/numpy/pull/8658>`__: BUG: fix denormal linspace test for longdouble
* `#8659 <https://github.com/numpy/numpy/pull/8659>`__: BUG: PPC64el machines are POWER for Fortran
* `#8663 <https://github.com/numpy/numpy/pull/8663>`__: ENH: Fix alignment of repr for array subclasses
* `#8665 <https://github.com/numpy/numpy/pull/8665>`__: BUG: Look up methods on MaskedArray in _frommethod
* `#8667 <https://github.com/numpy/numpy/pull/8667>`__: BUG: Preserve identity of dtypes in make_mask_descr
* `#8668 <https://github.com/numpy/numpy/pull/8668>`__: DOC: Add more examples for `np.c_`
* `#8669 <https://github.com/numpy/numpy/pull/8669>`__: MAINT: Warn users when calling np.ma.MaskedArray.partition function.
* `#8672 <https://github.com/numpy/numpy/pull/8672>`__: BUG: Use int for axes, not intp
* `#8674 <https://github.com/numpy/numpy/pull/8674>`__: BUG: Remove extra digit in binary_repr at limit
* `#8675 <https://github.com/numpy/numpy/pull/8675>`__: BUG: Fix problems detecting runtime for MSYS2 compiler on Windows
* `#8677 <https://github.com/numpy/numpy/pull/8677>`__: MAINT: We can now rely on itertools.izip_longest existing
* `#8678 <https://github.com/numpy/numpy/pull/8678>`__: BUG: Fix argsort vs sort in Masked arrays
* `#8680 <https://github.com/numpy/numpy/pull/8680>`__: DOC: Removed broken link
* `#8682 <https://github.com/numpy/numpy/pull/8682>`__: ENH: allow argument to matrix_rank to be stacked
* `#8685 <https://github.com/numpy/numpy/pull/8685>`__: ENH: add dtype.ndim
* `#8688 <https://github.com/numpy/numpy/pull/8688>`__: DOC: Added note to np.diff
* `#8692 <https://github.com/numpy/numpy/pull/8692>`__: MAINT: Fix deprecated escape sequences
* `#8694 <https://github.com/numpy/numpy/pull/8694>`__: BUG: missing comma disabled some header checks
* `#8695 <https://github.com/numpy/numpy/pull/8695>`__: MAINT: Remove numpy-macosx-installer and win32build directories.
* `#8698 <https://github.com/numpy/numpy/pull/8698>`__: DOC: fix incorrect mask value when value was changed
* `#8702 <https://github.com/numpy/numpy/pull/8702>`__: DOC: Fixed small mistakes in numpy.copy documentation.
* `#8704 <https://github.com/numpy/numpy/pull/8704>`__: BUG: Fix deepcopy regression for empty arrays.
* `#8705 <https://github.com/numpy/numpy/pull/8705>`__: BUG: fix ma.median for empty ndarrays
* `#8709 <https://github.com/numpy/numpy/pull/8709>`__: DOC: Fixed minor typos in temp_elide.c
* `#8713 <https://github.com/numpy/numpy/pull/8713>`__: BUG: Don't signal FP exceptions in np.absolute
* `#8716 <https://github.com/numpy/numpy/pull/8716>`__: MAINT: Mark some tests with slow decorator
* `#8718 <https://github.com/numpy/numpy/pull/8718>`__: BUG: Fix assert statements in random.choice tests
* `#8729 <https://github.com/numpy/numpy/pull/8729>`__: DOC: Add float_power to routines.math documentation autosummary
* `#8731 <https://github.com/numpy/numpy/pull/8731>`__: DOC: added linalg.multi_dot to doc
* `#8737 <https://github.com/numpy/numpy/pull/8737>`__: DOC: Mention that expand_dims and squeeze are inverses
* `#8744 <https://github.com/numpy/numpy/pull/8744>`__: MAINT: Remove files and constants that were only needed for Bento.
* `#8745 <https://github.com/numpy/numpy/pull/8745>`__: TST: Remove unused env from tox
* `#8746 <https://github.com/numpy/numpy/pull/8746>`__: DOC: Update 1.12.1 release notes.
* `#8749 <https://github.com/numpy/numpy/pull/8749>`__: DOC: Add 1.12.1 release notes to documentation.
* `#8750 <https://github.com/numpy/numpy/pull/8750>`__: BUG: Fix np.average for object arrays
* `#8754 <https://github.com/numpy/numpy/pull/8754>`__: ENH: Allows building npy_math with static inlining
* `#8756 <https://github.com/numpy/numpy/pull/8756>`__: BUG: Correct lapack ld* args
* `#8759 <https://github.com/numpy/numpy/pull/8759>`__: BUG: Add HOME to the git environment.
* `#8761 <https://github.com/numpy/numpy/pull/8761>`__: MAINT: better warning message when running build_src from sdist
* `#8762 <https://github.com/numpy/numpy/pull/8762>`__: BUG: Prevent crash in `poly1d.__eq__`
* `#8781 <https://github.com/numpy/numpy/pull/8781>`__: BUG: Revert gh-8570.
* `#8788 <https://github.com/numpy/numpy/pull/8788>`__: BUG: Fix scipy incompatibility with cleanup to poly1d
* `#8792 <https://github.com/numpy/numpy/pull/8792>`__: DOC: Fix typos
* `#8793 <https://github.com/numpy/numpy/pull/8793>`__: DOC: fix minor docstring typos
* `#8795 <https://github.com/numpy/numpy/pull/8795>`__: ENH: Add the 'heaviside' ufunc.
* `#8796 <https://github.com/numpy/numpy/pull/8796>`__: BUG: fix regex of determineexprtype_re_3 in numpy/f2py/crackfortran.py
* `#8799 <https://github.com/numpy/numpy/pull/8799>`__: DOC: Include np. prefix in meshgrid examples
* `#8801 <https://github.com/numpy/numpy/pull/8801>`__: BUG: fix the error msg of empty hstack input
* `#8806 <https://github.com/numpy/numpy/pull/8806>`__: BUG: Raise TypeError on ternary power
* `#8807 <https://github.com/numpy/numpy/pull/8807>`__: TST: Prove that poly1d coeffs are immutable
* `#8813 <https://github.com/numpy/numpy/pull/8813>`__: MAINT: tidy up some of npyio
* `#8816 <https://github.com/numpy/numpy/pull/8816>`__: BUG: `np.lib.index_tricks.r_` mutates its own state
* `#8820 <https://github.com/numpy/numpy/pull/8820>`__: DOC: Add 'heaviside' to the ufunc documentation.
* `#8822 <https://github.com/numpy/numpy/pull/8822>`__: DOC: Use gray and hsv colormaps in examples
* `#8824 <https://github.com/numpy/numpy/pull/8824>`__: MAINT: a couple distutils cleanups
* `#8825 <https://github.com/numpy/numpy/pull/8825>`__: STY: Fix bad style in umath_linalg
* `#8828 <https://github.com/numpy/numpy/pull/8828>`__: DOC: Add missing release note for #8584
* `#8830 <https://github.com/numpy/numpy/pull/8830>`__: DOC: added a whitespace so that sphinx directive displays correctly
* `#8832 <https://github.com/numpy/numpy/pull/8832>`__: MAINT: Remove python <2.7,<3.3 string/unicode workarounds
* `#8834 <https://github.com/numpy/numpy/pull/8834>`__: BENCH: use initialized memory for count_nonzero benchmark
* `#8835 <https://github.com/numpy/numpy/pull/8835>`__: DOC: Include nextafter and spacing function in documentation.
* `#8836 <https://github.com/numpy/numpy/pull/8836>`__: DOC: Several documentation fixes (broken links, incorrect sphinx...
* `#8837 <https://github.com/numpy/numpy/pull/8837>`__: DOC: Spell out note for `hstack`
* `#8840 <https://github.com/numpy/numpy/pull/8840>`__: DOC: update docs and comments for move of mailing list to python.org
* `#8843 <https://github.com/numpy/numpy/pull/8843>`__: MAINT: Use AxisError in more places
* `#8844 <https://github.com/numpy/numpy/pull/8844>`__: DOC: Spell out note for `dstack`
* `#8845 <https://github.com/numpy/numpy/pull/8845>`__: DOC: Add release note about np.real and np.conj
* `#8846 <https://github.com/numpy/numpy/pull/8846>`__: BUG: Buttress handling of extreme values in randint
* `#8847 <https://github.com/numpy/numpy/pull/8847>`__: DOC: Preliminary edit of 1.13.0 release notes.
* `#8850 <https://github.com/numpy/numpy/pull/8850>`__: DOC: Updated doc of nonzero()
* `#8852 <https://github.com/numpy/numpy/pull/8852>`__: MAINT: restore auto-vectorization of inplace operations
* `#8854 <https://github.com/numpy/numpy/pull/8854>`__: MAINT: Remove manual expansion of template loop for some ufuncs
* `#8857 <https://github.com/numpy/numpy/pull/8857>`__: DOC: remove empty jargon reference in glossary
* `#8859 <https://github.com/numpy/numpy/pull/8859>`__: DOC: Fixed README formatting
* `#8861 <https://github.com/numpy/numpy/pull/8861>`__: MAINT: Include the function name in all argument error messages
* `#8862 <https://github.com/numpy/numpy/pull/8862>`__: BUG: do not memcpy ptr to freed object
* `#8870 <https://github.com/numpy/numpy/pull/8870>`__: TST: Respect compiler customizations
* `#8871 <https://github.com/numpy/numpy/pull/8871>`__: DOC: Replace line that was errantly removed in #8850
* `#8873 <https://github.com/numpy/numpy/pull/8873>`__: BUG: Make runtests.py --shell behave better on windows
* `#8874 <https://github.com/numpy/numpy/pull/8874>`__: TST: Use explicit NaT in test_structure_format
* `#8876 <https://github.com/numpy/numpy/pull/8876>`__: MAINT: Minor ufunc cleanup
* `#8883 <https://github.com/numpy/numpy/pull/8883>`__: BUG: Ensure Errors are correctly checked when PyFloat_AsDouble...
* `#8884 <https://github.com/numpy/numpy/pull/8884>`__: BUG: Check for errors when PyInt_AsLong is called in np.random
* `#8885 <https://github.com/numpy/numpy/pull/8885>`__: ENH: add support for python3.6 memory tracing
* `#8886 <https://github.com/numpy/numpy/pull/8886>`__: ENH: add np.block to improve upon np.bmat
* `#8888 <https://github.com/numpy/numpy/pull/8888>`__: BUG: Don't modify types after PyType_Ready
* `#8890 <https://github.com/numpy/numpy/pull/8890>`__: DOC: proposed fixes for issues #7622 and #7914
* `#8894 <https://github.com/numpy/numpy/pull/8894>`__: MAINT: Use PyArray_FROM_* macros
* `#8895 <https://github.com/numpy/numpy/pull/8895>`__: BUG: return values of exec_command were swapped
* `#8896 <https://github.com/numpy/numpy/pull/8896>`__: ENH: do integer**2. inplace
* `#8897 <https://github.com/numpy/numpy/pull/8897>`__: ENH: don't rebuild unchanged files
* `#8898 <https://github.com/numpy/numpy/pull/8898>`__: BUG: Move ctypes ImportError catching to appropriate place
* `#8900 <https://github.com/numpy/numpy/pull/8900>`__: Fix typos.
* `#8903 <https://github.com/numpy/numpy/pull/8903>`__: BUG: Fix setitem on UNICODE, STRING, and LONGDOUBLE
* `#8905 <https://github.com/numpy/numpy/pull/8905>`__: BUG: Correctly distinguish between 0d arrays and scalars in `MaskedArray.__getitem__`
* `#8907 <https://github.com/numpy/numpy/pull/8907>`__: COMPAT: notify garbage collector when memory is allocated
* `#8911 <https://github.com/numpy/numpy/pull/8911>`__: BUG: check_api_dict does not correctly handle tuple values
* `#8914 <https://github.com/numpy/numpy/pull/8914>`__: DOC: Replace reference to np.swapaxis with np.swapaxes
* `#8918 <https://github.com/numpy/numpy/pull/8918>`__: DEP: deprecate calling ma.argsort without an axis
* `#8919 <https://github.com/numpy/numpy/pull/8919>`__: MAINT, TST: Remove duplicated code for testing the two types...
* `#8921 <https://github.com/numpy/numpy/pull/8921>`__: MAINT: avoid memcpy when i == j
* `#8925 <https://github.com/numpy/numpy/pull/8925>`__: DOC: Fix incorrect call to set_printoptions
* `#8928 <https://github.com/numpy/numpy/pull/8928>`__: BUG: runtests --bench fails on windows
* `#8929 <https://github.com/numpy/numpy/pull/8929>`__: BENCH: Masked array benchmarks
* `#8939 <https://github.com/numpy/numpy/pull/8939>`__: DEP: Deprecate `np.ma.MaskedArray.mini`
* `#8942 <https://github.com/numpy/numpy/pull/8942>`__: DOC: stop referring to 'S' dtype as string
* `#8948 <https://github.com/numpy/numpy/pull/8948>`__: DEP: Deprecate NPY_CHAR
* `#8949 <https://github.com/numpy/numpy/pull/8949>`__: REL: add `python_requires` to setup.py
* `#8951 <https://github.com/numpy/numpy/pull/8951>`__: ENH: Add ufunc.identity for hypot and logical_xor
* `#8953 <https://github.com/numpy/numpy/pull/8953>`__: DEP: Add back `ndarray.__[sg]etslice__`, but deprecate it
* `#8959 <https://github.com/numpy/numpy/pull/8959>`__: DEP: Remove alter/restore dot methods
* `#8961 <https://github.com/numpy/numpy/pull/8961>`__: MAINT: Update Intel compiler options.
* `#8962 <https://github.com/numpy/numpy/pull/8962>`__: DOC: Wrong return type of np.random.choice and wrong variable...
* `#8963 <https://github.com/numpy/numpy/pull/8963>`__: BUG: Prevent crash on repr of recursive array
* `#8964 <https://github.com/numpy/numpy/pull/8964>`__: BUG: don't create array with invalid memory in where
* `#8967 <https://github.com/numpy/numpy/pull/8967>`__: ENH: add np.positive ufunc
* `#8971 <https://github.com/numpy/numpy/pull/8971>`__: BUG: do not change size 0 description when viewing data
* `#8976 <https://github.com/numpy/numpy/pull/8976>`__: BUG: Prevent VOID_copyswapn ignoring strides
* `#8978 <https://github.com/numpy/numpy/pull/8978>`__: TST: enable shadowed test
* `#8980 <https://github.com/numpy/numpy/pull/8980>`__: DOC: Correct shape of edges in np.histogram2d
* `#8988 <https://github.com/numpy/numpy/pull/8988>`__: DOC: Explain the behavior of diff on unsigned types
* `#8989 <https://github.com/numpy/numpy/pull/8989>`__: ENH: Print object arrays containing lists unambiguously
* `#8996 <https://github.com/numpy/numpy/pull/8996>`__: BUG/DEP: Make ufunclike functions more ufunc-like
* `#8997 <https://github.com/numpy/numpy/pull/8997>`__: TST: fix io test that doesn't close file
* `#8998 <https://github.com/numpy/numpy/pull/8998>`__: DOC: Use ` instead of * to refer to a function parameter.
* `#8999 <https://github.com/numpy/numpy/pull/8999>`__: TST: Enable NPY_RELAXED_STRIDES_DEBUG environment variable.
* `#9002 <https://github.com/numpy/numpy/pull/9002>`__: MAINT: Document ufunc(where=...) as defaulting to True
* `#9012 <https://github.com/numpy/numpy/pull/9012>`__: MAINT: Set the `__name__` of generated methods
* `#9013 <https://github.com/numpy/numpy/pull/9013>`__: BUG: Fix np.lib.nanfunctions on object arrays
* `#9014 <https://github.com/numpy/numpy/pull/9014>`__: BUG: `__array_ufunc__= None` -> TypeError
* `#9015 <https://github.com/numpy/numpy/pull/9015>`__: ENH: Use `__array_ufunc__ = None` in polynomial convenience classes.
* `#9021 <https://github.com/numpy/numpy/pull/9021>`__: BUG: Make ndarray inplace operators forward calls when needed.
* `#9024 <https://github.com/numpy/numpy/pull/9024>`__: DOC: Correct default stop index value for negative stepping.
* `#9026 <https://github.com/numpy/numpy/pull/9026>`__: ENH: Show full PEP 457 argument lists for ufuncs
* `#9027 <https://github.com/numpy/numpy/pull/9027>`__: DOC: update binary-op / ufunc interactions and recommendations...
* `#9038 <https://github.com/numpy/numpy/pull/9038>`__: BUG: check compiler flags to determine the need for a rebuild
* `#9039 <https://github.com/numpy/numpy/pull/9039>`__: DOC: actually produce docs for as_strided
* `#9050 <https://github.com/numpy/numpy/pull/9050>`__: BUG: distutils, add compatibility python parallelization
* `#9054 <https://github.com/numpy/numpy/pull/9054>`__: BUG: Various fixes to _dtype_from_pep3118
* `#9058 <https://github.com/numpy/numpy/pull/9058>`__: MAINT: Update FutureWarning message.
* `#9060 <https://github.com/numpy/numpy/pull/9060>`__: DEP: deprecate ndarray.conjugate's no-op fall through for non-numeric...
* `#9061 <https://github.com/numpy/numpy/pull/9061>`__: BUG: ndarray.conjugate broken for custom dtypes (unlike np.conjugate)
* `#9062 <https://github.com/numpy/numpy/pull/9062>`__: STY: two blank lines between classes per PEP8
* `#9063 <https://github.com/numpy/numpy/pull/9063>`__: ENH: add np.divmod ufunc
* `#9070 <https://github.com/numpy/numpy/pull/9070>`__: BUG: Preserve field order in join_by, avoids FutureWarning
* `#9072 <https://github.com/numpy/numpy/pull/9072>`__: BUG: if importing multiarray fails, don't discard the error message
* `#9074 <https://github.com/numpy/numpy/pull/9074>`__: MAINT: Python 3.6 invalid escape sequence deprecation fixes
* `#9075 <https://github.com/numpy/numpy/pull/9075>`__: ENH: Spelling fixes
* `#9077 <https://github.com/numpy/numpy/pull/9077>`__: BUG: Prevent stackoverflow on self-containing arrays
* `#9080 <https://github.com/numpy/numpy/pull/9080>`__: MAINT, DOC: Update 1.13.0 release notes and .mailmap
* `#9087 <https://github.com/numpy/numpy/pull/9087>`__: BUG: `__array_ufunc__` should always be looked up on the type,...
* `#9091 <https://github.com/numpy/numpy/pull/9091>`__: MAINT: refine error message for `__array_ufunc__` not implemented
* `#9093 <https://github.com/numpy/numpy/pull/9093>`__: BUG remove memory leak in array ufunc override.
* `#9097 <https://github.com/numpy/numpy/pull/9097>`__: TST: fix test_basic failure on Windows
* `#9111 <https://github.com/numpy/numpy/pull/9111>`__: BUG: Array ufunc reduce out tuple
* `#9123 <https://github.com/numpy/numpy/pull/9123>`__: DOC: update 1.13 release note for MaskedArray, masked constants...
* `#9124 <https://github.com/numpy/numpy/pull/9124>`__: BUG: Do not elide complex abs() for 1.13
* `#9129 <https://github.com/numpy/numpy/pull/9129>`__: BUG: `ndarray.__pow__` does not check result of fast_scalar_power
* `#9133 <https://github.com/numpy/numpy/pull/9133>`__: DEP: Deprecate incorrect behavior of expand_dims.
* `#9135 <https://github.com/numpy/numpy/pull/9135>`__: BUG: delay calls of array repr in getlimits
* `#9136 <https://github.com/numpy/numpy/pull/9136>`__: BUG: Compilation crashes in MSVC when LIB or INCLUDE is not set
* `#9173 <https://github.com/numpy/numpy/pull/9173>`__: BUG: have as_strided() keep custom dtypes
* `#9175 <https://github.com/numpy/numpy/pull/9175>`__: BUG: ensure structured `ndarray.__eq__,__ne__` defer when appropriate.
* `#9196 <https://github.com/numpy/numpy/pull/9196>`__: BUG: pull request 9087 modifies a tuple after use
* `#9199 <https://github.com/numpy/numpy/pull/9199>`__: DOC: Update bincount docs to reflect gh-8348 (backport)

View File

@ -1,44 +1,44 @@
Contributors
============
A total of 12 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Andras Deak +
* Bob Eldering +
* Charles Harris
* Daniel Hrisca +
* Eric Wieser
* Joshua Leahy +
* Julian Taylor
* Michael Seifert
* Pauli Virtanen
* Ralf Gommers
* Roland Kaufmann
* Warren Weckesser
Pull requests merged
====================
A total of 19 pull requests were merged for this release.
* `#9240 <https://github.com/numpy/numpy/pull/9240>`__: DOC: BLD: fix lots of Sphinx warnings/errors.
* `#9255 <https://github.com/numpy/numpy/pull/9255>`__: Revert "DEP: Raise TypeError for subtract(bool_, bool_)."
* `#9261 <https://github.com/numpy/numpy/pull/9261>`__: BUG: don't elide into readonly and updateifcopy temporaries for...
* `#9262 <https://github.com/numpy/numpy/pull/9262>`__: BUG: fix missing keyword rename for common block in numpy.f2py
* `#9263 <https://github.com/numpy/numpy/pull/9263>`__: BUG: handle resize of 0d array
* `#9267 <https://github.com/numpy/numpy/pull/9267>`__: DOC: update f2py front page and some doc build metadata.
* `#9299 <https://github.com/numpy/numpy/pull/9299>`__: BUG: Fix Intel compilation on Unix.
* `#9317 <https://github.com/numpy/numpy/pull/9317>`__: BUG: fix wrong ndim used in empty where check
* `#9319 <https://github.com/numpy/numpy/pull/9319>`__: BUG: Make extensions compilable with MinGW on Py2.7
* `#9339 <https://github.com/numpy/numpy/pull/9339>`__: BUG: Prevent crash if ufunc doc string is null
* `#9340 <https://github.com/numpy/numpy/pull/9340>`__: BUG: umath: un-break ufunc where= when no out= is given
* `#9371 <https://github.com/numpy/numpy/pull/9371>`__: DOC: Add isnat/positive ufunc to documentation
* `#9372 <https://github.com/numpy/numpy/pull/9372>`__: BUG: Fix error in fromstring function from numpy.core.records...
* `#9373 <https://github.com/numpy/numpy/pull/9373>`__: BUG: ')' is printed at the end pointer of the buffer in numpy.f2py.
* `#9374 <https://github.com/numpy/numpy/pull/9374>`__: DOC: Create NumPy 1.13.1 release notes.
* `#9376 <https://github.com/numpy/numpy/pull/9376>`__: BUG: Prevent hang traversing ufunc userloop linked list
* `#9377 <https://github.com/numpy/numpy/pull/9377>`__: DOC: Use x1 and x2 in the heaviside docstring.
* `#9378 <https://github.com/numpy/numpy/pull/9378>`__: DOC: Add $PARAMS to the isnat docstring
* `#9379 <https://github.com/numpy/numpy/pull/9379>`__: DOC: Update the 1.13.1 release notes
Contributors
============
A total of 12 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Andras Deak +
* Bob Eldering +
* Charles Harris
* Daniel Hrisca +
* Eric Wieser
* Joshua Leahy +
* Julian Taylor
* Michael Seifert
* Pauli Virtanen
* Ralf Gommers
* Roland Kaufmann
* Warren Weckesser
Pull requests merged
====================
A total of 19 pull requests were merged for this release.
* `#9240 <https://github.com/numpy/numpy/pull/9240>`__: DOC: BLD: fix lots of Sphinx warnings/errors.
* `#9255 <https://github.com/numpy/numpy/pull/9255>`__: Revert "DEP: Raise TypeError for subtract(bool_, bool_)."
* `#9261 <https://github.com/numpy/numpy/pull/9261>`__: BUG: don't elide into readonly and updateifcopy temporaries for...
* `#9262 <https://github.com/numpy/numpy/pull/9262>`__: BUG: fix missing keyword rename for common block in numpy.f2py
* `#9263 <https://github.com/numpy/numpy/pull/9263>`__: BUG: handle resize of 0d array
* `#9267 <https://github.com/numpy/numpy/pull/9267>`__: DOC: update f2py front page and some doc build metadata.
* `#9299 <https://github.com/numpy/numpy/pull/9299>`__: BUG: Fix Intel compilation on Unix.
* `#9317 <https://github.com/numpy/numpy/pull/9317>`__: BUG: fix wrong ndim used in empty where check
* `#9319 <https://github.com/numpy/numpy/pull/9319>`__: BUG: Make extensions compilable with MinGW on Py2.7
* `#9339 <https://github.com/numpy/numpy/pull/9339>`__: BUG: Prevent crash if ufunc doc string is null
* `#9340 <https://github.com/numpy/numpy/pull/9340>`__: BUG: umath: un-break ufunc where= when no out= is given
* `#9371 <https://github.com/numpy/numpy/pull/9371>`__: DOC: Add isnat/positive ufunc to documentation
* `#9372 <https://github.com/numpy/numpy/pull/9372>`__: BUG: Fix error in fromstring function from numpy.core.records...
* `#9373 <https://github.com/numpy/numpy/pull/9373>`__: BUG: ')' is printed at the end pointer of the buffer in numpy.f2py.
* `#9374 <https://github.com/numpy/numpy/pull/9374>`__: DOC: Create NumPy 1.13.1 release notes.
* `#9376 <https://github.com/numpy/numpy/pull/9376>`__: BUG: Prevent hang traversing ufunc userloop linked list
* `#9377 <https://github.com/numpy/numpy/pull/9377>`__: DOC: Use x1 and x2 in the heaviside docstring.
* `#9378 <https://github.com/numpy/numpy/pull/9378>`__: DOC: Add $PARAMS to the isnat docstring
* `#9379 <https://github.com/numpy/numpy/pull/9379>`__: DOC: Update the 1.13.1 release notes

View File

@ -1,46 +1,46 @@
Contributors
============
A total of 12 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Brandon Carter
* Charles Harris
* Eric Wieser
* Iryna Shcherbina +
* James Bourbeau +
* Jonathan Helmus
* Julian Taylor
* Matti Picus
* Michael Lamparski +
* Michael Seifert
* Ralf Gommers
Pull requests merged
====================
A total of 21 pull requests were merged for this release.
* `#9390 <https://github.com/numpy/numpy/pull/9390>`__: BUG: Return the poly1d coefficients array directly
* `#9555 <https://github.com/numpy/numpy/pull/9555>`__: BUG: fix regression in 1.13.x in distutils.mingw32ccompiler.
* `#9556 <https://github.com/numpy/numpy/pull/9556>`__: BUG: Fix true_divide when dtype=np.float64 specified.
* `#9557 <https://github.com/numpy/numpy/pull/9557>`__: DOC: Fix some rst markup in numpy/doc/basics.py.
* `#9558 <https://github.com/numpy/numpy/pull/9558>`__: BLD: remove -xhost flag from IntelFCompiler.
* `#9559 <https://github.com/numpy/numpy/pull/9559>`__: DOC: removes broken docstring example (source code, png, pdf)...
* `#9580 <https://github.com/numpy/numpy/pull/9580>`__: BUG: Add hypot and cabs functions to WIN32 blacklist.
* `#9732 <https://github.com/numpy/numpy/pull/9732>`__: BUG: Make scalar function elision check if temp is writeable.
* `#9736 <https://github.com/numpy/numpy/pull/9736>`__: BUG: various fixes to np.gradient
* `#9742 <https://github.com/numpy/numpy/pull/9742>`__: BUG: Fix np.pad for CVE-2017-12852
* `#9744 <https://github.com/numpy/numpy/pull/9744>`__: BUG: Check for exception in sort functions, add tests
* `#9745 <https://github.com/numpy/numpy/pull/9745>`__: DOC: Add whitespace after "versionadded::" directive so it actually...
* `#9746 <https://github.com/numpy/numpy/pull/9746>`__: BUG: memory leak in np.dot of size 0
* `#9747 <https://github.com/numpy/numpy/pull/9747>`__: BUG: adjust gfortran version search regex
* `#9757 <https://github.com/numpy/numpy/pull/9757>`__: BUG: Cython 0.27 breaks NumPy on Python 3.
* `#9764 <https://github.com/numpy/numpy/pull/9764>`__: BUG: Ensure `_npy_scaled_cexp{,f,l}` is defined when needed.
* `#9765 <https://github.com/numpy/numpy/pull/9765>`__: BUG: PyArray_CountNonzero does not check for exceptions
* `#9766 <https://github.com/numpy/numpy/pull/9766>`__: BUG: Fixes histogram monotonicity check for unsigned bin values
* `#9767 <https://github.com/numpy/numpy/pull/9767>`__: BUG: ensure consistent result dtype of count_nonzero
* `#9771 <https://github.com/numpy/numpy/pull/9771>`__: MAINT,BUG: Fix mtrand for Cython 0.27.
* `#9772 <https://github.com/numpy/numpy/pull/9772>`__: DOC: Create the 1.13.2 release notes.
Contributors
============
A total of 12 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Brandon Carter
* Charles Harris
* Eric Wieser
* Iryna Shcherbina +
* James Bourbeau +
* Jonathan Helmus
* Julian Taylor
* Matti Picus
* Michael Lamparski +
* Michael Seifert
* Ralf Gommers
Pull requests merged
====================
A total of 21 pull requests were merged for this release.
* `#9390 <https://github.com/numpy/numpy/pull/9390>`__: BUG: Return the poly1d coefficients array directly
* `#9555 <https://github.com/numpy/numpy/pull/9555>`__: BUG: fix regression in 1.13.x in distutils.mingw32ccompiler.
* `#9556 <https://github.com/numpy/numpy/pull/9556>`__: BUG: Fix true_divide when dtype=np.float64 specified.
* `#9557 <https://github.com/numpy/numpy/pull/9557>`__: DOC: Fix some rst markup in numpy/doc/basics.py.
* `#9558 <https://github.com/numpy/numpy/pull/9558>`__: BLD: remove -xhost flag from IntelFCompiler.
* `#9559 <https://github.com/numpy/numpy/pull/9559>`__: DOC: removes broken docstring example (source code, png, pdf)...
* `#9580 <https://github.com/numpy/numpy/pull/9580>`__: BUG: Add hypot and cabs functions to WIN32 blacklist.
* `#9732 <https://github.com/numpy/numpy/pull/9732>`__: BUG: Make scalar function elision check if temp is writeable.
* `#9736 <https://github.com/numpy/numpy/pull/9736>`__: BUG: various fixes to np.gradient
* `#9742 <https://github.com/numpy/numpy/pull/9742>`__: BUG: Fix np.pad for CVE-2017-12852
* `#9744 <https://github.com/numpy/numpy/pull/9744>`__: BUG: Check for exception in sort functions, add tests
* `#9745 <https://github.com/numpy/numpy/pull/9745>`__: DOC: Add whitespace after "versionadded::" directive so it actually...
* `#9746 <https://github.com/numpy/numpy/pull/9746>`__: BUG: memory leak in np.dot of size 0
* `#9747 <https://github.com/numpy/numpy/pull/9747>`__: BUG: adjust gfortran version search regex
* `#9757 <https://github.com/numpy/numpy/pull/9757>`__: BUG: Cython 0.27 breaks NumPy on Python 3.
* `#9764 <https://github.com/numpy/numpy/pull/9764>`__: BUG: Ensure `_npy_scaled_cexp{,f,l}` is defined when needed.
* `#9765 <https://github.com/numpy/numpy/pull/9765>`__: BUG: PyArray_CountNonzero does not check for exceptions
* `#9766 <https://github.com/numpy/numpy/pull/9766>`__: BUG: Fixes histogram monotonicity check for unsigned bin values
* `#9767 <https://github.com/numpy/numpy/pull/9767>`__: BUG: ensure consistent result dtype of count_nonzero
* `#9771 <https://github.com/numpy/numpy/pull/9771>`__: MAINT,BUG: Fix mtrand for Cython 0.27.
* `#9772 <https://github.com/numpy/numpy/pull/9772>`__: DOC: Create the 1.13.2 release notes.

View File

@ -1,73 +1,73 @@
Contributors
============
A total of 19 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Andras Deak +
* Bob Eldering +
* Brandon Carter
* Charles Harris
* Daniel Hrisca +
* Eric Wieser
* Iryna Shcherbina +
* James Bourbeau +
* Jonathan Helmus
* Joshua Leahy +
* Julian Taylor
* Matti Picus
* Michael Lamparski +
* Michael Seifert
* Pauli Virtanen
* Ralf Gommers
* Roland Kaufmann
* Warren Weckesser
Pull requests merged
====================
A total of 41 pull requests were merged for this release.
* `#9240 <https://github.com/numpy/numpy/pull/9240>`__: DOC: BLD: fix lots of Sphinx warnings/errors.
* `#9255 <https://github.com/numpy/numpy/pull/9255>`__: Revert "DEP: Raise TypeError for subtract(bool_, bool_)."
* `#9261 <https://github.com/numpy/numpy/pull/9261>`__: BUG: don't elide into readonly and updateifcopy temporaries for...
* `#9262 <https://github.com/numpy/numpy/pull/9262>`__: BUG: fix missing keyword rename for common block in numpy.f2py
* `#9263 <https://github.com/numpy/numpy/pull/9263>`__: BUG: handle resize of 0d array
* `#9267 <https://github.com/numpy/numpy/pull/9267>`__: DOC: update f2py front page and some doc build metadata.
* `#9299 <https://github.com/numpy/numpy/pull/9299>`__: BUG: Fix Intel compilation on Unix.
* `#9317 <https://github.com/numpy/numpy/pull/9317>`__: BUG: fix wrong ndim used in empty where check
* `#9319 <https://github.com/numpy/numpy/pull/9319>`__: BUG: Make extensions compilable with MinGW on Py2.7
* `#9339 <https://github.com/numpy/numpy/pull/9339>`__: BUG: Prevent crash if ufunc doc string is null
* `#9340 <https://github.com/numpy/numpy/pull/9340>`__: BUG: umath: un-break ufunc where= when no out= is given
* `#9371 <https://github.com/numpy/numpy/pull/9371>`__: DOC: Add isnat/positive ufunc to documentation
* `#9372 <https://github.com/numpy/numpy/pull/9372>`__: BUG: Fix error in fromstring function from numpy.core.records...
* `#9373 <https://github.com/numpy/numpy/pull/9373>`__: BUG: ')' is printed at the end pointer of the buffer in numpy.f2py.
* `#9374 <https://github.com/numpy/numpy/pull/9374>`__: DOC: Create NumPy 1.13.1 release notes.
* `#9376 <https://github.com/numpy/numpy/pull/9376>`__: BUG: Prevent hang traversing ufunc userloop linked list
* `#9377 <https://github.com/numpy/numpy/pull/9377>`__: DOC: Use x1 and x2 in the heaviside docstring.
* `#9378 <https://github.com/numpy/numpy/pull/9378>`__: DOC: Add $PARAMS to the isnat docstring
* `#9379 <https://github.com/numpy/numpy/pull/9379>`__: DOC: Update the 1.13.1 release notes
* `#9390 <https://github.com/numpy/numpy/pull/9390>`__: BUG: Return the poly1d coefficients array directly
* `#9555 <https://github.com/numpy/numpy/pull/9555>`__: BUG: fix regression in 1.13.x in distutils.mingw32ccompiler.
* `#9556 <https://github.com/numpy/numpy/pull/9556>`__: BUG: Fix true_divide when dtype=np.float64 specified.
* `#9557 <https://github.com/numpy/numpy/pull/9557>`__: DOC: Fix some rst markup in numpy/doc/basics.py.
* `#9558 <https://github.com/numpy/numpy/pull/9558>`__: BLD: remove -xhost flag from IntelFCompiler.
* `#9559 <https://github.com/numpy/numpy/pull/9559>`__: DOC: removes broken docstring example (source code, png, pdf)...
* `#9580 <https://github.com/numpy/numpy/pull/9580>`__: BUG: Add hypot and cabs functions to WIN32 blacklist.
* `#9732 <https://github.com/numpy/numpy/pull/9732>`__: BUG: Make scalar function elision check if temp is writeable.
* `#9736 <https://github.com/numpy/numpy/pull/9736>`__: BUG: various fixes to np.gradient
* `#9742 <https://github.com/numpy/numpy/pull/9742>`__: BUG: Fix np.pad for CVE-2017-12852
* `#9744 <https://github.com/numpy/numpy/pull/9744>`__: BUG: Check for exception in sort functions, add tests
* `#9745 <https://github.com/numpy/numpy/pull/9745>`__: DOC: Add whitespace after "versionadded::" directive so it actually...
* `#9746 <https://github.com/numpy/numpy/pull/9746>`__: BUG: memory leak in np.dot of size 0
* `#9747 <https://github.com/numpy/numpy/pull/9747>`__: BUG: adjust gfortran version search regex
* `#9757 <https://github.com/numpy/numpy/pull/9757>`__: BUG: Cython 0.27 breaks NumPy on Python 3.
* `#9764 <https://github.com/numpy/numpy/pull/9764>`__: BUG: Ensure `_npy_scaled_cexp{,f,l}` is defined when needed.
* `#9765 <https://github.com/numpy/numpy/pull/9765>`__: BUG: PyArray_CountNonzero does not check for exceptions
* `#9766 <https://github.com/numpy/numpy/pull/9766>`__: BUG: Fixes histogram monotonicity check for unsigned bin values
* `#9767 <https://github.com/numpy/numpy/pull/9767>`__: BUG: ensure consistent result dtype of count_nonzero
* `#9771 <https://github.com/numpy/numpy/pull/9771>`__: MAINT,BUG: Fix mtrand for Cython 0.27.
* `#9772 <https://github.com/numpy/numpy/pull/9772>`__: DOC: Create the 1.13.2 release notes.
* `#9794 <https://github.com/numpy/numpy/pull/9794>`__: DOC: Create 1.13.3 release notes.
Contributors
============
A total of 19 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Andras Deak +
* Bob Eldering +
* Brandon Carter
* Charles Harris
* Daniel Hrisca +
* Eric Wieser
* Iryna Shcherbina +
* James Bourbeau +
* Jonathan Helmus
* Joshua Leahy +
* Julian Taylor
* Matti Picus
* Michael Lamparski +
* Michael Seifert
* Pauli Virtanen
* Ralf Gommers
* Roland Kaufmann
* Warren Weckesser
Pull requests merged
====================
A total of 41 pull requests were merged for this release.
* `#9240 <https://github.com/numpy/numpy/pull/9240>`__: DOC: BLD: fix lots of Sphinx warnings/errors.
* `#9255 <https://github.com/numpy/numpy/pull/9255>`__: Revert "DEP: Raise TypeError for subtract(bool_, bool_)."
* `#9261 <https://github.com/numpy/numpy/pull/9261>`__: BUG: don't elide into readonly and updateifcopy temporaries for...
* `#9262 <https://github.com/numpy/numpy/pull/9262>`__: BUG: fix missing keyword rename for common block in numpy.f2py
* `#9263 <https://github.com/numpy/numpy/pull/9263>`__: BUG: handle resize of 0d array
* `#9267 <https://github.com/numpy/numpy/pull/9267>`__: DOC: update f2py front page and some doc build metadata.
* `#9299 <https://github.com/numpy/numpy/pull/9299>`__: BUG: Fix Intel compilation on Unix.
* `#9317 <https://github.com/numpy/numpy/pull/9317>`__: BUG: fix wrong ndim used in empty where check
* `#9319 <https://github.com/numpy/numpy/pull/9319>`__: BUG: Make extensions compilable with MinGW on Py2.7
* `#9339 <https://github.com/numpy/numpy/pull/9339>`__: BUG: Prevent crash if ufunc doc string is null
* `#9340 <https://github.com/numpy/numpy/pull/9340>`__: BUG: umath: un-break ufunc where= when no out= is given
* `#9371 <https://github.com/numpy/numpy/pull/9371>`__: DOC: Add isnat/positive ufunc to documentation
* `#9372 <https://github.com/numpy/numpy/pull/9372>`__: BUG: Fix error in fromstring function from numpy.core.records...
* `#9373 <https://github.com/numpy/numpy/pull/9373>`__: BUG: ')' is printed at the end pointer of the buffer in numpy.f2py.
* `#9374 <https://github.com/numpy/numpy/pull/9374>`__: DOC: Create NumPy 1.13.1 release notes.
* `#9376 <https://github.com/numpy/numpy/pull/9376>`__: BUG: Prevent hang traversing ufunc userloop linked list
* `#9377 <https://github.com/numpy/numpy/pull/9377>`__: DOC: Use x1 and x2 in the heaviside docstring.
* `#9378 <https://github.com/numpy/numpy/pull/9378>`__: DOC: Add $PARAMS to the isnat docstring
* `#9379 <https://github.com/numpy/numpy/pull/9379>`__: DOC: Update the 1.13.1 release notes
* `#9390 <https://github.com/numpy/numpy/pull/9390>`__: BUG: Return the poly1d coefficients array directly
* `#9555 <https://github.com/numpy/numpy/pull/9555>`__: BUG: fix regression in 1.13.x in distutils.mingw32ccompiler.
* `#9556 <https://github.com/numpy/numpy/pull/9556>`__: BUG: Fix true_divide when dtype=np.float64 specified.
* `#9557 <https://github.com/numpy/numpy/pull/9557>`__: DOC: Fix some rst markup in numpy/doc/basics.py.
* `#9558 <https://github.com/numpy/numpy/pull/9558>`__: BLD: remove -xhost flag from IntelFCompiler.
* `#9559 <https://github.com/numpy/numpy/pull/9559>`__: DOC: removes broken docstring example (source code, png, pdf)...
* `#9580 <https://github.com/numpy/numpy/pull/9580>`__: BUG: Add hypot and cabs functions to WIN32 blacklist.
* `#9732 <https://github.com/numpy/numpy/pull/9732>`__: BUG: Make scalar function elision check if temp is writeable.
* `#9736 <https://github.com/numpy/numpy/pull/9736>`__: BUG: various fixes to np.gradient
* `#9742 <https://github.com/numpy/numpy/pull/9742>`__: BUG: Fix np.pad for CVE-2017-12852
* `#9744 <https://github.com/numpy/numpy/pull/9744>`__: BUG: Check for exception in sort functions, add tests
* `#9745 <https://github.com/numpy/numpy/pull/9745>`__: DOC: Add whitespace after "versionadded::" directive so it actually...
* `#9746 <https://github.com/numpy/numpy/pull/9746>`__: BUG: memory leak in np.dot of size 0
* `#9747 <https://github.com/numpy/numpy/pull/9747>`__: BUG: adjust gfortran version search regex
* `#9757 <https://github.com/numpy/numpy/pull/9757>`__: BUG: Cython 0.27 breaks NumPy on Python 3.
* `#9764 <https://github.com/numpy/numpy/pull/9764>`__: BUG: Ensure `_npy_scaled_cexp{,f,l}` is defined when needed.
* `#9765 <https://github.com/numpy/numpy/pull/9765>`__: BUG: PyArray_CountNonzero does not check for exceptions
* `#9766 <https://github.com/numpy/numpy/pull/9766>`__: BUG: Fixes histogram monotonicity check for unsigned bin values
* `#9767 <https://github.com/numpy/numpy/pull/9767>`__: BUG: ensure consistent result dtype of count_nonzero
* `#9771 <https://github.com/numpy/numpy/pull/9771>`__: MAINT,BUG: Fix mtrand for Cython 0.27.
* `#9772 <https://github.com/numpy/numpy/pull/9772>`__: DOC: Create the 1.13.2 release notes.
* `#9794 <https://github.com/numpy/numpy/pull/9794>`__: DOC: Create 1.13.3 release notes.

View File

@ -1,494 +1,494 @@
Contributors
============
A total of 100 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Alexey Brodkin +
* Allan Haldane
* Andras Deak +
* Andrew Lawson +
* Anna Chiara +
* Antoine Pitrou
* Bernhard M. Wiedemann +
* Bob Eldering +
* Brandon Carter
* CJ Carey
* Charles Harris
* Chris Lamb
* Christoph Boeddeker +
* Christoph Gohlke
* Daniel Hrisca +
* Daniel Smith
* Danny Hermes
* David Freese
* David Hagen
* David Linke +
* David Schaefer +
* Dillon Niederhut +
* Egor Panfilov +
* Emilien Kofman
* Eric Wieser
* Erik Bray +
* Erik Quaeghebeur +
* Garry Polley +
* Gunjan +
* Han Shen +
* Henke Adolfsson +
* Hidehiro NAGAOKA +
* Hemil Desai +
* Hong Xu +
* Iryna Shcherbina +
* Jaime Fernandez
* James Bourbeau +
* Jamie Townsend +
* Jarrod Millman
* Jean Helie +
* Jeroen Demeyer +
* John Goetz +
* John Kirkham
* John Zwinck
* Jonathan Helmus
* Joseph Fox-Rabinovitz
* Joseph Paul Cohen +
* Joshua Leahy +
* Julian Taylor
* Jörg Döpfert +
* Keno Goertz +
* Kevin Sheppard +
* Kexuan Sun +
* Konrad Kapp +
* Kristofor Maynard +
* Licht Takeuchi +
* Loïc Estève
* Lukas Mericle +
* Marten van Kerkwijk
* Matheus Portela +
* Matthew Brett
* Matti Picus
* Michael Lamparski +
* Michael Odintsov +
* Michael Schnaitter +
* Michael Seifert
* Mike Nolta
* Nathaniel J. Smith
* Nelle Varoquaux +
* Nicholas Del Grosso +
* Nico Schlömer +
* Oleg Zabluda +
* Oleksandr Pavlyk
* Pauli Virtanen
* Pim de Haan +
* Ralf Gommers
* Robert T. McGibbon +
* Roland Kaufmann
* Sebastian Berg
* Serhiy Storchaka +
* Shitian Ni +
* Spencer Hill +
* Srinivas Reddy Thatiparthy +
* Stefan Winkler +
* Stephan Hoyer
* Steven Maude +
* SuperBo +
* Thomas Köppe +
* Toon Verstraelen
* Vedant Misra +
* Warren Weckesser
* Wirawan Purwanto +
* Yang Li +
* Ziyan Zhou +
* chaoyu3 +
* orbit-stabilizer +
* solarjoe
* wufangjie +
* xoviat +
* Élie Gouzien +
Pull requests merged
====================
A total of 381 pull requests were merged for this release.
* `#5580 <https://github.com/numpy/numpy/pull/5580>`__: BUG, DEP: Fix masked arrays to properly edit views. ( #5558 )
* `#6053 <https://github.com/numpy/numpy/pull/6053>`__: MAINT: struct assignment "by field position", multi-field indices...
* `#7994 <https://github.com/numpy/numpy/pull/7994>`__: BUG: Allow 'shape': () in __array_interface__ regardless of the...
* `#8187 <https://github.com/numpy/numpy/pull/8187>`__: MAINT: Remove the unused keepdim argument from np.ufunc.accumulate
* `#8278 <https://github.com/numpy/numpy/pull/8278>`__: MAINT: Make the refactor suggested in prepare_index
* `#8557 <https://github.com/numpy/numpy/pull/8557>`__: ENH: add hermitian=False kwarg to np.linalg.matrix_rank
* `#8722 <https://github.com/numpy/numpy/pull/8722>`__: DOC: Clarifying the meaning of small values for `suppress` print...
* `#8827 <https://github.com/numpy/numpy/pull/8827>`__: BUG: Fix pinv for stacked matrices
* `#8920 <https://github.com/numpy/numpy/pull/8920>`__: ENH: use caching memory allocator in more places
* `#8934 <https://github.com/numpy/numpy/pull/8934>`__: MAINT: Use np.concatenate instead of np.vstack
* `#8977 <https://github.com/numpy/numpy/pull/8977>`__: BUG: Fix all kinds of problems when itemsize == 0
* `#8981 <https://github.com/numpy/numpy/pull/8981>`__: ENH: implement voidtype_repr and voidtype_str
* `#8983 <https://github.com/numpy/numpy/pull/8983>`__: ENH: fix str/repr for 0d-arrays and int* scalars
* `#9020 <https://github.com/numpy/numpy/pull/9020>`__: BUG: don't silence warnings in ufunc.reduce
* `#9025 <https://github.com/numpy/numpy/pull/9025>`__: ENH: np.save() to align data at 64 bytes
* `#9056 <https://github.com/numpy/numpy/pull/9056>`__: DOC: update structured array docs to reflect #6053
* `#9065 <https://github.com/numpy/numpy/pull/9065>`__: DEP: 0 should be passed to bincount, not None
* `#9083 <https://github.com/numpy/numpy/pull/9083>`__: MAINT: Improve error message from sorting with duplicate key
* `#9089 <https://github.com/numpy/numpy/pull/9089>`__: MAINT: refine error message for __array_ufunc__ not implemented
* `#9090 <https://github.com/numpy/numpy/pull/9090>`__: MAINT: Update master branch for 1.14.0 development.
* `#9092 <https://github.com/numpy/numpy/pull/9092>`__: BUG remove memory leak in array ufunc override.
* `#9096 <https://github.com/numpy/numpy/pull/9096>`__: ENH: Allow inplace also as keyword parameter for ndarray.byteswap
* `#9099 <https://github.com/numpy/numpy/pull/9099>`__: TST: fix test_basic failure on Windows
* `#9106 <https://github.com/numpy/numpy/pull/9106>`__: BUG: Array ufunc reduce out tuple
* `#9110 <https://github.com/numpy/numpy/pull/9110>`__: BUG: Do not elide complex abs()
* `#9112 <https://github.com/numpy/numpy/pull/9112>`__: BUG: ndarray.__pow__ does not check result of fast_scalar_power
* `#9113 <https://github.com/numpy/numpy/pull/9113>`__: BUG: delay calls of array repr in getlimits
* `#9115 <https://github.com/numpy/numpy/pull/9115>`__: BUG: Compilation crashes in MSVC when LIB or INCLUDE is not set
* `#9116 <https://github.com/numpy/numpy/pull/9116>`__: DOC: link to stack from column_stack
* `#9118 <https://github.com/numpy/numpy/pull/9118>`__: BUG: Fix reference count error of types when init multiarraymodule
* `#9119 <https://github.com/numpy/numpy/pull/9119>`__: BUG: Fix error handling on PyCapsule when initializing multiarraymodule
* `#9122 <https://github.com/numpy/numpy/pull/9122>`__: DOC: update 1.13 release note for MaskedArray, masked constants...
* `#9132 <https://github.com/numpy/numpy/pull/9132>`__: DEP: Deprecate incorrect behavior of expand_dims.
* `#9138 <https://github.com/numpy/numpy/pull/9138>`__: MAINT: Update .mailmap
* `#9139 <https://github.com/numpy/numpy/pull/9139>`__: ENH: remove unneeded spaces in float/bool reprs, fixes 0d str
* `#9141 <https://github.com/numpy/numpy/pull/9141>`__: DOC: Update ufunc documentation
* `#9142 <https://github.com/numpy/numpy/pull/9142>`__: BUG: set default type for empty index array to `numpy.intp`
* `#9149 <https://github.com/numpy/numpy/pull/9149>`__: DOC: Fix incorrect function signature in UFunc documentation.
* `#9151 <https://github.com/numpy/numpy/pull/9151>`__: DOC: better link display text for Developer Zone.
* `#9152 <https://github.com/numpy/numpy/pull/9152>`__: DOC: Fix some very minor spelling/grammar mistakes in docs
* `#9155 <https://github.com/numpy/numpy/pull/9155>`__: MAINT: Take out code that will never be executed
* `#9157 <https://github.com/numpy/numpy/pull/9157>`__: DOC: Fixed broken link to scipy developer zone
* `#9164 <https://github.com/numpy/numpy/pull/9164>`__: BUG: have as_strided() keep custom dtypes
* `#9167 <https://github.com/numpy/numpy/pull/9167>`__: BUG: ensure structured ndarray.__eq__,__ne__ defer when appropriate.
* `#9168 <https://github.com/numpy/numpy/pull/9168>`__: MAINT: Simplify if statement
* `#9174 <https://github.com/numpy/numpy/pull/9174>`__: BUG: allow pickling generic datetime
* `#9176 <https://github.com/numpy/numpy/pull/9176>`__: DOC: Update protocols in git development document.
* `#9181 <https://github.com/numpy/numpy/pull/9181>`__: COMPAT: PyPy calls clongdouble_int which raises a warning
* `#9195 <https://github.com/numpy/numpy/pull/9195>`__: BUG: pull request 9087 modifies a tuple after use
* `#9200 <https://github.com/numpy/numpy/pull/9200>`__: DOC: Update bincount docs to reflect gh-8348
* `#9201 <https://github.com/numpy/numpy/pull/9201>`__: BUG: Fix unicode(unicode_array_0d) on python 2.7
* `#9202 <https://github.com/numpy/numpy/pull/9202>`__: MAINT: Move ndarray.__str__ and ndarray.__repr__ to their own...
* `#9205 <https://github.com/numpy/numpy/pull/9205>`__: DOC: Remove all references to bigndarray in documentation.
* `#9209 <https://github.com/numpy/numpy/pull/9209>`__: ENH: Add an out argument to concatenate
* `#9212 <https://github.com/numpy/numpy/pull/9212>`__: MAINT: Combine similar branches
* `#9214 <https://github.com/numpy/numpy/pull/9214>`__: MAINT: Don't internally use the one-argument where
* `#9215 <https://github.com/numpy/numpy/pull/9215>`__: BUG: Avoid bare except clauses
* `#9217 <https://github.com/numpy/numpy/pull/9217>`__: BUG: handle resize of 0d array
* `#9218 <https://github.com/numpy/numpy/pull/9218>`__: BUG: Only propagate TypeError from where we throw it
* `#9219 <https://github.com/numpy/numpy/pull/9219>`__: DOC: Link to ufunc.outer from np.outer
* `#9220 <https://github.com/numpy/numpy/pull/9220>`__: MAINT: Factor out code duplicated by nanmedian and nanpercentile
* `#9226 <https://github.com/numpy/numpy/pull/9226>`__: DOC, ENH: Add 1.13.0-changelog.rst
* `#9238 <https://github.com/numpy/numpy/pull/9238>`__: DOC: BLD: fix lots of Sphinx warnings/errors.
* `#9241 <https://github.com/numpy/numpy/pull/9241>`__: MAINT: Fixup release notes, changelogs after #9238 merge.
* `#9242 <https://github.com/numpy/numpy/pull/9242>`__: BUG: Make 0-length dim handling of tensordot consistent with...
* `#9246 <https://github.com/numpy/numpy/pull/9246>`__: ENH: Release the GIL in einsum() special-cased loops
* `#9247 <https://github.com/numpy/numpy/pull/9247>`__: BUG: fix missing keyword rename for common block in numpy.f2py
* `#9253 <https://github.com/numpy/numpy/pull/9253>`__: DOC: Add isnat/positive ufunc to documentation.
* `#9259 <https://github.com/numpy/numpy/pull/9259>`__: MAINT: Use XOR for bool arrays in `np.diff`
* `#9260 <https://github.com/numpy/numpy/pull/9260>`__: BUG: don't elide into readonly and updateifcopy temporaries
* `#9264 <https://github.com/numpy/numpy/pull/9264>`__: DOC: some doc build maintenance and f2py doc updates
* `#9266 <https://github.com/numpy/numpy/pull/9266>`__: BUG: Fix unused variable in ufunc_object.c,
* `#9268 <https://github.com/numpy/numpy/pull/9268>`__: ENH: testing: load available nose plugins that are external to...
* `#9271 <https://github.com/numpy/numpy/pull/9271>`__: BUG: fix issue when using ``python setup.py somecommand --force``.
* `#9280 <https://github.com/numpy/numpy/pull/9280>`__: BUG: Make extensions compilable with MinGW on Py2.7
* `#9281 <https://github.com/numpy/numpy/pull/9281>`__: DOC: add @ operator in array vs. matrix comparison doc
* `#9285 <https://github.com/numpy/numpy/pull/9285>`__: BUG: Fix Intel compilation on Unix.
* `#9292 <https://github.com/numpy/numpy/pull/9292>`__: MAINT: Fix lgtm alerts
* `#9294 <https://github.com/numpy/numpy/pull/9294>`__: BUG: Fixes histogram monotonicity check for unsigned bin values
* `#9300 <https://github.com/numpy/numpy/pull/9300>`__: BUG: PyArray_CountNonzero does not check for exceptions
* `#9302 <https://github.com/numpy/numpy/pull/9302>`__: BUG: Fix fillvalue
* `#9306 <https://github.com/numpy/numpy/pull/9306>`__: BUG: f2py: Convert some error messages printed to stderr to exceptions.
* `#9310 <https://github.com/numpy/numpy/pull/9310>`__: BUG: fix wrong ndim used in empty where check
* `#9316 <https://github.com/numpy/numpy/pull/9316>`__: BUG: `runtest -t` should recognize development mode
* `#9320 <https://github.com/numpy/numpy/pull/9320>`__: DOC: Use x1 and x2 in the heaviside docstring.
* `#9322 <https://github.com/numpy/numpy/pull/9322>`__: BUG: np.ma.astype fails on structured types
* `#9323 <https://github.com/numpy/numpy/pull/9323>`__: DOC: Add $PARAMS to the isnat docstring
* `#9324 <https://github.com/numpy/numpy/pull/9324>`__: DOC: Fix missing asterisks in git development_setup doc page
* `#9325 <https://github.com/numpy/numpy/pull/9325>`__: DOC: add a NumFOCUS badge to README.md
* `#9332 <https://github.com/numpy/numpy/pull/9332>`__: ENH: fix 0d array printing using `str` or `formatter`.
* `#9335 <https://github.com/numpy/numpy/pull/9335>`__: BUG: umath: un-break ufunc where= when no out= is given
* `#9336 <https://github.com/numpy/numpy/pull/9336>`__: BUG: Fix various problems with the np.ma.masked constant
* `#9337 <https://github.com/numpy/numpy/pull/9337>`__: BUG: Prevent crash if ufunc doc string is null
* `#9341 <https://github.com/numpy/numpy/pull/9341>`__: BUG: np.resize discards empty shapes
* `#9343 <https://github.com/numpy/numpy/pull/9343>`__: BUG: recfunctions fail in a bunch of ways due to using .descr
* `#9344 <https://github.com/numpy/numpy/pull/9344>`__: DOC: fixes issue #9326, by removing the statement.
* `#9346 <https://github.com/numpy/numpy/pull/9346>`__: BUG: void masked fillvalue cannot be cast to void in python 3
* `#9354 <https://github.com/numpy/numpy/pull/9354>`__: BUG: Prevent hang traversing ufunc userloop linked list
* `#9357 <https://github.com/numpy/numpy/pull/9357>`__: DOC: Add examples for complex dtypes
* `#9361 <https://github.com/numpy/numpy/pull/9361>`__: DOC: isscalar add example for str
* `#9362 <https://github.com/numpy/numpy/pull/9362>`__: ENH: Rearrange testing module to isolate nose dependency.
* `#9364 <https://github.com/numpy/numpy/pull/9364>`__: BUG: ')' is printed at the end pointer of the buffer in numpy.f2py.
* `#9369 <https://github.com/numpy/numpy/pull/9369>`__: BUG: fix error in fromstring function from numpy.core.records
* `#9375 <https://github.com/numpy/numpy/pull/9375>`__: DOC: Document the internal workings of PY_ARRAY_UNIQUE_SYMBOL
* `#9380 <https://github.com/numpy/numpy/pull/9380>`__: DOC: Forward port 1.13.1 notes and changelog.
* `#9381 <https://github.com/numpy/numpy/pull/9381>`__: TST: test doc string of COMMON block arrays for numpy.f2py.
* `#9387 <https://github.com/numpy/numpy/pull/9387>`__: MAINT: Simplify code using PyArray_ISBYTESWAPPED macro.
* `#9388 <https://github.com/numpy/numpy/pull/9388>`__: MAINT: Use PyArray_ISBYTESWAPPED instead of !PyArray_ISNOTSWAPPED.
* `#9389 <https://github.com/numpy/numpy/pull/9389>`__: DOC: Fix reference, PyArray_DescrNew -> PyArray_NewFromDescr
* `#9392 <https://github.com/numpy/numpy/pull/9392>`__: DOC: UPDATEIFCOPY raises an error if not an array.
* `#9399 <https://github.com/numpy/numpy/pull/9399>`__: DOC: document how to free memory from PyArray_IntpConverter.
* `#9400 <https://github.com/numpy/numpy/pull/9400>`__: MAINT: Further unify handling of unnamed ufuncs
* `#9403 <https://github.com/numpy/numpy/pull/9403>`__: MAINT: Replace tab escapes with four spaces
* `#9407 <https://github.com/numpy/numpy/pull/9407>`__: DOC: add ``suppress_warnings`` to the testing routine listing.
* `#9408 <https://github.com/numpy/numpy/pull/9408>`__: BUG: various fixes to np.gradient
* `#9411 <https://github.com/numpy/numpy/pull/9411>`__: MAINT/BUG: improve gradient dtype handling
* `#9412 <https://github.com/numpy/numpy/pull/9412>`__: BUG: Check for exception in sort functions
* `#9422 <https://github.com/numpy/numpy/pull/9422>`__: DOC: correct formatting of basic.types.html
* `#9423 <https://github.com/numpy/numpy/pull/9423>`__: MAINT: change http to https for numfocus.org link in README
* `#9425 <https://github.com/numpy/numpy/pull/9425>`__: ENH: Einsum calls BLAS if it advantageous to do so
* `#9426 <https://github.com/numpy/numpy/pull/9426>`__: DOC: Add a link to einsum_path
* `#9431 <https://github.com/numpy/numpy/pull/9431>`__: ENH: distutils: make msvc + mingw-gfortran work
* `#9432 <https://github.com/numpy/numpy/pull/9432>`__: BUG: Fix loss of masks in masked 0d methods
* `#9433 <https://github.com/numpy/numpy/pull/9433>`__: BUG: make np.transpose return a view of the mask
* `#9434 <https://github.com/numpy/numpy/pull/9434>`__: MAINT: Remove unittest dependencies
* `#9437 <https://github.com/numpy/numpy/pull/9437>`__: DOC: Update 1.14.0 release notes.
* `#9446 <https://github.com/numpy/numpy/pull/9446>`__: BUG: Inlined functions must be defined somewhere.
* `#9447 <https://github.com/numpy/numpy/pull/9447>`__: API: Make ``a.flat.__array__`` return a copy when ``a`` non-contiguous.
* `#9452 <https://github.com/numpy/numpy/pull/9452>`__: MAINT: Use new-style classes on 2.7
* `#9454 <https://github.com/numpy/numpy/pull/9454>`__: MAINT: Remove branch in __array__ where if and else were the...
* `#9457 <https://github.com/numpy/numpy/pull/9457>`__: MAINT: Add a common subclass to all the masked ufunc wrappers
* `#9458 <https://github.com/numpy/numpy/pull/9458>`__: MAINT: Improve performance of np.copyto(where=scalar)
* `#9469 <https://github.com/numpy/numpy/pull/9469>`__: BUG: Fix true_divide when dtype=np.float64 specified.
* `#9470 <https://github.com/numpy/numpy/pull/9470>`__: MAINT: Make `setxor1d` a bit clearer and speed it up
* `#9471 <https://github.com/numpy/numpy/pull/9471>`__: BLD: remove -xhost flag from IntelFCompiler.
* `#9475 <https://github.com/numpy/numpy/pull/9475>`__: DEP: deprecate rollaxis
* `#9482 <https://github.com/numpy/numpy/pull/9482>`__: MAINT: Make diff iterative instead of recursive
* `#9487 <https://github.com/numpy/numpy/pull/9487>`__: DEP: Letting fromstring pretend to be frombuffer is a bad idea
* `#9490 <https://github.com/numpy/numpy/pull/9490>`__: DOC: Replace xrange by range in quickstart docs
* `#9491 <https://github.com/numpy/numpy/pull/9491>`__: TST: Add filter for new Py3K warning in python 2
* `#9492 <https://github.com/numpy/numpy/pull/9492>`__: ENH: Add np.polynomial.chebyshev.chebinterpolate function.
* `#9498 <https://github.com/numpy/numpy/pull/9498>`__: DOC: fix versionadded in docstring for moveaxis
* `#9499 <https://github.com/numpy/numpy/pull/9499>`__: MAINT/BUG: Improve error messages for dtype reassigment, fix...
* `#9503 <https://github.com/numpy/numpy/pull/9503>`__: MAINT: Move variables into deepest relevant scope, for clarity
* `#9505 <https://github.com/numpy/numpy/pull/9505>`__: BUG: issubdtype is inconsistent on types and dtypes
* `#9517 <https://github.com/numpy/numpy/pull/9517>`__: MAINT/DOC: Use builtin when np.{x} is builtins.{x}.
* `#9519 <https://github.com/numpy/numpy/pull/9519>`__: MAINT: Remove `level=` keyword from test arguments.
* `#9520 <https://github.com/numpy/numpy/pull/9520>`__: MAINT: types.TypeType does not ever need to be used
* `#9521 <https://github.com/numpy/numpy/pull/9521>`__: BUG: Make issubclass(np.number, numbers.Number) return true
* `#9522 <https://github.com/numpy/numpy/pull/9522>`__: BUG: Fix problems with obj2sctype
* `#9524 <https://github.com/numpy/numpy/pull/9524>`__: TST, MAINT: Add `__init__.py` files to tests directories.
* `#9527 <https://github.com/numpy/numpy/pull/9527>`__: BUG: Fix scalar methods to receive keyword arguments
* `#9529 <https://github.com/numpy/numpy/pull/9529>`__: BUG: The NAT deprecation warning should not be given for every...
* `#9536 <https://github.com/numpy/numpy/pull/9536>`__: ENH: Show domain and window as kwargs in repr
* `#9540 <https://github.com/numpy/numpy/pull/9540>`__: BUG: MaskedArray _optinfo dictionary is not updated when calling...
* `#9543 <https://github.com/numpy/numpy/pull/9543>`__: DOC: Adding backslash between double-backtick and s.
* `#9544 <https://github.com/numpy/numpy/pull/9544>`__: MAINT: Use the error_converting macro where possible
* `#9545 <https://github.com/numpy/numpy/pull/9545>`__: DEP: Deprecate the event argument to datetime types, which is...
* `#9550 <https://github.com/numpy/numpy/pull/9550>`__: DOC: removes broken docstring example (source code, png, pdf)...
* `#9552 <https://github.com/numpy/numpy/pull/9552>`__: DOC, BUG: Fix Python 3.6 invalid escape sequence.
* `#9554 <https://github.com/numpy/numpy/pull/9554>`__: BUG: fix regression in 1.13.x in distutils.mingw32ccompiler.
* `#9564 <https://github.com/numpy/numpy/pull/9564>`__: BUG: fix distutils/cpuinfo.py:getoutput()
* `#9574 <https://github.com/numpy/numpy/pull/9574>`__: BUG: deal with broken hypot() for MSVC on win32
* `#9575 <https://github.com/numpy/numpy/pull/9575>`__: BUG: deal with broken cabs*() for MSVC on win32
* `#9577 <https://github.com/numpy/numpy/pull/9577>`__: BUG: Missing dirichlet input validation
* `#9581 <https://github.com/numpy/numpy/pull/9581>`__: DOC: Fix link in numpy.ndarray.copy method (missing backticks)
* `#9582 <https://github.com/numpy/numpy/pull/9582>`__: ENH: Warn to change lstsq default for rcond
* `#9586 <https://github.com/numpy/numpy/pull/9586>`__: DOC: update example in np.nonzero docstring
* `#9588 <https://github.com/numpy/numpy/pull/9588>`__: MAINT: Remove direct access to flatiter attributes
* `#9590 <https://github.com/numpy/numpy/pull/9590>`__: ENH: Remove unnecessary restriction in noncen-f
* `#9591 <https://github.com/numpy/numpy/pull/9591>`__: MAINT: Remove unnecessary imports
* `#9599 <https://github.com/numpy/numpy/pull/9599>`__: BUG: fix infinite loop when creating np.pad on an empty array
* `#9601 <https://github.com/numpy/numpy/pull/9601>`__: DOC: rot90 wrongly positioned versionadded directive.
* `#9604 <https://github.com/numpy/numpy/pull/9604>`__: MAINT: Refactor the code used to compute sha256, md5 hashes
* `#9606 <https://github.com/numpy/numpy/pull/9606>`__: MAINT: Remove global statement in linalg.py
* `#9609 <https://github.com/numpy/numpy/pull/9609>`__: BUG: Add `__ne__` method to dummy_ctype class.
* `#9610 <https://github.com/numpy/numpy/pull/9610>`__: BUG: core: fix wrong method flags for scalartypes.c.src:gentype_copy
* `#9611 <https://github.com/numpy/numpy/pull/9611>`__: MAINT: remove try..except clause.
* `#9613 <https://github.com/numpy/numpy/pull/9613>`__: DOC: Update release notes for noncentral_f changes.
* `#9614 <https://github.com/numpy/numpy/pull/9614>`__: MAINT: Fix a comment regarding the formula for arange length
* `#9618 <https://github.com/numpy/numpy/pull/9618>`__: DOC: Fix type definitions in mtrand
* `#9619 <https://github.com/numpy/numpy/pull/9619>`__: ENH: Allow Fortran arrays of dimension 0
* `#9624 <https://github.com/numpy/numpy/pull/9624>`__: BUG: memory leak in np.dot of size 0
* `#9626 <https://github.com/numpy/numpy/pull/9626>`__: BUG: Fix broken runtests '-t' option.
* `#9629 <https://github.com/numpy/numpy/pull/9629>`__: BUG: test, fix issue #9620 __radd__ in char scalars
* `#9630 <https://github.com/numpy/numpy/pull/9630>`__: DOC: Updates order of parameters in save docstring
* `#9636 <https://github.com/numpy/numpy/pull/9636>`__: MAINT: Fix compiler warnings and update travis jobs
* `#9638 <https://github.com/numpy/numpy/pull/9638>`__: BUG: ensure consistent result dtype of count_nonzero
* `#9639 <https://github.com/numpy/numpy/pull/9639>`__: MAINT: Refactor updateifcopy
* `#9640 <https://github.com/numpy/numpy/pull/9640>`__: BUG: fix padding an empty array in reflect mode.
* `#9643 <https://github.com/numpy/numpy/pull/9643>`__: DOC: add new steering council members.
* `#9645 <https://github.com/numpy/numpy/pull/9645>`__: ENH: enable OpenBLAS on windows.
* `#9648 <https://github.com/numpy/numpy/pull/9648>`__: DOC: Correct the signature in pad doc for callable mode.
* `#9649 <https://github.com/numpy/numpy/pull/9649>`__: DOC: Fixed doc example of apply along axis with 3D return
* `#9652 <https://github.com/numpy/numpy/pull/9652>`__: BUG: Make system_info output reproducible
* `#9658 <https://github.com/numpy/numpy/pull/9658>`__: BUG: Fix usage of keyword "from" as argument name for "can_cast".
* `#9667 <https://github.com/numpy/numpy/pull/9667>`__: MAINT: Simplify block implementation
* `#9668 <https://github.com/numpy/numpy/pull/9668>`__: DOC: clarify wording in tutorial
* `#9672 <https://github.com/numpy/numpy/pull/9672>`__: BUG: dot/matmul 'out' arg should accept any ndarray subclass
* `#9681 <https://github.com/numpy/numpy/pull/9681>`__: MAINT: Add block benchmarks
* `#9682 <https://github.com/numpy/numpy/pull/9682>`__: DOC: Add whitespace after "versionadded::" directive so it actually...
* `#9683 <https://github.com/numpy/numpy/pull/9683>`__: DOC: Add polyutils subpackage to reference documentation
* `#9685 <https://github.com/numpy/numpy/pull/9685>`__: BUG: Fixes #7395, operator.index now fails on numpy.bool_
* `#9688 <https://github.com/numpy/numpy/pull/9688>`__: MAINT: rework recursive guard to keep array2string signature
* `#9691 <https://github.com/numpy/numpy/pull/9691>`__: PEP 3141 numbers should be considered scalars
* `#9692 <https://github.com/numpy/numpy/pull/9692>`__: ENH: Add support of ARC architecture
* `#9695 <https://github.com/numpy/numpy/pull/9695>`__: DOC: `start` is not needed even when `step` is given.
* `#9700 <https://github.com/numpy/numpy/pull/9700>`__: DOC: Add mandatory memo argument to __deepcopy__ method documentation
* `#9701 <https://github.com/numpy/numpy/pull/9701>`__: DOC: Add keepdims argument for ndarray.max documentation
* `#9702 <https://github.com/numpy/numpy/pull/9702>`__: DOC: Warn about the difference between np.remainder and math.remainder
* `#9703 <https://github.com/numpy/numpy/pull/9703>`__: DOC: Fix mistaken word in nanprod docstring
* `#9707 <https://github.com/numpy/numpy/pull/9707>`__: MAINT: When linspace's step is a NumPy scalar, do multiplication in-place
* `#9709 <https://github.com/numpy/numpy/pull/9709>`__: DOC: allclose doesn't require matching shapes
* `#9711 <https://github.com/numpy/numpy/pull/9711>`__: BUG: Make scalar function elision check if writeable.
* `#9715 <https://github.com/numpy/numpy/pull/9715>`__: MAINT: Fix typo "Porland" -> "Portland" in `building` doc.
* `#9718 <https://github.com/numpy/numpy/pull/9718>`__: DEP: Deprecate truth testing on empty arrays
* `#9720 <https://github.com/numpy/numpy/pull/9720>`__: MAINT: Remove unnecessary special-casing of scalars in isclose
* `#9724 <https://github.com/numpy/numpy/pull/9724>`__: BUG: adjust gfortran version search regex
* `#9725 <https://github.com/numpy/numpy/pull/9725>`__: MAINT: cleanup circular import b/w arrayprint.py,numeric.py
* `#9726 <https://github.com/numpy/numpy/pull/9726>`__: ENH: Better error message for savetxt when X.ndim > 2 or X.ndim...
* `#9737 <https://github.com/numpy/numpy/pull/9737>`__: MAINT: Use zip, not enumerate
* `#9740 <https://github.com/numpy/numpy/pull/9740>`__: BUG: Ensure `_npy_scaled_cexp{,f,l}` is defined when needed.
* `#9741 <https://github.com/numpy/numpy/pull/9741>`__: BUG: core: use npy_cabs for abs() for np.complex* scalar types
* `#9743 <https://github.com/numpy/numpy/pull/9743>`__: MAINT: Use PyArray_CHKFLAGS in more places.
* `#9749 <https://github.com/numpy/numpy/pull/9749>`__: BUG: Fix loss of precision for large values in long double divmod
* `#9752 <https://github.com/numpy/numpy/pull/9752>`__: BUG: Errors thrown by 0d arrays in setitem are silenced and replaced
* `#9753 <https://github.com/numpy/numpy/pull/9753>`__: DOC: Fix ndarray.__setstate__ documentation, it only takes one...
* `#9755 <https://github.com/numpy/numpy/pull/9755>`__: BUG: Cython 0.27 breaks NumPy on Python 3.
* `#9756 <https://github.com/numpy/numpy/pull/9756>`__: BUG/TST: Check if precision is lost in longcomplex
* `#9762 <https://github.com/numpy/numpy/pull/9762>`__: MAINT: Use the PyArray_(GET|SET)_ITEM functions where possible
* `#9768 <https://github.com/numpy/numpy/pull/9768>`__: MAINT: Cleanup `ma.array.__str__`
* `#9770 <https://github.com/numpy/numpy/pull/9770>`__: MAINT,BUG: Fix mtrand for Cython 0.27.
* `#9773 <https://github.com/numpy/numpy/pull/9773>`__: BUG: Fixes optimal einsum path for multi-term intermediates
* `#9778 <https://github.com/numpy/numpy/pull/9778>`__: BUG: can_cast(127, np.int8) is False
* `#9779 <https://github.com/numpy/numpy/pull/9779>`__: BUG: np.ma.trace gives the wrong result on ND arrays
* `#9780 <https://github.com/numpy/numpy/pull/9780>`__: MAINT: Make f2py generated file not contain the (local) date.
* `#9782 <https://github.com/numpy/numpy/pull/9782>`__: DOC: Update after NumPy 1.13.2 release.
* `#9784 <https://github.com/numpy/numpy/pull/9784>`__: BUG: remove voidtype-repr recursion in scalartypes.c/arrayprint.py
* `#9785 <https://github.com/numpy/numpy/pull/9785>`__: BUG: Fix size-checking in masked_where, and structured shrink_mask
* `#9792 <https://github.com/numpy/numpy/pull/9792>`__: ENH: Various improvements to Maskedarray repr
* `#9796 <https://github.com/numpy/numpy/pull/9796>`__: TST: linalg: add basic smoketest for cholesky
* `#9800 <https://github.com/numpy/numpy/pull/9800>`__: DOC: Clean up README
* `#9803 <https://github.com/numpy/numpy/pull/9803>`__: DOC: add missing underscore in set_printoptions
* `#9805 <https://github.com/numpy/numpy/pull/9805>`__: CI: set correct test mode for appveyor
* `#9806 <https://github.com/numpy/numpy/pull/9806>`__: MAINT: Add appveyor badge to README
* `#9807 <https://github.com/numpy/numpy/pull/9807>`__: MAINT: Make appveyor config a dot-file
* `#9810 <https://github.com/numpy/numpy/pull/9810>`__: DOC: Improve ndarray.shape documentation.
* `#9812 <https://github.com/numpy/numpy/pull/9812>`__: DOC: update scipy.integrate recommendation
* `#9814 <https://github.com/numpy/numpy/pull/9814>`__: BUG: Fix datetime->string conversion
* `#9815 <https://github.com/numpy/numpy/pull/9815>`__: BUG: fix stray comma in _array2string
* `#9817 <https://github.com/numpy/numpy/pull/9817>`__: BUG: Added exception for casting numpy.ma.masked to long
* `#9822 <https://github.com/numpy/numpy/pull/9822>`__: BUG: Allow subclasses of MaskedConstant to behave as unique singletons
* `#9824 <https://github.com/numpy/numpy/pull/9824>`__: BUG: Fixes for np.random.zipf
* `#9826 <https://github.com/numpy/numpy/pull/9826>`__: DOC: Add unravel_index examples to np.arg(min|max|sort)
* `#9828 <https://github.com/numpy/numpy/pull/9828>`__: DOC: Improve documentation of axis parameter in numpy.unpackbits()
* `#9835 <https://github.com/numpy/numpy/pull/9835>`__: BENCH: Added missing ufunc benchmarks
* `#9840 <https://github.com/numpy/numpy/pull/9840>`__: DOC: ndarray.__copy__ takes no arguments
* `#9842 <https://github.com/numpy/numpy/pull/9842>`__: BUG: Prevent invalid array shapes in seed
* `#9845 <https://github.com/numpy/numpy/pull/9845>`__: DOC: Refine SVD documentation
* `#9849 <https://github.com/numpy/numpy/pull/9849>`__: MAINT: Fix all special-casing of dtypes in `count_nonzero`
* `#9854 <https://github.com/numpy/numpy/pull/9854>`__: BLD: distutils: auto-find vcpkg include and library directories
* `#9856 <https://github.com/numpy/numpy/pull/9856>`__: BUG: Make bool(void_scalar) and void_scalar.astype(bool) consistent
* `#9858 <https://github.com/numpy/numpy/pull/9858>`__: DOC: Some minor fixes regarding import_array
* `#9862 <https://github.com/numpy/numpy/pull/9862>`__: BUG: Restore the environment variables when import multiarray...
* `#9863 <https://github.com/numpy/numpy/pull/9863>`__: ENH: Save to ZIP files without using temporary files.
* `#9865 <https://github.com/numpy/numpy/pull/9865>`__: DOC: Replace PyFITS reference with Astropy and PyTables with...
* `#9866 <https://github.com/numpy/numpy/pull/9866>`__: BUG: Fix runtests --benchmark-compare in python 3
* `#9868 <https://github.com/numpy/numpy/pull/9868>`__: DOC: Update arraypad to use np.pad in examples
* `#9869 <https://github.com/numpy/numpy/pull/9869>`__: DOC: Make qr options render correctly as list.
* `#9881 <https://github.com/numpy/numpy/pull/9881>`__: BUG: count_nonzero treats empty axis tuples strangely
* `#9883 <https://github.com/numpy/numpy/pull/9883>`__: ENH: Implement ndarray.__format__ for 0d arrays
* `#9884 <https://github.com/numpy/numpy/pull/9884>`__: BUG: Allow `unravel_index(0, ())` to return ()
* `#9887 <https://github.com/numpy/numpy/pull/9887>`__: BUG: add.reduce gives wrong results for arrays with funny strides
* `#9888 <https://github.com/numpy/numpy/pull/9888>`__: MAINT: Remove workarounds for gh-9527
* `#9889 <https://github.com/numpy/numpy/pull/9889>`__: MAINT: Tidy np.histogram, and improve error messages
* `#9893 <https://github.com/numpy/numpy/pull/9893>`__: ENH: Added compatibility for the NAG Fortran compiler, nagfor
* `#9896 <https://github.com/numpy/numpy/pull/9896>`__: DOC: Unindent enumeration in savetxt docstring
* `#9899 <https://github.com/numpy/numpy/pull/9899>`__: Remove unused isscalar imports, and incorrect documentation using...
* `#9900 <https://github.com/numpy/numpy/pull/9900>`__: MAINT/BUG: Remove special-casing for 0d arrays, now that indexing...
* `#9904 <https://github.com/numpy/numpy/pull/9904>`__: MAINT: Make warnings for nanmin and nanmax consistent
* `#9911 <https://github.com/numpy/numpy/pull/9911>`__: CI: travis: switch to container
* `#9912 <https://github.com/numpy/numpy/pull/9912>`__: BENCH: histogramming benchmarks
* `#9913 <https://github.com/numpy/numpy/pull/9913>`__: MAINT: Tidy up Maskedarray repr
* `#9916 <https://github.com/numpy/numpy/pull/9916>`__: DOC: Clarify behavior of genfromtxt names field
* `#9920 <https://github.com/numpy/numpy/pull/9920>`__: DOC: dot: Add explanation in case `b` has only 1 dimension.
* `#9925 <https://github.com/numpy/numpy/pull/9925>`__: DOC: ndarray.reshape allows shape as int arguments or tuple
* `#9930 <https://github.com/numpy/numpy/pull/9930>`__: MAINT: Add parameter checks to polynomial integration functions.
* `#9936 <https://github.com/numpy/numpy/pull/9936>`__: DOC: Clarify docstring for numpy.array_split
* `#9941 <https://github.com/numpy/numpy/pull/9941>`__: ENH: Use Dragon4 algorithm to print floating values
* `#9942 <https://github.com/numpy/numpy/pull/9942>`__: ENH: Add PGI flang compiler support for Windows
* `#9944 <https://github.com/numpy/numpy/pull/9944>`__: MAINT/BUG: Don't squash useful error messages in favor of generic...
* `#9945 <https://github.com/numpy/numpy/pull/9945>`__: DOC: fix operation plural in along axis glossary
* `#9946 <https://github.com/numpy/numpy/pull/9946>`__: DOC: describe the expansion of take and apply_along_axis in detail
* `#9947 <https://github.com/numpy/numpy/pull/9947>`__: MAINT/TST: Tidy dtype indexing
* `#9950 <https://github.com/numpy/numpy/pull/9950>`__: BUG: Passing an incorrect type to dtype.__getitem__ should raise...
* `#9952 <https://github.com/numpy/numpy/pull/9952>`__: ENH: add Decimal support to numpy.lib.financial
* `#9953 <https://github.com/numpy/numpy/pull/9953>`__: MAINT: Add a PyDataType_ISUNSIZED macro
* `#9957 <https://github.com/numpy/numpy/pull/9957>`__: DOC: update asv url
* `#9961 <https://github.com/numpy/numpy/pull/9961>`__: BUG: Allow float64('1e10000') to overflow
* `#9962 <https://github.com/numpy/numpy/pull/9962>`__: MAINT: Rename formatters to match scalar type names
* `#9965 <https://github.com/numpy/numpy/pull/9965>`__: BLD: Disable npymath whole program opt (LTCG) on win32
* `#9966 <https://github.com/numpy/numpy/pull/9966>`__: BUG: str(np.float) should print with the same number of digits...
* `#9967 <https://github.com/numpy/numpy/pull/9967>`__: MAINT: Separate correct `longdouble.__float__` from incorrect...
* `#9971 <https://github.com/numpy/numpy/pull/9971>`__: BUG: Fix casting from longdouble to long
* `#9973 <https://github.com/numpy/numpy/pull/9973>`__: TST: Fix error in test on PyPy, add comment explaining known...
* `#9976 <https://github.com/numpy/numpy/pull/9976>`__: BUG: Ensure lstsq can handle RHS with all sizes.
* `#9977 <https://github.com/numpy/numpy/pull/9977>`__: MAINT: distutils: trivial cleanups
* `#9978 <https://github.com/numpy/numpy/pull/9978>`__: BUG: cast to str_ should not convert to pure-python intermediate
* `#9983 <https://github.com/numpy/numpy/pull/9983>`__: ENH: let f2py discover location of libgfortran
* `#9985 <https://github.com/numpy/numpy/pull/9985>`__: ENH: skip NPY_ALLOW_C_API for UFUNC_ERR_IGNORE
* `#9986 <https://github.com/numpy/numpy/pull/9986>`__: MAINT: Remove similar branches from linalg.lstsq
* `#9991 <https://github.com/numpy/numpy/pull/9991>`__: MAINT: small robustness change for mingw support on Windows.
* `#9994 <https://github.com/numpy/numpy/pull/9994>`__: BUG: test was not using 'mode'
* `#9996 <https://github.com/numpy/numpy/pull/9996>`__: ENH: Adding `order=` keyword to `np.eye()`.
* `#9997 <https://github.com/numpy/numpy/pull/9997>`__: BUG: prototypes for [cz]dot[uc] are incorrect
* `#9999 <https://github.com/numpy/numpy/pull/9999>`__: ENH: Make `np.in1d()` work for unorderable object arrays
* `#10000 <https://github.com/numpy/numpy/pull/10000>`__: MAINT: Fix test_int_from_huge_longdouble on Darwin.
* `#10005 <https://github.com/numpy/numpy/pull/10005>`__: DOC: reword PyArray_DiscardWritebackIfCopy description
* `#10006 <https://github.com/numpy/numpy/pull/10006>`__: NEP: Drop Python2 support.
* `#10007 <https://github.com/numpy/numpy/pull/10007>`__: MAINT: simplify logic from #9983
* `#10008 <https://github.com/numpy/numpy/pull/10008>`__: MAINT: Backcompat fixes for dragon4 changes
* `#10011 <https://github.com/numpy/numpy/pull/10011>`__: TST: Group together all the nested_iter tests
* `#10017 <https://github.com/numpy/numpy/pull/10017>`__: REV: Undo bad rebase in 7fdfdd6a52fc0761c0d45931247c5ed2480224eb...
* `#10021 <https://github.com/numpy/numpy/pull/10021>`__: ENH: Don't show the boolean dtype in array_repr
* `#10022 <https://github.com/numpy/numpy/pull/10022>`__: MAINT: Update c-api version and hash for NumPy 1.14.
* `#10030 <https://github.com/numpy/numpy/pull/10030>`__: MAINT: Legacy mode specified as string, fix all-zeros legacy...
* `#10031 <https://github.com/numpy/numpy/pull/10031>`__: BUG: Fix f2py string variables in callbacks.
* `#10032 <https://github.com/numpy/numpy/pull/10032>`__: MAINT: Remove newline before dtype in repr of arrays
* `#10034 <https://github.com/numpy/numpy/pull/10034>`__: MAINT: legacy-printing-mode preserves 1.13 float & complex str
* `#10042 <https://github.com/numpy/numpy/pull/10042>`__: BUG: Allow `int` to be called on nested object arrays, fix `np.str_.__int__`
* `#10044 <https://github.com/numpy/numpy/pull/10044>`__: DEP: FutureWarning for void.item(): Will return bytes
* `#10049 <https://github.com/numpy/numpy/pull/10049>`__: DOC: Add copy of deprecated defindex.html template.
* `#10052 <https://github.com/numpy/numpy/pull/10052>`__: BUG: Fix legacy printing mode check.
* `#10053 <https://github.com/numpy/numpy/pull/10053>`__: STY: C style whitespace fixups
* `#10054 <https://github.com/numpy/numpy/pull/10054>`__: ENH: Add encoding option to numpy text IO.
* `#10055 <https://github.com/numpy/numpy/pull/10055>`__: BUG: Changed dump(a, F) so it would close file
* `#10057 <https://github.com/numpy/numpy/pull/10057>`__: DOC: v/h/dstack docstr shouldn't imply deprecation
* `#10065 <https://github.com/numpy/numpy/pull/10065>`__: DOC, BLD: Update site.cfg.example on the MKL part.
* `#10067 <https://github.com/numpy/numpy/pull/10067>`__: MAINT: Replace sphinx extension sphinx.ext.pngmath by sphinx.ext.imgmath.
* `#10068 <https://github.com/numpy/numpy/pull/10068>`__: BUG: Fix memory leak for subclass slicing
* `#10072 <https://github.com/numpy/numpy/pull/10072>`__: MAINT: Fix minor typos in numpy/core/fromnumeric.py
* `#10079 <https://github.com/numpy/numpy/pull/10079>`__: DOC: mention generalized ufuncs, document signature attribute
* `#10096 <https://github.com/numpy/numpy/pull/10096>`__: BUG: Fix assert_equal on time-like objects
* `#10097 <https://github.com/numpy/numpy/pull/10097>`__: BUG: Fix crash for 0d timedelta repr
* `#10101 <https://github.com/numpy/numpy/pull/10101>`__: BUG: Fix out-of-bounds access when handling rank-zero ndarrays.
* `#10105 <https://github.com/numpy/numpy/pull/10105>`__: DOC: Update license documentation.
* `#10108 <https://github.com/numpy/numpy/pull/10108>`__: DOC: Add documentation for datetime_data
* `#10109 <https://github.com/numpy/numpy/pull/10109>`__: DOC: fix the lack of np.
* `#10111 <https://github.com/numpy/numpy/pull/10111>`__: ENH: Improve alignment of datetime64 arrays containing NaT
* `#10112 <https://github.com/numpy/numpy/pull/10112>`__: MAINT: Simplify IntegerFormatter
* `#10113 <https://github.com/numpy/numpy/pull/10113>`__: BUG: Fix further out-of-bounds accesses when handling 0d ndarrays
* `#10114 <https://github.com/numpy/numpy/pull/10114>`__: MAINT: Remove duplicate cond check from assert_array_compare
* `#10116 <https://github.com/numpy/numpy/pull/10116>`__: BLD: [ipo] compilation error with intel compiler
* `#10120 <https://github.com/numpy/numpy/pull/10120>`__: BUG: stray comma should be preserved for legacy printing
* `#10121 <https://github.com/numpy/numpy/pull/10121>`__: DOC: Summarize printing changes in release notes
* `#10125 <https://github.com/numpy/numpy/pull/10125>`__: BLD: Add license file to NumPy wheels.
* `#10129 <https://github.com/numpy/numpy/pull/10129>`__: ENH: Strip trailing spaces from continuation in multiline arrayprint
* `#10130 <https://github.com/numpy/numpy/pull/10130>`__: MAINT: Simplify _leading_trailing
* `#10131 <https://github.com/numpy/numpy/pull/10131>`__: BUG: Fix downcasting in _array2string
* `#10136 <https://github.com/numpy/numpy/pull/10136>`__: BUG: edgeitems kwarg is ignored
* `#10143 <https://github.com/numpy/numpy/pull/10143>`__: MAINT: Combine legacy sections of _formatArray
* `#10159 <https://github.com/numpy/numpy/pull/10159>`__: DOC: Update 1.14 notes
* `#10160 <https://github.com/numpy/numpy/pull/10160>`__: BUG: test, fix problems from PR #9639
* `#10164 <https://github.com/numpy/numpy/pull/10164>`__: MAINT/BUG: Simplify _formatArray, fixing array_repr(matrix) in...
* `#10166 <https://github.com/numpy/numpy/pull/10166>`__: DOC: document PyArray_ResolveWritebackIfCopy
* `#10168 <https://github.com/numpy/numpy/pull/10168>`__: DOC: continuation of PyArray_ResolveIfCopy fixes
* `#10172 <https://github.com/numpy/numpy/pull/10172>`__: BUG: The last line of formatArray is not always wrapped correctly
* `#10175 <https://github.com/numpy/numpy/pull/10175>`__: BUG: linewidth was not respected for arrays other than 1d
* `#10176 <https://github.com/numpy/numpy/pull/10176>`__: ENH: add suffix option to array2str, wraps properly
* `#10177 <https://github.com/numpy/numpy/pull/10177>`__: MAINT, BUG: Final 1.14 formatting fixes
* `#10182 <https://github.com/numpy/numpy/pull/10182>`__: BUG: Extra space is inserted on first line for long elements
* `#10190 <https://github.com/numpy/numpy/pull/10190>`__: BUG: Fix regression in np.ma.load in gh-10055
* `#10200 <https://github.com/numpy/numpy/pull/10200>`__: BUG: Ufunc reduce reference leak (backport)
* `#10202 <https://github.com/numpy/numpy/pull/10202>`__: BUG: Fix bugs found by testing in release mode.
* `#10272 <https://github.com/numpy/numpy/pull/10272>`__: BUG: Align extra-dll folder name with auditwheel
* `#10275 <https://github.com/numpy/numpy/pull/10275>`__: BUG: fix duplicate message print
* `#10276 <https://github.com/numpy/numpy/pull/10276>`__: MAINT: Workaround for new travis sdist failures.
* `#10311 <https://github.com/numpy/numpy/pull/10311>`__: BUG: Make sure einsum default value of `optimize` is True.
* `#10312 <https://github.com/numpy/numpy/pull/10312>`__: BUG: Handle NaNs correctly in arange
* `#10313 <https://github.com/numpy/numpy/pull/10313>`__: BUG: Don't reimplement isclose in np.ma
* `#10315 <https://github.com/numpy/numpy/pull/10315>`__: DOC: NumPy 1.14.0 release prep.
Contributors
============
A total of 100 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Alexey Brodkin +
* Allan Haldane
* Andras Deak +
* Andrew Lawson +
* Anna Chiara +
* Antoine Pitrou
* Bernhard M. Wiedemann +
* Bob Eldering +
* Brandon Carter
* CJ Carey
* Charles Harris
* Chris Lamb
* Christoph Boeddeker +
* Christoph Gohlke
* Daniel Hrisca +
* Daniel Smith
* Danny Hermes
* David Freese
* David Hagen
* David Linke +
* David Schaefer +
* Dillon Niederhut +
* Egor Panfilov +
* Emilien Kofman
* Eric Wieser
* Erik Bray +
* Erik Quaeghebeur +
* Garry Polley +
* Gunjan +
* Han Shen +
* Henke Adolfsson +
* Hidehiro NAGAOKA +
* Hemil Desai +
* Hong Xu +
* Iryna Shcherbina +
* Jaime Fernandez
* James Bourbeau +
* Jamie Townsend +
* Jarrod Millman
* Jean Helie +
* Jeroen Demeyer +
* John Goetz +
* John Kirkham
* John Zwinck
* Jonathan Helmus
* Joseph Fox-Rabinovitz
* Joseph Paul Cohen +
* Joshua Leahy +
* Julian Taylor
* Jörg Döpfert +
* Keno Goertz +
* Kevin Sheppard +
* Kexuan Sun +
* Konrad Kapp +
* Kristofor Maynard +
* Licht Takeuchi +
* Loïc Estève
* Lukas Mericle +
* Marten van Kerkwijk
* Matheus Portela +
* Matthew Brett
* Matti Picus
* Michael Lamparski +
* Michael Odintsov +
* Michael Schnaitter +
* Michael Seifert
* Mike Nolta
* Nathaniel J. Smith
* Nelle Varoquaux +
* Nicholas Del Grosso +
* Nico Schlömer +
* Oleg Zabluda +
* Oleksandr Pavlyk
* Pauli Virtanen
* Pim de Haan +
* Ralf Gommers
* Robert T. McGibbon +
* Roland Kaufmann
* Sebastian Berg
* Serhiy Storchaka +
* Shitian Ni +
* Spencer Hill +
* Srinivas Reddy Thatiparthy +
* Stefan Winkler +
* Stephan Hoyer
* Steven Maude +
* SuperBo +
* Thomas Köppe +
* Toon Verstraelen
* Vedant Misra +
* Warren Weckesser
* Wirawan Purwanto +
* Yang Li +
* Ziyan Zhou +
* chaoyu3 +
* orbit-stabilizer +
* solarjoe
* wufangjie +
* xoviat +
* Élie Gouzien +
Pull requests merged
====================
A total of 381 pull requests were merged for this release.
* `#5580 <https://github.com/numpy/numpy/pull/5580>`__: BUG, DEP: Fix masked arrays to properly edit views. ( #5558 )
* `#6053 <https://github.com/numpy/numpy/pull/6053>`__: MAINT: struct assignment "by field position", multi-field indices...
* `#7994 <https://github.com/numpy/numpy/pull/7994>`__: BUG: Allow 'shape': () in __array_interface__ regardless of the...
* `#8187 <https://github.com/numpy/numpy/pull/8187>`__: MAINT: Remove the unused keepdim argument from np.ufunc.accumulate
* `#8278 <https://github.com/numpy/numpy/pull/8278>`__: MAINT: Make the refactor suggested in prepare_index
* `#8557 <https://github.com/numpy/numpy/pull/8557>`__: ENH: add hermitian=False kwarg to np.linalg.matrix_rank
* `#8722 <https://github.com/numpy/numpy/pull/8722>`__: DOC: Clarifying the meaning of small values for `suppress` print...
* `#8827 <https://github.com/numpy/numpy/pull/8827>`__: BUG: Fix pinv for stacked matrices
* `#8920 <https://github.com/numpy/numpy/pull/8920>`__: ENH: use caching memory allocator in more places
* `#8934 <https://github.com/numpy/numpy/pull/8934>`__: MAINT: Use np.concatenate instead of np.vstack
* `#8977 <https://github.com/numpy/numpy/pull/8977>`__: BUG: Fix all kinds of problems when itemsize == 0
* `#8981 <https://github.com/numpy/numpy/pull/8981>`__: ENH: implement voidtype_repr and voidtype_str
* `#8983 <https://github.com/numpy/numpy/pull/8983>`__: ENH: fix str/repr for 0d-arrays and int* scalars
* `#9020 <https://github.com/numpy/numpy/pull/9020>`__: BUG: don't silence warnings in ufunc.reduce
* `#9025 <https://github.com/numpy/numpy/pull/9025>`__: ENH: np.save() to align data at 64 bytes
* `#9056 <https://github.com/numpy/numpy/pull/9056>`__: DOC: update structured array docs to reflect #6053
* `#9065 <https://github.com/numpy/numpy/pull/9065>`__: DEP: 0 should be passed to bincount, not None
* `#9083 <https://github.com/numpy/numpy/pull/9083>`__: MAINT: Improve error message from sorting with duplicate key
* `#9089 <https://github.com/numpy/numpy/pull/9089>`__: MAINT: refine error message for __array_ufunc__ not implemented
* `#9090 <https://github.com/numpy/numpy/pull/9090>`__: MAINT: Update master branch for 1.14.0 development.
* `#9092 <https://github.com/numpy/numpy/pull/9092>`__: BUG remove memory leak in array ufunc override.
* `#9096 <https://github.com/numpy/numpy/pull/9096>`__: ENH: Allow inplace also as keyword parameter for ndarray.byteswap
* `#9099 <https://github.com/numpy/numpy/pull/9099>`__: TST: fix test_basic failure on Windows
* `#9106 <https://github.com/numpy/numpy/pull/9106>`__: BUG: Array ufunc reduce out tuple
* `#9110 <https://github.com/numpy/numpy/pull/9110>`__: BUG: Do not elide complex abs()
* `#9112 <https://github.com/numpy/numpy/pull/9112>`__: BUG: ndarray.__pow__ does not check result of fast_scalar_power
* `#9113 <https://github.com/numpy/numpy/pull/9113>`__: BUG: delay calls of array repr in getlimits
* `#9115 <https://github.com/numpy/numpy/pull/9115>`__: BUG: Compilation crashes in MSVC when LIB or INCLUDE is not set
* `#9116 <https://github.com/numpy/numpy/pull/9116>`__: DOC: link to stack from column_stack
* `#9118 <https://github.com/numpy/numpy/pull/9118>`__: BUG: Fix reference count error of types when init multiarraymodule
* `#9119 <https://github.com/numpy/numpy/pull/9119>`__: BUG: Fix error handling on PyCapsule when initializing multiarraymodule
* `#9122 <https://github.com/numpy/numpy/pull/9122>`__: DOC: update 1.13 release note for MaskedArray, masked constants...
* `#9132 <https://github.com/numpy/numpy/pull/9132>`__: DEP: Deprecate incorrect behavior of expand_dims.
* `#9138 <https://github.com/numpy/numpy/pull/9138>`__: MAINT: Update .mailmap
* `#9139 <https://github.com/numpy/numpy/pull/9139>`__: ENH: remove unneeded spaces in float/bool reprs, fixes 0d str
* `#9141 <https://github.com/numpy/numpy/pull/9141>`__: DOC: Update ufunc documentation
* `#9142 <https://github.com/numpy/numpy/pull/9142>`__: BUG: set default type for empty index array to `numpy.intp`
* `#9149 <https://github.com/numpy/numpy/pull/9149>`__: DOC: Fix incorrect function signature in UFunc documentation.
* `#9151 <https://github.com/numpy/numpy/pull/9151>`__: DOC: better link display text for Developer Zone.
* `#9152 <https://github.com/numpy/numpy/pull/9152>`__: DOC: Fix some very minor spelling/grammar mistakes in docs
* `#9155 <https://github.com/numpy/numpy/pull/9155>`__: MAINT: Take out code that will never be executed
* `#9157 <https://github.com/numpy/numpy/pull/9157>`__: DOC: Fixed broken link to scipy developer zone
* `#9164 <https://github.com/numpy/numpy/pull/9164>`__: BUG: have as_strided() keep custom dtypes
* `#9167 <https://github.com/numpy/numpy/pull/9167>`__: BUG: ensure structured ndarray.__eq__,__ne__ defer when appropriate.
* `#9168 <https://github.com/numpy/numpy/pull/9168>`__: MAINT: Simplify if statement
* `#9174 <https://github.com/numpy/numpy/pull/9174>`__: BUG: allow pickling generic datetime
* `#9176 <https://github.com/numpy/numpy/pull/9176>`__: DOC: Update protocols in git development document.
* `#9181 <https://github.com/numpy/numpy/pull/9181>`__: COMPAT: PyPy calls clongdouble_int which raises a warning
* `#9195 <https://github.com/numpy/numpy/pull/9195>`__: BUG: pull request 9087 modifies a tuple after use
* `#9200 <https://github.com/numpy/numpy/pull/9200>`__: DOC: Update bincount docs to reflect gh-8348
* `#9201 <https://github.com/numpy/numpy/pull/9201>`__: BUG: Fix unicode(unicode_array_0d) on python 2.7
* `#9202 <https://github.com/numpy/numpy/pull/9202>`__: MAINT: Move ndarray.__str__ and ndarray.__repr__ to their own...
* `#9205 <https://github.com/numpy/numpy/pull/9205>`__: DOC: Remove all references to bigndarray in documentation.
* `#9209 <https://github.com/numpy/numpy/pull/9209>`__: ENH: Add an out argument to concatenate
* `#9212 <https://github.com/numpy/numpy/pull/9212>`__: MAINT: Combine similar branches
* `#9214 <https://github.com/numpy/numpy/pull/9214>`__: MAINT: Don't internally use the one-argument where
* `#9215 <https://github.com/numpy/numpy/pull/9215>`__: BUG: Avoid bare except clauses
* `#9217 <https://github.com/numpy/numpy/pull/9217>`__: BUG: handle resize of 0d array
* `#9218 <https://github.com/numpy/numpy/pull/9218>`__: BUG: Only propagate TypeError from where we throw it
* `#9219 <https://github.com/numpy/numpy/pull/9219>`__: DOC: Link to ufunc.outer from np.outer
* `#9220 <https://github.com/numpy/numpy/pull/9220>`__: MAINT: Factor out code duplicated by nanmedian and nanpercentile
* `#9226 <https://github.com/numpy/numpy/pull/9226>`__: DOC, ENH: Add 1.13.0-changelog.rst
* `#9238 <https://github.com/numpy/numpy/pull/9238>`__: DOC: BLD: fix lots of Sphinx warnings/errors.
* `#9241 <https://github.com/numpy/numpy/pull/9241>`__: MAINT: Fixup release notes, changelogs after #9238 merge.
* `#9242 <https://github.com/numpy/numpy/pull/9242>`__: BUG: Make 0-length dim handling of tensordot consistent with...
* `#9246 <https://github.com/numpy/numpy/pull/9246>`__: ENH: Release the GIL in einsum() special-cased loops
* `#9247 <https://github.com/numpy/numpy/pull/9247>`__: BUG: fix missing keyword rename for common block in numpy.f2py
* `#9253 <https://github.com/numpy/numpy/pull/9253>`__: DOC: Add isnat/positive ufunc to documentation.
* `#9259 <https://github.com/numpy/numpy/pull/9259>`__: MAINT: Use XOR for bool arrays in `np.diff`
* `#9260 <https://github.com/numpy/numpy/pull/9260>`__: BUG: don't elide into readonly and updateifcopy temporaries
* `#9264 <https://github.com/numpy/numpy/pull/9264>`__: DOC: some doc build maintenance and f2py doc updates
* `#9266 <https://github.com/numpy/numpy/pull/9266>`__: BUG: Fix unused variable in ufunc_object.c,
* `#9268 <https://github.com/numpy/numpy/pull/9268>`__: ENH: testing: load available nose plugins that are external to...
* `#9271 <https://github.com/numpy/numpy/pull/9271>`__: BUG: fix issue when using ``python setup.py somecommand --force``.
* `#9280 <https://github.com/numpy/numpy/pull/9280>`__: BUG: Make extensions compilable with MinGW on Py2.7
* `#9281 <https://github.com/numpy/numpy/pull/9281>`__: DOC: add @ operator in array vs. matrix comparison doc
* `#9285 <https://github.com/numpy/numpy/pull/9285>`__: BUG: Fix Intel compilation on Unix.
* `#9292 <https://github.com/numpy/numpy/pull/9292>`__: MAINT: Fix lgtm alerts
* `#9294 <https://github.com/numpy/numpy/pull/9294>`__: BUG: Fixes histogram monotonicity check for unsigned bin values
* `#9300 <https://github.com/numpy/numpy/pull/9300>`__: BUG: PyArray_CountNonzero does not check for exceptions
* `#9302 <https://github.com/numpy/numpy/pull/9302>`__: BUG: Fix fillvalue
* `#9306 <https://github.com/numpy/numpy/pull/9306>`__: BUG: f2py: Convert some error messages printed to stderr to exceptions.
* `#9310 <https://github.com/numpy/numpy/pull/9310>`__: BUG: fix wrong ndim used in empty where check
* `#9316 <https://github.com/numpy/numpy/pull/9316>`__: BUG: `runtest -t` should recognize development mode
* `#9320 <https://github.com/numpy/numpy/pull/9320>`__: DOC: Use x1 and x2 in the heaviside docstring.
* `#9322 <https://github.com/numpy/numpy/pull/9322>`__: BUG: np.ma.astype fails on structured types
* `#9323 <https://github.com/numpy/numpy/pull/9323>`__: DOC: Add $PARAMS to the isnat docstring
* `#9324 <https://github.com/numpy/numpy/pull/9324>`__: DOC: Fix missing asterisks in git development_setup doc page
* `#9325 <https://github.com/numpy/numpy/pull/9325>`__: DOC: add a NumFOCUS badge to README.md
* `#9332 <https://github.com/numpy/numpy/pull/9332>`__: ENH: fix 0d array printing using `str` or `formatter`.
* `#9335 <https://github.com/numpy/numpy/pull/9335>`__: BUG: umath: un-break ufunc where= when no out= is given
* `#9336 <https://github.com/numpy/numpy/pull/9336>`__: BUG: Fix various problems with the np.ma.masked constant
* `#9337 <https://github.com/numpy/numpy/pull/9337>`__: BUG: Prevent crash if ufunc doc string is null
* `#9341 <https://github.com/numpy/numpy/pull/9341>`__: BUG: np.resize discards empty shapes
* `#9343 <https://github.com/numpy/numpy/pull/9343>`__: BUG: recfunctions fail in a bunch of ways due to using .descr
* `#9344 <https://github.com/numpy/numpy/pull/9344>`__: DOC: fixes issue #9326, by removing the statement.
* `#9346 <https://github.com/numpy/numpy/pull/9346>`__: BUG: void masked fillvalue cannot be cast to void in python 3
* `#9354 <https://github.com/numpy/numpy/pull/9354>`__: BUG: Prevent hang traversing ufunc userloop linked list
* `#9357 <https://github.com/numpy/numpy/pull/9357>`__: DOC: Add examples for complex dtypes
* `#9361 <https://github.com/numpy/numpy/pull/9361>`__: DOC: isscalar add example for str
* `#9362 <https://github.com/numpy/numpy/pull/9362>`__: ENH: Rearrange testing module to isolate nose dependency.
* `#9364 <https://github.com/numpy/numpy/pull/9364>`__: BUG: ')' is printed at the end pointer of the buffer in numpy.f2py.
* `#9369 <https://github.com/numpy/numpy/pull/9369>`__: BUG: fix error in fromstring function from numpy.core.records
* `#9375 <https://github.com/numpy/numpy/pull/9375>`__: DOC: Document the internal workings of PY_ARRAY_UNIQUE_SYMBOL
* `#9380 <https://github.com/numpy/numpy/pull/9380>`__: DOC: Forward port 1.13.1 notes and changelog.
* `#9381 <https://github.com/numpy/numpy/pull/9381>`__: TST: test doc string of COMMON block arrays for numpy.f2py.
* `#9387 <https://github.com/numpy/numpy/pull/9387>`__: MAINT: Simplify code using PyArray_ISBYTESWAPPED macro.
* `#9388 <https://github.com/numpy/numpy/pull/9388>`__: MAINT: Use PyArray_ISBYTESWAPPED instead of !PyArray_ISNOTSWAPPED.
* `#9389 <https://github.com/numpy/numpy/pull/9389>`__: DOC: Fix reference, PyArray_DescrNew -> PyArray_NewFromDescr
* `#9392 <https://github.com/numpy/numpy/pull/9392>`__: DOC: UPDATEIFCOPY raises an error if not an array.
* `#9399 <https://github.com/numpy/numpy/pull/9399>`__: DOC: document how to free memory from PyArray_IntpConverter.
* `#9400 <https://github.com/numpy/numpy/pull/9400>`__: MAINT: Further unify handling of unnamed ufuncs
* `#9403 <https://github.com/numpy/numpy/pull/9403>`__: MAINT: Replace tab escapes with four spaces
* `#9407 <https://github.com/numpy/numpy/pull/9407>`__: DOC: add ``suppress_warnings`` to the testing routine listing.
* `#9408 <https://github.com/numpy/numpy/pull/9408>`__: BUG: various fixes to np.gradient
* `#9411 <https://github.com/numpy/numpy/pull/9411>`__: MAINT/BUG: improve gradient dtype handling
* `#9412 <https://github.com/numpy/numpy/pull/9412>`__: BUG: Check for exception in sort functions
* `#9422 <https://github.com/numpy/numpy/pull/9422>`__: DOC: correct formatting of basic.types.html
* `#9423 <https://github.com/numpy/numpy/pull/9423>`__: MAINT: change http to https for numfocus.org link in README
* `#9425 <https://github.com/numpy/numpy/pull/9425>`__: ENH: Einsum calls BLAS if it advantageous to do so
* `#9426 <https://github.com/numpy/numpy/pull/9426>`__: DOC: Add a link to einsum_path
* `#9431 <https://github.com/numpy/numpy/pull/9431>`__: ENH: distutils: make msvc + mingw-gfortran work
* `#9432 <https://github.com/numpy/numpy/pull/9432>`__: BUG: Fix loss of masks in masked 0d methods
* `#9433 <https://github.com/numpy/numpy/pull/9433>`__: BUG: make np.transpose return a view of the mask
* `#9434 <https://github.com/numpy/numpy/pull/9434>`__: MAINT: Remove unittest dependencies
* `#9437 <https://github.com/numpy/numpy/pull/9437>`__: DOC: Update 1.14.0 release notes.
* `#9446 <https://github.com/numpy/numpy/pull/9446>`__: BUG: Inlined functions must be defined somewhere.
* `#9447 <https://github.com/numpy/numpy/pull/9447>`__: API: Make ``a.flat.__array__`` return a copy when ``a`` non-contiguous.
* `#9452 <https://github.com/numpy/numpy/pull/9452>`__: MAINT: Use new-style classes on 2.7
* `#9454 <https://github.com/numpy/numpy/pull/9454>`__: MAINT: Remove branch in __array__ where if and else were the...
* `#9457 <https://github.com/numpy/numpy/pull/9457>`__: MAINT: Add a common subclass to all the masked ufunc wrappers
* `#9458 <https://github.com/numpy/numpy/pull/9458>`__: MAINT: Improve performance of np.copyto(where=scalar)
* `#9469 <https://github.com/numpy/numpy/pull/9469>`__: BUG: Fix true_divide when dtype=np.float64 specified.
* `#9470 <https://github.com/numpy/numpy/pull/9470>`__: MAINT: Make `setxor1d` a bit clearer and speed it up
* `#9471 <https://github.com/numpy/numpy/pull/9471>`__: BLD: remove -xhost flag from IntelFCompiler.
* `#9475 <https://github.com/numpy/numpy/pull/9475>`__: DEP: deprecate rollaxis
* `#9482 <https://github.com/numpy/numpy/pull/9482>`__: MAINT: Make diff iterative instead of recursive
* `#9487 <https://github.com/numpy/numpy/pull/9487>`__: DEP: Letting fromstring pretend to be frombuffer is a bad idea
* `#9490 <https://github.com/numpy/numpy/pull/9490>`__: DOC: Replace xrange by range in quickstart docs
* `#9491 <https://github.com/numpy/numpy/pull/9491>`__: TST: Add filter for new Py3K warning in python 2
* `#9492 <https://github.com/numpy/numpy/pull/9492>`__: ENH: Add np.polynomial.chebyshev.chebinterpolate function.
* `#9498 <https://github.com/numpy/numpy/pull/9498>`__: DOC: fix versionadded in docstring for moveaxis
* `#9499 <https://github.com/numpy/numpy/pull/9499>`__: MAINT/BUG: Improve error messages for dtype reassigment, fix...
* `#9503 <https://github.com/numpy/numpy/pull/9503>`__: MAINT: Move variables into deepest relevant scope, for clarity
* `#9505 <https://github.com/numpy/numpy/pull/9505>`__: BUG: issubdtype is inconsistent on types and dtypes
* `#9517 <https://github.com/numpy/numpy/pull/9517>`__: MAINT/DOC: Use builtin when np.{x} is builtins.{x}.
* `#9519 <https://github.com/numpy/numpy/pull/9519>`__: MAINT: Remove `level=` keyword from test arguments.
* `#9520 <https://github.com/numpy/numpy/pull/9520>`__: MAINT: types.TypeType does not ever need to be used
* `#9521 <https://github.com/numpy/numpy/pull/9521>`__: BUG: Make issubclass(np.number, numbers.Number) return true
* `#9522 <https://github.com/numpy/numpy/pull/9522>`__: BUG: Fix problems with obj2sctype
* `#9524 <https://github.com/numpy/numpy/pull/9524>`__: TST, MAINT: Add `__init__.py` files to tests directories.
* `#9527 <https://github.com/numpy/numpy/pull/9527>`__: BUG: Fix scalar methods to receive keyword arguments
* `#9529 <https://github.com/numpy/numpy/pull/9529>`__: BUG: The NAT deprecation warning should not be given for every...
* `#9536 <https://github.com/numpy/numpy/pull/9536>`__: ENH: Show domain and window as kwargs in repr
* `#9540 <https://github.com/numpy/numpy/pull/9540>`__: BUG: MaskedArray _optinfo dictionary is not updated when calling...
* `#9543 <https://github.com/numpy/numpy/pull/9543>`__: DOC: Adding backslash between double-backtick and s.
* `#9544 <https://github.com/numpy/numpy/pull/9544>`__: MAINT: Use the error_converting macro where possible
* `#9545 <https://github.com/numpy/numpy/pull/9545>`__: DEP: Deprecate the event argument to datetime types, which is...
* `#9550 <https://github.com/numpy/numpy/pull/9550>`__: DOC: removes broken docstring example (source code, png, pdf)...
* `#9552 <https://github.com/numpy/numpy/pull/9552>`__: DOC, BUG: Fix Python 3.6 invalid escape sequence.
* `#9554 <https://github.com/numpy/numpy/pull/9554>`__: BUG: fix regression in 1.13.x in distutils.mingw32ccompiler.
* `#9564 <https://github.com/numpy/numpy/pull/9564>`__: BUG: fix distutils/cpuinfo.py:getoutput()
* `#9574 <https://github.com/numpy/numpy/pull/9574>`__: BUG: deal with broken hypot() for MSVC on win32
* `#9575 <https://github.com/numpy/numpy/pull/9575>`__: BUG: deal with broken cabs*() for MSVC on win32
* `#9577 <https://github.com/numpy/numpy/pull/9577>`__: BUG: Missing dirichlet input validation
* `#9581 <https://github.com/numpy/numpy/pull/9581>`__: DOC: Fix link in numpy.ndarray.copy method (missing backticks)
* `#9582 <https://github.com/numpy/numpy/pull/9582>`__: ENH: Warn to change lstsq default for rcond
* `#9586 <https://github.com/numpy/numpy/pull/9586>`__: DOC: update example in np.nonzero docstring
* `#9588 <https://github.com/numpy/numpy/pull/9588>`__: MAINT: Remove direct access to flatiter attributes
* `#9590 <https://github.com/numpy/numpy/pull/9590>`__: ENH: Remove unnecessary restriction in noncen-f
* `#9591 <https://github.com/numpy/numpy/pull/9591>`__: MAINT: Remove unnecessary imports
* `#9599 <https://github.com/numpy/numpy/pull/9599>`__: BUG: fix infinite loop when creating np.pad on an empty array
* `#9601 <https://github.com/numpy/numpy/pull/9601>`__: DOC: rot90 wrongly positioned versionadded directive.
* `#9604 <https://github.com/numpy/numpy/pull/9604>`__: MAINT: Refactor the code used to compute sha256, md5 hashes
* `#9606 <https://github.com/numpy/numpy/pull/9606>`__: MAINT: Remove global statement in linalg.py
* `#9609 <https://github.com/numpy/numpy/pull/9609>`__: BUG: Add `__ne__` method to dummy_ctype class.
* `#9610 <https://github.com/numpy/numpy/pull/9610>`__: BUG: core: fix wrong method flags for scalartypes.c.src:gentype_copy
* `#9611 <https://github.com/numpy/numpy/pull/9611>`__: MAINT: remove try..except clause.
* `#9613 <https://github.com/numpy/numpy/pull/9613>`__: DOC: Update release notes for noncentral_f changes.
* `#9614 <https://github.com/numpy/numpy/pull/9614>`__: MAINT: Fix a comment regarding the formula for arange length
* `#9618 <https://github.com/numpy/numpy/pull/9618>`__: DOC: Fix type definitions in mtrand
* `#9619 <https://github.com/numpy/numpy/pull/9619>`__: ENH: Allow Fortran arrays of dimension 0
* `#9624 <https://github.com/numpy/numpy/pull/9624>`__: BUG: memory leak in np.dot of size 0
* `#9626 <https://github.com/numpy/numpy/pull/9626>`__: BUG: Fix broken runtests '-t' option.
* `#9629 <https://github.com/numpy/numpy/pull/9629>`__: BUG: test, fix issue #9620 __radd__ in char scalars
* `#9630 <https://github.com/numpy/numpy/pull/9630>`__: DOC: Updates order of parameters in save docstring
* `#9636 <https://github.com/numpy/numpy/pull/9636>`__: MAINT: Fix compiler warnings and update travis jobs
* `#9638 <https://github.com/numpy/numpy/pull/9638>`__: BUG: ensure consistent result dtype of count_nonzero
* `#9639 <https://github.com/numpy/numpy/pull/9639>`__: MAINT: Refactor updateifcopy
* `#9640 <https://github.com/numpy/numpy/pull/9640>`__: BUG: fix padding an empty array in reflect mode.
* `#9643 <https://github.com/numpy/numpy/pull/9643>`__: DOC: add new steering council members.
* `#9645 <https://github.com/numpy/numpy/pull/9645>`__: ENH: enable OpenBLAS on windows.
* `#9648 <https://github.com/numpy/numpy/pull/9648>`__: DOC: Correct the signature in pad doc for callable mode.
* `#9649 <https://github.com/numpy/numpy/pull/9649>`__: DOC: Fixed doc example of apply along axis with 3D return
* `#9652 <https://github.com/numpy/numpy/pull/9652>`__: BUG: Make system_info output reproducible
* `#9658 <https://github.com/numpy/numpy/pull/9658>`__: BUG: Fix usage of keyword "from" as argument name for "can_cast".
* `#9667 <https://github.com/numpy/numpy/pull/9667>`__: MAINT: Simplify block implementation
* `#9668 <https://github.com/numpy/numpy/pull/9668>`__: DOC: clarify wording in tutorial
* `#9672 <https://github.com/numpy/numpy/pull/9672>`__: BUG: dot/matmul 'out' arg should accept any ndarray subclass
* `#9681 <https://github.com/numpy/numpy/pull/9681>`__: MAINT: Add block benchmarks
* `#9682 <https://github.com/numpy/numpy/pull/9682>`__: DOC: Add whitespace after "versionadded::" directive so it actually...
* `#9683 <https://github.com/numpy/numpy/pull/9683>`__: DOC: Add polyutils subpackage to reference documentation
* `#9685 <https://github.com/numpy/numpy/pull/9685>`__: BUG: Fixes #7395, operator.index now fails on numpy.bool_
* `#9688 <https://github.com/numpy/numpy/pull/9688>`__: MAINT: rework recursive guard to keep array2string signature
* `#9691 <https://github.com/numpy/numpy/pull/9691>`__: PEP 3141 numbers should be considered scalars
* `#9692 <https://github.com/numpy/numpy/pull/9692>`__: ENH: Add support of ARC architecture
* `#9695 <https://github.com/numpy/numpy/pull/9695>`__: DOC: `start` is not needed even when `step` is given.
* `#9700 <https://github.com/numpy/numpy/pull/9700>`__: DOC: Add mandatory memo argument to __deepcopy__ method documentation
* `#9701 <https://github.com/numpy/numpy/pull/9701>`__: DOC: Add keepdims argument for ndarray.max documentation
* `#9702 <https://github.com/numpy/numpy/pull/9702>`__: DOC: Warn about the difference between np.remainder and math.remainder
* `#9703 <https://github.com/numpy/numpy/pull/9703>`__: DOC: Fix mistaken word in nanprod docstring
* `#9707 <https://github.com/numpy/numpy/pull/9707>`__: MAINT: When linspace's step is a NumPy scalar, do multiplication in-place
* `#9709 <https://github.com/numpy/numpy/pull/9709>`__: DOC: allclose doesn't require matching shapes
* `#9711 <https://github.com/numpy/numpy/pull/9711>`__: BUG: Make scalar function elision check if writeable.
* `#9715 <https://github.com/numpy/numpy/pull/9715>`__: MAINT: Fix typo "Porland" -> "Portland" in `building` doc.
* `#9718 <https://github.com/numpy/numpy/pull/9718>`__: DEP: Deprecate truth testing on empty arrays
* `#9720 <https://github.com/numpy/numpy/pull/9720>`__: MAINT: Remove unnecessary special-casing of scalars in isclose
* `#9724 <https://github.com/numpy/numpy/pull/9724>`__: BUG: adjust gfortran version search regex
* `#9725 <https://github.com/numpy/numpy/pull/9725>`__: MAINT: cleanup circular import b/w arrayprint.py,numeric.py
* `#9726 <https://github.com/numpy/numpy/pull/9726>`__: ENH: Better error message for savetxt when X.ndim > 2 or X.ndim...
* `#9737 <https://github.com/numpy/numpy/pull/9737>`__: MAINT: Use zip, not enumerate
* `#9740 <https://github.com/numpy/numpy/pull/9740>`__: BUG: Ensure `_npy_scaled_cexp{,f,l}` is defined when needed.
* `#9741 <https://github.com/numpy/numpy/pull/9741>`__: BUG: core: use npy_cabs for abs() for np.complex* scalar types
* `#9743 <https://github.com/numpy/numpy/pull/9743>`__: MAINT: Use PyArray_CHKFLAGS in more places.
* `#9749 <https://github.com/numpy/numpy/pull/9749>`__: BUG: Fix loss of precision for large values in long double divmod
* `#9752 <https://github.com/numpy/numpy/pull/9752>`__: BUG: Errors thrown by 0d arrays in setitem are silenced and replaced
* `#9753 <https://github.com/numpy/numpy/pull/9753>`__: DOC: Fix ndarray.__setstate__ documentation, it only takes one...
* `#9755 <https://github.com/numpy/numpy/pull/9755>`__: BUG: Cython 0.27 breaks NumPy on Python 3.
* `#9756 <https://github.com/numpy/numpy/pull/9756>`__: BUG/TST: Check if precision is lost in longcomplex
* `#9762 <https://github.com/numpy/numpy/pull/9762>`__: MAINT: Use the PyArray_(GET|SET)_ITEM functions where possible
* `#9768 <https://github.com/numpy/numpy/pull/9768>`__: MAINT: Cleanup `ma.array.__str__`
* `#9770 <https://github.com/numpy/numpy/pull/9770>`__: MAINT,BUG: Fix mtrand for Cython 0.27.
* `#9773 <https://github.com/numpy/numpy/pull/9773>`__: BUG: Fixes optimal einsum path for multi-term intermediates
* `#9778 <https://github.com/numpy/numpy/pull/9778>`__: BUG: can_cast(127, np.int8) is False
* `#9779 <https://github.com/numpy/numpy/pull/9779>`__: BUG: np.ma.trace gives the wrong result on ND arrays
* `#9780 <https://github.com/numpy/numpy/pull/9780>`__: MAINT: Make f2py generated file not contain the (local) date.
* `#9782 <https://github.com/numpy/numpy/pull/9782>`__: DOC: Update after NumPy 1.13.2 release.
* `#9784 <https://github.com/numpy/numpy/pull/9784>`__: BUG: remove voidtype-repr recursion in scalartypes.c/arrayprint.py
* `#9785 <https://github.com/numpy/numpy/pull/9785>`__: BUG: Fix size-checking in masked_where, and structured shrink_mask
* `#9792 <https://github.com/numpy/numpy/pull/9792>`__: ENH: Various improvements to Maskedarray repr
* `#9796 <https://github.com/numpy/numpy/pull/9796>`__: TST: linalg: add basic smoketest for cholesky
* `#9800 <https://github.com/numpy/numpy/pull/9800>`__: DOC: Clean up README
* `#9803 <https://github.com/numpy/numpy/pull/9803>`__: DOC: add missing underscore in set_printoptions
* `#9805 <https://github.com/numpy/numpy/pull/9805>`__: CI: set correct test mode for appveyor
* `#9806 <https://github.com/numpy/numpy/pull/9806>`__: MAINT: Add appveyor badge to README
* `#9807 <https://github.com/numpy/numpy/pull/9807>`__: MAINT: Make appveyor config a dot-file
* `#9810 <https://github.com/numpy/numpy/pull/9810>`__: DOC: Improve ndarray.shape documentation.
* `#9812 <https://github.com/numpy/numpy/pull/9812>`__: DOC: update scipy.integrate recommendation
* `#9814 <https://github.com/numpy/numpy/pull/9814>`__: BUG: Fix datetime->string conversion
* `#9815 <https://github.com/numpy/numpy/pull/9815>`__: BUG: fix stray comma in _array2string
* `#9817 <https://github.com/numpy/numpy/pull/9817>`__: BUG: Added exception for casting numpy.ma.masked to long
* `#9822 <https://github.com/numpy/numpy/pull/9822>`__: BUG: Allow subclasses of MaskedConstant to behave as unique singletons
* `#9824 <https://github.com/numpy/numpy/pull/9824>`__: BUG: Fixes for np.random.zipf
* `#9826 <https://github.com/numpy/numpy/pull/9826>`__: DOC: Add unravel_index examples to np.arg(min|max|sort)
* `#9828 <https://github.com/numpy/numpy/pull/9828>`__: DOC: Improve documentation of axis parameter in numpy.unpackbits()
* `#9835 <https://github.com/numpy/numpy/pull/9835>`__: BENCH: Added missing ufunc benchmarks
* `#9840 <https://github.com/numpy/numpy/pull/9840>`__: DOC: ndarray.__copy__ takes no arguments
* `#9842 <https://github.com/numpy/numpy/pull/9842>`__: BUG: Prevent invalid array shapes in seed
* `#9845 <https://github.com/numpy/numpy/pull/9845>`__: DOC: Refine SVD documentation
* `#9849 <https://github.com/numpy/numpy/pull/9849>`__: MAINT: Fix all special-casing of dtypes in `count_nonzero`
* `#9854 <https://github.com/numpy/numpy/pull/9854>`__: BLD: distutils: auto-find vcpkg include and library directories
* `#9856 <https://github.com/numpy/numpy/pull/9856>`__: BUG: Make bool(void_scalar) and void_scalar.astype(bool) consistent
* `#9858 <https://github.com/numpy/numpy/pull/9858>`__: DOC: Some minor fixes regarding import_array
* `#9862 <https://github.com/numpy/numpy/pull/9862>`__: BUG: Restore the environment variables when import multiarray...
* `#9863 <https://github.com/numpy/numpy/pull/9863>`__: ENH: Save to ZIP files without using temporary files.
* `#9865 <https://github.com/numpy/numpy/pull/9865>`__: DOC: Replace PyFITS reference with Astropy and PyTables with...
* `#9866 <https://github.com/numpy/numpy/pull/9866>`__: BUG: Fix runtests --benchmark-compare in python 3
* `#9868 <https://github.com/numpy/numpy/pull/9868>`__: DOC: Update arraypad to use np.pad in examples
* `#9869 <https://github.com/numpy/numpy/pull/9869>`__: DOC: Make qr options render correctly as list.
* `#9881 <https://github.com/numpy/numpy/pull/9881>`__: BUG: count_nonzero treats empty axis tuples strangely
* `#9883 <https://github.com/numpy/numpy/pull/9883>`__: ENH: Implement ndarray.__format__ for 0d arrays
* `#9884 <https://github.com/numpy/numpy/pull/9884>`__: BUG: Allow `unravel_index(0, ())` to return ()
* `#9887 <https://github.com/numpy/numpy/pull/9887>`__: BUG: add.reduce gives wrong results for arrays with funny strides
* `#9888 <https://github.com/numpy/numpy/pull/9888>`__: MAINT: Remove workarounds for gh-9527
* `#9889 <https://github.com/numpy/numpy/pull/9889>`__: MAINT: Tidy np.histogram, and improve error messages
* `#9893 <https://github.com/numpy/numpy/pull/9893>`__: ENH: Added compatibility for the NAG Fortran compiler, nagfor
* `#9896 <https://github.com/numpy/numpy/pull/9896>`__: DOC: Unindent enumeration in savetxt docstring
* `#9899 <https://github.com/numpy/numpy/pull/9899>`__: Remove unused isscalar imports, and incorrect documentation using...
* `#9900 <https://github.com/numpy/numpy/pull/9900>`__: MAINT/BUG: Remove special-casing for 0d arrays, now that indexing...
* `#9904 <https://github.com/numpy/numpy/pull/9904>`__: MAINT: Make warnings for nanmin and nanmax consistent
* `#9911 <https://github.com/numpy/numpy/pull/9911>`__: CI: travis: switch to container
* `#9912 <https://github.com/numpy/numpy/pull/9912>`__: BENCH: histogramming benchmarks
* `#9913 <https://github.com/numpy/numpy/pull/9913>`__: MAINT: Tidy up Maskedarray repr
* `#9916 <https://github.com/numpy/numpy/pull/9916>`__: DOC: Clarify behavior of genfromtxt names field
* `#9920 <https://github.com/numpy/numpy/pull/9920>`__: DOC: dot: Add explanation in case `b` has only 1 dimension.
* `#9925 <https://github.com/numpy/numpy/pull/9925>`__: DOC: ndarray.reshape allows shape as int arguments or tuple
* `#9930 <https://github.com/numpy/numpy/pull/9930>`__: MAINT: Add parameter checks to polynomial integration functions.
* `#9936 <https://github.com/numpy/numpy/pull/9936>`__: DOC: Clarify docstring for numpy.array_split
* `#9941 <https://github.com/numpy/numpy/pull/9941>`__: ENH: Use Dragon4 algorithm to print floating values
* `#9942 <https://github.com/numpy/numpy/pull/9942>`__: ENH: Add PGI flang compiler support for Windows
* `#9944 <https://github.com/numpy/numpy/pull/9944>`__: MAINT/BUG: Don't squash useful error messages in favor of generic...
* `#9945 <https://github.com/numpy/numpy/pull/9945>`__: DOC: fix operation plural in along axis glossary
* `#9946 <https://github.com/numpy/numpy/pull/9946>`__: DOC: describe the expansion of take and apply_along_axis in detail
* `#9947 <https://github.com/numpy/numpy/pull/9947>`__: MAINT/TST: Tidy dtype indexing
* `#9950 <https://github.com/numpy/numpy/pull/9950>`__: BUG: Passing an incorrect type to dtype.__getitem__ should raise...
* `#9952 <https://github.com/numpy/numpy/pull/9952>`__: ENH: add Decimal support to numpy.lib.financial
* `#9953 <https://github.com/numpy/numpy/pull/9953>`__: MAINT: Add a PyDataType_ISUNSIZED macro
* `#9957 <https://github.com/numpy/numpy/pull/9957>`__: DOC: update asv url
* `#9961 <https://github.com/numpy/numpy/pull/9961>`__: BUG: Allow float64('1e10000') to overflow
* `#9962 <https://github.com/numpy/numpy/pull/9962>`__: MAINT: Rename formatters to match scalar type names
* `#9965 <https://github.com/numpy/numpy/pull/9965>`__: BLD: Disable npymath whole program opt (LTCG) on win32
* `#9966 <https://github.com/numpy/numpy/pull/9966>`__: BUG: str(np.float) should print with the same number of digits...
* `#9967 <https://github.com/numpy/numpy/pull/9967>`__: MAINT: Separate correct `longdouble.__float__` from incorrect...
* `#9971 <https://github.com/numpy/numpy/pull/9971>`__: BUG: Fix casting from longdouble to long
* `#9973 <https://github.com/numpy/numpy/pull/9973>`__: TST: Fix error in test on PyPy, add comment explaining known...
* `#9976 <https://github.com/numpy/numpy/pull/9976>`__: BUG: Ensure lstsq can handle RHS with all sizes.
* `#9977 <https://github.com/numpy/numpy/pull/9977>`__: MAINT: distutils: trivial cleanups
* `#9978 <https://github.com/numpy/numpy/pull/9978>`__: BUG: cast to str_ should not convert to pure-python intermediate
* `#9983 <https://github.com/numpy/numpy/pull/9983>`__: ENH: let f2py discover location of libgfortran
* `#9985 <https://github.com/numpy/numpy/pull/9985>`__: ENH: skip NPY_ALLOW_C_API for UFUNC_ERR_IGNORE
* `#9986 <https://github.com/numpy/numpy/pull/9986>`__: MAINT: Remove similar branches from linalg.lstsq
* `#9991 <https://github.com/numpy/numpy/pull/9991>`__: MAINT: small robustness change for mingw support on Windows.
* `#9994 <https://github.com/numpy/numpy/pull/9994>`__: BUG: test was not using 'mode'
* `#9996 <https://github.com/numpy/numpy/pull/9996>`__: ENH: Adding `order=` keyword to `np.eye()`.
* `#9997 <https://github.com/numpy/numpy/pull/9997>`__: BUG: prototypes for [cz]dot[uc] are incorrect
* `#9999 <https://github.com/numpy/numpy/pull/9999>`__: ENH: Make `np.in1d()` work for unorderable object arrays
* `#10000 <https://github.com/numpy/numpy/pull/10000>`__: MAINT: Fix test_int_from_huge_longdouble on Darwin.
* `#10005 <https://github.com/numpy/numpy/pull/10005>`__: DOC: reword PyArray_DiscardWritebackIfCopy description
* `#10006 <https://github.com/numpy/numpy/pull/10006>`__: NEP: Drop Python2 support.
* `#10007 <https://github.com/numpy/numpy/pull/10007>`__: MAINT: simplify logic from #9983
* `#10008 <https://github.com/numpy/numpy/pull/10008>`__: MAINT: Backcompat fixes for dragon4 changes
* `#10011 <https://github.com/numpy/numpy/pull/10011>`__: TST: Group together all the nested_iter tests
* `#10017 <https://github.com/numpy/numpy/pull/10017>`__: REV: Undo bad rebase in 7fdfdd6a52fc0761c0d45931247c5ed2480224eb...
* `#10021 <https://github.com/numpy/numpy/pull/10021>`__: ENH: Don't show the boolean dtype in array_repr
* `#10022 <https://github.com/numpy/numpy/pull/10022>`__: MAINT: Update c-api version and hash for NumPy 1.14.
* `#10030 <https://github.com/numpy/numpy/pull/10030>`__: MAINT: Legacy mode specified as string, fix all-zeros legacy...
* `#10031 <https://github.com/numpy/numpy/pull/10031>`__: BUG: Fix f2py string variables in callbacks.
* `#10032 <https://github.com/numpy/numpy/pull/10032>`__: MAINT: Remove newline before dtype in repr of arrays
* `#10034 <https://github.com/numpy/numpy/pull/10034>`__: MAINT: legacy-printing-mode preserves 1.13 float & complex str
* `#10042 <https://github.com/numpy/numpy/pull/10042>`__: BUG: Allow `int` to be called on nested object arrays, fix `np.str_.__int__`
* `#10044 <https://github.com/numpy/numpy/pull/10044>`__: DEP: FutureWarning for void.item(): Will return bytes
* `#10049 <https://github.com/numpy/numpy/pull/10049>`__: DOC: Add copy of deprecated defindex.html template.
* `#10052 <https://github.com/numpy/numpy/pull/10052>`__: BUG: Fix legacy printing mode check.
* `#10053 <https://github.com/numpy/numpy/pull/10053>`__: STY: C style whitespace fixups
* `#10054 <https://github.com/numpy/numpy/pull/10054>`__: ENH: Add encoding option to numpy text IO.
* `#10055 <https://github.com/numpy/numpy/pull/10055>`__: BUG: Changed dump(a, F) so it would close file
* `#10057 <https://github.com/numpy/numpy/pull/10057>`__: DOC: v/h/dstack docstr shouldn't imply deprecation
* `#10065 <https://github.com/numpy/numpy/pull/10065>`__: DOC, BLD: Update site.cfg.example on the MKL part.
* `#10067 <https://github.com/numpy/numpy/pull/10067>`__: MAINT: Replace sphinx extension sphinx.ext.pngmath by sphinx.ext.imgmath.
* `#10068 <https://github.com/numpy/numpy/pull/10068>`__: BUG: Fix memory leak for subclass slicing
* `#10072 <https://github.com/numpy/numpy/pull/10072>`__: MAINT: Fix minor typos in numpy/core/fromnumeric.py
* `#10079 <https://github.com/numpy/numpy/pull/10079>`__: DOC: mention generalized ufuncs, document signature attribute
* `#10096 <https://github.com/numpy/numpy/pull/10096>`__: BUG: Fix assert_equal on time-like objects
* `#10097 <https://github.com/numpy/numpy/pull/10097>`__: BUG: Fix crash for 0d timedelta repr
* `#10101 <https://github.com/numpy/numpy/pull/10101>`__: BUG: Fix out-of-bounds access when handling rank-zero ndarrays.
* `#10105 <https://github.com/numpy/numpy/pull/10105>`__: DOC: Update license documentation.
* `#10108 <https://github.com/numpy/numpy/pull/10108>`__: DOC: Add documentation for datetime_data
* `#10109 <https://github.com/numpy/numpy/pull/10109>`__: DOC: fix the lack of np.
* `#10111 <https://github.com/numpy/numpy/pull/10111>`__: ENH: Improve alignment of datetime64 arrays containing NaT
* `#10112 <https://github.com/numpy/numpy/pull/10112>`__: MAINT: Simplify IntegerFormatter
* `#10113 <https://github.com/numpy/numpy/pull/10113>`__: BUG: Fix further out-of-bounds accesses when handling 0d ndarrays
* `#10114 <https://github.com/numpy/numpy/pull/10114>`__: MAINT: Remove duplicate cond check from assert_array_compare
* `#10116 <https://github.com/numpy/numpy/pull/10116>`__: BLD: [ipo] compilation error with intel compiler
* `#10120 <https://github.com/numpy/numpy/pull/10120>`__: BUG: stray comma should be preserved for legacy printing
* `#10121 <https://github.com/numpy/numpy/pull/10121>`__: DOC: Summarize printing changes in release notes
* `#10125 <https://github.com/numpy/numpy/pull/10125>`__: BLD: Add license file to NumPy wheels.
* `#10129 <https://github.com/numpy/numpy/pull/10129>`__: ENH: Strip trailing spaces from continuation in multiline arrayprint
* `#10130 <https://github.com/numpy/numpy/pull/10130>`__: MAINT: Simplify _leading_trailing
* `#10131 <https://github.com/numpy/numpy/pull/10131>`__: BUG: Fix downcasting in _array2string
* `#10136 <https://github.com/numpy/numpy/pull/10136>`__: BUG: edgeitems kwarg is ignored
* `#10143 <https://github.com/numpy/numpy/pull/10143>`__: MAINT: Combine legacy sections of _formatArray
* `#10159 <https://github.com/numpy/numpy/pull/10159>`__: DOC: Update 1.14 notes
* `#10160 <https://github.com/numpy/numpy/pull/10160>`__: BUG: test, fix problems from PR #9639
* `#10164 <https://github.com/numpy/numpy/pull/10164>`__: MAINT/BUG: Simplify _formatArray, fixing array_repr(matrix) in...
* `#10166 <https://github.com/numpy/numpy/pull/10166>`__: DOC: document PyArray_ResolveWritebackIfCopy
* `#10168 <https://github.com/numpy/numpy/pull/10168>`__: DOC: continuation of PyArray_ResolveIfCopy fixes
* `#10172 <https://github.com/numpy/numpy/pull/10172>`__: BUG: The last line of formatArray is not always wrapped correctly
* `#10175 <https://github.com/numpy/numpy/pull/10175>`__: BUG: linewidth was not respected for arrays other than 1d
* `#10176 <https://github.com/numpy/numpy/pull/10176>`__: ENH: add suffix option to array2str, wraps properly
* `#10177 <https://github.com/numpy/numpy/pull/10177>`__: MAINT, BUG: Final 1.14 formatting fixes
* `#10182 <https://github.com/numpy/numpy/pull/10182>`__: BUG: Extra space is inserted on first line for long elements
* `#10190 <https://github.com/numpy/numpy/pull/10190>`__: BUG: Fix regression in np.ma.load in gh-10055
* `#10200 <https://github.com/numpy/numpy/pull/10200>`__: BUG: Ufunc reduce reference leak (backport)
* `#10202 <https://github.com/numpy/numpy/pull/10202>`__: BUG: Fix bugs found by testing in release mode.
* `#10272 <https://github.com/numpy/numpy/pull/10272>`__: BUG: Align extra-dll folder name with auditwheel
* `#10275 <https://github.com/numpy/numpy/pull/10275>`__: BUG: fix duplicate message print
* `#10276 <https://github.com/numpy/numpy/pull/10276>`__: MAINT: Workaround for new travis sdist failures.
* `#10311 <https://github.com/numpy/numpy/pull/10311>`__: BUG: Make sure einsum default value of `optimize` is True.
* `#10312 <https://github.com/numpy/numpy/pull/10312>`__: BUG: Handle NaNs correctly in arange
* `#10313 <https://github.com/numpy/numpy/pull/10313>`__: BUG: Don't reimplement isclose in np.ma
* `#10315 <https://github.com/numpy/numpy/pull/10315>`__: DOC: NumPy 1.14.0 release prep.

View File

@ -1,63 +1,63 @@
Contributors
============
A total of 14 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Charles Harris
* Daniel Smith
* Dennis Weyland +
* Eric Larson
* Eric Wieser
* Jarrod Millman
* Kenichi Maehashi +
* Marten van Kerkwijk
* Mathieu Lamarre
* Sebastian Berg
* Simon Conseil
* Simon Gibbons
* xoviat
Pull requests merged
====================
A total of 36 pull requests were merged for this release.
* `#10339 <https://github.com/numpy/numpy/pull/10339>`__: BUG: restrict the __config__ modifications to win32
* `#10368 <https://github.com/numpy/numpy/pull/10368>`__: MAINT: Adjust type promotion in linalg.norm
* `#10375 <https://github.com/numpy/numpy/pull/10375>`__: BUG: add missing paren and remove quotes from repr of fieldless...
* `#10395 <https://github.com/numpy/numpy/pull/10395>`__: MAINT: Update download URL in setup.py.
* `#10396 <https://github.com/numpy/numpy/pull/10396>`__: BUG: fix einsum issue with unicode input and py2
* `#10397 <https://github.com/numpy/numpy/pull/10397>`__: BUG: fix error message not formatted in einsum
* `#10398 <https://github.com/numpy/numpy/pull/10398>`__: DOC: add documentation about how to handle new array printing
* `#10403 <https://github.com/numpy/numpy/pull/10403>`__: BUG: Set einsum optimize parameter default to `False`.
* `#10424 <https://github.com/numpy/numpy/pull/10424>`__: ENH: Fix repr of np.record objects to match np.void types #10412
* `#10425 <https://github.com/numpy/numpy/pull/10425>`__: MAINT: Update zesty to artful for i386 testing
* `#10431 <https://github.com/numpy/numpy/pull/10431>`__: REL: Add 1.14.1 release notes template
* `#10435 <https://github.com/numpy/numpy/pull/10435>`__: MAINT: Use ValueError for duplicate field names in lookup (backport)
* `#10534 <https://github.com/numpy/numpy/pull/10534>`__: BUG: Provide a better error message for out-of-order fields
* `#10536 <https://github.com/numpy/numpy/pull/10536>`__: BUG: Resize bytes_ columns in genfromtxt (backport of #10401)
* `#10537 <https://github.com/numpy/numpy/pull/10537>`__: BUG: multifield-indexing adds padding bytes: revert for 1.14.1
* `#10539 <https://github.com/numpy/numpy/pull/10539>`__: BUG: fix np.save issue with python 2.7.5
* `#10540 <https://github.com/numpy/numpy/pull/10540>`__: BUG: Add missing DECREF in Py2 int() cast
* `#10541 <https://github.com/numpy/numpy/pull/10541>`__: TST: Add circleci document testing to maintenance/1.14.x
* `#10542 <https://github.com/numpy/numpy/pull/10542>`__: BUG: complex repr has extra spaces, missing + (1.14 backport)
* `#10550 <https://github.com/numpy/numpy/pull/10550>`__: BUG: Set missing exception after malloc
* `#10557 <https://github.com/numpy/numpy/pull/10557>`__: BUG: In numpy.i, clear CARRAY flag if wrapped buffer is not C_CONTIGUOUS.
* `#10558 <https://github.com/numpy/numpy/pull/10558>`__: DEP: Issue FutureWarning when malformed records detected.
* `#10559 <https://github.com/numpy/numpy/pull/10559>`__: BUG: Fix einsum optimize logic for singleton dimensions
* `#10560 <https://github.com/numpy/numpy/pull/10560>`__: BUG: Fix calling ufuncs with a positional output argument.
* `#10561 <https://github.com/numpy/numpy/pull/10561>`__: BUG: Fix various Big-Endian test failures (ppc64)
* `#10562 <https://github.com/numpy/numpy/pull/10562>`__: BUG: Make dtype.descr error for out-of-order fields.
* `#10563 <https://github.com/numpy/numpy/pull/10563>`__: BUG: arrays not being flattened in `union1d`
* `#10607 <https://github.com/numpy/numpy/pull/10607>`__: MAINT: Update sphinxext submodule hash.
* `#10608 <https://github.com/numpy/numpy/pull/10608>`__: BUG: Revert sort optimization in np.unique.
* `#10609 <https://github.com/numpy/numpy/pull/10609>`__: BUG: infinite recursion in str of 0d subclasses
* `#10610 <https://github.com/numpy/numpy/pull/10610>`__: BUG: Align type definition with generated lapack
* `#10612 <https://github.com/numpy/numpy/pull/10612>`__: BUG/ENH: Improve output for structured non-void types
* `#10622 <https://github.com/numpy/numpy/pull/10622>`__: BUG: deallocate recursive closure in arrayprint.py (1.14 backport)
* `#10624 <https://github.com/numpy/numpy/pull/10624>`__: BUG: Correctly identify comma separated dtype strings
* `#10629 <https://github.com/numpy/numpy/pull/10629>`__: BUG: deallocate recursive closure in arrayprint.py (backport...
* `#10630 <https://github.com/numpy/numpy/pull/10630>`__: REL: Prepare for 1.14.1 release.
Contributors
============
A total of 14 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Charles Harris
* Daniel Smith
* Dennis Weyland +
* Eric Larson
* Eric Wieser
* Jarrod Millman
* Kenichi Maehashi +
* Marten van Kerkwijk
* Mathieu Lamarre
* Sebastian Berg
* Simon Conseil
* Simon Gibbons
* xoviat
Pull requests merged
====================
A total of 36 pull requests were merged for this release.
* `#10339 <https://github.com/numpy/numpy/pull/10339>`__: BUG: restrict the __config__ modifications to win32
* `#10368 <https://github.com/numpy/numpy/pull/10368>`__: MAINT: Adjust type promotion in linalg.norm
* `#10375 <https://github.com/numpy/numpy/pull/10375>`__: BUG: add missing paren and remove quotes from repr of fieldless...
* `#10395 <https://github.com/numpy/numpy/pull/10395>`__: MAINT: Update download URL in setup.py.
* `#10396 <https://github.com/numpy/numpy/pull/10396>`__: BUG: fix einsum issue with unicode input and py2
* `#10397 <https://github.com/numpy/numpy/pull/10397>`__: BUG: fix error message not formatted in einsum
* `#10398 <https://github.com/numpy/numpy/pull/10398>`__: DOC: add documentation about how to handle new array printing
* `#10403 <https://github.com/numpy/numpy/pull/10403>`__: BUG: Set einsum optimize parameter default to `False`.
* `#10424 <https://github.com/numpy/numpy/pull/10424>`__: ENH: Fix repr of np.record objects to match np.void types #10412
* `#10425 <https://github.com/numpy/numpy/pull/10425>`__: MAINT: Update zesty to artful for i386 testing
* `#10431 <https://github.com/numpy/numpy/pull/10431>`__: REL: Add 1.14.1 release notes template
* `#10435 <https://github.com/numpy/numpy/pull/10435>`__: MAINT: Use ValueError for duplicate field names in lookup (backport)
* `#10534 <https://github.com/numpy/numpy/pull/10534>`__: BUG: Provide a better error message for out-of-order fields
* `#10536 <https://github.com/numpy/numpy/pull/10536>`__: BUG: Resize bytes_ columns in genfromtxt (backport of #10401)
* `#10537 <https://github.com/numpy/numpy/pull/10537>`__: BUG: multifield-indexing adds padding bytes: revert for 1.14.1
* `#10539 <https://github.com/numpy/numpy/pull/10539>`__: BUG: fix np.save issue with python 2.7.5
* `#10540 <https://github.com/numpy/numpy/pull/10540>`__: BUG: Add missing DECREF in Py2 int() cast
* `#10541 <https://github.com/numpy/numpy/pull/10541>`__: TST: Add circleci document testing to maintenance/1.14.x
* `#10542 <https://github.com/numpy/numpy/pull/10542>`__: BUG: complex repr has extra spaces, missing + (1.14 backport)
* `#10550 <https://github.com/numpy/numpy/pull/10550>`__: BUG: Set missing exception after malloc
* `#10557 <https://github.com/numpy/numpy/pull/10557>`__: BUG: In numpy.i, clear CARRAY flag if wrapped buffer is not C_CONTIGUOUS.
* `#10558 <https://github.com/numpy/numpy/pull/10558>`__: DEP: Issue FutureWarning when malformed records detected.
* `#10559 <https://github.com/numpy/numpy/pull/10559>`__: BUG: Fix einsum optimize logic for singleton dimensions
* `#10560 <https://github.com/numpy/numpy/pull/10560>`__: BUG: Fix calling ufuncs with a positional output argument.
* `#10561 <https://github.com/numpy/numpy/pull/10561>`__: BUG: Fix various Big-Endian test failures (ppc64)
* `#10562 <https://github.com/numpy/numpy/pull/10562>`__: BUG: Make dtype.descr error for out-of-order fields.
* `#10563 <https://github.com/numpy/numpy/pull/10563>`__: BUG: arrays not being flattened in `union1d`
* `#10607 <https://github.com/numpy/numpy/pull/10607>`__: MAINT: Update sphinxext submodule hash.
* `#10608 <https://github.com/numpy/numpy/pull/10608>`__: BUG: Revert sort optimization in np.unique.
* `#10609 <https://github.com/numpy/numpy/pull/10609>`__: BUG: infinite recursion in str of 0d subclasses
* `#10610 <https://github.com/numpy/numpy/pull/10610>`__: BUG: Align type definition with generated lapack
* `#10612 <https://github.com/numpy/numpy/pull/10612>`__: BUG/ENH: Improve output for structured non-void types
* `#10622 <https://github.com/numpy/numpy/pull/10622>`__: BUG: deallocate recursive closure in arrayprint.py (1.14 backport)
* `#10624 <https://github.com/numpy/numpy/pull/10624>`__: BUG: Correctly identify comma separated dtype strings
* `#10629 <https://github.com/numpy/numpy/pull/10629>`__: BUG: deallocate recursive closure in arrayprint.py (backport...
* `#10630 <https://github.com/numpy/numpy/pull/10630>`__: REL: Prepare for 1.14.1 release.

View File

@ -1,22 +1,22 @@
Contributors
============
A total of 4 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Charles Harris
* Eric Wieser
* Pauli Virtanen
Pull requests merged
====================
A total of 5 pull requests were merged for this release.
* `#10674 <https://github.com/numpy/numpy/pull/10674>`__: BUG: Further back-compat fix for subclassed array repr
* `#10725 <https://github.com/numpy/numpy/pull/10725>`__: BUG: dragon4 fractional output mode adds too many trailing zeros
* `#10726 <https://github.com/numpy/numpy/pull/10726>`__: BUG: Fix f2py generated code to work on PyPy
* `#10727 <https://github.com/numpy/numpy/pull/10727>`__: BUG: Fix missing NPY_VISIBILITY_HIDDEN on npy_longdouble_to_PyLong
* `#10729 <https://github.com/numpy/numpy/pull/10729>`__: DOC: Create 1.14.2 notes and changelog.
Contributors
============
A total of 4 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Charles Harris
* Eric Wieser
* Pauli Virtanen
Pull requests merged
====================
A total of 5 pull requests were merged for this release.
* `#10674 <https://github.com/numpy/numpy/pull/10674>`__: BUG: Further back-compat fix for subclassed array repr
* `#10725 <https://github.com/numpy/numpy/pull/10725>`__: BUG: dragon4 fractional output mode adds too many trailing zeros
* `#10726 <https://github.com/numpy/numpy/pull/10726>`__: BUG: Fix f2py generated code to work on PyPy
* `#10727 <https://github.com/numpy/numpy/pull/10727>`__: BUG: Fix missing NPY_VISIBILITY_HIDDEN on npy_longdouble_to_PyLong
* `#10729 <https://github.com/numpy/numpy/pull/10729>`__: DOC: Create 1.14.2 notes and changelog.

View File

@ -1,27 +1,27 @@
Contributors
============
A total of 6 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Charles Harris
* Jonathan March +
* Malcolm Smith +
* Matti Picus
* Pauli Virtanen
Pull requests merged
====================
A total of 8 pull requests were merged for this release.
* `#10862 <https://github.com/numpy/numpy/pull/10862>`__: BUG: floating types should override tp_print (1.14 backport)
* `#10905 <https://github.com/numpy/numpy/pull/10905>`__: BUG: for 1.14 back-compat, accept list-of-lists in fromrecords
* `#10947 <https://github.com/numpy/numpy/pull/10947>`__: BUG: 'style' arg to array2string broken in legacy mode (1.14...
* `#10959 <https://github.com/numpy/numpy/pull/10959>`__: BUG: test, fix for missing flags['WRITEBACKIFCOPY'] key
* `#10960 <https://github.com/numpy/numpy/pull/10960>`__: BUG: Add missing underscore to prototype in check_embedded_lapack
* `#10961 <https://github.com/numpy/numpy/pull/10961>`__: BUG: Fix encoding regression in ma/bench.py (Issue #10868)
* `#10962 <https://github.com/numpy/numpy/pull/10962>`__: BUG: core: fix NPY_TITLE_KEY macro on pypy
* `#10974 <https://github.com/numpy/numpy/pull/10974>`__: BUG: test, fix PyArray_DiscardWritebackIfCopy...
Contributors
============
A total of 6 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Charles Harris
* Jonathan March +
* Malcolm Smith +
* Matti Picus
* Pauli Virtanen
Pull requests merged
====================
A total of 8 pull requests were merged for this release.
* `#10862 <https://github.com/numpy/numpy/pull/10862>`__: BUG: floating types should override tp_print (1.14 backport)
* `#10905 <https://github.com/numpy/numpy/pull/10905>`__: BUG: for 1.14 back-compat, accept list-of-lists in fromrecords
* `#10947 <https://github.com/numpy/numpy/pull/10947>`__: BUG: 'style' arg to array2string broken in legacy mode (1.14...
* `#10959 <https://github.com/numpy/numpy/pull/10959>`__: BUG: test, fix for missing flags['WRITEBACKIFCOPY'] key
* `#10960 <https://github.com/numpy/numpy/pull/10960>`__: BUG: Add missing underscore to prototype in check_embedded_lapack
* `#10961 <https://github.com/numpy/numpy/pull/10961>`__: BUG: Fix encoding regression in ma/bench.py (Issue #10868)
* `#10962 <https://github.com/numpy/numpy/pull/10962>`__: BUG: core: fix NPY_TITLE_KEY macro on pypy
* `#10974 <https://github.com/numpy/numpy/pull/10974>`__: BUG: test, fix PyArray_DiscardWritebackIfCopy...

View File

@ -1,31 +1,31 @@
Contributors
============
A total of 7 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Charles Harris
* Marten van Kerkwijk
* Matti Picus
* Pauli Virtanen
* Ryan Soklaski +
* Sebastian Berg
Pull requests merged
====================
A total of 11 pull requests were merged for this release.
* `#11104 <https://github.com/numpy/numpy/pull/11104>`__: BUG: str of DOUBLE_DOUBLE format wrong on ppc64
* `#11170 <https://github.com/numpy/numpy/pull/11170>`__: TST: linalg: add regression test for gh-8577
* `#11174 <https://github.com/numpy/numpy/pull/11174>`__: MAINT: add sanity-checks to be run at import time
* `#11181 <https://github.com/numpy/numpy/pull/11181>`__: BUG: void dtype setup checked offset not actual pointer for alignment
* `#11194 <https://github.com/numpy/numpy/pull/11194>`__: BUG: Python2 doubles don't print correctly in interactive shell.
* `#11198 <https://github.com/numpy/numpy/pull/11198>`__: BUG: optimizing compilers can reorder call to npy_get_floatstatus
* `#11199 <https://github.com/numpy/numpy/pull/11199>`__: BUG: reduce using SSE only warns if inside SSE loop
* `#11203 <https://github.com/numpy/numpy/pull/11203>`__: BUG: Bytes delimiter/comments in genfromtxt should be decoded
* `#11211 <https://github.com/numpy/numpy/pull/11211>`__: BUG: Fix reference count/memory leak exposed by better testing
* `#11219 <https://github.com/numpy/numpy/pull/11219>`__: BUG: Fixes einsum broadcasting bug when optimize=True
* `#11251 <https://github.com/numpy/numpy/pull/11251>`__: DOC: Document 1.14.4 release.
Contributors
============
A total of 7 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Charles Harris
* Marten van Kerkwijk
* Matti Picus
* Pauli Virtanen
* Ryan Soklaski +
* Sebastian Berg
Pull requests merged
====================
A total of 11 pull requests were merged for this release.
* `#11104 <https://github.com/numpy/numpy/pull/11104>`__: BUG: str of DOUBLE_DOUBLE format wrong on ppc64
* `#11170 <https://github.com/numpy/numpy/pull/11170>`__: TST: linalg: add regression test for gh-8577
* `#11174 <https://github.com/numpy/numpy/pull/11174>`__: MAINT: add sanity-checks to be run at import time
* `#11181 <https://github.com/numpy/numpy/pull/11181>`__: BUG: void dtype setup checked offset not actual pointer for alignment
* `#11194 <https://github.com/numpy/numpy/pull/11194>`__: BUG: Python2 doubles don't print correctly in interactive shell.
* `#11198 <https://github.com/numpy/numpy/pull/11198>`__: BUG: optimizing compilers can reorder call to npy_get_floatstatus
* `#11199 <https://github.com/numpy/numpy/pull/11199>`__: BUG: reduce using SSE only warns if inside SSE loop
* `#11203 <https://github.com/numpy/numpy/pull/11203>`__: BUG: Bytes delimiter/comments in genfromtxt should be decoded
* `#11211 <https://github.com/numpy/numpy/pull/11211>`__: BUG: Fix reference count/memory leak exposed by better testing
* `#11219 <https://github.com/numpy/numpy/pull/11219>`__: BUG: Fixes einsum broadcasting bug when optimize=True
* `#11251 <https://github.com/numpy/numpy/pull/11251>`__: DOC: Document 1.14.4 release.

View File

@ -1,16 +1,16 @@
Contributors
============
A total of 1 person contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
Pull requests merged
====================
A total of 2 pull requests were merged for this release.
* `#11274 <https://github.com/numpy/numpy/pull/11274>`__: BUG: Correct use of NPY_UNUSED.
* `#11294 <https://github.com/numpy/numpy/pull/11294>`__: BUG: Remove extra trailing parentheses.
Contributors
============
A total of 1 person contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
Pull requests merged
====================
A total of 2 pull requests were merged for this release.
* `#11274 <https://github.com/numpy/numpy/pull/11274>`__: BUG: Correct use of NPY_UNUSED.
* `#11294 <https://github.com/numpy/numpy/pull/11294>`__: BUG: Remove extra trailing parentheses.

View File

@ -1,21 +1,21 @@
Contributors
============
A total of 4 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Eric Wieser
* Julian Taylor
* Matti Picus
Pull requests merged
====================
A total of 4 pull requests were merged for this release.
* `#11985 <https://github.com/numpy/numpy/pull/11985>`__: BUG: fix cached allocations without the GIL
* `#11986 <https://github.com/numpy/numpy/pull/11986>`__: BUG: Undo behavior change in ma.masked_values(shrink=True)
* `#11987 <https://github.com/numpy/numpy/pull/11987>`__: BUG: fix refcount leak in PyArray_AdaptFlexibleDType
* `#11995 <https://github.com/numpy/numpy/pull/11995>`__: TST: Add Python 3.7 testing to NumPy 1.14.
Contributors
============
A total of 4 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Eric Wieser
* Julian Taylor
* Matti Picus
Pull requests merged
====================
A total of 4 pull requests were merged for this release.
* `#11985 <https://github.com/numpy/numpy/pull/11985>`__: BUG: fix cached allocations without the GIL
* `#11986 <https://github.com/numpy/numpy/pull/11986>`__: BUG: Undo behavior change in ma.masked_values(shrink=True)
* `#11987 <https://github.com/numpy/numpy/pull/11987>`__: BUG: fix refcount leak in PyArray_AdaptFlexibleDType
* `#11995 <https://github.com/numpy/numpy/pull/11995>`__: TST: Add Python 3.7 testing to NumPy 1.14.

File diff suppressed because it is too large Load Diff

View File

@ -1,44 +1,44 @@
Contributors
============
A total of 7 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Chris Billington
* Elliott Sales de Andrade +
* Eric Wieser
* Jeremy Manning +
* Matti Picus
* Ralf Gommers
Pull requests merged
====================
A total of 24 pull requests were merged for this release.
* `#11647 <https://github.com/numpy/numpy/pull/11647>`__: MAINT: Filter Cython warnings in ``__init__.py``
* `#11648 <https://github.com/numpy/numpy/pull/11648>`__: BUG: Fix doc source links to unwrap decorators
* `#11657 <https://github.com/numpy/numpy/pull/11657>`__: BUG: Ensure singleton dimensions are not dropped when converting...
* `#11661 <https://github.com/numpy/numpy/pull/11661>`__: BUG: Warn on Nan in minimum,maximum for scalars
* `#11665 <https://github.com/numpy/numpy/pull/11665>`__: BUG: cython sometimes emits invalid gcc attribute
* `#11682 <https://github.com/numpy/numpy/pull/11682>`__: BUG: Fix regression in void_getitem
* `#11698 <https://github.com/numpy/numpy/pull/11698>`__: BUG: Make matrix_power again work for object arrays.
* `#11700 <https://github.com/numpy/numpy/pull/11700>`__: BUG: Add missing PyErr_NoMemory after failing malloc
* `#11719 <https://github.com/numpy/numpy/pull/11719>`__: BUG: Fix undefined functions on big-endian systems.
* `#11720 <https://github.com/numpy/numpy/pull/11720>`__: MAINT: Make einsum optimize default to False.
* `#11746 <https://github.com/numpy/numpy/pull/11746>`__: BUG: Fix regression in loadtxt for bz2 text files in Python 2.
* `#11757 <https://github.com/numpy/numpy/pull/11757>`__: BUG: Revert use of `console_scripts`.
* `#11758 <https://github.com/numpy/numpy/pull/11758>`__: BUG: Fix Fortran kind detection for aarch64 & s390x.
* `#11759 <https://github.com/numpy/numpy/pull/11759>`__: BUG: Fix printing of longdouble on ppc64le.
* `#11760 <https://github.com/numpy/numpy/pull/11760>`__: BUG: Fixes for unicode field names in Python 2
* `#11761 <https://github.com/numpy/numpy/pull/11761>`__: BUG: Increase required cython version on python 3.7
* `#11763 <https://github.com/numpy/numpy/pull/11763>`__: BUG: check return value of _buffer_format_string
* `#11775 <https://github.com/numpy/numpy/pull/11775>`__: MAINT: Make assert_array_compare more generic.
* `#11776 <https://github.com/numpy/numpy/pull/11776>`__: TST: Fix urlopen stubbing.
* `#11777 <https://github.com/numpy/numpy/pull/11777>`__: BUG: Fix regression in intersect1d.
* `#11779 <https://github.com/numpy/numpy/pull/11779>`__: BUG: Fix test sensitive to platform byte order.
* `#11781 <https://github.com/numpy/numpy/pull/11781>`__: BUG: Avoid signed overflow in histogram
* `#11785 <https://github.com/numpy/numpy/pull/11785>`__: BUG: Fix pickle and memoryview for datetime64, timedelta64 scalars
* `#11786 <https://github.com/numpy/numpy/pull/11786>`__: BUG: Deprecation triggers segfault
Contributors
============
A total of 7 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Chris Billington
* Elliott Sales de Andrade +
* Eric Wieser
* Jeremy Manning +
* Matti Picus
* Ralf Gommers
Pull requests merged
====================
A total of 24 pull requests were merged for this release.
* `#11647 <https://github.com/numpy/numpy/pull/11647>`__: MAINT: Filter Cython warnings in ``__init__.py``
* `#11648 <https://github.com/numpy/numpy/pull/11648>`__: BUG: Fix doc source links to unwrap decorators
* `#11657 <https://github.com/numpy/numpy/pull/11657>`__: BUG: Ensure singleton dimensions are not dropped when converting...
* `#11661 <https://github.com/numpy/numpy/pull/11661>`__: BUG: Warn on Nan in minimum,maximum for scalars
* `#11665 <https://github.com/numpy/numpy/pull/11665>`__: BUG: cython sometimes emits invalid gcc attribute
* `#11682 <https://github.com/numpy/numpy/pull/11682>`__: BUG: Fix regression in void_getitem
* `#11698 <https://github.com/numpy/numpy/pull/11698>`__: BUG: Make matrix_power again work for object arrays.
* `#11700 <https://github.com/numpy/numpy/pull/11700>`__: BUG: Add missing PyErr_NoMemory after failing malloc
* `#11719 <https://github.com/numpy/numpy/pull/11719>`__: BUG: Fix undefined functions on big-endian systems.
* `#11720 <https://github.com/numpy/numpy/pull/11720>`__: MAINT: Make einsum optimize default to False.
* `#11746 <https://github.com/numpy/numpy/pull/11746>`__: BUG: Fix regression in loadtxt for bz2 text files in Python 2.
* `#11757 <https://github.com/numpy/numpy/pull/11757>`__: BUG: Revert use of `console_scripts`.
* `#11758 <https://github.com/numpy/numpy/pull/11758>`__: BUG: Fix Fortran kind detection for aarch64 & s390x.
* `#11759 <https://github.com/numpy/numpy/pull/11759>`__: BUG: Fix printing of longdouble on ppc64le.
* `#11760 <https://github.com/numpy/numpy/pull/11760>`__: BUG: Fixes for unicode field names in Python 2
* `#11761 <https://github.com/numpy/numpy/pull/11761>`__: BUG: Increase required cython version on python 3.7
* `#11763 <https://github.com/numpy/numpy/pull/11763>`__: BUG: check return value of _buffer_format_string
* `#11775 <https://github.com/numpy/numpy/pull/11775>`__: MAINT: Make assert_array_compare more generic.
* `#11776 <https://github.com/numpy/numpy/pull/11776>`__: TST: Fix urlopen stubbing.
* `#11777 <https://github.com/numpy/numpy/pull/11777>`__: BUG: Fix regression in intersect1d.
* `#11779 <https://github.com/numpy/numpy/pull/11779>`__: BUG: Fix test sensitive to platform byte order.
* `#11781 <https://github.com/numpy/numpy/pull/11781>`__: BUG: Avoid signed overflow in histogram
* `#11785 <https://github.com/numpy/numpy/pull/11785>`__: BUG: Fix pickle and memoryview for datetime64, timedelta64 scalars
* `#11786 <https://github.com/numpy/numpy/pull/11786>`__: BUG: Deprecation triggers segfault

View File

@ -1,21 +1,21 @@
Contributors
============
A total of 4 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Julian Taylor
* Marten van Kerkwijk
* Matti Picus
Pull requests merged
====================
A total of 4 pull requests were merged for this release.
* `#11902 <https://github.com/numpy/numpy/pull/11902>`__: BUG: Fix matrix PendingDeprecationWarning suppression for pytest...
* `#11981 <https://github.com/numpy/numpy/pull/11981>`__: BUG: fix cached allocations without the GIL for 1.15.x
* `#11982 <https://github.com/numpy/numpy/pull/11982>`__: BUG: fix refcount leak in PyArray_AdaptFlexibleDType
* `#11992 <https://github.com/numpy/numpy/pull/11992>`__: BUG: Ensure boolean indexing of subclasses sets base correctly.
Contributors
============
A total of 4 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Julian Taylor
* Marten van Kerkwijk
* Matti Picus
Pull requests merged
====================
A total of 4 pull requests were merged for this release.
* `#11902 <https://github.com/numpy/numpy/pull/11902>`__: BUG: Fix matrix PendingDeprecationWarning suppression for pytest...
* `#11981 <https://github.com/numpy/numpy/pull/11981>`__: BUG: fix cached allocations without the GIL for 1.15.x
* `#11982 <https://github.com/numpy/numpy/pull/11982>`__: BUG: fix refcount leak in PyArray_AdaptFlexibleDType
* `#11992 <https://github.com/numpy/numpy/pull/11992>`__: BUG: Ensure boolean indexing of subclasses sets base correctly.

View File

@ -1,32 +1,32 @@
Contributors
============
A total of 7 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Charles Harris
* Jeroen Demeyer
* Kevin Sheppard
* Matthew Bowden +
* Matti Picus
* Tyler Reddy
Pull requests merged
====================
A total of 12 pull requests were merged for this release.
* `#12080 <https://github.com/numpy/numpy/pull/12080>`__: MAINT: Blacklist some MSVC complex functions.
* `#12083 <https://github.com/numpy/numpy/pull/12083>`__: TST: Add azure CI testing to 1.15.x branch.
* `#12084 <https://github.com/numpy/numpy/pull/12084>`__: BUG: test_path() now uses Path.resolve()
* `#12085 <https://github.com/numpy/numpy/pull/12085>`__: TST, MAINT: Fix some failing tests on azure-pipelines mac and...
* `#12187 <https://github.com/numpy/numpy/pull/12187>`__: BUG: Fix memory leak in mapping.c
* `#12188 <https://github.com/numpy/numpy/pull/12188>`__: BUG: Allow boolean subtract in histogram
* `#12189 <https://github.com/numpy/numpy/pull/12189>`__: BUG: Fix in-place permutation
* `#12190 <https://github.com/numpy/numpy/pull/12190>`__: BUG: limit default for get_num_build_jobs() to 8
* `#12191 <https://github.com/numpy/numpy/pull/12191>`__: BUG: OBJECT_to_* should check for errors
* `#12192 <https://github.com/numpy/numpy/pull/12192>`__: DOC: Prepare for NumPy 1.15.3 release.
* `#12237 <https://github.com/numpy/numpy/pull/12237>`__: BUG: Fix MaskedArray fill_value type conversion.
* `#12238 <https://github.com/numpy/numpy/pull/12238>`__: TST: Backport azure-pipeline testing fixes for Mac
Contributors
============
A total of 7 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Charles Harris
* Jeroen Demeyer
* Kevin Sheppard
* Matthew Bowden +
* Matti Picus
* Tyler Reddy
Pull requests merged
====================
A total of 12 pull requests were merged for this release.
* `#12080 <https://github.com/numpy/numpy/pull/12080>`__: MAINT: Blacklist some MSVC complex functions.
* `#12083 <https://github.com/numpy/numpy/pull/12083>`__: TST: Add azure CI testing to 1.15.x branch.
* `#12084 <https://github.com/numpy/numpy/pull/12084>`__: BUG: test_path() now uses Path.resolve()
* `#12085 <https://github.com/numpy/numpy/pull/12085>`__: TST, MAINT: Fix some failing tests on azure-pipelines mac and...
* `#12187 <https://github.com/numpy/numpy/pull/12187>`__: BUG: Fix memory leak in mapping.c
* `#12188 <https://github.com/numpy/numpy/pull/12188>`__: BUG: Allow boolean subtract in histogram
* `#12189 <https://github.com/numpy/numpy/pull/12189>`__: BUG: Fix in-place permutation
* `#12190 <https://github.com/numpy/numpy/pull/12190>`__: BUG: limit default for get_num_build_jobs() to 8
* `#12191 <https://github.com/numpy/numpy/pull/12191>`__: BUG: OBJECT_to_* should check for errors
* `#12192 <https://github.com/numpy/numpy/pull/12192>`__: DOC: Prepare for NumPy 1.15.3 release.
* `#12237 <https://github.com/numpy/numpy/pull/12237>`__: BUG: Fix MaskedArray fill_value type conversion.
* `#12238 <https://github.com/numpy/numpy/pull/12238>`__: TST: Backport azure-pipeline testing fixes for Mac

View File

@ -1,21 +1,21 @@
Contributors
============
A total of 4 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Matti Picus
* Sebastian Berg
* bbbbbbbbba +
Pull requests merged
====================
A total of 4 pull requests were merged for this release.
* `#12296 <https://github.com/numpy/numpy/pull/12296>`__: BUG: Dealloc cached buffer info (#12249)
* `#12297 <https://github.com/numpy/numpy/pull/12297>`__: BUG: Fix fill value in masked array '==' and '!=' ops.
* `#12307 <https://github.com/numpy/numpy/pull/12307>`__: DOC: Correct the default value of `optimize` in `numpy.einsum`
* `#12320 <https://github.com/numpy/numpy/pull/12320>`__: REL: Prepare for the NumPy 1.15.4 release
Contributors
============
A total of 4 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Matti Picus
* Sebastian Berg
* bbbbbbbbba +
Pull requests merged
====================
A total of 4 pull requests were merged for this release.
* `#12296 <https://github.com/numpy/numpy/pull/12296>`__: BUG: Dealloc cached buffer info (#12249)
* `#12297 <https://github.com/numpy/numpy/pull/12297>`__: BUG: Fix fill value in masked array '==' and '!=' ops.
* `#12307 <https://github.com/numpy/numpy/pull/12307>`__: DOC: Correct the default value of `optimize` in `numpy.einsum`
* `#12320 <https://github.com/numpy/numpy/pull/12320>`__: REL: Prepare for the NumPy 1.15.4 release

File diff suppressed because it is too large Load Diff

View File

@ -1,62 +1,62 @@
Contributors
============
A total of 16 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Antoine Pitrou
* Arcesio Castaneda Medina +
* Charles Harris
* Chris Markiewicz +
* Christoph Gohlke
* Christopher J. Markiewicz +
* Daniel Hrisca +
* EelcoPeacs +
* Eric Wieser
* Kevin Sheppard
* Matti Picus
* OBATA Akio +
* Ralf Gommers
* Sebastian Berg
* Stephan Hoyer
* Tyler Reddy
Pull requests merged
====================
A total of 33 pull requests were merged for this release.
* `#12754 <https://github.com/numpy/numpy/pull/12754>`__: BUG: Check paths are unicode, bytes or path-like
* `#12767 <https://github.com/numpy/numpy/pull/12767>`__: ENH: add mm->q floordiv
* `#12768 <https://github.com/numpy/numpy/pull/12768>`__: ENH: port np.core.overrides to C for speed
* `#12769 <https://github.com/numpy/numpy/pull/12769>`__: ENH: Add np.ctypeslib.as_ctypes_type(dtype), improve `np.ctypeslib.as_ctypes`
* `#12771 <https://github.com/numpy/numpy/pull/12771>`__: BUG: Ensure probabilities are not NaN in choice
* `#12772 <https://github.com/numpy/numpy/pull/12772>`__: MAINT: add warning to numpy.distutils for LDFLAGS append behavior.
* `#12773 <https://github.com/numpy/numpy/pull/12773>`__: ENH: add "max difference" messages to np.testing.assert_array_equal...
* `#12774 <https://github.com/numpy/numpy/pull/12774>`__: BUG: Fix incorrect/missing reference cleanups found using valgrind
* `#12776 <https://github.com/numpy/numpy/pull/12776>`__: BUG,TST: Remove the misguided `run_command` that wraps subprocess
* `#12777 <https://github.com/numpy/numpy/pull/12777>`__: DOC, TST: Clean up matplotlib imports
* `#12781 <https://github.com/numpy/numpy/pull/12781>`__: BUG: Fix reference counting for subarrays containing objects
* `#12782 <https://github.com/numpy/numpy/pull/12782>`__: BUG: Ensure failing memory allocations are reported
* `#12784 <https://github.com/numpy/numpy/pull/12784>`__: BUG: Fix leak of void scalar buffer info
* `#12788 <https://github.com/numpy/numpy/pull/12788>`__: MAINT: Change the order of checking for local file.
* `#12808 <https://github.com/numpy/numpy/pull/12808>`__: BUG: loosen kwargs requirements in ediff1d
* `#12809 <https://github.com/numpy/numpy/pull/12809>`__: DOC: clarify the extend of __array_function__ support in NumPy...
* `#12810 <https://github.com/numpy/numpy/pull/12810>`__: BUG: Check that dtype or formats arguments are not None.
* `#12811 <https://github.com/numpy/numpy/pull/12811>`__: BUG: fix f2py problem to build wrappers using PGI's Fortran
* `#12812 <https://github.com/numpy/numpy/pull/12812>`__: BUG: double decref of dtype in failure codepath. Test and fix
* `#12813 <https://github.com/numpy/numpy/pull/12813>`__: BUG, DOC: test, fix that f2py.compile accepts str and bytes,...
* `#12816 <https://github.com/numpy/numpy/pull/12816>`__: BUG: resolve writeback in arr_insert failure paths
* `#12820 <https://github.com/numpy/numpy/pull/12820>`__: ENH: Add mm->qm divmod
* `#12843 <https://github.com/numpy/numpy/pull/12843>`__: BUG: fix to check before apply `shlex.split`
* `#12844 <https://github.com/numpy/numpy/pull/12844>`__: BUG: Fix SystemError when pickling datetime64 array with pickle5
* `#12845 <https://github.com/numpy/numpy/pull/12845>`__: BUG: Fix rounding of denormals in double and float to half casts.
* `#12868 <https://github.com/numpy/numpy/pull/12868>`__: TEST: pin mingw version
* `#12869 <https://github.com/numpy/numpy/pull/12869>`__: BUG: ndarrays pickled by 1.16 cannot be loaded by 1.15.4 and...
* `#12870 <https://github.com/numpy/numpy/pull/12870>`__: BUG: do not Py_DECREF NULL pointer
* `#12890 <https://github.com/numpy/numpy/pull/12890>`__: ENH: add _dtype_ctype to namespace for freeze analysis
* `#12891 <https://github.com/numpy/numpy/pull/12891>`__: BUG: fail if old multiarray module detected
* `#12898 <https://github.com/numpy/numpy/pull/12898>`__: BUG: Do not double-quote arguments passed on to the linker
* `#12899 <https://github.com/numpy/numpy/pull/12899>`__: BUG: Do not insert extra double quote into preprocessor macros
* `#12902 <https://github.com/numpy/numpy/pull/12902>`__: DOC: Prepare for 1.16.1 release.
Contributors
============
A total of 16 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Antoine Pitrou
* Arcesio Castaneda Medina +
* Charles Harris
* Chris Markiewicz +
* Christoph Gohlke
* Christopher J. Markiewicz +
* Daniel Hrisca +
* EelcoPeacs +
* Eric Wieser
* Kevin Sheppard
* Matti Picus
* OBATA Akio +
* Ralf Gommers
* Sebastian Berg
* Stephan Hoyer
* Tyler Reddy
Pull requests merged
====================
A total of 33 pull requests were merged for this release.
* `#12754 <https://github.com/numpy/numpy/pull/12754>`__: BUG: Check paths are unicode, bytes or path-like
* `#12767 <https://github.com/numpy/numpy/pull/12767>`__: ENH: add mm->q floordiv
* `#12768 <https://github.com/numpy/numpy/pull/12768>`__: ENH: port np.core.overrides to C for speed
* `#12769 <https://github.com/numpy/numpy/pull/12769>`__: ENH: Add np.ctypeslib.as_ctypes_type(dtype), improve `np.ctypeslib.as_ctypes`
* `#12771 <https://github.com/numpy/numpy/pull/12771>`__: BUG: Ensure probabilities are not NaN in choice
* `#12772 <https://github.com/numpy/numpy/pull/12772>`__: MAINT: add warning to numpy.distutils for LDFLAGS append behavior.
* `#12773 <https://github.com/numpy/numpy/pull/12773>`__: ENH: add "max difference" messages to np.testing.assert_array_equal...
* `#12774 <https://github.com/numpy/numpy/pull/12774>`__: BUG: Fix incorrect/missing reference cleanups found using valgrind
* `#12776 <https://github.com/numpy/numpy/pull/12776>`__: BUG,TST: Remove the misguided `run_command` that wraps subprocess
* `#12777 <https://github.com/numpy/numpy/pull/12777>`__: DOC, TST: Clean up matplotlib imports
* `#12781 <https://github.com/numpy/numpy/pull/12781>`__: BUG: Fix reference counting for subarrays containing objects
* `#12782 <https://github.com/numpy/numpy/pull/12782>`__: BUG: Ensure failing memory allocations are reported
* `#12784 <https://github.com/numpy/numpy/pull/12784>`__: BUG: Fix leak of void scalar buffer info
* `#12788 <https://github.com/numpy/numpy/pull/12788>`__: MAINT: Change the order of checking for local file.
* `#12808 <https://github.com/numpy/numpy/pull/12808>`__: BUG: loosen kwargs requirements in ediff1d
* `#12809 <https://github.com/numpy/numpy/pull/12809>`__: DOC: clarify the extend of __array_function__ support in NumPy...
* `#12810 <https://github.com/numpy/numpy/pull/12810>`__: BUG: Check that dtype or formats arguments are not None.
* `#12811 <https://github.com/numpy/numpy/pull/12811>`__: BUG: fix f2py problem to build wrappers using PGI's Fortran
* `#12812 <https://github.com/numpy/numpy/pull/12812>`__: BUG: double decref of dtype in failure codepath. Test and fix
* `#12813 <https://github.com/numpy/numpy/pull/12813>`__: BUG, DOC: test, fix that f2py.compile accepts str and bytes,...
* `#12816 <https://github.com/numpy/numpy/pull/12816>`__: BUG: resolve writeback in arr_insert failure paths
* `#12820 <https://github.com/numpy/numpy/pull/12820>`__: ENH: Add mm->qm divmod
* `#12843 <https://github.com/numpy/numpy/pull/12843>`__: BUG: fix to check before apply `shlex.split`
* `#12844 <https://github.com/numpy/numpy/pull/12844>`__: BUG: Fix SystemError when pickling datetime64 array with pickle5
* `#12845 <https://github.com/numpy/numpy/pull/12845>`__: BUG: Fix rounding of denormals in double and float to half casts.
* `#12868 <https://github.com/numpy/numpy/pull/12868>`__: TEST: pin mingw version
* `#12869 <https://github.com/numpy/numpy/pull/12869>`__: BUG: ndarrays pickled by 1.16 cannot be loaded by 1.15.4 and...
* `#12870 <https://github.com/numpy/numpy/pull/12870>`__: BUG: do not Py_DECREF NULL pointer
* `#12890 <https://github.com/numpy/numpy/pull/12890>`__: ENH: add _dtype_ctype to namespace for freeze analysis
* `#12891 <https://github.com/numpy/numpy/pull/12891>`__: BUG: fail if old multiarray module detected
* `#12898 <https://github.com/numpy/numpy/pull/12898>`__: BUG: Do not double-quote arguments passed on to the linker
* `#12899 <https://github.com/numpy/numpy/pull/12899>`__: BUG: Do not insert extra double quote into preprocessor macros
* `#12902 <https://github.com/numpy/numpy/pull/12902>`__: DOC: Prepare for 1.16.1 release.

View File

@ -1,25 +1,25 @@
Contributors
============
A total of 5 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Eric Wieser
* Matti Picus
* Tyler Reddy
* Tony LaTorre +
Pull requests merged
====================
A total of 7 pull requests were merged for this release.
* `#12909 <https://github.com/numpy/numpy/pull/12909>`__: TST: fix vmImage dispatch in Azure
* `#12923 <https://github.com/numpy/numpy/pull/12923>`__: MAINT: remove complicated test of multiarray import failure mode
* `#13020 <https://github.com/numpy/numpy/pull/13020>`__: BUG: fix signed zero behavior in npy_divmod
* `#13026 <https://github.com/numpy/numpy/pull/13026>`__: MAINT: Add functions to parse shell-strings in the platform-native...
* `#13028 <https://github.com/numpy/numpy/pull/13028>`__: BUG: Fix regression in parsing of F90 and F77 environment variables
* `#13038 <https://github.com/numpy/numpy/pull/13038>`__: BUG: parse shell escaping in extra_compile_args and extra_link_args
* `#13041 <https://github.com/numpy/numpy/pull/13041>`__: BLD: Windows absolute path DLL loading
Contributors
============
A total of 5 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Eric Wieser
* Matti Picus
* Tyler Reddy
* Tony LaTorre +
Pull requests merged
====================
A total of 7 pull requests were merged for this release.
* `#12909 <https://github.com/numpy/numpy/pull/12909>`__: TST: fix vmImage dispatch in Azure
* `#12923 <https://github.com/numpy/numpy/pull/12923>`__: MAINT: remove complicated test of multiarray import failure mode
* `#13020 <https://github.com/numpy/numpy/pull/13020>`__: BUG: fix signed zero behavior in npy_divmod
* `#13026 <https://github.com/numpy/numpy/pull/13026>`__: MAINT: Add functions to parse shell-strings in the platform-native...
* `#13028 <https://github.com/numpy/numpy/pull/13028>`__: BUG: Fix regression in parsing of F90 and F77 environment variables
* `#13038 <https://github.com/numpy/numpy/pull/13038>`__: BUG: parse shell escaping in extra_compile_args and extra_link_args
* `#13041 <https://github.com/numpy/numpy/pull/13041>`__: BLD: Windows absolute path DLL loading

View File

@ -1,55 +1,55 @@
Contributors
============
A total of 16 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Andreas Schwab
* Bharat Raghunathan +
* Bran +
* Charles Harris
* Eric Wieser
* Jakub Wilk
* Kevin Sheppard
* Marten van Kerkwijk
* Matti Picus
* Paul Ivanov
* Ralf Gommers
* Sebastian Berg
* Tyler Reddy
* Warren Weckesser
* Yu Feng
* adeak +
Pull requests merged
====================
A total of 26 pull requests were merged for this release.
* `#13072 <https://github.com/numpy/numpy/pull/13072>`__: BUG: Fixes to numpy.distutils.Configuration.get_version (#13056)
* `#13082 <https://github.com/numpy/numpy/pull/13082>`__: BUG: Fix errors in string formatting while producing an error
* `#13083 <https://github.com/numpy/numpy/pull/13083>`__: BUG: Convert fortran flags in environment variable
* `#13084 <https://github.com/numpy/numpy/pull/13084>`__: BUG: Remove error-prone borrowed reference handling
* `#13085 <https://github.com/numpy/numpy/pull/13085>`__: BUG: Add error checks when converting integers to datetime types
* `#13091 <https://github.com/numpy/numpy/pull/13091>`__: BUG: Remove our patched version of `distutils.split_quoted`
* `#13141 <https://github.com/numpy/numpy/pull/13141>`__: BUG: Fix testsuite failures on ppc and riscv
* `#13142 <https://github.com/numpy/numpy/pull/13142>`__: BUG: Fix parameter validity checks in ``random.choice``
* `#13143 <https://github.com/numpy/numpy/pull/13143>`__: BUG: Ensure linspace works on object input.
* `#13144 <https://github.com/numpy/numpy/pull/13144>`__: BLD: fix include list for sdist building.
* `#13145 <https://github.com/numpy/numpy/pull/13145>`__: BUG: __array_interface__ offset was always ignored
* `#13274 <https://github.com/numpy/numpy/pull/13274>`__: MAINT: f2py: Add a cast to avoid a compiler warning.
* `#13275 <https://github.com/numpy/numpy/pull/13275>`__: BUG, MAINT: fix reference count error on invalid input to ndarray.flat
* `#13276 <https://github.com/numpy/numpy/pull/13276>`__: ENH: Cast covariance to double in random mvnormal
* `#13278 <https://github.com/numpy/numpy/pull/13278>`__: BUG: Fix null pointer dereference in PyArray_DTypeFromObjectHelper
* `#13339 <https://github.com/numpy/numpy/pull/13339>`__: BUG: Use C call to sysctlbyname for AVX detection on MacOS.
* `#13340 <https://github.com/numpy/numpy/pull/13340>`__: BUG: Fix crash when calling savetxt on a padded array
* `#13341 <https://github.com/numpy/numpy/pull/13341>`__: BUG: ufunc.at iteration variable size fix
* `#13342 <https://github.com/numpy/numpy/pull/13342>`__: DOC: Add as_ctypes_type to the documentation
* `#13350 <https://github.com/numpy/numpy/pull/13350>`__: BUG: Return the coefficients array directly
* `#13351 <https://github.com/numpy/numpy/pull/13351>`__: BUG/MAINT: Tidy typeinfo.h and .c
* `#13359 <https://github.com/numpy/numpy/pull/13359>`__: BUG: Make allow_pickle=False the default for loading
* `#13360 <https://github.com/numpy/numpy/pull/13360>`__: DOC: fix some doctest failures
* `#13363 <https://github.com/numpy/numpy/pull/13363>`__: BUG/MAINT: Tidy typeinfo.h and .c
* `#13381 <https://github.com/numpy/numpy/pull/13381>`__: BLD: address mingw-w64 issue. Follow-up to gh-9977
* `#13382 <https://github.com/numpy/numpy/pull/13382>`__: REL: Prepare for the NumPy release.
Contributors
============
A total of 16 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Andreas Schwab
* Bharat Raghunathan +
* Bran +
* Charles Harris
* Eric Wieser
* Jakub Wilk
* Kevin Sheppard
* Marten van Kerkwijk
* Matti Picus
* Paul Ivanov
* Ralf Gommers
* Sebastian Berg
* Tyler Reddy
* Warren Weckesser
* Yu Feng
* adeak +
Pull requests merged
====================
A total of 26 pull requests were merged for this release.
* `#13072 <https://github.com/numpy/numpy/pull/13072>`__: BUG: Fixes to numpy.distutils.Configuration.get_version (#13056)
* `#13082 <https://github.com/numpy/numpy/pull/13082>`__: BUG: Fix errors in string formatting while producing an error
* `#13083 <https://github.com/numpy/numpy/pull/13083>`__: BUG: Convert fortran flags in environment variable
* `#13084 <https://github.com/numpy/numpy/pull/13084>`__: BUG: Remove error-prone borrowed reference handling
* `#13085 <https://github.com/numpy/numpy/pull/13085>`__: BUG: Add error checks when converting integers to datetime types
* `#13091 <https://github.com/numpy/numpy/pull/13091>`__: BUG: Remove our patched version of `distutils.split_quoted`
* `#13141 <https://github.com/numpy/numpy/pull/13141>`__: BUG: Fix testsuite failures on ppc and riscv
* `#13142 <https://github.com/numpy/numpy/pull/13142>`__: BUG: Fix parameter validity checks in ``random.choice``
* `#13143 <https://github.com/numpy/numpy/pull/13143>`__: BUG: Ensure linspace works on object input.
* `#13144 <https://github.com/numpy/numpy/pull/13144>`__: BLD: fix include list for sdist building.
* `#13145 <https://github.com/numpy/numpy/pull/13145>`__: BUG: __array_interface__ offset was always ignored
* `#13274 <https://github.com/numpy/numpy/pull/13274>`__: MAINT: f2py: Add a cast to avoid a compiler warning.
* `#13275 <https://github.com/numpy/numpy/pull/13275>`__: BUG, MAINT: fix reference count error on invalid input to ndarray.flat
* `#13276 <https://github.com/numpy/numpy/pull/13276>`__: ENH: Cast covariance to double in random mvnormal
* `#13278 <https://github.com/numpy/numpy/pull/13278>`__: BUG: Fix null pointer dereference in PyArray_DTypeFromObjectHelper
* `#13339 <https://github.com/numpy/numpy/pull/13339>`__: BUG: Use C call to sysctlbyname for AVX detection on MacOS.
* `#13340 <https://github.com/numpy/numpy/pull/13340>`__: BUG: Fix crash when calling savetxt on a padded array
* `#13341 <https://github.com/numpy/numpy/pull/13341>`__: BUG: ufunc.at iteration variable size fix
* `#13342 <https://github.com/numpy/numpy/pull/13342>`__: DOC: Add as_ctypes_type to the documentation
* `#13350 <https://github.com/numpy/numpy/pull/13350>`__: BUG: Return the coefficients array directly
* `#13351 <https://github.com/numpy/numpy/pull/13351>`__: BUG/MAINT: Tidy typeinfo.h and .c
* `#13359 <https://github.com/numpy/numpy/pull/13359>`__: BUG: Make allow_pickle=False the default for loading
* `#13360 <https://github.com/numpy/numpy/pull/13360>`__: DOC: fix some doctest failures
* `#13363 <https://github.com/numpy/numpy/pull/13363>`__: BUG/MAINT: Tidy typeinfo.h and .c
* `#13381 <https://github.com/numpy/numpy/pull/13381>`__: BLD: address mingw-w64 issue. Follow-up to gh-9977
* `#13382 <https://github.com/numpy/numpy/pull/13382>`__: REL: Prepare for the NumPy release.

View File

@ -1,39 +1,39 @@
Contributors
============
A total of 10 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Eric Wieser
* Dennis Zollo +
* Hunter Damron +
* Jingbei Li +
* Kevin Sheppard
* Matti Picus
* Nicola Soranzo +
* Sebastian Berg
* Tyler Reddy
Pull requests merged
====================
A total of 16 pull requests were merged for this release.
* `#13392 <https://github.com/numpy/numpy/pull/13392>`__: BUG: Some PyPy versions lack PyStructSequence_InitType2.
* `#13394 <https://github.com/numpy/numpy/pull/13394>`__: MAINT, DEP: Fix deprecated ``assertEquals()``
* `#13396 <https://github.com/numpy/numpy/pull/13396>`__: BUG: Fix structured_to_unstructured on single-field types (backport)
* `#13549 <https://github.com/numpy/numpy/pull/13549>`__: BLD: Make CI pass again with pytest 4.5
* `#13552 <https://github.com/numpy/numpy/pull/13552>`__: TST: Register markers in conftest.py.
* `#13559 <https://github.com/numpy/numpy/pull/13559>`__: BUG: Removes ValueError for empty kwargs in arraymultiter_new
* `#13560 <https://github.com/numpy/numpy/pull/13560>`__: BUG: Add TypeError to accepted exceptions in crackfortran.
* `#13561 <https://github.com/numpy/numpy/pull/13561>`__: BUG: Handle subarrays in descr_to_dtype
* `#13562 <https://github.com/numpy/numpy/pull/13562>`__: BUG: Protect generators from log(0.0)
* `#13563 <https://github.com/numpy/numpy/pull/13563>`__: BUG: Always return views from structured_to_unstructured when...
* `#13564 <https://github.com/numpy/numpy/pull/13564>`__: BUG: Catch stderr when checking compiler version
* `#13565 <https://github.com/numpy/numpy/pull/13565>`__: BUG: longdouble(int) does not work
* `#13587 <https://github.com/numpy/numpy/pull/13587>`__: BUG: distutils/system_info.py fix missing subprocess import (#13523)
* `#13620 <https://github.com/numpy/numpy/pull/13620>`__: BUG,DEP: Fix writeable flag setting for arrays without base
* `#13641 <https://github.com/numpy/numpy/pull/13641>`__: MAINT: Prepare for the 1.16.4 release.
* `#13644 <https://github.com/numpy/numpy/pull/13644>`__: BUG: special case object arrays when printing rel-, abs-error
Contributors
============
A total of 10 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Eric Wieser
* Dennis Zollo +
* Hunter Damron +
* Jingbei Li +
* Kevin Sheppard
* Matti Picus
* Nicola Soranzo +
* Sebastian Berg
* Tyler Reddy
Pull requests merged
====================
A total of 16 pull requests were merged for this release.
* `#13392 <https://github.com/numpy/numpy/pull/13392>`__: BUG: Some PyPy versions lack PyStructSequence_InitType2.
* `#13394 <https://github.com/numpy/numpy/pull/13394>`__: MAINT, DEP: Fix deprecated ``assertEquals()``
* `#13396 <https://github.com/numpy/numpy/pull/13396>`__: BUG: Fix structured_to_unstructured on single-field types (backport)
* `#13549 <https://github.com/numpy/numpy/pull/13549>`__: BLD: Make CI pass again with pytest 4.5
* `#13552 <https://github.com/numpy/numpy/pull/13552>`__: TST: Register markers in conftest.py.
* `#13559 <https://github.com/numpy/numpy/pull/13559>`__: BUG: Removes ValueError for empty kwargs in arraymultiter_new
* `#13560 <https://github.com/numpy/numpy/pull/13560>`__: BUG: Add TypeError to accepted exceptions in crackfortran.
* `#13561 <https://github.com/numpy/numpy/pull/13561>`__: BUG: Handle subarrays in descr_to_dtype
* `#13562 <https://github.com/numpy/numpy/pull/13562>`__: BUG: Protect generators from log(0.0)
* `#13563 <https://github.com/numpy/numpy/pull/13563>`__: BUG: Always return views from structured_to_unstructured when...
* `#13564 <https://github.com/numpy/numpy/pull/13564>`__: BUG: Catch stderr when checking compiler version
* `#13565 <https://github.com/numpy/numpy/pull/13565>`__: BUG: longdouble(int) does not work
* `#13587 <https://github.com/numpy/numpy/pull/13587>`__: BUG: distutils/system_info.py fix missing subprocess import (#13523)
* `#13620 <https://github.com/numpy/numpy/pull/13620>`__: BUG,DEP: Fix writeable flag setting for arrays without base
* `#13641 <https://github.com/numpy/numpy/pull/13641>`__: MAINT: Prepare for the 1.16.4 release.
* `#13644 <https://github.com/numpy/numpy/pull/13644>`__: BUG: special case object arrays when printing rel-, abs-error

View File

@ -1,54 +1,54 @@
Contributors
============
A total of 18 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Alexander Shadchin
* Allan Haldane
* Bruce Merry +
* Charles Harris
* Colin Snyder +
* Dan Allan +
* Emile +
* Eric Wieser
* Grey Baker +
* Maksim Shabunin +
* Marten van Kerkwijk
* Matti Picus
* Peter Andreas Entschev +
* Ralf Gommers
* Richard Harris +
* Sebastian Berg
* Sergei Lebedev +
* Stephan Hoyer
Pull requests merged
====================
A total of 23 pull requests were merged for this release.
* `#13742 <https://github.com/numpy/numpy/pull/13742>`__: ENH: Add project URLs to setup.py
* `#13823 <https://github.com/numpy/numpy/pull/13823>`__: TEST, ENH: fix tests and ctypes code for PyPy
* `#13845 <https://github.com/numpy/numpy/pull/13845>`__: BUG: use npy_intp instead of int for indexing array
* `#13867 <https://github.com/numpy/numpy/pull/13867>`__: TST: Ignore DeprecationWarning during nose imports
* `#13905 <https://github.com/numpy/numpy/pull/13905>`__: BUG: Fix use-after-free in boolean indexing
* `#13933 <https://github.com/numpy/numpy/pull/13933>`__: MAINT/BUG/DOC: Fix errors in _add_newdocs
* `#13984 <https://github.com/numpy/numpy/pull/13984>`__: BUG: fix byte order reversal for datetime64[ns]
* `#13994 <https://github.com/numpy/numpy/pull/13994>`__: MAINT,BUG: Use nbytes to also catch empty descr during allocation
* `#14042 <https://github.com/numpy/numpy/pull/14042>`__: BUG: np.array cleared errors occurred in PyMemoryView_FromObject
* `#14043 <https://github.com/numpy/numpy/pull/14043>`__: BUG: Fixes for Undefined Behavior Sanitizer (UBSan) errors.
* `#14044 <https://github.com/numpy/numpy/pull/14044>`__: BUG: ensure that casting to/from structured is properly checked.
* `#14045 <https://github.com/numpy/numpy/pull/14045>`__: MAINT: fix histogram*d dispatchers
* `#14046 <https://github.com/numpy/numpy/pull/14046>`__: BUG: further fixup to histogram2d dispatcher.
* `#14052 <https://github.com/numpy/numpy/pull/14052>`__: BUG: Replace contextlib.suppress for Python 2.7
* `#14056 <https://github.com/numpy/numpy/pull/14056>`__: BUG: fix compilation of 3rd party modules with Py_LIMITED_API...
* `#14057 <https://github.com/numpy/numpy/pull/14057>`__: BUG: Fix memory leak in dtype from dict constructor
* `#14058 <https://github.com/numpy/numpy/pull/14058>`__: DOC: Document array_function at a higher level.
* `#14084 <https://github.com/numpy/numpy/pull/14084>`__: BUG, DOC: add new recfunctions to `__all__`
* `#14162 <https://github.com/numpy/numpy/pull/14162>`__: BUG: Remove stray print that causes a SystemError on python 3.7
* `#14297 <https://github.com/numpy/numpy/pull/14297>`__: TST: Pin pytest version to 5.0.1.
* `#14322 <https://github.com/numpy/numpy/pull/14322>`__: ENH: Enable huge pages in all Linux builds
* `#14346 <https://github.com/numpy/numpy/pull/14346>`__: BUG: fix behavior of structured_to_unstructured on non-trivial...
* `#14382 <https://github.com/numpy/numpy/pull/14382>`__: REL: Prepare for the NumPy 1.16.5 release.
Contributors
============
A total of 18 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Alexander Shadchin
* Allan Haldane
* Bruce Merry +
* Charles Harris
* Colin Snyder +
* Dan Allan +
* Emile +
* Eric Wieser
* Grey Baker +
* Maksim Shabunin +
* Marten van Kerkwijk
* Matti Picus
* Peter Andreas Entschev +
* Ralf Gommers
* Richard Harris +
* Sebastian Berg
* Sergei Lebedev +
* Stephan Hoyer
Pull requests merged
====================
A total of 23 pull requests were merged for this release.
* `#13742 <https://github.com/numpy/numpy/pull/13742>`__: ENH: Add project URLs to setup.py
* `#13823 <https://github.com/numpy/numpy/pull/13823>`__: TEST, ENH: fix tests and ctypes code for PyPy
* `#13845 <https://github.com/numpy/numpy/pull/13845>`__: BUG: use npy_intp instead of int for indexing array
* `#13867 <https://github.com/numpy/numpy/pull/13867>`__: TST: Ignore DeprecationWarning during nose imports
* `#13905 <https://github.com/numpy/numpy/pull/13905>`__: BUG: Fix use-after-free in boolean indexing
* `#13933 <https://github.com/numpy/numpy/pull/13933>`__: MAINT/BUG/DOC: Fix errors in _add_newdocs
* `#13984 <https://github.com/numpy/numpy/pull/13984>`__: BUG: fix byte order reversal for datetime64[ns]
* `#13994 <https://github.com/numpy/numpy/pull/13994>`__: MAINT,BUG: Use nbytes to also catch empty descr during allocation
* `#14042 <https://github.com/numpy/numpy/pull/14042>`__: BUG: np.array cleared errors occurred in PyMemoryView_FromObject
* `#14043 <https://github.com/numpy/numpy/pull/14043>`__: BUG: Fixes for Undefined Behavior Sanitizer (UBSan) errors.
* `#14044 <https://github.com/numpy/numpy/pull/14044>`__: BUG: ensure that casting to/from structured is properly checked.
* `#14045 <https://github.com/numpy/numpy/pull/14045>`__: MAINT: fix histogram*d dispatchers
* `#14046 <https://github.com/numpy/numpy/pull/14046>`__: BUG: further fixup to histogram2d dispatcher.
* `#14052 <https://github.com/numpy/numpy/pull/14052>`__: BUG: Replace contextlib.suppress for Python 2.7
* `#14056 <https://github.com/numpy/numpy/pull/14056>`__: BUG: fix compilation of 3rd party modules with Py_LIMITED_API...
* `#14057 <https://github.com/numpy/numpy/pull/14057>`__: BUG: Fix memory leak in dtype from dict constructor
* `#14058 <https://github.com/numpy/numpy/pull/14058>`__: DOC: Document array_function at a higher level.
* `#14084 <https://github.com/numpy/numpy/pull/14084>`__: BUG, DOC: add new recfunctions to `__all__`
* `#14162 <https://github.com/numpy/numpy/pull/14162>`__: BUG: Remove stray print that causes a SystemError on python 3.7
* `#14297 <https://github.com/numpy/numpy/pull/14297>`__: TST: Pin pytest version to 5.0.1.
* `#14322 <https://github.com/numpy/numpy/pull/14322>`__: ENH: Enable huge pages in all Linux builds
* `#14346 <https://github.com/numpy/numpy/pull/14346>`__: BUG: fix behavior of structured_to_unstructured on non-trivial...
* `#14382 <https://github.com/numpy/numpy/pull/14382>`__: REL: Prepare for the NumPy 1.16.5 release.

View File

@ -1,36 +1,36 @@
Contributors
============
A total of 10 people contributed to this release.
* CakeWithSteak
* Charles Harris
* Chris Burr
* Eric Wieser
* Fernando Saravia
* Lars Grueter
* Matti Picus
* Maxwell Aladago
* Qiming Sun
* Warren Weckesser
Pull requests merged
====================
A total of 14 pull requests were merged for this release.
* `#14211 <https://github.com/numpy/numpy/pull/14211>`__: BUG: Fix uint-overflow if padding with linear_ramp and negative...
* `#14275 <https://github.com/numpy/numpy/pull/14275>`__: BUG: fixing to allow unpickling of PY3 pickles from PY2
* `#14340 <https://github.com/numpy/numpy/pull/14340>`__: BUG: Fix misuse of .names and .fields in various places (backport...
* `#14423 <https://github.com/numpy/numpy/pull/14423>`__: BUG: test, fix regression in converting to ctypes.
* `#14434 <https://github.com/numpy/numpy/pull/14434>`__: BUG: Fixed maximum relative error reporting in assert_allclose
* `#14509 <https://github.com/numpy/numpy/pull/14509>`__: BUG: Fix regression in boolean matmul.
* `#14686 <https://github.com/numpy/numpy/pull/14686>`__: BUG: properly define PyArray_DescrCheck
* `#14853 <https://github.com/numpy/numpy/pull/14853>`__: BLD: add 'apt update' to shippable
* `#14854 <https://github.com/numpy/numpy/pull/14854>`__: BUG: Fix _ctypes class circular reference. (#13808)
* `#14856 <https://github.com/numpy/numpy/pull/14856>`__: BUG: Fix `np.einsum` errors on Power9 Linux and z/Linux
* `#14863 <https://github.com/numpy/numpy/pull/14863>`__: BLD: Prevent -flto from optimising long double representation...
* `#14864 <https://github.com/numpy/numpy/pull/14864>`__: BUG: lib: Fix histogram problem with signed integer arrays.
* `#15172 <https://github.com/numpy/numpy/pull/15172>`__: ENH: Backport improvements to testing functions.
* `#15191 <https://github.com/numpy/numpy/pull/15191>`__: REL: Prepare for 1.16.6 release.
Contributors
============
A total of 10 people contributed to this release.
* CakeWithSteak
* Charles Harris
* Chris Burr
* Eric Wieser
* Fernando Saravia
* Lars Grueter
* Matti Picus
* Maxwell Aladago
* Qiming Sun
* Warren Weckesser
Pull requests merged
====================
A total of 14 pull requests were merged for this release.
* `#14211 <https://github.com/numpy/numpy/pull/14211>`__: BUG: Fix uint-overflow if padding with linear_ramp and negative...
* `#14275 <https://github.com/numpy/numpy/pull/14275>`__: BUG: fixing to allow unpickling of PY3 pickles from PY2
* `#14340 <https://github.com/numpy/numpy/pull/14340>`__: BUG: Fix misuse of .names and .fields in various places (backport...
* `#14423 <https://github.com/numpy/numpy/pull/14423>`__: BUG: test, fix regression in converting to ctypes.
* `#14434 <https://github.com/numpy/numpy/pull/14434>`__: BUG: Fixed maximum relative error reporting in assert_allclose
* `#14509 <https://github.com/numpy/numpy/pull/14509>`__: BUG: Fix regression in boolean matmul.
* `#14686 <https://github.com/numpy/numpy/pull/14686>`__: BUG: properly define PyArray_DescrCheck
* `#14853 <https://github.com/numpy/numpy/pull/14853>`__: BLD: add 'apt update' to shippable
* `#14854 <https://github.com/numpy/numpy/pull/14854>`__: BUG: Fix _ctypes class circular reference. (#13808)
* `#14856 <https://github.com/numpy/numpy/pull/14856>`__: BUG: Fix `np.einsum` errors on Power9 Linux and z/Linux
* `#14863 <https://github.com/numpy/numpy/pull/14863>`__: BLD: Prevent -flto from optimising long double representation...
* `#14864 <https://github.com/numpy/numpy/pull/14864>`__: BUG: lib: Fix histogram problem with signed integer arrays.
* `#15172 <https://github.com/numpy/numpy/pull/15172>`__: ENH: Backport improvements to testing functions.
* `#15191 <https://github.com/numpy/numpy/pull/15191>`__: REL: Prepare for 1.16.6 release.

File diff suppressed because it is too large Load Diff

View File

@ -1,55 +1,55 @@
Contributors
============
A total of 17 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Alexander Jung +
* Allan Haldane
* Charles Harris
* Eric Wieser
* Giuseppe Cuccu +
* Hiroyuki V. Yamazaki
* Jérémie du Boisberranger
* Kmol Yuan +
* Matti Picus
* Max Bolingbroke +
* Maxwell Aladago +
* Oleksandr Pavlyk
* Peter Andreas Entschev
* Sergei Lebedev
* Seth Troisi +
* Vladimir Pershin +
* Warren Weckesser
Pull requests merged
====================
A total of 24 pull requests were merged for this release.
* `#14156 <https://github.com/numpy/numpy/pull/14156>`__: TST: Allow fuss in testing strided/non-strided exp/log loops
* `#14157 <https://github.com/numpy/numpy/pull/14157>`__: BUG: avx2_scalef_ps must be static
* `#14158 <https://github.com/numpy/numpy/pull/14158>`__: BUG: Remove stray print that causes a SystemError on python 3.7.
* `#14159 <https://github.com/numpy/numpy/pull/14159>`__: BUG: Fix DeprecationWarning in python 3.8.
* `#14160 <https://github.com/numpy/numpy/pull/14160>`__: BLD: Add missing gcd/lcm definitions to npy_math.h
* `#14161 <https://github.com/numpy/numpy/pull/14161>`__: DOC, BUILD: cleanups and fix (again) 'build dist'
* `#14166 <https://github.com/numpy/numpy/pull/14166>`__: TST: Add 3.8-dev to travisCI testing.
* `#14194 <https://github.com/numpy/numpy/pull/14194>`__: BUG: Remove the broken clip wrapper (Backport)
* `#14198 <https://github.com/numpy/numpy/pull/14198>`__: DOC: Fix hermitian argument docs in svd.
* `#14199 <https://github.com/numpy/numpy/pull/14199>`__: MAINT: Workaround for Intel compiler bug leading to failing test
* `#14200 <https://github.com/numpy/numpy/pull/14200>`__: TST: Clean up of test_pocketfft.py
* `#14201 <https://github.com/numpy/numpy/pull/14201>`__: BUG: Make advanced indexing result on read-only subclass writeable...
* `#14236 <https://github.com/numpy/numpy/pull/14236>`__: BUG: Fixed default BitGenerator name
* `#14237 <https://github.com/numpy/numpy/pull/14237>`__: ENH: add c-imported modules for freeze analysis in np.random
* `#14296 <https://github.com/numpy/numpy/pull/14296>`__: TST: Pin pytest version to 5.0.1
* `#14301 <https://github.com/numpy/numpy/pull/14301>`__: BUG: Fix leak in the f2py-generated module init and `PyMem_Del`...
* `#14302 <https://github.com/numpy/numpy/pull/14302>`__: BUG: Fix formatting error in exception message
* `#14307 <https://github.com/numpy/numpy/pull/14307>`__: MAINT: random: Match type of SeedSequence.pool_size to DEFAULT_POOL_SIZE.
* `#14308 <https://github.com/numpy/numpy/pull/14308>`__: BUG: Fix numpy.random bug in platform detection
* `#14309 <https://github.com/numpy/numpy/pull/14309>`__: ENH: Enable huge pages in all Linux builds
* `#14330 <https://github.com/numpy/numpy/pull/14330>`__: BUG: Fix segfault in `random.permutation(x)` when x is a string.
* `#14338 <https://github.com/numpy/numpy/pull/14338>`__: BUG: don't fail when lexsorting some empty arrays (#14228)
* `#14339 <https://github.com/numpy/numpy/pull/14339>`__: BUG: Fix misuse of .names and .fields in various places (backport...
* `#14345 <https://github.com/numpy/numpy/pull/14345>`__: BUG: fix behavior of structured_to_unstructured on non-trivial...
* `#14350 <https://github.com/numpy/numpy/pull/14350>`__: REL: Prepare 1.17.1 release
Contributors
============
A total of 17 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Alexander Jung +
* Allan Haldane
* Charles Harris
* Eric Wieser
* Giuseppe Cuccu +
* Hiroyuki V. Yamazaki
* Jérémie du Boisberranger
* Kmol Yuan +
* Matti Picus
* Max Bolingbroke +
* Maxwell Aladago +
* Oleksandr Pavlyk
* Peter Andreas Entschev
* Sergei Lebedev
* Seth Troisi +
* Vladimir Pershin +
* Warren Weckesser
Pull requests merged
====================
A total of 24 pull requests were merged for this release.
* `#14156 <https://github.com/numpy/numpy/pull/14156>`__: TST: Allow fuss in testing strided/non-strided exp/log loops
* `#14157 <https://github.com/numpy/numpy/pull/14157>`__: BUG: avx2_scalef_ps must be static
* `#14158 <https://github.com/numpy/numpy/pull/14158>`__: BUG: Remove stray print that causes a SystemError on python 3.7.
* `#14159 <https://github.com/numpy/numpy/pull/14159>`__: BUG: Fix DeprecationWarning in python 3.8.
* `#14160 <https://github.com/numpy/numpy/pull/14160>`__: BLD: Add missing gcd/lcm definitions to npy_math.h
* `#14161 <https://github.com/numpy/numpy/pull/14161>`__: DOC, BUILD: cleanups and fix (again) 'build dist'
* `#14166 <https://github.com/numpy/numpy/pull/14166>`__: TST: Add 3.8-dev to travisCI testing.
* `#14194 <https://github.com/numpy/numpy/pull/14194>`__: BUG: Remove the broken clip wrapper (Backport)
* `#14198 <https://github.com/numpy/numpy/pull/14198>`__: DOC: Fix hermitian argument docs in svd.
* `#14199 <https://github.com/numpy/numpy/pull/14199>`__: MAINT: Workaround for Intel compiler bug leading to failing test
* `#14200 <https://github.com/numpy/numpy/pull/14200>`__: TST: Clean up of test_pocketfft.py
* `#14201 <https://github.com/numpy/numpy/pull/14201>`__: BUG: Make advanced indexing result on read-only subclass writeable...
* `#14236 <https://github.com/numpy/numpy/pull/14236>`__: BUG: Fixed default BitGenerator name
* `#14237 <https://github.com/numpy/numpy/pull/14237>`__: ENH: add c-imported modules for freeze analysis in np.random
* `#14296 <https://github.com/numpy/numpy/pull/14296>`__: TST: Pin pytest version to 5.0.1
* `#14301 <https://github.com/numpy/numpy/pull/14301>`__: BUG: Fix leak in the f2py-generated module init and `PyMem_Del`...
* `#14302 <https://github.com/numpy/numpy/pull/14302>`__: BUG: Fix formatting error in exception message
* `#14307 <https://github.com/numpy/numpy/pull/14307>`__: MAINT: random: Match type of SeedSequence.pool_size to DEFAULT_POOL_SIZE.
* `#14308 <https://github.com/numpy/numpy/pull/14308>`__: BUG: Fix numpy.random bug in platform detection
* `#14309 <https://github.com/numpy/numpy/pull/14309>`__: ENH: Enable huge pages in all Linux builds
* `#14330 <https://github.com/numpy/numpy/pull/14330>`__: BUG: Fix segfault in `random.permutation(x)` when x is a string.
* `#14338 <https://github.com/numpy/numpy/pull/14338>`__: BUG: don't fail when lexsorting some empty arrays (#14228)
* `#14339 <https://github.com/numpy/numpy/pull/14339>`__: BUG: Fix misuse of .names and .fields in various places (backport...
* `#14345 <https://github.com/numpy/numpy/pull/14345>`__: BUG: fix behavior of structured_to_unstructured on non-trivial...
* `#14350 <https://github.com/numpy/numpy/pull/14350>`__: REL: Prepare 1.17.1 release

View File

@ -1,28 +1,28 @@
Contributors
============
A total of 7 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* CakeWithSteak +
* Charles Harris
* Dan Allan
* Hameer Abbasi
* Lars Grueter
* Matti Picus
* Sebastian Berg
Pull requests merged
====================
A total of 8 pull requests were merged for this release.
* `#14418 <https://github.com/numpy/numpy/pull/14418>`__: BUG: Fix aradixsort indirect indexing.
* `#14420 <https://github.com/numpy/numpy/pull/14420>`__: DOC: Fix a minor typo in dispatch documentation.
* `#14421 <https://github.com/numpy/numpy/pull/14421>`__: BUG: test, fix regression in converting to ctypes
* `#14430 <https://github.com/numpy/numpy/pull/14430>`__: BUG: Do not show Override module in private error classes.
* `#14432 <https://github.com/numpy/numpy/pull/14432>`__: BUG: Fixed maximum relative error reporting in assert_allclose.
* `#14433 <https://github.com/numpy/numpy/pull/14433>`__: BUG: Fix uint-overflow if padding with linear_ramp and negative...
* `#14436 <https://github.com/numpy/numpy/pull/14436>`__: BUG: Update 1.17.x with 1.18.0-dev pocketfft.py.
* `#14446 <https://github.com/numpy/numpy/pull/14446>`__: REL: Prepare for NumPy 1.17.2 release.
Contributors
============
A total of 7 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* CakeWithSteak +
* Charles Harris
* Dan Allan
* Hameer Abbasi
* Lars Grueter
* Matti Picus
* Sebastian Berg
Pull requests merged
====================
A total of 8 pull requests were merged for this release.
* `#14418 <https://github.com/numpy/numpy/pull/14418>`__: BUG: Fix aradixsort indirect indexing.
* `#14420 <https://github.com/numpy/numpy/pull/14420>`__: DOC: Fix a minor typo in dispatch documentation.
* `#14421 <https://github.com/numpy/numpy/pull/14421>`__: BUG: test, fix regression in converting to ctypes
* `#14430 <https://github.com/numpy/numpy/pull/14430>`__: BUG: Do not show Override module in private error classes.
* `#14432 <https://github.com/numpy/numpy/pull/14432>`__: BUG: Fixed maximum relative error reporting in assert_allclose.
* `#14433 <https://github.com/numpy/numpy/pull/14433>`__: BUG: Fix uint-overflow if padding with linear_ramp and negative...
* `#14436 <https://github.com/numpy/numpy/pull/14436>`__: BUG: Update 1.17.x with 1.18.0-dev pocketfft.py.
* `#14446 <https://github.com/numpy/numpy/pull/14446>`__: REL: Prepare for NumPy 1.17.2 release.

View File

@ -1,32 +1,32 @@
Contributors
============
A total of 7 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Charles Harris
* Kevin Sheppard
* Matti Picus
* Ralf Gommers
* Sebastian Berg
* Warren Weckesser
Pull requests merged
====================
A total of 12 pull requests were merged for this release.
* `#14456 <https://github.com/numpy/numpy/pull/14456>`__: MAINT: clean up pocketfft modules inside numpy.fft namespace.
* `#14463 <https://github.com/numpy/numpy/pull/14463>`__: BUG: random.hypergeometic assumes npy_long is npy_int64, hung...
* `#14502 <https://github.com/numpy/numpy/pull/14502>`__: BUG: random: Revert gh-14458 and refix gh-14557.
* `#14504 <https://github.com/numpy/numpy/pull/14504>`__: BUG: add a specialized loop for boolean matmul.
* `#14506 <https://github.com/numpy/numpy/pull/14506>`__: MAINT: Update pytest version for Python 3.8
* `#14512 <https://github.com/numpy/numpy/pull/14512>`__: DOC: random: fix doc linking, was referencing private submodules.
* `#14513 <https://github.com/numpy/numpy/pull/14513>`__: BUG,MAINT: Some fixes and minor cleanup based on clang analysis
* `#14515 <https://github.com/numpy/numpy/pull/14515>`__: BUG: Fix randint when range is 2**32
* `#14519 <https://github.com/numpy/numpy/pull/14519>`__: MAINT: remove the entropy c-extension module
* `#14563 <https://github.com/numpy/numpy/pull/14563>`__: DOC: remove note about Pocketfft license file (non-existing here).
* `#14578 <https://github.com/numpy/numpy/pull/14578>`__: BUG: random: Create a legacy implementation of random.binomial.
* `#14687 <https://github.com/numpy/numpy/pull/14687>`__: BUG: properly define PyArray_DescrCheck
Contributors
============
A total of 7 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Allan Haldane
* Charles Harris
* Kevin Sheppard
* Matti Picus
* Ralf Gommers
* Sebastian Berg
* Warren Weckesser
Pull requests merged
====================
A total of 12 pull requests were merged for this release.
* `#14456 <https://github.com/numpy/numpy/pull/14456>`__: MAINT: clean up pocketfft modules inside numpy.fft namespace.
* `#14463 <https://github.com/numpy/numpy/pull/14463>`__: BUG: random.hypergeometic assumes npy_long is npy_int64, hung...
* `#14502 <https://github.com/numpy/numpy/pull/14502>`__: BUG: random: Revert gh-14458 and refix gh-14557.
* `#14504 <https://github.com/numpy/numpy/pull/14504>`__: BUG: add a specialized loop for boolean matmul.
* `#14506 <https://github.com/numpy/numpy/pull/14506>`__: MAINT: Update pytest version for Python 3.8
* `#14512 <https://github.com/numpy/numpy/pull/14512>`__: DOC: random: fix doc linking, was referencing private submodules.
* `#14513 <https://github.com/numpy/numpy/pull/14513>`__: BUG,MAINT: Some fixes and minor cleanup based on clang analysis
* `#14515 <https://github.com/numpy/numpy/pull/14515>`__: BUG: Fix randint when range is 2**32
* `#14519 <https://github.com/numpy/numpy/pull/14519>`__: MAINT: remove the entropy c-extension module
* `#14563 <https://github.com/numpy/numpy/pull/14563>`__: DOC: remove note about Pocketfft license file (non-existing here).
* `#14578 <https://github.com/numpy/numpy/pull/14578>`__: BUG: random: Create a legacy implementation of random.binomial.
* `#14687 <https://github.com/numpy/numpy/pull/14687>`__: BUG: properly define PyArray_DescrCheck

View File

@ -1,26 +1,26 @@
Contributors
============
A total of 5 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Chris Burr +
* Matti Picus
* Qiming Sun +
* Warren Weckesser
Pull requests merged
====================
A total of 8 pull requests were merged for this release.
* `#14758 <https://github.com/numpy/numpy/pull/14758>`__: BLD: declare support for python 3.8
* `#14781 <https://github.com/numpy/numpy/pull/14781>`__: BUG: random: biased samples from integers() with 8 or 16 bit...
* `#14851 <https://github.com/numpy/numpy/pull/14851>`__: BUG: Fix _ctypes class circular reference. (#13808)
* `#14852 <https://github.com/numpy/numpy/pull/14852>`__: BLD: add 'apt update' to shippable
* `#14855 <https://github.com/numpy/numpy/pull/14855>`__: BUG: Fix `np.einsum` errors on Power9 Linux and z/Linux
* `#14857 <https://github.com/numpy/numpy/pull/14857>`__: BUG: lib: Fix histogram problem with signed integer arrays.
* `#14858 <https://github.com/numpy/numpy/pull/14858>`__: BLD: Prevent -flto from optimising long double representation...
* `#14866 <https://github.com/numpy/numpy/pull/14866>`__: MAINT: move buffer.h -> npy_buffer.h to avoid conflicts
Contributors
============
A total of 5 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Chris Burr +
* Matti Picus
* Qiming Sun +
* Warren Weckesser
Pull requests merged
====================
A total of 8 pull requests were merged for this release.
* `#14758 <https://github.com/numpy/numpy/pull/14758>`__: BLD: declare support for python 3.8
* `#14781 <https://github.com/numpy/numpy/pull/14781>`__: BUG: random: biased samples from integers() with 8 or 16 bit...
* `#14851 <https://github.com/numpy/numpy/pull/14851>`__: BUG: Fix _ctypes class circular reference. (#13808)
* `#14852 <https://github.com/numpy/numpy/pull/14852>`__: BLD: add 'apt update' to shippable
* `#14855 <https://github.com/numpy/numpy/pull/14855>`__: BUG: Fix `np.einsum` errors on Power9 Linux and z/Linux
* `#14857 <https://github.com/numpy/numpy/pull/14857>`__: BUG: lib: Fix histogram problem with signed integer arrays.
* `#14858 <https://github.com/numpy/numpy/pull/14858>`__: BLD: Prevent -flto from optimising long double representation...
* `#14866 <https://github.com/numpy/numpy/pull/14866>`__: MAINT: move buffer.h -> npy_buffer.h to avoid conflicts

View File

@ -1,26 +1,26 @@
Contributors
============
A total of 6 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Eric Wieser
* Ilhan Polat
* Matti Picus
* Michael Hudson-Doyle
* Ralf Gommers
Pull requests merged
====================
A total of 7 pull requests were merged for this release.
* `#14593 <https://github.com/numpy/numpy/pull/14593>`__: MAINT: backport Cython API cleanup to 1.17.x, remove docs
* `#14937 <https://github.com/numpy/numpy/pull/14937>`__: BUG: fix integer size confusion in handling array's ndmin argument
* `#14939 <https://github.com/numpy/numpy/pull/14939>`__: BUILD: remove SSE2 flag from numpy.random builds
* `#14993 <https://github.com/numpy/numpy/pull/14993>`__: MAINT: Added Python3.8 branch to dll lib discovery
* `#15038 <https://github.com/numpy/numpy/pull/15038>`__: BUG: Fix refcounting in ufunc object loops
* `#15067 <https://github.com/numpy/numpy/pull/15067>`__: BUG: Exceptions tracebacks are dropped
* `#15175 <https://github.com/numpy/numpy/pull/15175>`__: ENH: Backport improvements to testing functions.
Contributors
============
A total of 6 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
* Charles Harris
* Eric Wieser
* Ilhan Polat
* Matti Picus
* Michael Hudson-Doyle
* Ralf Gommers
Pull requests merged
====================
A total of 7 pull requests were merged for this release.
* `#14593 <https://github.com/numpy/numpy/pull/14593>`__: MAINT: backport Cython API cleanup to 1.17.x, remove docs
* `#14937 <https://github.com/numpy/numpy/pull/14937>`__: BUG: fix integer size confusion in handling array's ndmin argument
* `#14939 <https://github.com/numpy/numpy/pull/14939>`__: BUILD: remove SSE2 flag from numpy.random builds
* `#14993 <https://github.com/numpy/numpy/pull/14993>`__: MAINT: Added Python3.8 branch to dll lib discovery
* `#15038 <https://github.com/numpy/numpy/pull/15038>`__: BUG: Fix refcounting in ufunc object loops
* `#15067 <https://github.com/numpy/numpy/pull/15067>`__: BUG: Exceptions tracebacks are dropped
* `#15175 <https://github.com/numpy/numpy/pull/15175>`__: ENH: Backport improvements to testing functions.

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More