Added NSFW classification
This commit is contained in:
parent
47f38f2da1
commit
3294bc4ea6
|
@ -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" />
|
||||
|
|
|
@ -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>
|
|
@ -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
|
|
@ -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
|
30
Dockerfile
30
Dockerfile
|
@ -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
422
Makefile
|
@ -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
|
91
README.md
91
README.md
|
@ -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 |
|
|
@ -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}}
|
||||
```
|
46
alg/setup.py
46
alg/setup.py
|
@ -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'
|
||||
]
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[run]
|
||||
branch = True
|
||||
include = */numpy/*
|
||||
disable_warnings = include-ignored
|
||||
[run]
|
||||
branch = True
|
||||
include = */numpy/*
|
||||
disable_warnings = include-ignored
|
||||
|
|
|
@ -1 +1 @@
|
|||
--langmaps=c:+.src
|
||||
--langmaps=c:+.src
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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``.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)' -->
|
||||
|
||||
|
|
|
@ -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
|
||||
-->
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 ≥ 1.15 require `pytest`
|
||||
- NumPy versions < 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 ≥ 1.15 require `pytest`
|
||||
- NumPy versions < 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)
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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'
|
||||
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
// }
|
||||
}
|
||||
|
|
|
@ -1 +1 @@
|
|||
from . import common
|
||||
from . import common
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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']
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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...
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
Loading…
Reference in New Issue