Added NSFW classification
This commit is contained in:
parent
47f38f2da1
commit
3294bc4ea6
|
@ -4,7 +4,7 @@
|
||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<sourceFolder url="file://$MODULE_DIR$/services/corenlp/src" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/services/corenlp/src" isTestSource="false" />
|
||||||
</content>
|
</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="sourceFolder" forTests="false" />
|
||||||
<orderEntry type="library" name="head.load" level="application" />
|
<orderEntry type="library" name="head.load" level="application" />
|
||||||
<orderEntry type="library" name="d3" level="application" />
|
<orderEntry type="library" name="d3" level="application" />
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<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>
|
</project>
|
|
@ -1,45 +1,45 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
echo "### Initializing CoffeeHouse-Utils ###"
|
echo "### Initializing CoffeeHouse-Utils ###"
|
||||||
chmod a+x /usr/local/bin/update_server
|
chmod a+x /usr/local/bin/update_server
|
||||||
if [ ! -f /firstrun.pass ]; then
|
if [ ! -f /firstrun.pass ]; then
|
||||||
echo "(!) First run! Installing resources..."
|
echo "(!) First run! Installing resources..."
|
||||||
update_server
|
update_server
|
||||||
echo "(+) Setting boot flag..."
|
echo "(+) Setting boot flag..."
|
||||||
touch /firstrun.pass
|
touch /firstrun.pass
|
||||||
echo "[...] Restarting server in detached mode..."
|
echo "[...] Restarting server in detached mode..."
|
||||||
else
|
else
|
||||||
cd /CoffeeHousePy
|
cd /CoffeeHousePy
|
||||||
echo "### Starting CoffeeHouse-LangDetect ###"
|
echo "### Starting CoffeeHouse-LangDetect ###"
|
||||||
make start_langdetect &
|
make start_langdetect &
|
||||||
echo "### Starting CoffeeHouse-SpamDetect ###"
|
echo "### Starting CoffeeHouse-SpamDetect ###"
|
||||||
make start_spamdetect &
|
make start_spamdetect &
|
||||||
echo "### Starting CoffeeHouse-CoreNLP ###"
|
echo "### Starting CoffeeHouse-CoreNLP ###"
|
||||||
make start_corenlp &
|
make start_corenlp &
|
||||||
|
|
||||||
while sleep 60; do
|
while sleep 60; do
|
||||||
|
|
||||||
# If grep find anything, they exit with 0 status
|
# If grep find anything, they exit with 0 status
|
||||||
# If they are not 0, then something is wrong
|
# If they are not 0, then something is wrong
|
||||||
|
|
||||||
ps aux | grep coffeehouse_languagedetection | grep -q -v grep
|
ps aux | grep coffeehouse_languagedetection | grep -q -v grep
|
||||||
LANGDETECT_STATUS=$?
|
LANGDETECT_STATUS=$?
|
||||||
if [ $LANGDETECT_STATUS -ne 0 ]; then
|
if [ $LANGDETECT_STATUS -ne 0 ]; then
|
||||||
echo "ERROR: coffeehouse_languagedetection has been terminated, terminating container."
|
echo "ERROR: coffeehouse_languagedetection has been terminated, terminating container."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ps aux | grep coffeehouse_spamdetection | grep -q -v grep
|
ps aux | grep coffeehouse_spamdetection | grep -q -v grep
|
||||||
SPAMDETECT_STATUS=$?
|
SPAMDETECT_STATUS=$?
|
||||||
if [ $SPAMDETECT_STATUS -ne 0 ]; then
|
if [ $SPAMDETECT_STATUS -ne 0 ]; then
|
||||||
echo "ERROR: coffeehouse_spamdetection has been terminated, terminating container."
|
echo "ERROR: coffeehouse_spamdetection has been terminated, terminating container."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ps aux | grep edu.stanford.nlp.pipeline.StanfordCoreNLPServer | grep -q -v grep
|
ps aux | grep edu.stanford.nlp.pipeline.StanfordCoreNLPServer | grep -q -v grep
|
||||||
CORENLP_STATUS=$?
|
CORENLP_STATUS=$?
|
||||||
if [ $CORENLP_STATUS -ne 0 ]; then
|
if [ $CORENLP_STATUS -ne 0 ]; then
|
||||||
echo "ERROR: coffeehouse_corenlp has been terminated, terminating container."
|
echo "ERROR: coffeehouse_corenlp has been terminated, terminating container."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
|
@ -1,28 +1,28 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Written by Netkas 3/01/2021
|
# Written by Netkas 3/01/2021
|
||||||
echo "Intellivoid Provisioning"
|
echo "Intellivoid Provisioning"
|
||||||
echo "Running on x86_64 (docker) [PRODUCTION]"
|
echo "Running on x86_64 (docker) [PRODUCTION]"
|
||||||
echo " "
|
echo " "
|
||||||
echo " ## Authentication Required "
|
echo " ## Authentication Required "
|
||||||
read -p 'Enter your 25-50 character PAT: ' GIT_API_KEY
|
read -p 'Enter your 25-50 character PAT: ' GIT_API_KEY
|
||||||
|
|
||||||
|
|
||||||
echo " #### Cloning CoffeeHousePy"
|
echo " #### Cloning CoffeeHousePy"
|
||||||
git clone https://${GIT_API_KEY}@github.com/Intellivoid/CoffeeHousePy.git
|
git clone https://${GIT_API_KEY}@github.com/Intellivoid/CoffeeHousePy.git
|
||||||
cd /CoffeeHousePy
|
cd /CoffeeHousePy
|
||||||
git checkout corenlp
|
git checkout corenlp
|
||||||
|
|
||||||
echo " #### Preparing System for Python"
|
echo " #### Preparing System for Python"
|
||||||
make system_prep_python
|
make system_prep_python
|
||||||
|
|
||||||
echo " #### Preparing System for pip"
|
echo " #### Preparing System for pip"
|
||||||
make system_prep_pip
|
make system_prep_pip
|
||||||
|
|
||||||
echo " #### Preparing System for GCC"
|
echo " #### Preparing System for GCC"
|
||||||
make system_prep_gcc
|
make system_prep_gcc
|
||||||
|
|
||||||
echo " #### Preparing System for Java"
|
echo " #### Preparing System for Java"
|
||||||
make system_prep_java
|
make system_prep_java
|
||||||
|
|
||||||
echo " #### Building and Installing CoffeeHousePy"
|
echo " #### Building and Installing CoffeeHousePy"
|
||||||
make install
|
make install
|
30
Dockerfile
30
Dockerfile
|
@ -1,16 +1,16 @@
|
||||||
FROM ubuntu:18.04
|
FROM ubuntu:18.04
|
||||||
EXPOSE 5606 5601 5603 5604
|
EXPOSE 5606 5601 5603 5604
|
||||||
MAINTAINER Diederik Noordhuis (diederikn@intellivoid.net)
|
MAINTAINER Diederik Noordhuis (diederikn@intellivoid.net)
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
COPY Docker/bootstrap /usr/local/bin/bootstrap
|
COPY Docker/bootstrap /usr/local/bin/bootstrap
|
||||||
COPY Docker/update_server /usr/local/bin/update_server
|
COPY Docker/update_server /usr/local/bin/update_server
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
apt-get update && \
|
apt-get update && \
|
||||||
ln -fs /usr/share/zoneinfo/UTC /etc/localtime && \
|
ln -fs /usr/share/zoneinfo/UTC /etc/localtime && \
|
||||||
apt-get update && \
|
apt-get update && \
|
||||||
apt-get install git make sudo nano vim wget curl unzip -y && \
|
apt-get install git make sudo nano vim wget curl unzip -y && \
|
||||||
apt-get clean
|
apt-get clean
|
||||||
|
|
||||||
CMD ["/bin/bash", "/usr/local/bin/bootstrap"]
|
CMD ["/bin/bash", "/usr/local/bin/bootstrap"]
|
422
Makefile
422
Makefile
|
@ -1,216 +1,208 @@
|
||||||
clean_apt:
|
clean_apt:
|
||||||
rm -rf mods/apt/build mods/apt/dist mods/apt/coffeehousemod_apt.egg-info
|
rm -rf mods/apt/build mods/apt/dist mods/apt/coffeehousemod_apt.egg-info
|
||||||
|
|
||||||
clean_scikit_image:
|
clean_stopwords:
|
||||||
rm -rf deps/scikit-image/build deps/scikit-image/dist deps/scikit-image/scikit-image.egg-info
|
rm -rf mods/stopwords/build mods/stopwords/dist mods/stopwords/coffeehousemod_stopwords.egg-info
|
||||||
|
|
||||||
clean_numpy:
|
clean_tokenizer:
|
||||||
rm -rf deps/numpy/build deps/numpy/dist deps/numpy/numpy.egg-info
|
rm -rf mods/tokenizer/build mods/tokenizer/dist mods/tokenizer/coffeehousemod_tokenizer.egg-info
|
||||||
|
|
||||||
clean_stopwords:
|
clean_dltc:
|
||||||
rm -rf mods/stopwords/build mods/stopwords/dist mods/stopwords/coffeehousemod_stopwords.egg-info
|
rm -rf dltc/build dltc/dist dltc/coffeehouse_dltc.egg-info
|
||||||
|
|
||||||
clean_tokenizer:
|
clean_nlpfr:
|
||||||
rm -rf mods/tokenizer/build mods/tokenizer/dist mods/tokenizer/coffeehousemod_tokenizer.egg-info
|
rm -rf nlpfr/build nlpfr/dist nlpfr/nltk.egg-info
|
||||||
|
|
||||||
clean_dltc:
|
clean_alg:
|
||||||
rm -rf dltc/build dltc/dist dltc/coffeehouse_dltc.egg-info
|
rm -rf alg/build alg/dist alg/coffeehouse_alg.egg-info
|
||||||
|
|
||||||
clean_nlpfr:
|
clean_rf:
|
||||||
rm -rf nlpfr/build nlpfr/dist nlpfr/nltk.egg-info
|
rm -rf resource_fetch/build resource_fetch/dist resource_fetch/resource_fetch.egg-info
|
||||||
|
|
||||||
clean_alg:
|
clean_his:
|
||||||
rm -rf alg/build alg/dist alg/coffeehouse_alg.egg-info
|
rm -rf hyper_internal_service/build hyper_internal_service/dist hyper_internal_service/hyper_internal_service.egg-info
|
||||||
|
|
||||||
clean_rf:
|
clean_langdetect:
|
||||||
rm -rf resource_fetch/build resource_fetch/dist resource_fetch/resource_fetch.egg-info
|
rm -rf services/language_detection/build services/language_detection/dist services/language_detection/coffeehouse_languagedetection.egg-info
|
||||||
|
|
||||||
clean_his:
|
clean_spamdetect:
|
||||||
rm -rf hyper_internal_service/build hyper_internal_service/dist hyper_internal_service/hyper_internal_service.egg-info
|
rm -rf services/spam_detection/build services/spam_detection/dist services/spam_detection/coffeehouse_spamdetection.egg-info
|
||||||
|
|
||||||
clean_langdetect:
|
clean_translation:
|
||||||
rm -rf services/language_detection/build services/language_detection/dist services/language_detection/coffeehouse_languagedetection.egg-info
|
rm -rf services/translation/build services/translation/dist services/translation/coffeehouse_translation.egg-info
|
||||||
|
|
||||||
clean_spamdetect:
|
clean_corenlp:
|
||||||
rm -rf services/spam_detection/build services/spam_detection/dist services/spam_detection/coffeehouse_spamdetection.egg-info
|
cd services/corenlp; make clean
|
||||||
|
|
||||||
clean_translation:
|
clean_nsfw:
|
||||||
rm -rf services/translation/build services/translation/dist services/translation/coffeehouse_translation.egg-info
|
rm -rf services/nsfw_detection/build services/nsfw_detection/dist services/nsfw_detection/coffeehouse_nsfw.egg-info
|
||||||
|
|
||||||
clean_corenlp:
|
clean:
|
||||||
cd services/corenlp; make clean
|
make clean_apt clean_stopwords clean_tokenizer clean_nlpfr
|
||||||
|
make clean_dltc
|
||||||
clean:
|
make clean_his
|
||||||
make clean_scikit_image
|
make clean_alg
|
||||||
make clean_numpy
|
make clean_rf
|
||||||
make clean_apt clean_stopwords clean_tokenizer clean_nlpfr
|
make clean_translation
|
||||||
make clean_dltc
|
make clean_langdetect
|
||||||
make clean_his
|
make clean_spamdetect
|
||||||
make clean_alg
|
make clean_nsfw
|
||||||
make clean_rf
|
make clean_corenlp
|
||||||
make clean_translation
|
|
||||||
make clean_langdetect
|
# ======================================================================================================================
|
||||||
make clean_spamdetect
|
|
||||||
make clean_corenlp
|
build_apt:
|
||||||
|
cd mods/apt; python3 setup.py build; python3 setup.py sdist
|
||||||
# ======================================================================================================================
|
|
||||||
|
build_stopwords:
|
||||||
build_scikit_image:
|
cd mods/stopwords; python3 setup.py build; python3 setup.py sdist
|
||||||
cd deps/scikit-image; python3 setup.py build; python3 setup.py sdist
|
|
||||||
|
build_tokenizer:
|
||||||
build_numpy:
|
cd mods/tokenizer; python3 setup.py build; python3 setup.py sdist
|
||||||
cd deps/numpy; python3 setup.py build; python3 setup.py sdist
|
|
||||||
|
build_mods:
|
||||||
build_apt:
|
make build_apt build_stopwords build_tokenizer
|
||||||
cd mods/apt; python3 setup.py build; python3 setup.py sdist
|
|
||||||
|
build_nlpfr:
|
||||||
build_stopwords:
|
make build_mods
|
||||||
cd mods/stopwords; python3 setup.py build; python3 setup.py sdist
|
cd nlpfr; python3 setup.py build; python3 setup.py sdist
|
||||||
|
|
||||||
build_tokenizer:
|
build_dltc:
|
||||||
cd mods/tokenizer; python3 setup.py build; python3 setup.py sdist
|
cd dltc; python3 setup.py build; python3 setup.py sdist
|
||||||
|
|
||||||
build_mods:
|
build_alg:
|
||||||
make build_apt build_stopwords build_tokenizer
|
cd alg; python3 setup.py build; python3 setup.py sdist
|
||||||
|
|
||||||
build_nlpfr:
|
build_his:
|
||||||
make build_mods
|
cd hyper_internal_service; python3 setup.py build; python3 setup.py sdist
|
||||||
cd nlpfr; python3 setup.py build; python3 setup.py sdist
|
|
||||||
|
build_rf:
|
||||||
build_dltc:
|
cd resource_fetch; python3 setup.py build; python3 setup.py sdist
|
||||||
cd dltc; python3 setup.py build; python3 setup.py sdist
|
|
||||||
|
build_langdetect:
|
||||||
build_alg:
|
cd services/language_detection; python3 setup.py build; python3 setup.py sdist
|
||||||
cd alg; python3 setup.py build; python3 setup.py sdist
|
|
||||||
|
build_spamdetect:
|
||||||
build_his:
|
cd services/spam_detection; python3 setup.py build; python3 setup.py sdist
|
||||||
cd hyper_internal_service; python3 setup.py build; python3 setup.py sdist
|
|
||||||
|
build_translation:
|
||||||
build_rf:
|
cd services/translation; python3 setup.py build; python3 setup.py sdist
|
||||||
cd resource_fetch; python3 setup.py build; python3 setup.py sdist
|
|
||||||
|
build_corenlp:
|
||||||
build_langdetect:
|
cd services/corenlp; make build
|
||||||
cd services/language_detection; python3 setup.py build; python3 setup.py sdist
|
|
||||||
|
build_nsfw:
|
||||||
build_spamdetect:
|
cd services/nsfw_detection; python3 setup.py build; python3 setup.py sdist
|
||||||
cd services/spam_detection; python3 setup.py build; python3 setup.py sdist
|
|
||||||
|
build:
|
||||||
build_translation:
|
make build_nlpfr
|
||||||
cd services/translation; python3 setup.py build; python3 setup.py sdist
|
make build_his
|
||||||
|
make build_dltc
|
||||||
build_corenlp:
|
make build_alg
|
||||||
cd services/corenlp; make build
|
make build_rf
|
||||||
|
make buid_translation
|
||||||
build:
|
make build_langdetect
|
||||||
make build_nlpfr
|
make build_spamdetect
|
||||||
make build_his
|
make build_nsfw
|
||||||
make build_dltc
|
make build_corenlp
|
||||||
make build_alg
|
|
||||||
make build_numpy
|
# ======================================================================================================================
|
||||||
make build_scikit_image
|
|
||||||
make build_rf
|
install_apt:
|
||||||
make buid_translation
|
cd mods/apt; python3 setup.py install
|
||||||
make build_langdetect
|
|
||||||
make build_spamdetect
|
install_stopwords:
|
||||||
make build_corenlp
|
cd mods/stopwords; python3 setup.py install
|
||||||
|
|
||||||
# ======================================================================================================================
|
install_tokenizer:
|
||||||
|
cd mods/tokenizer; python3 setup.py install
|
||||||
install_scikit_image:
|
|
||||||
cd deps/scikit-image; python3 setup.py install
|
install_mods:
|
||||||
|
make install_apt install_stopwords install_tokenizer
|
||||||
install_numpy:
|
|
||||||
cd deps/numpy; python3 setup.py install
|
install_nlpfr:
|
||||||
|
make install_mods
|
||||||
install_apt:
|
cd nlpfr; python3 setup.py install
|
||||||
cd mods/apt; python3 setup.py install
|
|
||||||
|
install_dltc:
|
||||||
install_stopwords:
|
cd dltc; python3 setup.py install
|
||||||
cd mods/stopwords; python3 setup.py install
|
|
||||||
|
install_alg:
|
||||||
install_tokenizer:
|
cd alg; python3 setup.py install
|
||||||
cd mods/tokenizer; python3 setup.py install
|
|
||||||
|
install_his:
|
||||||
install_mods:
|
cd hyper_internal_service; python3 -m pip install -Ur dev_requirements.txt; python3 setup.py install
|
||||||
make install_apt install_stopwords install_tokenizer
|
|
||||||
|
install_rf:
|
||||||
install_nlpfr:
|
cd resource_fetch; python3 setup.py install
|
||||||
make install_mods
|
python3 -m resource_fetch
|
||||||
cd nlpfr; python3 setup.py install
|
|
||||||
|
install_langdetect:
|
||||||
install_dltc:
|
cd services/language_detection; python3 setup.py install
|
||||||
cd dltc; python3 setup.py install
|
|
||||||
|
install_spamdetect:
|
||||||
install_alg:
|
cd services/spam_detection; python3 setup.py install
|
||||||
cd alg; python3 setup.py install
|
|
||||||
|
install_translation:
|
||||||
install_his:
|
cd services/translation; python3 setup.py install
|
||||||
cd hyper_internal_service; python3 -m pip install -Ur dev_requirements.txt; python3 setup.py install
|
|
||||||
|
install_nsfw:
|
||||||
install_rf:
|
cd services/nsfw_detection; python3 setup.py install
|
||||||
cd resource_fetch; python3 setup.py install
|
|
||||||
python3 -m resource_fetch
|
install_full:
|
||||||
|
make install_rf
|
||||||
install_langdetect:
|
make install
|
||||||
cd services/language_detection; python3 setup.py install
|
|
||||||
|
install:
|
||||||
install_spamdetect:
|
make install_nlpfr
|
||||||
cd services/spam_detection; python3 setup.py install
|
make install_his
|
||||||
|
make install_dltc
|
||||||
install_translation:
|
make install_alg
|
||||||
cd services/translation; python3 setup.py install
|
make install_translation
|
||||||
|
make install_langdetect
|
||||||
install:
|
make install_spamdetect
|
||||||
make install_rf
|
make install_nsfw
|
||||||
make install_numpy
|
make build_corenlp
|
||||||
make install_scikit_image
|
|
||||||
make install_nlpfr
|
# ======================================================================================================================
|
||||||
make install_his
|
|
||||||
make install_dltc
|
system_prep_python:
|
||||||
make install_alg
|
apt -y install python3 python3-distutils python3-dev python3-setuptools
|
||||||
make install_translation
|
|
||||||
make install_langdetect
|
system_prep_pip:
|
||||||
make install_spamdetect
|
apt -y install wget curl
|
||||||
make build_corenlp
|
wget https://bootstrap.pypa.io/get-pip.py
|
||||||
|
python3 get-pip.py
|
||||||
# ======================================================================================================================
|
rm get-pip.py
|
||||||
|
|
||||||
system_prep_python:
|
system_prep_gcc:
|
||||||
apt -y install python3 python3-distutils python3-dev python3-setuptools
|
apt -y install gcc build-essential
|
||||||
|
python3 -m pip install cython
|
||||||
system_prep_pip:
|
|
||||||
apt -y install wget curl
|
system_prep_java:
|
||||||
wget https://bootstrap.pypa.io/get-pip.py
|
apt -y install openjdk-8-jre openjdk-8-jdk ant
|
||||||
python3 get-pip.py
|
|
||||||
rm get-pip.py
|
# ======================================================================================================================
|
||||||
|
|
||||||
system_prep_gcc:
|
start_langdetect:
|
||||||
apt -y install gcc build-essential
|
python3 -m coffeehouse_languagedetection --start-server
|
||||||
|
|
||||||
system_prep_java:
|
start_spamdetect:
|
||||||
apt -y install openjdk-8-jre openjdk-8-jdk ant
|
python3 -m coffeehouse_spamdetection --start-server
|
||||||
|
|
||||||
# ======================================================================================================================
|
start_translation:
|
||||||
|
python3 -m coffeehouse_translation --start-server
|
||||||
start_langdetect:
|
|
||||||
python3 -m coffeehouse_languagedetection --start-server
|
start_corenlp:
|
||||||
|
cd services/corenlp; make start
|
||||||
start_spamdetect:
|
|
||||||
python3 -m coffeehouse_spamdetection --start-server
|
# ======================================================================================================================
|
||||||
|
|
||||||
start_translation:
|
docker_build:
|
||||||
python3 -m coffeehouse_translation --start-server
|
docker build -t="coffeehouse_utils" -f Dockerfile .
|
||||||
|
|
||||||
start_corenlp:
|
docker_run:
|
||||||
cd services/corenlp; make start
|
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_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
|
docker rm -f coffeehouse_utils
|
91
README.md
91
README.md
|
@ -1,45 +1,46 @@
|
||||||
# CoffeeHousePy
|
# CoffeeHousePy
|
||||||
|
|
||||||
CoffeeHousePy is the full Python implementation for CoffeeHouse, and it's server
|
CoffeeHousePy is the full Python implementation for CoffeeHouse, and it's server
|
||||||
components. The [Makefile](Makefile) contains all the setup procedures
|
components. The [Makefile](Makefile) contains all the setup procedures
|
||||||
used in order to install CoffeeHousePy, and it's components onto the machine.
|
used in order to install CoffeeHousePy, and it's components onto the machine.
|
||||||
|
|
||||||
|
|
||||||
## Prepare the system
|
## Prepare the system
|
||||||
|
|
||||||
The system must have `python3.6` installed, `pip` and `gcc`. To prepare the system run
|
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
|
the following command, this is designed to run on Ubuntu 18.04
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo make system_prep_python system_prep_pip system_prep_gcc
|
sudo make system_prep_python system_prep_pip system_prep_gcc
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Install CoffeeHousePy
|
## Install CoffeeHousePy
|
||||||
|
|
||||||
Depending on the hardware, the installation procedure may take a while. To install
|
Depending on the hardware, the installation procedure may take a while. To install
|
||||||
CoffeeHousePy run the following command
|
CoffeeHousePy run the following command
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo -H make clean build install
|
sudo -H make clean build install
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Services
|
## Services
|
||||||
|
|
||||||
Once CoffeeHousePy is installed, you can start it's services indvidually.
|
Once CoffeeHousePy is installed, you can start it's services indvidually.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
make start_langdetect # Starts the language detection server, runs on port 5606
|
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_spamdetect # Starts the spam detection server, runs on port 5601
|
||||||
make start_translate # Starts the translation server, runs on port 5603
|
make start_translate # Starts the translation server, runs on port 5603
|
||||||
```
|
```
|
||||||
|
|
||||||
### Services Ports
|
### Services Ports
|
||||||
|
|
||||||
| Name | Protocol | Port |
|
| Name | Protocol | Port |
|
||||||
|--------------------------------|----------|------|
|
|--------------------------------|----------|------|
|
||||||
| CoffeeHouse Language Detection | HTTP | 5606 |
|
| CoffeeHouse Spam Detection | HTTP | 5601 |
|
||||||
| CoffeeHouse Spam Detection | HTTP | 5601 |
|
| CoffeeHouse NSFW Classifier | HTTP | 5602 |
|
||||||
| CoffeeHouse Translate | HTTP | 5603 |
|
| CoffeeHouse Translate | HTTP | 5603 |
|
||||||
| CoffeeHouse CoreNLP | HTTP | 5604 |
|
| CoffeeHouse CoreNLP | HTTP | 5604 |
|
||||||
|
| CoffeeHouse Language Detection | HTTP | 5606 |
|
|
@ -1,24 +1,24 @@
|
||||||
# CoffeeHouse ALG
|
# CoffeeHouse ALG
|
||||||
|
|
||||||
CoffeeHouse ALG is a algorithmia API wrapper
|
CoffeeHouse ALG is a algorithmia API wrapper
|
||||||
|
|
||||||
## Image Tagger
|
## Image Tagger
|
||||||
|
|
||||||
Predicts the content and appropriate tags for an image
|
Predicts the content and appropriate tags for an image
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from coffeehouse_alg.image_tagger import ImageTagger
|
from coffeehouse_alg.image_tagger import ImageTagger
|
||||||
from coffeehouse_alg.utilities import Utilities
|
from coffeehouse_alg.utilities import Utilities
|
||||||
|
|
||||||
url = "https://upload.wikimedia.org/wikipedia/commons/9/9f/Gisele_Bundchen_2018_clear_original_%28cropped%29.jpg"
|
url = "https://upload.wikimedia.org/wikipedia/commons/9/9f/Gisele_Bundchen_2018_clear_original_%28cropped%29.jpg"
|
||||||
|
|
||||||
# Process the image
|
# Process the image
|
||||||
image_tagger = ImageTagger()
|
image_tagger = ImageTagger()
|
||||||
image_content = Utilities.process_img_from_url(url)
|
image_content = Utilities.process_img_from_url(url)
|
||||||
|
|
||||||
image_tagger.predict_tags(image_content)
|
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}}
|
# {'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)
|
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}}
|
# {'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
|
from setuptools import setup, find_packages
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='coffeehouse_alg',
|
name='coffeehouse_alg',
|
||||||
version='1.0.0',
|
version='1.0.0',
|
||||||
description='CoffeeHouse algorithmia wrapper',
|
description='CoffeeHouse algorithmia wrapper',
|
||||||
url='https://github.com/Intellivoid/CoffeeHouse-ALG',
|
url='https://github.com/Intellivoid/CoffeeHouse-ALG',
|
||||||
author='Zi Xing Narrakas',
|
author='Zi Xing Narrakas',
|
||||||
author_email='netkas@intellivoid.info',
|
author_email='netkas@intellivoid.info',
|
||||||
classifiers=[
|
classifiers=[
|
||||||
# 3 - Alpha
|
# 3 - Alpha
|
||||||
# 4 - Beta
|
# 4 - Beta
|
||||||
# 5 - Production/Stable
|
# 5 - Production/Stable
|
||||||
'Development Status :: 4 - Beta',
|
'Development Status :: 4 - Beta',
|
||||||
'Topic :: API Wrapper',
|
'Topic :: API Wrapper',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
],
|
],
|
||||||
keywords='multi-label classification nlp neural networks deep learning api wrapper',
|
keywords='multi-label classification nlp neural networks deep learning api wrapper',
|
||||||
packages=find_packages(exclude=['tests']),
|
packages=find_packages(exclude=['tests']),
|
||||||
install_requires=[
|
install_requires=[
|
||||||
'requests'
|
'requests'
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,123 +1,123 @@
|
||||||
# Python CircleCI 2.0 configuration file
|
# Python CircleCI 2.0 configuration file
|
||||||
#
|
#
|
||||||
# Check https://circleci.com/docs/2.0/language-python/ for more details
|
# Check https://circleci.com/docs/2.0/language-python/ for more details
|
||||||
#
|
#
|
||||||
version: 2
|
version: 2
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
docker:
|
docker:
|
||||||
# CircleCI maintains a library of pre-built images
|
# CircleCI maintains a library of pre-built images
|
||||||
# documented at https://circleci.com/docs/2.0/circleci-images/
|
# documented at https://circleci.com/docs/2.0/circleci-images/
|
||||||
- image: circleci/python:3.6.6
|
- image: circleci/python:3.6.6
|
||||||
|
|
||||||
working_directory: ~/repo
|
working_directory: ~/repo
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: install dependencies
|
name: install dependencies
|
||||||
command: |
|
command: |
|
||||||
python3 -m venv venv
|
python3 -m venv venv
|
||||||
ln -s $(which python3) venv/bin/python3.6
|
ln -s $(which python3) venv/bin/python3.6
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pip install cython sphinx==2.3.1 matplotlib ipython
|
pip install cython sphinx==2.3.1 matplotlib ipython
|
||||||
sudo apt-get update
|
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
|
sudo apt-get install -y graphviz texlive-fonts-recommended texlive-latex-recommended texlive-latex-extra texlive-generic-extra latexmk texlive-xetex
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: build numpy
|
name: build numpy
|
||||||
command: |
|
command: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pip install --upgrade pip 'setuptools<49.2.0'
|
pip install --upgrade pip 'setuptools<49.2.0'
|
||||||
pip install cython
|
pip install cython
|
||||||
pip install .
|
pip install .
|
||||||
pip install scipy
|
pip install scipy
|
||||||
pip install pandas
|
pip install pandas
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: create release notes
|
name: create release notes
|
||||||
command: |
|
command: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pip install git+https://github.com/hawkowl/towncrier.git@master
|
pip install git+https://github.com/hawkowl/towncrier.git@master
|
||||||
VERSION=$(python -c "import setup; print(setup.VERSION)")
|
VERSION=$(python -c "import setup; print(setup.VERSION)")
|
||||||
towncrier --version $VERSION --yes
|
towncrier --version $VERSION --yes
|
||||||
./tools/ci/test_all_newsfragments_used.py
|
./tools/ci/test_all_newsfragments_used.py
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: run doctests on documentation
|
name: run doctests on documentation
|
||||||
command: |
|
command: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
(cd doc ; git submodule update --init)
|
(cd doc ; git submodule update --init)
|
||||||
python tools/refguide_check.py --rst
|
python tools/refguide_check.py --rst
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: build devdocs
|
name: build devdocs
|
||||||
command: |
|
command: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
cd doc
|
cd doc
|
||||||
SPHINXOPTS=-q make -e html
|
SPHINXOPTS=-q make -e html
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: build neps
|
name: build neps
|
||||||
command: |
|
command: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
cd doc/neps
|
cd doc/neps
|
||||||
SPHINXOPTS=-q make -e html
|
SPHINXOPTS=-q make -e html
|
||||||
|
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: doc/build/html/
|
path: doc/build/html/
|
||||||
|
|
||||||
|
|
||||||
# - store_artifacts:
|
# - store_artifacts:
|
||||||
# path: doc/neps/_build/html/
|
# path: doc/neps/_build/html/
|
||||||
# destination: neps
|
# destination: neps
|
||||||
|
|
||||||
- add_ssh_keys:
|
- add_ssh_keys:
|
||||||
fingerprints:
|
fingerprints:
|
||||||
- "9f:8c:e5:3f:53:40:0b:ee:c9:c3:0f:fd:0f:3c:cc:55"
|
- "9f:8c:e5:3f:53:40:0b:ee:c9:c3:0f:fd:0f:3c:cc:55"
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: deploy devdocs
|
name: deploy devdocs
|
||||||
command: |
|
command: |
|
||||||
if [ "${CIRCLE_BRANCH}" == "master" ]; then
|
if [ "${CIRCLE_BRANCH}" == "master" ]; then
|
||||||
touch doc/build/html/.nojekyll
|
touch doc/build/html/.nojekyll
|
||||||
|
|
||||||
./tools/ci/push_docs_to_repo.py doc/build/html \
|
./tools/ci/push_docs_to_repo.py doc/build/html \
|
||||||
git@github.com:numpy/devdocs.git \
|
git@github.com:numpy/devdocs.git \
|
||||||
--committer "numpy-circleci-bot" \
|
--committer "numpy-circleci-bot" \
|
||||||
--email "numpy-circleci-bot@nomail" \
|
--email "numpy-circleci-bot@nomail" \
|
||||||
--message "Docs build of $CIRCLE_SHA1" \
|
--message "Docs build of $CIRCLE_SHA1" \
|
||||||
--force
|
--force
|
||||||
else
|
else
|
||||||
echo "Not on the master branch; skipping deployment"
|
echo "Not on the master branch; skipping deployment"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- add_ssh_keys:
|
- add_ssh_keys:
|
||||||
fingerprints:
|
fingerprints:
|
||||||
- "11:fb:19:69:80:3a:6d:37:9c:d1:ac:20:17:cd:c8:17"
|
- "11:fb:19:69:80:3a:6d:37:9c:d1:ac:20:17:cd:c8:17"
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: select SSH key for neps repo
|
name: select SSH key for neps repo
|
||||||
command: |
|
command: |
|
||||||
cat <<\EOF > ~/.ssh/config
|
cat <<\EOF > ~/.ssh/config
|
||||||
Host github.com
|
Host github.com
|
||||||
IdentitiesOnly yes
|
IdentitiesOnly yes
|
||||||
IdentityFile /home/circleci/.ssh/id_rsa_11fb1969803a6d379cd1ac2017cdc817
|
IdentityFile /home/circleci/.ssh/id_rsa_11fb1969803a6d379cd1ac2017cdc817
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: deploy neps
|
name: deploy neps
|
||||||
command: |
|
command: |
|
||||||
if [ "${CIRCLE_BRANCH}" == "master" ]; then
|
if [ "${CIRCLE_BRANCH}" == "master" ]; then
|
||||||
touch doc/neps/_build/html/.nojekyll
|
touch doc/neps/_build/html/.nojekyll
|
||||||
|
|
||||||
./tools/ci/push_docs_to_repo.py doc/neps/_build/html \
|
./tools/ci/push_docs_to_repo.py doc/neps/_build/html \
|
||||||
git@github.com:numpy/neps.git \
|
git@github.com:numpy/neps.git \
|
||||||
--committer "numpy-circleci-bot" \
|
--committer "numpy-circleci-bot" \
|
||||||
--email "numpy-circleci-bot@nomail" \
|
--email "numpy-circleci-bot@nomail" \
|
||||||
--message "Docs build of $CIRCLE_SHA1" \
|
--message "Docs build of $CIRCLE_SHA1" \
|
||||||
--force
|
--force
|
||||||
else
|
else
|
||||||
echo "Not on the master branch; skipping deployment"
|
echo "Not on the master branch; skipping deployment"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
codecov:
|
codecov:
|
||||||
notify:
|
notify:
|
||||||
require_ci_to_pass: no
|
require_ci_to_pass: no
|
||||||
after_n_builds: 1
|
after_n_builds: 1
|
||||||
coverage:
|
coverage:
|
||||||
status:
|
status:
|
||||||
project:
|
project:
|
||||||
default:
|
default:
|
||||||
# Require 1% coverage, i.e., always succeed
|
# Require 1% coverage, i.e., always succeed
|
||||||
target: 1
|
target: 1
|
||||||
patch: false
|
patch: false
|
||||||
changes: false
|
changes: false
|
||||||
comment: off
|
comment: off
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[run]
|
[run]
|
||||||
branch = True
|
branch = True
|
||||||
include = */numpy/*
|
include = */numpy/*
|
||||||
disable_warnings = include-ignored
|
disable_warnings = include-ignored
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
--langmaps=c:+.src
|
--langmaps=c:+.src
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
version: 1
|
version: 1
|
||||||
update_configs:
|
update_configs:
|
||||||
- package_manager: "python"
|
- package_manager: "python"
|
||||||
directory: "/"
|
directory: "/"
|
||||||
update_schedule: "weekly"
|
update_schedule: "weekly"
|
||||||
commit_message:
|
commit_message:
|
||||||
prefix: "MAINT"
|
prefix: "MAINT"
|
||||||
default_labels:
|
default_labels:
|
||||||
- "03 - Maintenance"
|
- "03 - Maintenance"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# Numerical data files
|
# Numerical data files
|
||||||
numpy/lib/tests/data/*.npy binary
|
numpy/lib/tests/data/*.npy binary
|
||||||
|
|
||||||
# Release notes, reduce number of conflicts.
|
# Release notes, reduce number of conflicts.
|
||||||
doc/release/*.rst merge=union
|
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
|
# Contributing to numpy
|
||||||
|
|
||||||
## Reporting issues
|
## Reporting issues
|
||||||
|
|
||||||
When reporting issues please include as much detail as possible about your
|
When reporting issues please include as much detail as possible about your
|
||||||
operating system, numpy version and python version. Whenever possible, please
|
operating system, numpy version and python version. Whenever possible, please
|
||||||
also include a brief, self-contained code example that demonstrates the problem.
|
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
|
If you are reporting a segfault please include a GDB traceback, which you can
|
||||||
generate by following
|
generate by following
|
||||||
[these instructions.](https://github.com/numpy/numpy/blob/master/doc/source/dev/development_environment.rst#debugging)
|
[these instructions.](https://github.com/numpy/numpy/blob/master/doc/source/dev/development_environment.rst#debugging)
|
||||||
|
|
||||||
## Contributing code
|
## Contributing code
|
||||||
|
|
||||||
Thanks for your interest in contributing code to numpy!
|
Thanks for your interest in contributing code to numpy!
|
||||||
|
|
||||||
+ If this is your first time contributing to a project on GitHub, please read
|
+ If this is your first time contributing to a project on GitHub, please read
|
||||||
through our
|
through our
|
||||||
[guide to contributing to numpy](https://numpy.org/devdocs/dev/index.html)
|
[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
|
+ 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)
|
[development workflow](https://numpy.org/devdocs/dev/development_workflow.html)
|
||||||
|
|
||||||
Either way, please be sure to follow our
|
Either way, please be sure to follow our
|
||||||
[convention for commit messages](https://numpy.org/devdocs/dev/development_workflow.html#writing-the-commit-message).
|
[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
|
If you are writing new C code, please follow the style described in
|
||||||
``doc/C_STYLE_GUIDE``.
|
``doc/C_STYLE_GUIDE``.
|
||||||
|
|
||||||
Suggested ways to work on your development version (compile and run
|
Suggested ways to work on your development version (compile and run
|
||||||
the tests without interfering with system packages) are described in
|
the tests without interfering with system packages) are described in
|
||||||
``doc/source/dev/development_environment.rst``.
|
``doc/source/dev/development_environment.rst``.
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
github: [numfocus]
|
github: [numfocus]
|
||||||
tidelift: pypi/numpy
|
tidelift: pypi/numpy
|
||||||
custom: https://www.numpy.org/#support-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 -->
|
<!-- Please describe the issue in detail here, and fill in the fields below -->
|
||||||
|
|
||||||
### Reproducing code example:
|
### Reproducing code example:
|
||||||
|
|
||||||
<!-- A short code example that reproduces the problem/missing feature. It should be
|
<!-- 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' -->
|
self-contained, i.e., possible to run as-is via 'python myproblem.py' -->
|
||||||
|
|
||||||
```python
|
```python
|
||||||
import numpy as np
|
import numpy as np
|
||||||
<< your code here >>
|
<< your code here >>
|
||||||
```
|
```
|
||||||
|
|
||||||
<!-- Remove these sections for a feature request -->
|
<!-- Remove these sections for a feature request -->
|
||||||
|
|
||||||
### Error message:
|
### Error message:
|
||||||
|
|
||||||
<!-- If you are reporting a segfault please include a GDB traceback, which you
|
<!-- If you are reporting a segfault please include a GDB traceback, which you
|
||||||
can generate by following
|
can generate by following
|
||||||
https://github.com/numpy/numpy/blob/master/doc/source/dev/development_environment.rst#debugging -->
|
https://github.com/numpy/numpy/blob/master/doc/source/dev/development_environment.rst#debugging -->
|
||||||
|
|
||||||
<!-- Full error message, if any (starting from line Traceback: ...) -->
|
<!-- Full error message, if any (starting from line Traceback: ...) -->
|
||||||
|
|
||||||
### Numpy/Python version information:
|
### Numpy/Python version information:
|
||||||
|
|
||||||
<!-- Output from 'import sys, numpy; print(numpy.__version__, sys.version)' -->
|
<!-- 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
|
<!-- Please be sure you are following the instructions in the dev guidelines
|
||||||
http://www.numpy.org/devdocs/dev/development_workflow.html
|
http://www.numpy.org/devdocs/dev/development_workflow.html
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<!-- We'd appreciate it if your commit message is properly formatted
|
<!-- We'd appreciate it if your commit message is properly formatted
|
||||||
http://www.numpy.org/devdocs/dev/development_workflow.html#writing-the-commit-message
|
http://www.numpy.org/devdocs/dev/development_workflow.html#writing-the-commit-message
|
||||||
-->
|
-->
|
||||||
|
|
|
@ -1,195 +1,195 @@
|
||||||
# Editor temporary/working/backup files #
|
# Editor temporary/working/backup files #
|
||||||
#########################################
|
#########################################
|
||||||
.#*
|
.#*
|
||||||
[#]*#
|
[#]*#
|
||||||
*~
|
*~
|
||||||
*$
|
*$
|
||||||
*.bak
|
*.bak
|
||||||
*.diff
|
*.diff
|
||||||
.idea/
|
.idea/
|
||||||
*.iml
|
*.iml
|
||||||
*.ipr
|
*.ipr
|
||||||
*.iws
|
*.iws
|
||||||
*.org
|
*.org
|
||||||
.project
|
.project
|
||||||
pmip
|
pmip
|
||||||
*.rej
|
*.rej
|
||||||
.settings/
|
.settings/
|
||||||
.*.sw[nop]
|
.*.sw[nop]
|
||||||
.sw[nop]
|
.sw[nop]
|
||||||
*.tmp
|
*.tmp
|
||||||
*.vim
|
*.vim
|
||||||
.vscode
|
.vscode
|
||||||
tags
|
tags
|
||||||
cscope.out
|
cscope.out
|
||||||
# gnu global
|
# gnu global
|
||||||
GPATH
|
GPATH
|
||||||
GRTAGS
|
GRTAGS
|
||||||
GSYMS
|
GSYMS
|
||||||
GTAGS
|
GTAGS
|
||||||
.cache
|
.cache
|
||||||
|
|
||||||
# Compiled source #
|
# Compiled source #
|
||||||
###################
|
###################
|
||||||
*.a
|
*.a
|
||||||
*.com
|
*.com
|
||||||
*.class
|
*.class
|
||||||
*.dll
|
*.dll
|
||||||
*.exe
|
*.exe
|
||||||
*.o
|
*.o
|
||||||
*.o.d
|
*.o.d
|
||||||
*.py[ocd]
|
*.py[ocd]
|
||||||
*.so
|
*.so
|
||||||
|
|
||||||
# Packages #
|
# Packages #
|
||||||
############
|
############
|
||||||
# it's better to unpack these files and commit the raw source
|
# it's better to unpack these files and commit the raw source
|
||||||
# git has its own built in compression methods
|
# git has its own built in compression methods
|
||||||
*.7z
|
*.7z
|
||||||
*.bz2
|
*.bz2
|
||||||
*.bzip2
|
*.bzip2
|
||||||
*.dmg
|
*.dmg
|
||||||
*.gz
|
*.gz
|
||||||
*.iso
|
*.iso
|
||||||
*.jar
|
*.jar
|
||||||
*.rar
|
*.rar
|
||||||
*.tar
|
*.tar
|
||||||
*.tbz2
|
*.tbz2
|
||||||
*.tgz
|
*.tgz
|
||||||
*.zip
|
*.zip
|
||||||
|
|
||||||
# Python files #
|
# Python files #
|
||||||
################
|
################
|
||||||
# setup.py working directory
|
# setup.py working directory
|
||||||
build
|
build
|
||||||
# sphinx build directory
|
# sphinx build directory
|
||||||
_build
|
_build
|
||||||
# setup.py dist directory
|
# setup.py dist directory
|
||||||
dist
|
dist
|
||||||
doc/build
|
doc/build
|
||||||
doc/cdoc/build
|
doc/cdoc/build
|
||||||
# Egg metadata
|
# Egg metadata
|
||||||
*.egg-info
|
*.egg-info
|
||||||
# The shelf plugin uses this dir
|
# The shelf plugin uses this dir
|
||||||
./.shelf
|
./.shelf
|
||||||
MANIFEST
|
MANIFEST
|
||||||
.cache
|
.cache
|
||||||
|
|
||||||
# Paver generated files #
|
# Paver generated files #
|
||||||
#########################
|
#########################
|
||||||
/release
|
/release
|
||||||
|
|
||||||
# Logs and databases #
|
# Logs and databases #
|
||||||
######################
|
######################
|
||||||
*.log
|
*.log
|
||||||
*.sql
|
*.sql
|
||||||
*.sqlite
|
*.sqlite
|
||||||
|
|
||||||
# Patches #
|
# Patches #
|
||||||
###########
|
###########
|
||||||
*.patch
|
*.patch
|
||||||
*.diff
|
*.diff
|
||||||
|
|
||||||
# OS generated files #
|
# OS generated files #
|
||||||
######################
|
######################
|
||||||
.DS_Store*
|
.DS_Store*
|
||||||
.VolumeIcon.icns
|
.VolumeIcon.icns
|
||||||
.fseventsd
|
.fseventsd
|
||||||
Icon?
|
Icon?
|
||||||
.gdb_history
|
.gdb_history
|
||||||
ehthumbs.db
|
ehthumbs.db
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
.directory
|
.directory
|
||||||
|
|
||||||
# pytest generated files #
|
# pytest generated files #
|
||||||
##########################
|
##########################
|
||||||
/.pytest_cache
|
/.pytest_cache
|
||||||
|
|
||||||
# Things specific to this project #
|
# Things specific to this project #
|
||||||
###################################
|
###################################
|
||||||
numpy/core/__svn_version__.py
|
numpy/core/__svn_version__.py
|
||||||
doc/numpy.scipy.org/_build
|
doc/numpy.scipy.org/_build
|
||||||
numpy/__config__.py
|
numpy/__config__.py
|
||||||
numpy/core/include/numpy/__multiarray_api.h
|
numpy/core/include/numpy/__multiarray_api.h
|
||||||
numpy/core/include/numpy/__ufunc_api.h
|
numpy/core/include/numpy/__ufunc_api.h
|
||||||
numpy/core/include/numpy/_numpyconfig.h
|
numpy/core/include/numpy/_numpyconfig.h
|
||||||
numpy/version.py
|
numpy/version.py
|
||||||
site.cfg
|
site.cfg
|
||||||
setup.cfg
|
setup.cfg
|
||||||
.tox
|
.tox
|
||||||
numpy/core/include/numpy/__multiarray_api.c
|
numpy/core/include/numpy/__multiarray_api.c
|
||||||
numpy/core/include/numpy/__ufunc_api.c
|
numpy/core/include/numpy/__ufunc_api.c
|
||||||
numpy/core/include/numpy/__umath_generated.c
|
numpy/core/include/numpy/__umath_generated.c
|
||||||
numpy/core/include/numpy/config.h
|
numpy/core/include/numpy/config.h
|
||||||
numpy/core/include/numpy/multiarray_api.txt
|
numpy/core/include/numpy/multiarray_api.txt
|
||||||
numpy/core/include/numpy/ufunc_api.txt
|
numpy/core/include/numpy/ufunc_api.txt
|
||||||
numpy/core/lib/
|
numpy/core/lib/
|
||||||
numpy/core/src/common/npy_binsearch.h
|
numpy/core/src/common/npy_binsearch.h
|
||||||
numpy/core/src/common/npy_cpu_features.c
|
numpy/core/src/common/npy_cpu_features.c
|
||||||
numpy/core/src/common/npy_partition.h
|
numpy/core/src/common/npy_partition.h
|
||||||
numpy/core/src/common/npy_sort.h
|
numpy/core/src/common/npy_sort.h
|
||||||
numpy/core/src/common/templ_common.h
|
numpy/core/src/common/templ_common.h
|
||||||
numpy/core/src/multiarray/_multiarray_tests.c
|
numpy/core/src/multiarray/_multiarray_tests.c
|
||||||
numpy/core/src/multiarray/arraytypes.c
|
numpy/core/src/multiarray/arraytypes.c
|
||||||
numpy/core/src/multiarray/einsum.c
|
numpy/core/src/multiarray/einsum.c
|
||||||
numpy/core/src/multiarray/lowlevel_strided_loops.c
|
numpy/core/src/multiarray/lowlevel_strided_loops.c
|
||||||
numpy/core/src/multiarray/multiarray_tests.c
|
numpy/core/src/multiarray/multiarray_tests.c
|
||||||
numpy/core/src/multiarray/nditer_templ.c
|
numpy/core/src/multiarray/nditer_templ.c
|
||||||
numpy/core/src/multiarray/scalartypes.c
|
numpy/core/src/multiarray/scalartypes.c
|
||||||
numpy/core/src/npymath/ieee754.c
|
numpy/core/src/npymath/ieee754.c
|
||||||
numpy/core/src/npymath/npy_math_complex.c
|
numpy/core/src/npymath/npy_math_complex.c
|
||||||
numpy/core/src/npymath/npy_math_internal.h
|
numpy/core/src/npymath/npy_math_internal.h
|
||||||
numpy/core/src/npysort/binsearch.c
|
numpy/core/src/npysort/binsearch.c
|
||||||
numpy/core/src/npysort/heapsort.c
|
numpy/core/src/npysort/heapsort.c
|
||||||
numpy/core/src/npysort/mergesort.c
|
numpy/core/src/npysort/mergesort.c
|
||||||
numpy/core/src/npysort/quicksort.c
|
numpy/core/src/npysort/quicksort.c
|
||||||
numpy/core/src/npysort/radixsort.c
|
numpy/core/src/npysort/radixsort.c
|
||||||
numpy/core/src/npysort/selection.c
|
numpy/core/src/npysort/selection.c
|
||||||
numpy/core/src/npysort/timsort.c
|
numpy/core/src/npysort/timsort.c
|
||||||
numpy/core/src/npysort/sort.c
|
numpy/core/src/npysort/sort.c
|
||||||
numpy/core/src/private/npy_binsearch.h
|
numpy/core/src/private/npy_binsearch.h
|
||||||
numpy/core/src/private/npy_partition.h
|
numpy/core/src/private/npy_partition.h
|
||||||
numpy/core/src/private/templ_common.h
|
numpy/core/src/private/templ_common.h
|
||||||
numpy/core/src/umath/_operand_flag_tests.c
|
numpy/core/src/umath/_operand_flag_tests.c
|
||||||
numpy/core/src/umath/_rational_tests.c
|
numpy/core/src/umath/_rational_tests.c
|
||||||
numpy/core/src/umath/_struct_ufunc_tests.c
|
numpy/core/src/umath/_struct_ufunc_tests.c
|
||||||
numpy/core/src/umath/_umath_tests.c
|
numpy/core/src/umath/_umath_tests.c
|
||||||
numpy/core/src/umath/scalarmath.c
|
numpy/core/src/umath/scalarmath.c
|
||||||
numpy/core/src/umath/funcs.inc
|
numpy/core/src/umath/funcs.inc
|
||||||
numpy/core/src/umath/clip.[ch]
|
numpy/core/src/umath/clip.[ch]
|
||||||
numpy/core/src/umath/loops.[ch]
|
numpy/core/src/umath/loops.[ch]
|
||||||
numpy/core/src/umath/matmul.[ch]
|
numpy/core/src/umath/matmul.[ch]
|
||||||
numpy/core/src/umath/operand_flag_tests.c
|
numpy/core/src/umath/operand_flag_tests.c
|
||||||
numpy/core/src/umath/simd.inc
|
numpy/core/src/umath/simd.inc
|
||||||
numpy/core/src/umath/struct_ufunc_test.c
|
numpy/core/src/umath/struct_ufunc_test.c
|
||||||
numpy/core/src/umath/test_rational.c
|
numpy/core/src/umath/test_rational.c
|
||||||
numpy/core/src/umath/umath_tests.c
|
numpy/core/src/umath/umath_tests.c
|
||||||
numpy/distutils/__config__.py
|
numpy/distutils/__config__.py
|
||||||
numpy/linalg/umath_linalg.c
|
numpy/linalg/umath_linalg.c
|
||||||
doc/source/**/generated/
|
doc/source/**/generated/
|
||||||
benchmarks/results
|
benchmarks/results
|
||||||
benchmarks/html
|
benchmarks/html
|
||||||
benchmarks/env
|
benchmarks/env
|
||||||
benchmarks/numpy
|
benchmarks/numpy
|
||||||
# cythonized files
|
# cythonized files
|
||||||
cythonize.dat
|
cythonize.dat
|
||||||
numpy/random/_mtrand/_mtrand.c
|
numpy/random/_mtrand/_mtrand.c
|
||||||
numpy/random/*.c
|
numpy/random/*.c
|
||||||
numpy/random/legacy/*.c
|
numpy/random/legacy/*.c
|
||||||
numpy/random/_mtrand/randint_helpers.pxi
|
numpy/random/_mtrand/randint_helpers.pxi
|
||||||
numpy/random/bounded_integers.pyx
|
numpy/random/bounded_integers.pyx
|
||||||
numpy/random/bounded_integers.pxd
|
numpy/random/bounded_integers.pxd
|
||||||
tools/swig/test/Array_wrap.cxx
|
tools/swig/test/Array_wrap.cxx
|
||||||
tools/swig/test/Farray_wrap.cxx
|
tools/swig/test/Farray_wrap.cxx
|
||||||
tools/swig/test/Farray.py
|
tools/swig/test/Farray.py
|
||||||
tools/swig/test/Flat_wrap.cxx
|
tools/swig/test/Flat_wrap.cxx
|
||||||
tools/swig/test/Flat.py
|
tools/swig/test/Flat.py
|
||||||
tools/swig/test/Fortran_wrap.cxx
|
tools/swig/test/Fortran_wrap.cxx
|
||||||
tools/swig/test/Fortran.py
|
tools/swig/test/Fortran.py
|
||||||
tools/swig/test/Matrix_wrap.cxx
|
tools/swig/test/Matrix_wrap.cxx
|
||||||
tools/swig/test/Matrix.py
|
tools/swig/test/Matrix.py
|
||||||
tools/swig/test/Tensor_wrap.cxx
|
tools/swig/test/Tensor_wrap.cxx
|
||||||
tools/swig/test/Tensor.py
|
tools/swig/test/Tensor.py
|
||||||
tools/swig/test/Vector.py
|
tools/swig/test/Vector.py
|
||||||
tools/swig/test/Vector_wrap.cxx
|
tools/swig/test/Vector_wrap.cxx
|
||||||
tools/swig/test/Array.py
|
tools/swig/test/Array.py
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[submodule "doc/scipy-sphinx-theme"]
|
[submodule "doc/scipy-sphinx-theme"]
|
||||||
path = doc/scipy-sphinx-theme
|
path = doc/scipy-sphinx-theme
|
||||||
url = https://github.com/scipy/scipy-sphinx-theme.git
|
url = https://github.com/scipy/scipy-sphinx-theme.git
|
||||||
[submodule "doc/sphinxext"]
|
[submodule "doc/sphinxext"]
|
||||||
path = doc/sphinxext
|
path = doc/sphinxext
|
||||||
url = https://github.com/numpy/numpydoc.git
|
url = https://github.com/numpy/numpydoc.git
|
||||||
|
|
|
@ -1,24 +1,24 @@
|
||||||
path_classifiers:
|
path_classifiers:
|
||||||
library:
|
library:
|
||||||
- tools
|
- tools
|
||||||
generated:
|
generated:
|
||||||
# The exports defined in __init__.py are defined in the Cython module
|
# The exports defined in __init__.py are defined in the Cython module
|
||||||
# np.random.mtrand. By excluding this file we suppress a number of
|
# np.random.mtrand. By excluding this file we suppress a number of
|
||||||
# "undefined export" alerts
|
# "undefined export" alerts
|
||||||
- numpy/random/__init__.py
|
- numpy/random/__init__.py
|
||||||
|
|
||||||
extraction:
|
extraction:
|
||||||
python:
|
python:
|
||||||
python_setup:
|
python_setup:
|
||||||
requirements:
|
requirements:
|
||||||
- cython>=0.29
|
- cython>=0.29
|
||||||
cpp:
|
cpp:
|
||||||
index:
|
index:
|
||||||
build_command:
|
build_command:
|
||||||
- python3 setup.py build
|
- python3 setup.py build
|
||||||
after_prepare:
|
after_prepare:
|
||||||
- pip3 install --upgrade --user cython
|
- pip3 install --upgrade --user cython
|
||||||
- export PATH="$HOME/.local/bin:$PATH"
|
- export PATH="$HOME/.local/bin:$PATH"
|
||||||
|
|
||||||
queries:
|
queries:
|
||||||
- include: py/file-not-closed
|
- include: py/file-not-closed
|
||||||
|
|
|
@ -1,272 +1,272 @@
|
||||||
# Prevent git from showing duplicate names with commands like "git shortlog"
|
# Prevent git from showing duplicate names with commands like "git shortlog"
|
||||||
# See the manpage of git-shortlog for details.
|
# See the manpage of git-shortlog for details.
|
||||||
# The syntax is:
|
# The syntax is:
|
||||||
# Name that should be used <email that should be used> Bad name <bad email>
|
# 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.
|
# 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
|
# This file is up-to-date if the command git log --format="%aN <%aE>" | sort -u
|
||||||
# gives no duplicates.
|
# gives no duplicates.
|
||||||
|
|
||||||
Aaron Baecker <abaecker@localhost> abaecker <abaecker@localhost>
|
Aaron Baecker <abaecker@localhost> abaecker <abaecker@localhost>
|
||||||
Alan Fontenot <logeaux@yahoo.com> logeaux <logeaux@yahoo.com>
|
Alan Fontenot <logeaux@yahoo.com> logeaux <logeaux@yahoo.com>
|
||||||
Alan Fontenot <logeaux@yahoo.com> logeaux <36168460+logeaux@users.noreply.github.com>
|
Alan Fontenot <logeaux@yahoo.com> logeaux <36168460+logeaux@users.noreply.github.com>
|
||||||
Abdul Muneer <abdulmuneer@gmail.com> abdulmuneer <abdulmuneer@gmail.com>
|
Abdul Muneer <abdulmuneer@gmail.com> abdulmuneer <abdulmuneer@gmail.com>
|
||||||
Adam Ginsburg <adam.g.ginsburg@gmail.com> Adam Ginsburg <keflavich@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>
|
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> alex <argriffi@ncsu.edu>
|
||||||
Alex Griffing <argriffi@ncsu.edu> argriffing <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@gmail.com>
|
||||||
Alex Griffing <argriffi@ncsu.edu> argriffing <argriffing@users.noreply.github.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>
|
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> Alexander Belopolsky <a@enlnt.com>
|
Alexander Belopolsky <abalkin@enlnt.com> Alexander Belopolsky <a@enlnt.com>
|
||||||
Alexander Belopolsky <abalkin@enlnt.com> sasha <sasha@localhost>
|
Alexander Belopolsky <abalkin@enlnt.com> sasha <sasha@localhost>
|
||||||
Alexander Jung <kontakt@ajung.name> aleju <kontakt@ajung.name>
|
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> Alexandr Shadchin <alexandr.shadchin@gmail.com>
|
||||||
Alexander Shadchin <alexandr.shadchin@gmail.com> 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>
|
Allan Haldane <allan.haldane@gmail.com> ahaldane <ealloc@gmail.com>
|
||||||
Alok Singhal <gandalf013@gmail.com> Alok Singhal <alok@merfinllc.com>
|
Alok Singhal <gandalf013@gmail.com> Alok Singhal <alok@merfinllc.com>
|
||||||
Alyssa Quek <alyssaquek@gmail.com> alyssaq <alyssaquek@gmail.com>
|
Alyssa Quek <alyssaquek@gmail.com> alyssaq <alyssaquek@gmail.com>
|
||||||
Amir Sarabadani <ladsgroup@gmail.com> amir <ladsgroup@gmail.com>
|
Amir Sarabadani <ladsgroup@gmail.com> amir <ladsgroup@gmail.com>
|
||||||
Anatoly Techtonik <techtonik@gmail.com> anatoly techtonik <techtonik@gmail.com>
|
Anatoly Techtonik <techtonik@gmail.com> anatoly techtonik <techtonik@gmail.com>
|
||||||
Andras Deak <deak.andris@gmail.com> adeak <adeak@users.noreply.github.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 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>
|
Andrea Sangalli <and-sang@outlook.com> and-sang <53617841+and-sang@users.noreply.github.com>
|
||||||
Andrei Kucharavy <ank@andreikucharavy.com> chiffa <ank@andreikucharavy.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> aarchiba <peridot.faceted@gmail.com>
|
||||||
Anne Archibald <peridot.faceted@gmail.com> Anne Archibald <archibald@astron.nl>
|
Anne Archibald <peridot.faceted@gmail.com> Anne Archibald <archibald@astron.nl>
|
||||||
Anže Starič <anze.staric@gmail.com> astaric <anze.staric@gmail.com>
|
Anže Starič <anze.staric@gmail.com> astaric <anze.staric@gmail.com>
|
||||||
Aron Ahmadia <aron@ahmadia.net> ahmadia <aron@ahmadia.net>
|
Aron Ahmadia <aron@ahmadia.net> ahmadia <aron@ahmadia.net>
|
||||||
Aarthi Agurusa <agurusa@gmail.com> agurusa <agurusa@gmail.com>
|
Aarthi Agurusa <agurusa@gmail.com> agurusa <agurusa@gmail.com>
|
||||||
Arun Persaud <apersaud@lbl.gov> Arun Persaud <arun@nubati.net>
|
Arun Persaud <apersaud@lbl.gov> Arun Persaud <arun@nubati.net>
|
||||||
Åsmund Hjulstad <ahju@statoil.com> Åsmund Hjulstad <asmund@hjulstad.com>
|
Åsmund Hjulstad <ahju@statoil.com> Åsmund Hjulstad <asmund@hjulstad.com>
|
||||||
Auke Wiggers <wiggers.auke@gmail.com> auke <wiggers.auke@gmail.com>
|
Auke Wiggers <wiggers.auke@gmail.com> auke <wiggers.auke@gmail.com>
|
||||||
Badhri Narayanan Krishnakumar <badhrinarayanan.k@gmail.com> badhrink <badhrinarayanan.k@gmail.com>
|
Badhri Narayanan Krishnakumar <badhrinarayanan.k@gmail.com> badhrink <badhrinarayanan.k@gmail.com>
|
||||||
Behzad Nouri <behzadnouri@gmail.com> behzad nouri <behzadnouri@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> Ben Root <ben.v.root@gmail.com>
|
||||||
Benjamin Root <ben.v.root@gmail.com> weathergod <?@?>
|
Benjamin Root <ben.v.root@gmail.com> weathergod <?@?>
|
||||||
Bernardt Duvenhage <bernardt.duvenhage@gmail.com> bduvenhage <bernardt.duvenhage@gmail.com>
|
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>
|
||||||
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>
|
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> William Spotz <wfspotz@sandia.gov@localhost>
|
||||||
Bill Spotz <wfspotz@sandia.gov> wfspotz@sandia.gov <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>
|
Bob Eldering <eldering@jive.eu> bobeldering <eldering@jive.eu>
|
||||||
Brett R Murphy <bmurphy@enthought.com> brettrmurphy <bmurphy@enthought.com>
|
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-3.local>
|
||||||
Bryan Van de Ven <bryanv@continuum.io> Bryan Van de Ven <bryan@laptop.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>
|
Bui Duc Minh <buiducminh287@gmail.com> Mibu287 <41239569+Mibu287@users.noreply.github.com>
|
||||||
Carl Kleffner <cmkleffner@gmail.com> carlkl <cmkleffner@gmail.com>
|
Carl Kleffner <cmkleffner@gmail.com> carlkl <cmkleffner@gmail.com>
|
||||||
Chris Burns <chris.burns@localhost> chris.burns <chris.burns@localhost>
|
Chris Burns <chris.burns@localhost> chris.burns <chris.burns@localhost>
|
||||||
Chris Kerr <debdepba@dasganma.tk> Chris Kerr <cjk34@cam.ac.uk>
|
Chris Kerr <debdepba@dasganma.tk> Chris Kerr <cjk34@cam.ac.uk>
|
||||||
Christian Clauss <cclauss@bluewin.ch> cclauss <cclauss@bluewin.ch>
|
Christian Clauss <cclauss@bluewin.ch> cclauss <cclauss@bluewin.ch>
|
||||||
Christopher Hanley <chanley@gmail.com> chanley <chanley@gmail.com>
|
Christopher Hanley <chanley@gmail.com> chanley <chanley@gmail.com>
|
||||||
Christoph Gohlke <cgohlke@uci.edu> cgholke <?@?>
|
Christoph Gohlke <cgohlke@uci.edu> cgholke <?@?>
|
||||||
Christoph Gohlke <cgohlke@uci.edu> cgohlke <cgohlke@uci.edu>
|
Christoph Gohlke <cgohlke@uci.edu> cgohlke <cgohlke@uci.edu>
|
||||||
Christoph Gohlke <cgohlke@uci.edu> Christolph Gohlke <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> Qiyu8 <fangchunlin@huawei.com>
|
||||||
Chunlin Fang <fangchunlin@huawei.com> Chunlin <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>
|
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 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 <daniel@meltingwax.net>
|
||||||
Daniel da Silva <mail@danieldasilva.org> Daniel da Silva <var.mail.daniel@gmail.com>
|
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 Hrisca <daniel.hrisca@gmail.com> danielhrisca <daniel.hrisca@gmail.com>
|
||||||
Daniel J Farrell <danieljfarrel@me.com> danieljfarrell <danieljfarrel@me.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> Daniel <muellner@localhost.localdomain>
|
||||||
Daniel Müllner <Daniel Müllner muellner@math.stanford.edu> dmuellner <Daniel Müllner muellner@math.stanford.edu>
|
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>
|
Daniel Rasmussen <daniel.rasmussen@appliedbrainresearch.com> drasmuss <daniel.rasmussen@appliedbrainresearch.com>
|
||||||
David Huard <david.huard@gmail.com> dhuard <dhuard@localhost>
|
David Huard <david.huard@gmail.com> dhuard <dhuard@localhost>
|
||||||
David M Cooke <cookedm@localhost> cookedm <cookedm@localhost>
|
David M Cooke <cookedm@localhost> cookedm <cookedm@localhost>
|
||||||
David Nicholson <davidjn@google.com> davidjn <dnic12345@gmail.com>
|
David Nicholson <davidjn@google.com> davidjn <dnic12345@gmail.com>
|
||||||
David Ochoa <ochoadavid@gmail.com> ochoadavid <ochoadavid@gmail.com>
|
David Ochoa <ochoadavid@gmail.com> ochoadavid <ochoadavid@gmail.com>
|
||||||
Dawid Zych <dawid.zych@yandex.com> silenc3r <dawid.zych@yandex.com>
|
Dawid Zych <dawid.zych@yandex.com> silenc3r <dawid.zych@yandex.com>
|
||||||
Dennis Zollo <dzollo@swift-nav.com> denniszollo <dzollo@swift-nav.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 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 Homeir <derek@astro.phsik.uni-goettingen.de>
|
||||||
Derek Homeier <derek@astro.physik.uni-goettingen.de> Derek Homier <derek@astro.physik.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>
|
Derrick Williams <myutat@gmail.com> derrick <myutat@gmail.com>
|
||||||
Dmitriy Shalyga <zuko3d@gmail.com> zuko3d <zuko3d@gmail.com>
|
Dmitriy Shalyga <zuko3d@gmail.com> zuko3d <zuko3d@gmail.com>
|
||||||
Dustan Levenstein <dlevenstein@gmail.com> dustanlevenstein <43019642+dustanlevenstein@users.noreply.github.com>
|
Dustan Levenstein <dlevenstein@gmail.com> dustanlevenstein <43019642+dustanlevenstein@users.noreply.github.com>
|
||||||
Ed Schofield <edschofield@localhost> edschofield <edschofield@localhost>
|
Ed Schofield <edschofield@localhost> edschofield <edschofield@localhost>
|
||||||
Egor Zindy <ezindy@gmail.com> zindy <ezindy@gmail.com>
|
Egor Zindy <ezindy@gmail.com> zindy <ezindy@gmail.com>
|
||||||
Endolith <endolith@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> E. M. Bray <erik.bray@lri.fr>
|
||||||
Erik M. Bray <erik.bray@lri.fr> Erik Bray <erik.m.bray@gmail.com>
|
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 Fode <ericfode@gmail.com> Eric Fode <ericfode@linuxlaptop.(none)>
|
||||||
Eric Quintero <eric.antonio.quintero@gmail.com> e-q <eric.antonio.quintero@gmail.com>
|
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>
|
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>
|
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>
|
Evgeni Burovski <evgeny.burovskiy@gmail.com> Evgeni Burovski <evgeni@burovski.me>
|
||||||
Evgeny Toder <evgeny.toder@jpmorgan.com> eltjpm <evgeny.toder@jpmorgan.com>
|
Evgeny Toder <evgeny.toder@jpmorgan.com> eltjpm <evgeny.toder@jpmorgan.com>
|
||||||
Fernando Perez <Fernando.Perez@berkeley.edu> Fernando Perez <fperez@fperez.org>
|
Fernando Perez <Fernando.Perez@berkeley.edu> Fernando Perez <fperez@fperez.org>
|
||||||
Friedrich Dunne <dunneff@tcd.ie> dunneff <dunneff@tcd.ie>
|
Friedrich Dunne <dunneff@tcd.ie> dunneff <dunneff@tcd.ie>
|
||||||
Frederic Bastien <nouiz@nouiz.org> Frederic <nouiz@nouiz.org>
|
Frederic Bastien <nouiz@nouiz.org> Frederic <nouiz@nouiz.org>
|
||||||
Gael Varoquaux <gael.varoquaux@normalesup.org> GaelVaroquaux <gael.varoquaux@normalesup.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>
|
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>
|
Giuseppe Venturini <ggventurini@users.noreply.github.com> ggventurini <ggventurini@users.noreply.github.com>
|
||||||
Golnaz Irannejad <golnazirannejad@gmail.com> golnazir <golnazirannejad@gmail.com>
|
Golnaz Irannejad <golnazirannejad@gmail.com> golnazir <golnazirannejad@gmail.com>
|
||||||
Gopal Singh Meena <gopalmeena94@gmail.com> gopalmeena <gopalmeena94@gmail.com>
|
Gopal Singh Meena <gopalmeena94@gmail.com> gopalmeena <gopalmeena94@gmail.com>
|
||||||
Greg Knoll <gregory@bccn-berlin.de> gkBCCN <gregory@bccn-berlin.de>
|
Greg Knoll <gregory@bccn-berlin.de> gkBCCN <gregory@bccn-berlin.de>
|
||||||
Greg Yang <sorcererofdm@gmail.com> eulerreich <sorcererofdm@gmail.com>
|
Greg Yang <sorcererofdm@gmail.com> eulerreich <sorcererofdm@gmail.com>
|
||||||
Greg Young <gfyoung17@gmail.com> gfyoung <gfyoung17@gmail.com>
|
Greg Young <gfyoung17@gmail.com> gfyoung <gfyoung17@gmail.com>
|
||||||
Greg Young <gfyoung17@gmail.com> gfyoung <gfyoung@mit.edu>
|
Greg Young <gfyoung17@gmail.com> gfyoung <gfyoung@mit.edu>
|
||||||
Guo Ci <zguoci@gmail.com> guoci <zguoci@gmail.com>
|
Guo Ci <zguoci@gmail.com> guoci <zguoci@gmail.com>
|
||||||
Han Genuit <hangenuit@gmail.com> 87 <hangenuit@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> hangenuit@gmail.com <hangenuit@gmail.com>
|
||||||
Han Genuit <hangenuit@gmail.com> Han <hangenuit@gmail.com>
|
Han Genuit <hangenuit@gmail.com> Han <hangenuit@gmail.com>
|
||||||
Hanno Klemm <hanno.klemm@maerskoil.com> hklemm <hanno.klemm@maerskoil.com>
|
Hanno Klemm <hanno.klemm@maerskoil.com> hklemm <hanno.klemm@maerskoil.com>
|
||||||
Hemil Desai <desai38@purdue.edu> hemildesai <desai38@purdue.edu>
|
Hemil Desai <desai38@purdue.edu> hemildesai <desai38@purdue.edu>
|
||||||
Hiroyuki V. Yamazaki <hiroyuki.vincent.yamazaki@gmail.com> hvy <hiroyuki.vincent.yamazaki@gmail.com>
|
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>
|
Gerhard Hobler <gerhard.hobler@tuwien.ac.at> hobler <gerhard.hobler@tuwien.ac.at>
|
||||||
Guillaume Peillex <guillaume.peillex@gmail.com> hippo91 <guillaume.peillex@gmail.com>
|
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>
|
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> Jaime Fernandez <jaime.fernandez@hp.com>
|
||||||
Jaime Fernandez <jaime.frio@gmail.com> jaimefrio <jaime.frio@gmail.com>
|
Jaime Fernandez <jaime.frio@gmail.com> jaimefrio <jaime.frio@gmail.com>
|
||||||
Jaime Fernandez <jaime.frio@gmail.com> Jaime <jaime.frio@gmail.com>
|
Jaime Fernandez <jaime.frio@gmail.com> Jaime <jaime.frio@gmail.com>
|
||||||
James Webber <jamestwebber@gmail.com> jamestwebber <jamestwebber@gmail.com>
|
James Webber <jamestwebber@gmail.com> jamestwebber <jamestwebber@gmail.com>
|
||||||
Jarrod Millman <millman@berkeley.edu> Jarrod Millman <jarrod.millman@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 Grout <jason-github@creativetrax.com> Jason Grout <jason.grout@drake.edu>
|
||||||
Jason King <pizza@netspace.net.au> jason king <pizza@netspace.net.au>
|
Jason King <pizza@netspace.net.au> jason king <pizza@netspace.net.au>
|
||||||
Jay Bourque <jay.bourque@continuum.io> jayvius <jay.bourque@continuum.io>
|
Jay Bourque <jay.bourque@continuum.io> jayvius <jay.bourque@continuum.io>
|
||||||
Jean Utke <jutke@allstate.com> jutke <jutke@allstate.com>
|
Jean Utke <jutke@allstate.com> jutke <jutke@allstate.com>
|
||||||
Jeffrey Yancey <jeffrey@octane5.com> Jeff <3820914+jeffyancey@users.noreply.github.com>
|
Jeffrey Yancey <jeffrey@octane5.com> Jeff <3820914+jeffyancey@users.noreply.github.com>
|
||||||
Jeremy Lay <jlay80@gmail.com> jeremycl01 <jlay80@gmail.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>
|
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>
|
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 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>
|
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>
|
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 Darbyshire <24256554+attack68@users.noreply.github.com> attack68 <24256554+attack68@users.noreply.github.com>
|
||||||
John Kirkham <kirkhamj@janelia.hhmi.org> jakirkham <jakirkham@gmail.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 <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> Joseph Fox-Rabinovitz <madphysicist@users.noreply.github.com>
|
||||||
Joseph Fox-Rabinovitz <jfoxrabinovitz@gmail.com> Mad Physicist <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>
|
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 <jtaylor.debian@googlemail.com>
|
||||||
Julian Taylor <juliantaylor108@gmail.com> Julian Taylor <juliantaylor108@googlemail.com>
|
Julian Taylor <juliantaylor108@gmail.com> Julian Taylor <juliantaylor108@googlemail.com>
|
||||||
Julien Lhermitte <jrmlhermitte@gmail.com> Julien Lhermitte <lhermitte@bnl.gov>
|
Julien Lhermitte <jrmlhermitte@gmail.com> Julien Lhermitte <lhermitte@bnl.gov>
|
||||||
Julien Schueller <julien.schueller@gmail.com> jschueller <julien.schueller@gmail.com>
|
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@users.noreply.github.com>
|
||||||
Justus Magin <keewis@posteo.de> Keewis <keewis@posteo.de>
|
Justus Magin <keewis@posteo.de> Keewis <keewis@posteo.de>
|
||||||
Kai Striega <kaistriega@gmail.com> kai <kaistriega@gmail.com>
|
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@gmail.com>
|
||||||
Kai Striega <kaistriega@gmail.com> kai-striega <kaistriega+github@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>
|
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@gmail.com>
|
||||||
Kiko Correoso <kachine@protonmail.com> kikocorreoso <kikocorreoso@users.noreply.github.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>
|
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>
|
Kriti Singh <kritisingh1.ks@gmail.com> kritisingh1 <kritisingh1.ks@gmail.com>
|
||||||
Kmol Yuan <pyslvs@gmail.com> Yuan <pyslvs@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.buitinck@esciencecenter.nl>
|
||||||
Lars Buitinck <larsmans@gmail.com> Lars Buitinck <L.J.Buitinck@uva.nl>
|
Lars Buitinck <larsmans@gmail.com> Lars Buitinck <L.J.Buitinck@uva.nl>
|
||||||
Lars Grüter <lagru@mailbox.org> Lars G <lagru@mailbox.org>
|
Lars Grüter <lagru@mailbox.org> Lars G <lagru@mailbox.org>
|
||||||
Luis Pedro Coelho <luis@luispedro.org> Luis Pedro Coelho <lpc@cmu.edu>
|
Luis Pedro Coelho <luis@luispedro.org> Luis Pedro Coelho <lpc@cmu.edu>
|
||||||
Luke Zoltan Kelley <lkelley@cfa.harvard.edu> lzkelley <lkelley@cfa.harvard.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> mpro <magdalena.proszewska@gmail.com>
|
||||||
Magdalena Proszewska <magdalena.proszewska@gmail.com> mproszewska <38814059+mproszewska@users.noreply.github.com>
|
Magdalena Proszewska <magdalena.proszewska@gmail.com> mproszewska <38814059+mproszewska@users.noreply.github.com>
|
||||||
Manoj Kumar <manojkumarsivaraj334@gmail.com> MechCoder <manojkumarsivaraj334@gmail.com>
|
Manoj Kumar <manojkumarsivaraj334@gmail.com> MechCoder <manojkumarsivaraj334@gmail.com>
|
||||||
Marcin Podhajski <podhajskimarcin@gmail.com> m-podhajski <36967358+m-podhajski@users.noreply.github.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 DePristo <mdepristo@synapdx.com> markdepristo <mdepristo@synapdx.com>
|
||||||
Mark Weissman <mw9050@gmail.com> m-d-w <mw9050@gmail.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 <mwwiebe@gmail.com>
|
||||||
Mark Wiebe <mwwiebe@gmail.com> Mark Wiebe <mwiebe@continuum.io>
|
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@enthought.com>
|
||||||
Mark Wiebe <mwwiebe@gmail.com> Mark Wiebe <mwiebe@georg.(none)>
|
Mark Wiebe <mwwiebe@gmail.com> Mark Wiebe <mwiebe@georg.(none)>
|
||||||
Martin Goodson <martingoodson@gmail.com> martingoodson <martingoodson@gmail.com>
|
Martin Goodson <martingoodson@gmail.com> martingoodson <martingoodson@gmail.com>
|
||||||
Martin Reinecke <martin@mpa-garching.mpg.de> mreineck <martin@mpa-garching.mpg.de>
|
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>
|
Martin Teichmann <martin.teichmann@xfel.eu> Martin Teichmann <lkb.teichmann@gmail.com>
|
||||||
Matt Hancock <not.matt.hancock@gmail.com> matt <mhancock743@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>
|
Martino Sorbaro <martino.sorbaro@ed.ac.uk> martinosorb <martino.sorbaro@ed.ac.uk>
|
||||||
Mattheus Ueckermann <empeeu@yahoo.com> empeeu <empeeu@yahoo.com>
|
Mattheus Ueckermann <empeeu@yahoo.com> empeeu <empeeu@yahoo.com>
|
||||||
Matthew Harrigan <harrigan.matthew@gmail.com> MattHarrigan <harrigan.matthew@gmail.com>
|
Matthew Harrigan <harrigan.matthew@gmail.com> MattHarrigan <harrigan.matthew@gmail.com>
|
||||||
Matti Picus <matti.picus@gmail.com> mattip <matti.picus@gmail.com>
|
Matti Picus <matti.picus@gmail.com> mattip <matti.picus@gmail.com>
|
||||||
Maximilian Konrad <maximilianlukaskonrad@hotmail.de> MLK97 <maximilianlukaskonrad@hotmail.de>
|
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> Melissa Weber Mendonca <melissawm@gmail.com>
|
||||||
Melissa Weber Mendonça <melissawm@gmail.com> melissawm <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 Behrisch <oss@behrisch.de> behrisch <behrisch@users.sourceforge.net>
|
||||||
Michael Droettboom <mdboom@gmail.com> mdroe <mdroe@localhost>
|
Michael Droettboom <mdboom@gmail.com> mdroe <mdroe@localhost>
|
||||||
Michael K. Tran <trankmichael@gmail.com> mtran <trankmichael@gmail.com>
|
Michael K. Tran <trankmichael@gmail.com> mtran <trankmichael@gmail.com>
|
||||||
Michael Martin <mmartin4242@gmail.com> mmartin <mmartin4242@gmail.com>
|
Michael Martin <mmartin4242@gmail.com> mmartin <mmartin4242@gmail.com>
|
||||||
Michael Schnaitter <schnaitterm@knights.ucf.edu> schnaitterm <schnaitterm@users.noreply.github.com>
|
Michael Schnaitter <schnaitterm@knights.ucf.edu> schnaitterm <schnaitterm@users.noreply.github.com>
|
||||||
Muhammad Kasim <firman.kasim@gmail.com> mfkasim91 <firman.kasim@gmail.com>
|
Muhammad Kasim <firman.kasim@gmail.com> mfkasim91 <firman.kasim@gmail.com>
|
||||||
Masashi Kishimoto <drehbleistift@gmail.com> kishimoto-banana <drehbleistift@gmail.com>
|
Masashi Kishimoto <drehbleistift@gmail.com> kishimoto-banana <drehbleistift@gmail.com>
|
||||||
Nathaniel J. Smith <njs@pobox.com> njsmith <njs@pobox.com>
|
Nathaniel J. Smith <njs@pobox.com> njsmith <njs@pobox.com>
|
||||||
Naveen Arunachalam <notatroll.troll@gmail.com> naveenarun <notatroll.troll@gmail.com>
|
Naveen Arunachalam <notatroll.troll@gmail.com> naveenarun <notatroll.troll@gmail.com>
|
||||||
Nicolas Scheffer <nicolas.scheffer@sri.com> Nicolas Scheffer <scheffer@speech.sri.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>
|
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>
|
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>
|
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>
|
Óscar Villellas Guillén <oscar.villellas@continuum.io> ovillellas <oscar.villellas@continuum.io>
|
||||||
Pat Miller <patmiller@localhost> patmiller <patmiller@localhost>
|
Pat Miller <patmiller@localhost> patmiller <patmiller@localhost>
|
||||||
Paul Ivanov <pi@berkeley.edu> Paul Ivanov <paul.ivanov@local>
|
Paul Ivanov <pi@berkeley.edu> Paul Ivanov <paul.ivanov@local>
|
||||||
Paul Jacobson <hpj3@myuw.net> hpaulj <hpj3@myuw.net>
|
Paul Jacobson <hpj3@myuw.net> hpaulj <hpj3@myuw.net>
|
||||||
Pearu Peterson <pearu.peterson@gmail.com> Pearu Peterson <pearu@pearu-laptop.(none)>
|
Pearu Peterson <pearu.peterson@gmail.com> Pearu Peterson <pearu@pearu-laptop.(none)>
|
||||||
Pete Peeradej Tanruangporn <pete.tanru@gmail.com> petetanru <pete.tanru@gmail.com>
|
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>
|
Peter J Cock <p.j.a.cock@googlemail.com> peterjc <p.j.a.cock@googlemail.com>
|
||||||
Phil Elson <pelson.pub@gmail.com>
|
Phil Elson <pelson.pub@gmail.com>
|
||||||
Pierre GM <pierregmcode@gmail.com> pierregm <pierregmcode@gmail.com>
|
Pierre GM <pierregmcode@gmail.com> pierregm <pierregmcode@gmail.com>
|
||||||
Pierre GM <pierregmcode@gmail.com> pierregm <pierregm@localhost>
|
Pierre GM <pierregmcode@gmail.com> pierregm <pierregm@localhost>
|
||||||
Piotr Gaiński <dociebieaniuszlem@gmail.com> panpiort8 <dociebieaniuszlem@gmail.com>
|
Piotr Gaiński <dociebieaniuszlem@gmail.com> panpiort8 <dociebieaniuszlem@gmail.com>
|
||||||
Prabhu Ramachandran <prabhu@localhost> prabhu <prabhu@localhost>
|
Prabhu Ramachandran <prabhu@localhost> prabhu <prabhu@localhost>
|
||||||
Przemyslaw Bartosik <sendthenote@gmail.com> przemb <sendthenote@gmail.com>
|
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> Ralf Gommers <ralf.gommers@googlemail.com>
|
||||||
Ralf Gommers <ralf.gommers@gmail.com> rgommers <ralf.gommers@googlemail.com>
|
Ralf Gommers <ralf.gommers@gmail.com> rgommers <ralf.gommers@googlemail.com>
|
||||||
Rehas Sachdeva <aquannie@gmail.com> rehassachdeva <aquannie@gmail.com>
|
Rehas Sachdeva <aquannie@gmail.com> rehassachdeva <aquannie@gmail.com>
|
||||||
Ritta Narita <narittan@gmail.com> RittaNarita <narittan@gmail.com>
|
Ritta Narita <narittan@gmail.com> RittaNarita <narittan@gmail.com>
|
||||||
Riya Sharma <navneet.nmk@gmail.com> ayir <navneet.nmk@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 Kern <rkern@enthought.com> Robert Kern <robert.kern@gmail.com>
|
||||||
Robert LU <robberphex@gmail.com> RobberPhex <robberphex@gmail.com>
|
Robert LU <robberphex@gmail.com> RobberPhex <robberphex@gmail.com>
|
||||||
Ronan Lamy <ronan.lamy@gmail.com> Ronan Lamy <Ronan.Lamy@normalesup.org>
|
Ronan Lamy <ronan.lamy@gmail.com> Ronan Lamy <Ronan.Lamy@normalesup.org>
|
||||||
Russell Hewett <rhewett@mit.edu> rhewett <rhewett@mit.edu>
|
Russell Hewett <rhewett@mit.edu> rhewett <rhewett@mit.edu>
|
||||||
Ryan Blakemore <rbtnet@gmail.com> ryanblak <rbtnet@gmail.com>
|
Ryan Blakemore <rbtnet@gmail.com> ryanblak <rbtnet@gmail.com>
|
||||||
Sam Preston <j.sam.preston@gmail.com> jspreston <j.sam.preston@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> = <=>
|
||||||
Sam Radhakrishnan <sk09idm@gmail.com> sam09 <sk09idm@gmail.com>
|
Sam Radhakrishnan <sk09idm@gmail.com> sam09 <sk09idm@gmail.com>
|
||||||
Sanchez Gonzalez Alvaro <as12513@imperial.ac.uk> alvarosg <as12513@imperial.ac.uk>
|
Sanchez Gonzalez Alvaro <as12513@imperial.ac.uk> alvarosg <as12513@imperial.ac.uk>
|
||||||
Saullo Giovani <saullogiovani@gmail.com> saullogiovani <saullogiovani@gmail.com>
|
Saullo Giovani <saullogiovani@gmail.com> saullogiovani <saullogiovani@gmail.com>
|
||||||
Saurabh Mehta <e.samehta@gmail.com>
|
Saurabh Mehta <e.samehta@gmail.com>
|
||||||
Sebastian Berg <sebastian@sipsolutions.net> seberg <sebastian@sipsolutions.net>
|
Sebastian Berg <sebastian@sipsolutions.net> seberg <sebastian@sipsolutions.net>
|
||||||
Shekhar Prasad Rajak <shekharrajak@live.com> shekharrajak <shekharrajak@live.com>
|
Shekhar Prasad Rajak <shekharrajak@live.com> shekharrajak <shekharrajak@live.com>
|
||||||
Shota Kawabuchi <shota.kawabuchi+GitHub@gmail.com> skwbc <shota.kawabuchi+GitHub@gmail.com>
|
Shota Kawabuchi <shota.kawabuchi+GitHub@gmail.com> skwbc <shota.kawabuchi+GitHub@gmail.com>
|
||||||
Siavash Eliasi <siavashserver@gmail.com> siavashserver <siavashserver@gmail.com>
|
Siavash Eliasi <siavashserver@gmail.com> siavashserver <siavashserver@gmail.com>
|
||||||
Simon Gasse <simon.gasse@gmail.com> sgasse <sgasse@users.noreply.github.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>
|
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 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 <sjvdwalt@gmail.com>
|
||||||
Stefan van der Walt <stefanv@berkeley.edu> Stefan van der Walt <stefan@sun.ac.za>
|
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>
|
Stephan Hoyer <shoyer@gmail.com> Stephan Hoyer <shoyer@climate.com>
|
||||||
Steven J Kern <kern.steven0@gmail.com>
|
Steven J Kern <kern.steven0@gmail.com>
|
||||||
SuryaChand P <psschand@gmail.com> Surya P <psschand@gmail.com>
|
SuryaChand P <psschand@gmail.com> Surya P <psschand@gmail.com>
|
||||||
SuryaChand P <psschand@gmail.com> psschand <psschand@gmail.com>
|
SuryaChand P <psschand@gmail.com> psschand <psschand@gmail.com>
|
||||||
Thomas A Caswell <tcaswell@gmail.com> Thomas A Caswell <tcaswell@bnl.gov>
|
Thomas A Caswell <tcaswell@gmail.com> Thomas A Caswell <tcaswell@bnl.gov>
|
||||||
Tim Cera <tim@cerazone.net> tim cera <tcera@sjrwmd.com>
|
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 <t.teichmann@dashdos.com>
|
||||||
Tim Teichmann <t.teichmann@dashdos.com> tteichmann <44259103+tteichmann@users.noreply.github.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 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>
|
Tom Poole <t.b.poole@gmail.com> tpoole <t.b.poole@gmail.com>
|
||||||
Tony LaTorre <tlatorre@uchicago.edu> tlatorre <tlatorre@uchicago.edu>
|
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 E. Oliphant <teoliphant@gmail.com>
|
||||||
Travis Oliphant <travis@continuum.io> Travis Oliphant <oliphant@enthought.com>
|
Travis Oliphant <travis@continuum.io> Travis Oliphant <oliphant@enthought.com>
|
||||||
Valentin Haenel <valentin@haenel.co> Valentin Haenel <valentin.haenel@gmx.de>
|
Valentin Haenel <valentin@haenel.co> Valentin Haenel <valentin.haenel@gmx.de>
|
||||||
Rakesh Vasudevan <rakesh.nvasudev@gmail.com> vrakesh <rakesh.nvasudev@gmail.com>
|
Rakesh Vasudevan <rakesh.nvasudev@gmail.com> vrakesh <rakesh.nvasudev@gmail.com>
|
||||||
Vrinda Narayan <talk2vrinda@gmail.com> vrindaaa <48102157+vrindaaa@users.noreply.github.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>
|
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@Dirac <liwt31@163.com>
|
||||||
Weitang Li <liwt31@163.com> wtli <liwt31@163.com>
|
Weitang Li <liwt31@163.com> wtli <liwt31@163.com>
|
||||||
Wendell Smith <wendellwsmith@gmail.com> Wendell Smith <wackywendell@gmail.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>
|
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>
|
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>
|
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>
|
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>
|
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>
|
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>
|
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> jpoh <poh.zijie@gmail.com>
|
||||||
Zieji Pohz <poh.ziji@gmail.com> zjpoh <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>
|
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> zoj613 <44142765+zoj613@users.noreply.github.com>
|
||||||
Zolisa Bleki <zolisa.bleki@gmail.com> RedRuM <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> luz.paz <luzpaz@users.noreply.github.com>
|
||||||
luzpaz <kunda@scribus.net> luzpaz <luzpaz@users.noreply.github.com>
|
luzpaz <kunda@scribus.net> luzpaz <luzpaz@users.noreply.github.com>
|
||||||
spacescientist <aspacescientist@protonmail.com> spacescientist <spacescientist@pm.me>
|
spacescientist <aspacescientist@protonmail.com> spacescientist <spacescientist@pm.me>
|
||||||
|
|
|
@ -1,139 +1,139 @@
|
||||||
# After changing this file, check it on:
|
# After changing this file, check it on:
|
||||||
# http://lint.travis-ci.org/
|
# http://lint.travis-ci.org/
|
||||||
language: python
|
language: python
|
||||||
group: travis_latest
|
group: travis_latest
|
||||||
os: linux
|
os: linux
|
||||||
dist: bionic
|
dist: bionic
|
||||||
|
|
||||||
# Travis whitelists the installable packages, additions can be requested
|
# Travis whitelists the installable packages, additions can be requested
|
||||||
# https://github.com/travis-ci/apt-package-whitelist
|
# https://github.com/travis-ci/apt-package-whitelist
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages: &common_packages
|
packages: &common_packages
|
||||||
- gfortran
|
- gfortran
|
||||||
- libgfortran5
|
- libgfortran5
|
||||||
- libgfortran3
|
- libgfortran3
|
||||||
- libatlas-base-dev
|
- libatlas-base-dev
|
||||||
# Speedup builds, particularly when USE_CHROOT=1
|
# Speedup builds, particularly when USE_CHROOT=1
|
||||||
- eatmydata
|
- eatmydata
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
directories:
|
directories:
|
||||||
- $HOME/.cache/pip
|
- $HOME/.cache/pip
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
# Do the style check and a single test job, don't proceed if it fails
|
# Do the style check and a single test job, don't proceed if it fails
|
||||||
- name: Initial tests
|
- name: Initial tests
|
||||||
# Do the rest of the tests
|
# Do the rest of the tests
|
||||||
- name: Comprehensive tests
|
- name: Comprehensive tests
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- WHEELHOUSE_UPLOADER_USERNAME=travis.numpy
|
- WHEELHOUSE_UPLOADER_USERNAME=travis.numpy
|
||||||
# The following is generated with the command:
|
# The following is generated with the command:
|
||||||
# travis encrypt -r numpy/numpy WHEELHOUSE_UPLOADER_SECRET=tH3AP1KeY
|
# travis encrypt -r numpy/numpy WHEELHOUSE_UPLOADER_SECRET=tH3AP1KeY
|
||||||
- secure: "IEicLPrP2uW+jW51GRwkONQpdPqMVtQL5bdroqR/U8r9Tr\
|
- secure: "IEicLPrP2uW+jW51GRwkONQpdPqMVtQL5bdroqR/U8r9Tr\
|
||||||
XrbCVRhp4AP8JYZT0ptoBpmZWWGjmKBndB68QlMiUjQPow\
|
XrbCVRhp4AP8JYZT0ptoBpmZWWGjmKBndB68QlMiUjQPow\
|
||||||
iFWt9Ka92CaqYdU7nqfWp9VImSndPmssjmCXJ1v1IjZPAM\
|
iFWt9Ka92CaqYdU7nqfWp9VImSndPmssjmCXJ1v1IjZPAM\
|
||||||
ahp7Qnm0rWRmA0z9SomuRUQOJQ6s684vU="
|
ahp7Qnm0rWRmA0z9SomuRUQOJQ6s684vU="
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
include:
|
include:
|
||||||
# Do all python versions without environment variables set
|
# Do all python versions without environment variables set
|
||||||
- stage: Initial tests
|
- stage: Initial tests
|
||||||
python: 3.8
|
python: 3.8
|
||||||
|
|
||||||
- stage: Comprehensive tests
|
- stage: Comprehensive tests
|
||||||
python: 3.6
|
python: 3.6
|
||||||
- python: 3.7
|
- python: 3.7
|
||||||
- python: 3.9
|
- python: 3.9
|
||||||
|
|
||||||
- python: 3.6
|
- python: 3.6
|
||||||
env: USE_DEBUG=1
|
env: USE_DEBUG=1
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- *common_packages
|
- *common_packages
|
||||||
- cython3-dbg
|
- cython3-dbg
|
||||||
- python3-dbg
|
- python3-dbg
|
||||||
- python3-dev
|
- python3-dev
|
||||||
- python3-setuptools
|
- python3-setuptools
|
||||||
|
|
||||||
- python: 3.7
|
- python: 3.7
|
||||||
env: USE_WHEEL=1 RUN_FULL_TESTS=1 RUN_COVERAGE=1 INSTALL_PICKLE5=1
|
env: USE_WHEEL=1 RUN_FULL_TESTS=1 RUN_COVERAGE=1 INSTALL_PICKLE5=1
|
||||||
|
|
||||||
- python: 3.7
|
- python: 3.7
|
||||||
env: USE_SDIST=1
|
env: USE_SDIST=1
|
||||||
|
|
||||||
- python: 3.7
|
- python: 3.7
|
||||||
env:
|
env:
|
||||||
- PYTHONOPTIMIZE=2
|
- PYTHONOPTIMIZE=2
|
||||||
- BLAS=None
|
- BLAS=None
|
||||||
- LAPACK=None
|
- LAPACK=None
|
||||||
- ATLAS=None
|
- ATLAS=None
|
||||||
- NPY_BLAS_ORDER=mkl,blis,openblas,atlas,accelerate,blas
|
- NPY_BLAS_ORDER=mkl,blis,openblas,atlas,accelerate,blas
|
||||||
- NPY_LAPACK_ORDER=MKL,OPENBLAS,ATLAS,ACCELERATE,LAPACK
|
- NPY_LAPACK_ORDER=MKL,OPENBLAS,ATLAS,ACCELERATE,LAPACK
|
||||||
- USE_ASV=1
|
- USE_ASV=1
|
||||||
|
|
||||||
- python: 3.7
|
- python: 3.7
|
||||||
env:
|
env:
|
||||||
- NPY_RELAXED_STRIDES_CHECKING=0
|
- NPY_RELAXED_STRIDES_CHECKING=0
|
||||||
# use custom symbol-suffixed openblas build, not system ATLAS
|
# use custom symbol-suffixed openblas build, not system ATLAS
|
||||||
- DOWNLOAD_OPENBLAS=1
|
- DOWNLOAD_OPENBLAS=1
|
||||||
- CHECK_BLAS=1
|
- CHECK_BLAS=1
|
||||||
- NPY_USE_BLAS_ILP64=1
|
- NPY_USE_BLAS_ILP64=1
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- gfortran
|
- gfortran
|
||||||
- eatmydata
|
- eatmydata
|
||||||
- libgfortran5
|
- libgfortran5
|
||||||
- libgfortran3
|
- libgfortran3
|
||||||
|
|
||||||
- python: 3.7
|
- python: 3.7
|
||||||
env: USE_WHEEL=1 NPY_RELAXED_STRIDES_DEBUG=1
|
env: USE_WHEEL=1 NPY_RELAXED_STRIDES_DEBUG=1
|
||||||
|
|
||||||
- python: 3.7
|
- python: 3.7
|
||||||
env: NUMPY_EXPERIMENTAL_ARRAY_FUNCTION=0
|
env: NUMPY_EXPERIMENTAL_ARRAY_FUNCTION=0
|
||||||
|
|
||||||
- python: 3.7
|
- python: 3.7
|
||||||
env:
|
env:
|
||||||
- BLAS=None
|
- BLAS=None
|
||||||
- LAPACK=None
|
- LAPACK=None
|
||||||
- ATLAS=None
|
- ATLAS=None
|
||||||
|
|
||||||
- python: 3.7
|
- python: 3.7
|
||||||
os: linux
|
os: linux
|
||||||
arch: ppc64le
|
arch: ppc64le
|
||||||
env:
|
env:
|
||||||
# use OpenBLAS build, not system ATLAS
|
# use OpenBLAS build, not system ATLAS
|
||||||
- DOWNLOAD_OPENBLAS=1
|
- DOWNLOAD_OPENBLAS=1
|
||||||
- ATLAS=None
|
- ATLAS=None
|
||||||
|
|
||||||
- python: 3.7
|
- python: 3.7
|
||||||
os: linux
|
os: linux
|
||||||
arch: s390x
|
arch: s390x
|
||||||
env:
|
env:
|
||||||
# use OpenBLAS build, not system ATLAS
|
# use OpenBLAS build, not system ATLAS
|
||||||
- DOWNLOAD_OPENBLAS=1
|
- DOWNLOAD_OPENBLAS=1
|
||||||
- NPY_USE_BLAS_ILP64=1
|
- NPY_USE_BLAS_ILP64=1
|
||||||
- ATLAS=None
|
- ATLAS=None
|
||||||
|
|
||||||
- python: 3.7
|
- python: 3.7
|
||||||
os: linux
|
os: linux
|
||||||
arch: arm64
|
arch: arm64
|
||||||
env:
|
env:
|
||||||
# use OpenBLAS build, not system ATLAS
|
# use OpenBLAS build, not system ATLAS
|
||||||
- DOWNLOAD_OPENBLAS=1
|
- DOWNLOAD_OPENBLAS=1
|
||||||
- ATLAS=None
|
- ATLAS=None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- ./tools/travis-before-install.sh
|
- ./tools/travis-before-install.sh
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- ./tools/travis-test.sh
|
- ./tools/travis-test.sh
|
||||||
|
|
||||||
after_success:
|
after_success:
|
||||||
- ./tools/travis-upload-wheel.sh
|
- ./tools/travis-upload-wheel.sh
|
||||||
|
|
|
@ -1,157 +1,157 @@
|
||||||
Building and installing NumPy
|
Building and installing NumPy
|
||||||
+++++++++++++++++++++++++++++
|
+++++++++++++++++++++++++++++
|
||||||
|
|
||||||
**IMPORTANT**: the below notes are about building NumPy, which for most users
|
**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
|
is *not* the recommended way to install NumPy. Instead, use either a complete
|
||||||
scientific Python distribution (recommended) or a binary installer - see
|
scientific Python distribution (recommended) or a binary installer - see
|
||||||
https://scipy.org/install.html.
|
https://scipy.org/install.html.
|
||||||
|
|
||||||
|
|
||||||
.. Contents::
|
.. Contents::
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
=============
|
=============
|
||||||
|
|
||||||
Building NumPy requires the following installed software:
|
Building NumPy requires the following installed software:
|
||||||
|
|
||||||
1) Python__ 3.6.x or newer.
|
1) Python__ 3.6.x or newer.
|
||||||
|
|
||||||
Please note that the Python development headers also need to be installed,
|
Please note that the Python development headers also need to be installed,
|
||||||
e.g., on Debian/Ubuntu one needs to install both `python3` and
|
e.g., on Debian/Ubuntu one needs to install both `python3` and
|
||||||
`python3-dev`. On Windows and macOS this is normally not an issue.
|
`python3-dev`. On Windows and macOS this is normally not an issue.
|
||||||
|
|
||||||
2) Cython >= 0.29.21
|
2) Cython >= 0.29.21
|
||||||
|
|
||||||
3) pytest__ (optional) 1.15 or later
|
3) pytest__ (optional) 1.15 or later
|
||||||
|
|
||||||
This is required for testing NumPy, but not for using it.
|
This is required for testing NumPy, but not for using it.
|
||||||
|
|
||||||
4) Hypothesis__ (optional) 5.3.0 or later
|
4) Hypothesis__ (optional) 5.3.0 or later
|
||||||
|
|
||||||
This is required for testing NumPy, but not for using it.
|
This is required for testing NumPy, but not for using it.
|
||||||
|
|
||||||
Python__ http://www.python.org
|
Python__ http://www.python.org
|
||||||
pytest__ http://pytest.readthedocs.io
|
pytest__ http://pytest.readthedocs.io
|
||||||
Hypothesis__ https://hypothesis.readthedocs.io/en/latest/
|
Hypothesis__ https://hypothesis.readthedocs.io/en/latest/
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
If you want to build NumPy in order to work on NumPy itself, use
|
If you want to build NumPy in order to work on NumPy itself, use
|
||||||
``runtests.py``. For more details, see
|
``runtests.py``. For more details, see
|
||||||
https://docs.scipy.org/doc/numpy/dev/development_environment.html
|
https://docs.scipy.org/doc/numpy/dev/development_environment.html
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
More extensive information on building NumPy (and SciPy) is maintained at
|
More extensive information on building NumPy (and SciPy) is maintained at
|
||||||
https://scipy.github.io/devdocs/building/
|
https://scipy.github.io/devdocs/building/
|
||||||
|
|
||||||
|
|
||||||
Basic Installation
|
Basic Installation
|
||||||
==================
|
==================
|
||||||
|
|
||||||
To install NumPy, run::
|
To install NumPy, run::
|
||||||
|
|
||||||
python setup.py build -j 4 install --prefix $HOME/.local
|
python setup.py build -j 4 install --prefix $HOME/.local
|
||||||
|
|
||||||
This will compile numpy on 4 CPUs and install it into the specified prefix.
|
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::
|
To perform an inplace build that can be run from the source folder run::
|
||||||
|
|
||||||
python setup.py build_ext --inplace -j 4
|
python setup.py build_ext --inplace -j 4
|
||||||
|
|
||||||
See `Requirements for Installing Packages <https://packaging.python.org/tutorials/installing-packages/>`_
|
See `Requirements for Installing Packages <https://packaging.python.org/tutorials/installing-packages/>`_
|
||||||
for more details.
|
for more details.
|
||||||
|
|
||||||
The number of build jobs can also be specified via the environment variable
|
The number of build jobs can also be specified via the environment variable
|
||||||
NPY_NUM_BUILD_JOBS.
|
NPY_NUM_BUILD_JOBS.
|
||||||
|
|
||||||
|
|
||||||
Choosing compilers
|
Choosing compilers
|
||||||
==================
|
==================
|
||||||
|
|
||||||
NumPy needs a C compiler, and for development versions also Cython. A Fortran
|
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
|
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
|
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
|
building Scipy a Fortran compiler is needed though, so we include some details
|
||||||
on Fortran compilers in the rest of this section.
|
on Fortran compilers in the rest of this section.
|
||||||
|
|
||||||
On OS X and Linux, all common compilers will work.
|
On OS X and Linux, all common compilers will work.
|
||||||
|
|
||||||
For Fortran, ``gfortran`` works, ``g77`` does not. In case ``g77`` is
|
For Fortran, ``gfortran`` works, ``g77`` does not. In case ``g77`` is
|
||||||
installed then ``g77`` will be detected and used first. To explicitly select
|
installed then ``g77`` will be detected and used first. To explicitly select
|
||||||
``gfortran`` in that case, do::
|
``gfortran`` in that case, do::
|
||||||
|
|
||||||
python setup.py build --fcompiler=gnu95
|
python setup.py build --fcompiler=gnu95
|
||||||
|
|
||||||
Windows
|
Windows
|
||||||
-------
|
-------
|
||||||
|
|
||||||
On Windows, building from source can be difficult (in particular if you need to
|
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
|
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,
|
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.
|
you can either use MSVC + Intel Fortran or the Intel compiler suite.
|
||||||
Intel itself maintains a good `application note
|
Intel itself maintains a good `application note
|
||||||
<https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl>`_
|
<https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl>`_
|
||||||
on this.
|
on this.
|
||||||
|
|
||||||
If you want to use a free compiler toolchain, our current recommendation is to
|
If you want to use a free compiler toolchain, our current recommendation is to
|
||||||
use Docker or Windows subsystem for Linux (WSL). See
|
use Docker or Windows subsystem for Linux (WSL). See
|
||||||
https://scipy.github.io/devdocs/dev/contributor/contributor_toc.html#development-environment
|
https://scipy.github.io/devdocs/dev/contributor/contributor_toc.html#development-environment
|
||||||
for more details.
|
for more details.
|
||||||
|
|
||||||
|
|
||||||
Building with optimized BLAS support
|
Building with optimized BLAS support
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
Configuring which BLAS/LAPACK is used if you have multiple libraries installed,
|
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
|
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
|
``site.cfg`` file. See the ``site.cfg.example`` shipped with NumPy for more
|
||||||
details.
|
details.
|
||||||
|
|
||||||
Windows
|
Windows
|
||||||
-------
|
-------
|
||||||
|
|
||||||
The Intel compilers work with Intel MKL, see the application note linked above.
|
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
|
For an overview of the state of BLAS/LAPACK libraries on Windows, see
|
||||||
`here <https://mingwpy.github.io/blas_lapack.html>`_.
|
`here <https://mingwpy.github.io/blas_lapack.html>`_.
|
||||||
|
|
||||||
macOS
|
macOS
|
||||||
-----
|
-----
|
||||||
|
|
||||||
You will need to install a BLAS/LAPACK library. We recommend using OpenBLAS or
|
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
|
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.
|
likely to drop support for it in the near future.
|
||||||
|
|
||||||
Ubuntu/Debian
|
Ubuntu/Debian
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
For best performance, a development package providing BLAS and CBLAS should be
|
For best performance, a development package providing BLAS and CBLAS should be
|
||||||
installed. Some of the options available are:
|
installed. Some of the options available are:
|
||||||
|
|
||||||
- ``libblas-dev``: reference BLAS (not very optimized)
|
- ``libblas-dev``: reference BLAS (not very optimized)
|
||||||
- ``libatlas-base-dev``: generic tuned ATLAS, it is recommended to tune it to
|
- ``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
|
the available hardware, see /usr/share/doc/libatlas3-base/README.Debian for
|
||||||
instructions
|
instructions
|
||||||
- ``libopenblas-base``: fast and runtime detected so no tuning required but a
|
- ``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
|
very recent version is needed (>=0.2.15 is recommended). Older versions of
|
||||||
OpenBLAS suffered from correctness issues on some CPUs.
|
OpenBLAS suffered from correctness issues on some CPUs.
|
||||||
|
|
||||||
The package linked to when numpy is loaded can be chosen after installation via
|
The package linked to when numpy is loaded can be chosen after installation via
|
||||||
the alternatives mechanism::
|
the alternatives mechanism::
|
||||||
|
|
||||||
update-alternatives --config libblas.so.3
|
update-alternatives --config libblas.so.3
|
||||||
update-alternatives --config liblapack.so.3
|
update-alternatives --config liblapack.so.3
|
||||||
|
|
||||||
Or by preloading a specific BLAS library with::
|
Or by preloading a specific BLAS library with::
|
||||||
|
|
||||||
LD_PRELOAD=/usr/lib/atlas-base/atlas/libblas.so.3 python ...
|
LD_PRELOAD=/usr/lib/atlas-base/atlas/libblas.so.3 python ...
|
||||||
|
|
||||||
|
|
||||||
Build issues
|
Build issues
|
||||||
============
|
============
|
||||||
|
|
||||||
If you run into build issues and need help, the NumPy
|
If you run into build issues and need help, the NumPy
|
||||||
`mailing list <https://scipy.org/scipylib/mailing-lists.html>`_ is the best
|
`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
|
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.
|
even better, a pull request) at https://github.com/numpy/numpy.
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
Copyright (c) 2005-2020, NumPy Developers.
|
Copyright (c) 2005-2020, NumPy Developers.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions are
|
modification, are permitted provided that the following conditions are
|
||||||
met:
|
met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
* Redistributions of source code must retain the above copyright
|
||||||
notice, this list of conditions and the following disclaimer.
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above
|
* Redistributions in binary form must reproduce the above
|
||||||
copyright notice, this list of conditions and the following
|
copyright notice, this list of conditions and the following
|
||||||
disclaimer in the documentation and/or other materials provided
|
disclaimer in the documentation and/or other materials provided
|
||||||
with the distribution.
|
with the distribution.
|
||||||
|
|
||||||
* Neither the name of the NumPy Developers nor the names of any
|
* Neither the name of the NumPy Developers nor the names of any
|
||||||
contributors may be used to endorse or promote products derived
|
contributors may be used to endorse or promote products derived
|
||||||
from this software without specific prior written permission.
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
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
|
The NumPy repository and source distributions bundle several libraries that are
|
||||||
compatibly licensed. We list these here.
|
compatibly licensed. We list these here.
|
||||||
|
|
||||||
Name: Numpydoc
|
Name: Numpydoc
|
||||||
Files: doc/sphinxext/numpydoc/*
|
Files: doc/sphinxext/numpydoc/*
|
||||||
License: BSD-2-Clause
|
License: BSD-2-Clause
|
||||||
For details, see doc/sphinxext/LICENSE.txt
|
For details, see doc/sphinxext/LICENSE.txt
|
||||||
|
|
||||||
Name: scipy-sphinx-theme
|
Name: scipy-sphinx-theme
|
||||||
Files: doc/scipy-sphinx-theme/*
|
Files: doc/scipy-sphinx-theme/*
|
||||||
License: BSD-3-Clause AND PSF-2.0 AND Apache-2.0
|
License: BSD-3-Clause AND PSF-2.0 AND Apache-2.0
|
||||||
For details, see doc/scipy-sphinx-theme/LICENSE.txt
|
For details, see doc/scipy-sphinx-theme/LICENSE.txt
|
||||||
|
|
||||||
Name: lapack-lite
|
Name: lapack-lite
|
||||||
Files: numpy/linalg/lapack_lite/*
|
Files: numpy/linalg/lapack_lite/*
|
||||||
License: BSD-3-Clause
|
License: BSD-3-Clause
|
||||||
For details, see numpy/linalg/lapack_lite/LICENSE.txt
|
For details, see numpy/linalg/lapack_lite/LICENSE.txt
|
||||||
|
|
||||||
Name: tempita
|
Name: tempita
|
||||||
Files: tools/npy_tempita/*
|
Files: tools/npy_tempita/*
|
||||||
License: MIT
|
License: MIT
|
||||||
For details, see tools/npy_tempita/license.txt
|
For details, see tools/npy_tempita/license.txt
|
||||||
|
|
||||||
Name: dragon4
|
Name: dragon4
|
||||||
Files: numpy/core/src/multiarray/dragon4.c
|
Files: numpy/core/src/multiarray/dragon4.c
|
||||||
License: MIT
|
License: MIT
|
||||||
For license text, see numpy/core/src/multiarray/dragon4.c
|
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
|
# Use .add_data_files and .add_data_dir methods in a appropriate
|
||||||
# setup.py files to include non-python files such as documentation,
|
# setup.py files to include non-python files such as documentation,
|
||||||
# data, etc files to distribution (*for installation*).
|
# data, etc files to distribution (*for installation*).
|
||||||
# Avoid using MANIFEST.in for that.
|
# Avoid using MANIFEST.in for that.
|
||||||
#
|
#
|
||||||
include MANIFEST.in
|
include MANIFEST.in
|
||||||
include pyproject.toml
|
include pyproject.toml
|
||||||
include pytest.ini
|
include pytest.ini
|
||||||
include *.txt
|
include *.txt
|
||||||
include README.md
|
include README.md
|
||||||
include site.cfg.example
|
include site.cfg.example
|
||||||
include runtests.py
|
include runtests.py
|
||||||
include tox.ini
|
include tox.ini
|
||||||
include .coveragerc
|
include .coveragerc
|
||||||
include test_requirements.txt
|
include test_requirements.txt
|
||||||
recursive-include numpy/random *.pyx *.pxd *.pyx.in *.pxd.in
|
recursive-include numpy/random *.pyx *.pxd *.pyx.in *.pxd.in
|
||||||
include numpy/random/include/*
|
include numpy/random/include/*
|
||||||
include numpy/*.pxd
|
include numpy/*.pxd
|
||||||
# Add build support that should go in sdist, but not go in bdist/be installed
|
# 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
|
# Note that sub-directories that don't have __init__ are apparently not
|
||||||
# included by 'recursive-include', so list those separately
|
# included by 'recursive-include', so list those separately
|
||||||
recursive-include numpy *
|
recursive-include numpy *
|
||||||
recursive-include numpy/_build_utils *
|
recursive-include numpy/_build_utils *
|
||||||
recursive-include numpy/linalg/lapack_lite *
|
recursive-include numpy/linalg/lapack_lite *
|
||||||
recursive-include tools *
|
recursive-include tools *
|
||||||
# Add sdist files whose use depends on local configuration.
|
# Add sdist files whose use depends on local configuration.
|
||||||
include numpy/core/src/common/cblasfuncs.c
|
include numpy/core/src/common/cblasfuncs.c
|
||||||
include numpy/core/src/common/python_xerbla.c
|
include numpy/core/src/common/python_xerbla.c
|
||||||
# Adding build related files not found by distutils
|
# Adding build related files not found by distutils
|
||||||
recursive-include numpy/core/code_generators *.py *.txt
|
recursive-include numpy/core/code_generators *.py *.txt
|
||||||
recursive-include numpy/core *.in *.h
|
recursive-include numpy/core *.in *.h
|
||||||
# Add documentation and benchmarks: we don't use add_data_dir since we do not
|
# 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
|
# want to include this at installation, only for sdist-generated tarballs
|
||||||
# Docs:
|
# Docs:
|
||||||
recursive-include doc *
|
recursive-include doc *
|
||||||
prune doc/build
|
prune doc/build
|
||||||
prune doc/source/generated
|
prune doc/source/generated
|
||||||
# Benchmarks:
|
# Benchmarks:
|
||||||
recursive-include benchmarks *
|
recursive-include benchmarks *
|
||||||
prune benchmarks/env
|
prune benchmarks/env
|
||||||
prune benchmarks/results
|
prune benchmarks/results
|
||||||
prune benchmarks/html
|
prune benchmarks/html
|
||||||
prune benchmarks/numpy
|
prune benchmarks/numpy
|
||||||
# Exclude generated files
|
# Exclude generated files
|
||||||
prune */__pycache__
|
prune */__pycache__
|
||||||
global-exclude *.pyc *.pyo *.pyd *.swp *.bak *~
|
global-exclude *.pyc *.pyo *.pyd *.swp *.bak *~
|
||||||
# Exclude license file that we append to the main license when running
|
# Exclude license file that we append to the main license when running
|
||||||
# `python setup.py sdist`
|
# `python setup.py sdist`
|
||||||
exclude LICENSES_bundled.txt
|
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">
|
# <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)](
|
[![Travis](https://img.shields.io/travis/numpy/numpy/master.svg?label=Travis%20CI)](
|
||||||
https://travis-ci.org/numpy/numpy)
|
https://travis-ci.org/numpy/numpy)
|
||||||
[![Azure](https://dev.azure.com/numpy/numpy/_apis/build/status/azure-pipeline%20numpy.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)
|
https://dev.azure.com/numpy/numpy/_build/latest?definitionId=5)
|
||||||
[![codecov](https://codecov.io/gh/numpy/numpy/branch/master/graph/badge.svg)](
|
[![codecov](https://codecov.io/gh/numpy/numpy/branch/master/graph/badge.svg)](
|
||||||
https://codecov.io/gh/numpy/numpy)
|
https://codecov.io/gh/numpy/numpy)
|
||||||
|
|
||||||
NumPy is the fundamental package needed for scientific computing with Python.
|
NumPy is the fundamental package needed for scientific computing with Python.
|
||||||
|
|
||||||
- **Website:** https://www.numpy.org
|
- **Website:** https://www.numpy.org
|
||||||
- **Documentation:** https://numpy.org/doc
|
- **Documentation:** https://numpy.org/doc
|
||||||
- **Mailing list:** https://mail.python.org/mailman/listinfo/numpy-discussion
|
- **Mailing list:** https://mail.python.org/mailman/listinfo/numpy-discussion
|
||||||
- **Source code:** https://github.com/numpy/numpy
|
- **Source code:** https://github.com/numpy/numpy
|
||||||
- **Contributing:** https://www.numpy.org/devdocs/dev/index.html
|
- **Contributing:** https://www.numpy.org/devdocs/dev/index.html
|
||||||
- **Bug reports:** https://github.com/numpy/numpy/issues
|
- **Bug reports:** https://github.com/numpy/numpy/issues
|
||||||
- **Report a security vulnerability:** https://tidelift.com/docs/security
|
- **Report a security vulnerability:** https://tidelift.com/docs/security
|
||||||
|
|
||||||
It provides:
|
It provides:
|
||||||
|
|
||||||
- a powerful N-dimensional array object
|
- a powerful N-dimensional array object
|
||||||
- sophisticated (broadcasting) functions
|
- sophisticated (broadcasting) functions
|
||||||
- tools for integrating C/C++ and Fortran code
|
- tools for integrating C/C++ and Fortran code
|
||||||
- useful linear algebra, Fourier transform, and random number capabilities
|
- useful linear algebra, Fourier transform, and random number capabilities
|
||||||
|
|
||||||
Testing:
|
Testing:
|
||||||
|
|
||||||
- NumPy versions ≥ 1.15 require `pytest`
|
- NumPy versions ≥ 1.15 require `pytest`
|
||||||
- NumPy versions < 1.15 require `nose`
|
- NumPy versions < 1.15 require `nose`
|
||||||
|
|
||||||
Tests can then be run after installation with:
|
Tests can then be run after installation with:
|
||||||
|
|
||||||
python -c 'import numpy; numpy.test()'
|
python -c 'import numpy; numpy.test()'
|
||||||
|
|
||||||
|
|
||||||
Call for Contributions
|
Call for Contributions
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
NumPy appreciates help from a wide range of different backgrounds.
|
NumPy appreciates help from a wide range of different backgrounds.
|
||||||
Work such as high level documentation or website improvements are valuable
|
Work such as high level documentation or website improvements are valuable
|
||||||
and we would like to grow our team with people filling these roles.
|
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
|
Small improvements or fixes are always appreciated and issues labeled as easy
|
||||||
may be a good starting point.
|
may be a good starting point.
|
||||||
If you are considering larger contributions outside the traditional coding work,
|
If you are considering larger contributions outside the traditional coding work,
|
||||||
please contact us through the mailing list.
|
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)
|
[![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
|
Travis Oliphant for the NumPy core, the NumPy guide, various
|
||||||
bug-fixes and code contributions.
|
bug-fixes and code contributions.
|
||||||
Paul Dubois, who implemented the original Masked Arrays.
|
Paul Dubois, who implemented the original Masked Arrays.
|
||||||
Pearu Peterson for f2py, numpy.distutils and help with code
|
Pearu Peterson for f2py, numpy.distutils and help with code
|
||||||
organization.
|
organization.
|
||||||
Robert Kern for mtrand, bug fixes, help with distutils, code
|
Robert Kern for mtrand, bug fixes, help with distutils, code
|
||||||
organization, strided tricks and much more.
|
organization, strided tricks and much more.
|
||||||
Eric Jones for planning and code contributions.
|
Eric Jones for planning and code contributions.
|
||||||
Fernando Perez for code snippets, ideas, bugfixes, and testing.
|
Fernando Perez for code snippets, ideas, bugfixes, and testing.
|
||||||
Ed Schofield for matrix.py patches, bugfixes, testing, and docstrings.
|
Ed Schofield for matrix.py patches, bugfixes, testing, and docstrings.
|
||||||
Robert Cimrman for array set operations and numpy.distutils help.
|
Robert Cimrman for array set operations and numpy.distutils help.
|
||||||
John Hunter for code snippets from matplotlib.
|
John Hunter for code snippets from matplotlib.
|
||||||
Chris Hanley for help with records.py, testing, and bug fixes.
|
Chris Hanley for help with records.py, testing, and bug fixes.
|
||||||
Travis Vaught for administration, community coordination and
|
Travis Vaught for administration, community coordination and
|
||||||
marketing.
|
marketing.
|
||||||
Joe Cooper, Jeff Strunk for administration.
|
Joe Cooper, Jeff Strunk for administration.
|
||||||
Eric Firing for bugfixes.
|
Eric Firing for bugfixes.
|
||||||
Arnd Baecker for 64-bit testing.
|
Arnd Baecker for 64-bit testing.
|
||||||
David Cooke for many code improvements including the auto-generated C-API,
|
David Cooke for many code improvements including the auto-generated C-API,
|
||||||
and optimizations.
|
and optimizations.
|
||||||
Andrew Straw for help with the web-page, documentation, packaging and
|
Andrew Straw for help with the web-page, documentation, packaging and
|
||||||
testing.
|
testing.
|
||||||
Alexander Belopolsky (Sasha) for Masked array bug-fixes and tests,
|
Alexander Belopolsky (Sasha) for Masked array bug-fixes and tests,
|
||||||
rank-0 array improvements, scalar math help and other code additions.
|
rank-0 array improvements, scalar math help and other code additions.
|
||||||
Francesc Altet for unicode, work on nested record arrays, and bug-fixes.
|
Francesc Altet for unicode, work on nested record arrays, and bug-fixes.
|
||||||
Tim Hochberg for getting the build working on MSVC, optimization
|
Tim Hochberg for getting the build working on MSVC, optimization
|
||||||
improvements, and code review.
|
improvements, and code review.
|
||||||
Charles (Chuck) Harris for the sorting code originally written for
|
Charles (Chuck) Harris for the sorting code originally written for
|
||||||
Numarray and for improvements to polyfit, many bug fixes, delving
|
Numarray and for improvements to polyfit, many bug fixes, delving
|
||||||
into the C code, release management, and documentation.
|
into the C code, release management, and documentation.
|
||||||
David Huard for histogram improvements including 2-D and d-D code and
|
David Huard for histogram improvements including 2-D and d-D code and
|
||||||
other bug-fixes.
|
other bug-fixes.
|
||||||
Stefan van der Walt for numerous bug-fixes, testing and documentation.
|
Stefan van der Walt for numerous bug-fixes, testing and documentation.
|
||||||
Albert Strasheim for documentation, bug-fixes, regression tests and
|
Albert Strasheim for documentation, bug-fixes, regression tests and
|
||||||
Valgrind expertise.
|
Valgrind expertise.
|
||||||
David Cournapeau for build support, doc-and-bug fixes, and code
|
David Cournapeau for build support, doc-and-bug fixes, and code
|
||||||
contributions including fast_clipping.
|
contributions including fast_clipping.
|
||||||
Jarrod Millman for release management, community coordination, and code
|
Jarrod Millman for release management, community coordination, and code
|
||||||
clean up.
|
clean up.
|
||||||
Chris Burns for work on memory mapped arrays and bug-fixes.
|
Chris Burns for work on memory mapped arrays and bug-fixes.
|
||||||
Pauli Virtanen for documentation, bug-fixes, lookfor and the
|
Pauli Virtanen for documentation, bug-fixes, lookfor and the
|
||||||
documentation editor.
|
documentation editor.
|
||||||
A.M. Archibald for no-copy-reshape code, strided array tricks,
|
A.M. Archibald for no-copy-reshape code, strided array tricks,
|
||||||
documentation and bug-fixes.
|
documentation and bug-fixes.
|
||||||
Pierre Gerard-Marchant for rewriting masked array functionality.
|
Pierre Gerard-Marchant for rewriting masked array functionality.
|
||||||
Roberto de Almeida for the buffered array iterator.
|
Roberto de Almeida for the buffered array iterator.
|
||||||
Alan McIntyre for updating the NumPy test framework to use nose, improve
|
Alan McIntyre for updating the NumPy test framework to use nose, improve
|
||||||
the test coverage, and enhancing the test system documentation.
|
the test coverage, and enhancing the test system documentation.
|
||||||
Joe Harrington for administering the 2008 Documentation Sprint.
|
Joe Harrington for administering the 2008 Documentation Sprint.
|
||||||
Mark Wiebe for the new NumPy iterator, the float16 data type, improved
|
Mark Wiebe for the new NumPy iterator, the float16 data type, improved
|
||||||
low-level data type operations, and other NumPy core improvements.
|
low-level data type operations, and other NumPy core improvements.
|
||||||
|
|
||||||
NumPy is based on the Numeric (Jim Hugunin, Paul Dubois, Konrad
|
NumPy is based on the Numeric (Jim Hugunin, Paul Dubois, Konrad
|
||||||
Hinsen, and David Ascher) and NumArray (Perry Greenfield, J Todd
|
Hinsen, and David Ascher) and NumArray (Perry Greenfield, J Todd
|
||||||
Miller, Rick White and Paul Barrett) projects. We thank them for
|
Miller, Rick White and Paul Barrett) projects. We thank them for
|
||||||
paving the way ahead.
|
paving the way ahead.
|
||||||
|
|
||||||
Institutions
|
Institutions
|
||||||
------------
|
------------
|
||||||
|
|
||||||
Enthought for providing resources and finances for development of NumPy.
|
Enthought for providing resources and finances for development of NumPy.
|
||||||
UC Berkeley for providing travel money and hosting numerous sprints.
|
UC Berkeley for providing travel money and hosting numerous sprints.
|
||||||
The University of Central Florida for funding the 2008 Documentation Marathon.
|
The University of Central Florida for funding the 2008 Documentation Marathon.
|
||||||
The University of Stellenbosch for hosting the buildbot.
|
The University of Stellenbosch for hosting the buildbot.
|
||||||
|
|
|
@ -1,277 +1,277 @@
|
||||||
trigger:
|
trigger:
|
||||||
# start a new build for every push
|
# start a new build for every push
|
||||||
batch: False
|
batch: False
|
||||||
branches:
|
branches:
|
||||||
include:
|
include:
|
||||||
- master
|
- master
|
||||||
- maintenance/*
|
- maintenance/*
|
||||||
|
|
||||||
pr:
|
pr:
|
||||||
branches:
|
branches:
|
||||||
include:
|
include:
|
||||||
- '*' # must quote since "*" is a YAML reserved character; we want a string
|
- '*' # must quote since "*" is a YAML reserved character; we want a string
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- stage: InitialTests
|
- stage: InitialTests
|
||||||
jobs:
|
jobs:
|
||||||
- job: WindowsFast
|
- job: WindowsFast
|
||||||
pool:
|
pool:
|
||||||
vmImage: 'VS2017-Win2016'
|
vmImage: 'VS2017-Win2016'
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
Python36-64bit-fast:
|
Python36-64bit-fast:
|
||||||
PYTHON_VERSION: '3.6'
|
PYTHON_VERSION: '3.6'
|
||||||
PYTHON_ARCH: 'x64'
|
PYTHON_ARCH: 'x64'
|
||||||
TEST_MODE: fast
|
TEST_MODE: fast
|
||||||
BITS: 64
|
BITS: 64
|
||||||
steps:
|
steps:
|
||||||
- template: azure-steps-windows.yml
|
- template: azure-steps-windows.yml
|
||||||
|
|
||||||
- stage: ComprehensiveTests
|
- stage: ComprehensiveTests
|
||||||
jobs:
|
jobs:
|
||||||
- job: Linux_Python_38_32bit_full_with_asserts
|
- job: Linux_Python_38_32bit_full_with_asserts
|
||||||
pool:
|
pool:
|
||||||
vmImage: 'ubuntu-18.04'
|
vmImage: 'ubuntu-18.04'
|
||||||
steps:
|
steps:
|
||||||
- script: |
|
- script: |
|
||||||
docker pull quay.io/pypa/manylinux2010_i686
|
docker pull quay.io/pypa/manylinux2010_i686
|
||||||
docker run -v $(pwd):/numpy -e CFLAGS="-msse2 -std=c99 -UNDEBUG" \
|
docker run -v $(pwd):/numpy -e CFLAGS="-msse2 -std=c99 -UNDEBUG" \
|
||||||
-e F77=gfortran-5 -e F90=gfortran-5 quay.io/pypa/manylinux2010_i686 \
|
-e F77=gfortran-5 -e F90=gfortran-5 quay.io/pypa/manylinux2010_i686 \
|
||||||
/bin/bash -xc "cd numpy && \
|
/bin/bash -xc "cd numpy && \
|
||||||
/opt/python/cp38-cp38/bin/python -mvenv venv &&\
|
/opt/python/cp38-cp38/bin/python -mvenv venv &&\
|
||||||
source venv/bin/activate && \
|
source venv/bin/activate && \
|
||||||
target=\$(python3 tools/openblas_support.py) && \
|
target=\$(python3 tools/openblas_support.py) && \
|
||||||
cp -r \$target/lib/* /usr/lib && \
|
cp -r \$target/lib/* /usr/lib && \
|
||||||
cp \$target/include/* /usr/include && \
|
cp \$target/include/* /usr/include && \
|
||||||
python3 -m pip install -r test_requirements.txt && \
|
python3 -m pip install -r test_requirements.txt && \
|
||||||
echo CFLAGS \$CFLAGS && \
|
echo CFLAGS \$CFLAGS && \
|
||||||
python3 -m pip install -v . && \
|
python3 -m pip install -v . && \
|
||||||
python3 runtests.py -n --debug-info --mode=full -- -rsx --junitxml=junit/test-results.xml && \
|
python3 runtests.py -n --debug-info --mode=full -- -rsx --junitxml=junit/test-results.xml && \
|
||||||
python3 tools/openblas_support.py --check_version"
|
python3 tools/openblas_support.py --check_version"
|
||||||
displayName: 'Run 32-bit manylinux2010 Docker Build / Tests'
|
displayName: 'Run 32-bit manylinux2010 Docker Build / Tests'
|
||||||
- task: PublishTestResults@2
|
- task: PublishTestResults@2
|
||||||
condition: succeededOrFailed()
|
condition: succeededOrFailed()
|
||||||
inputs:
|
inputs:
|
||||||
testResultsFiles: '**/test-*.xml'
|
testResultsFiles: '**/test-*.xml'
|
||||||
failTaskOnFailedTests: true
|
failTaskOnFailedTests: true
|
||||||
testRunTitle: 'Publish test results for Python 3.8-32 bit full Linux'
|
testRunTitle: 'Publish test results for Python 3.8-32 bit full Linux'
|
||||||
- job: macOS
|
- job: macOS
|
||||||
pool:
|
pool:
|
||||||
# NOTE: at time of writing, there is a danger
|
# NOTE: at time of writing, there is a danger
|
||||||
# that using an invalid vmIMage string for macOS
|
# that using an invalid vmIMage string for macOS
|
||||||
# image silently redirects to a Windows build on Azure;
|
# image silently redirects to a Windows build on Azure;
|
||||||
# for now, use the only image name officially present in
|
# for now, use the only image name officially present in
|
||||||
# the docs even though i.e., numba uses another in their
|
# the docs even though i.e., numba uses another in their
|
||||||
# azure config for mac os -- Microsoft has indicated
|
# azure config for mac os -- Microsoft has indicated
|
||||||
# they will patch this issue
|
# they will patch this issue
|
||||||
vmImage: macOS-10.14
|
vmImage: macOS-10.14
|
||||||
strategy:
|
strategy:
|
||||||
maxParallel: 3
|
maxParallel: 3
|
||||||
matrix:
|
matrix:
|
||||||
Python36:
|
Python36:
|
||||||
PYTHON_VERSION: '3.6'
|
PYTHON_VERSION: '3.6'
|
||||||
USE_OPENBLAS: '1'
|
USE_OPENBLAS: '1'
|
||||||
Python39:
|
Python39:
|
||||||
PYTHON_VERSION: '3.9'
|
PYTHON_VERSION: '3.9'
|
||||||
USE_OPENBLAS: '1'
|
USE_OPENBLAS: '1'
|
||||||
Python36-ILP64:
|
Python36-ILP64:
|
||||||
PYTHON_VERSION: '3.6'
|
PYTHON_VERSION: '3.6'
|
||||||
NPY_USE_BLAS_ILP64: '1'
|
NPY_USE_BLAS_ILP64: '1'
|
||||||
USE_OPENBLAS: '1'
|
USE_OPENBLAS: '1'
|
||||||
USE_XCODE_10: '1'
|
USE_XCODE_10: '1'
|
||||||
Accelerate:
|
Accelerate:
|
||||||
PYTHON_VERSION: '3.6'
|
PYTHON_VERSION: '3.6'
|
||||||
USE_OPENBLAS: '0'
|
USE_OPENBLAS: '0'
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
# the @0 refers to the (major) version of the *task* on Microsoft's
|
# 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
|
# end, not the order in the build matrix nor anything to do
|
||||||
# with version of Python selected
|
# with version of Python selected
|
||||||
- task: UsePythonVersion@0
|
- task: UsePythonVersion@0
|
||||||
inputs:
|
inputs:
|
||||||
versionSpec: $(PYTHON_VERSION)
|
versionSpec: $(PYTHON_VERSION)
|
||||||
addToPath: true
|
addToPath: true
|
||||||
architecture: 'x64'
|
architecture: 'x64'
|
||||||
- script: |
|
- script: |
|
||||||
set -xe
|
set -xe
|
||||||
[ -n "$USE_XCODE_10" ] && /bin/bash -c "sudo xcode-select -s /Applications/Xcode_10.app/Contents/Developer"
|
[ -n "$USE_XCODE_10" ] && /bin/bash -c "sudo xcode-select -s /Applications/Xcode_10.app/Contents/Developer"
|
||||||
clang --version
|
clang --version
|
||||||
displayName: 'report clang version'
|
displayName: 'report clang version'
|
||||||
# NOTE: might be better if we could avoid installing
|
# NOTE: might be better if we could avoid installing
|
||||||
# two C compilers, but with homebrew looks like we're
|
# two C compilers, but with homebrew looks like we're
|
||||||
# now stuck getting the full gcc toolchain instead of
|
# now stuck getting the full gcc toolchain instead of
|
||||||
# just pulling in gfortran
|
# just pulling in gfortran
|
||||||
- script: |
|
- script: |
|
||||||
set -xe
|
set -xe
|
||||||
# same version of gfortran as the open-libs and numpy-wheel builds
|
# 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
|
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)
|
GFORTRAN_SHA256=$(shasum -a 256 gfortran.dmg)
|
||||||
KNOWN_SHA256="d2d5ca5ba8332d63bbe23a07201c4a0a5d7e09ee56f0298a96775f928c3c4b30 gfortran.dmg"
|
KNOWN_SHA256="d2d5ca5ba8332d63bbe23a07201c4a0a5d7e09ee56f0298a96775f928c3c4b30 gfortran.dmg"
|
||||||
if [ "$GFORTRAN_SHA256" != "$KNOWN_SHA256" ]; then
|
if [ "$GFORTRAN_SHA256" != "$KNOWN_SHA256" ]; then
|
||||||
echo sha256 mismatch
|
echo sha256 mismatch
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
hdiutil attach -mountpoint /Volumes/gfortran gfortran.dmg
|
hdiutil attach -mountpoint /Volumes/gfortran gfortran.dmg
|
||||||
sudo installer -pkg /Volumes/gfortran/gfortran.pkg -target /
|
sudo installer -pkg /Volumes/gfortran/gfortran.pkg -target /
|
||||||
otool -L /usr/local/gfortran/lib/libgfortran.3.dylib
|
otool -L /usr/local/gfortran/lib/libgfortran.3.dylib
|
||||||
# Manually symlink gfortran-4.9 to plain gfortran for f2py.
|
# Manually symlink gfortran-4.9 to plain gfortran for f2py.
|
||||||
# No longer needed after Feb 13 2020 as gfortran is already present
|
# No longer needed after Feb 13 2020 as gfortran is already present
|
||||||
# and the attempted link errors. Keep this for future reference.
|
# and the attempted link errors. Keep this for future reference.
|
||||||
# ln -s /usr/local/bin/gfortran-4.9 /usr/local/bin/gfortran
|
# ln -s /usr/local/bin/gfortran-4.9 /usr/local/bin/gfortran
|
||||||
displayName: 'make libgfortran available on mac os for openblas'
|
displayName: 'make libgfortran available on mac os for openblas'
|
||||||
# use the pre-built openblas binary that most closely
|
# use the pre-built openblas binary that most closely
|
||||||
# matches our MacOS wheel builds -- currently based
|
# matches our MacOS wheel builds -- currently based
|
||||||
# primarily on file size / name details
|
# primarily on file size / name details
|
||||||
- script: |
|
- script: |
|
||||||
set -xe
|
set -xe
|
||||||
target=$(python tools/openblas_support.py)
|
target=$(python tools/openblas_support.py)
|
||||||
ls -lR $target
|
ls -lR $target
|
||||||
# manually link to appropriate system paths
|
# manually link to appropriate system paths
|
||||||
cp $target/lib/lib* /usr/local/lib/
|
cp $target/lib/lib* /usr/local/lib/
|
||||||
cp $target/include/* /usr/local/include/
|
cp $target/include/* /usr/local/include/
|
||||||
otool -L /usr/local/lib/libopenblas*
|
otool -L /usr/local/lib/libopenblas*
|
||||||
displayName: 'install pre-built openblas'
|
displayName: 'install pre-built openblas'
|
||||||
condition: eq(variables['USE_OPENBLAS'], '1')
|
condition: eq(variables['USE_OPENBLAS'], '1')
|
||||||
- script: python -m pip install --upgrade pip 'setuptools<49.2.0' wheel
|
- script: python -m pip install --upgrade pip 'setuptools<49.2.0' wheel
|
||||||
displayName: 'Install tools'
|
displayName: 'Install tools'
|
||||||
- script: |
|
- script: |
|
||||||
python -m pip install -r test_requirements.txt
|
python -m pip install -r test_requirements.txt
|
||||||
python -m pip install vulture docutils sphinx==2.2.0 numpydoc
|
python -m pip install vulture docutils sphinx==2.2.0 numpydoc
|
||||||
displayName: 'Install dependencies; some are optional to avoid test skips'
|
displayName: 'Install dependencies; some are optional to avoid test skips'
|
||||||
- script: /bin/bash -c "! vulture . --min-confidence 100 --exclude doc/,numpy/distutils/ | grep 'unreachable'"
|
- script: /bin/bash -c "! vulture . --min-confidence 100 --exclude doc/,numpy/distutils/ | grep 'unreachable'"
|
||||||
displayName: 'Check for unreachable code paths in Python modules'
|
displayName: 'Check for unreachable code paths in Python modules'
|
||||||
# prefer usage of clang over gcc proper
|
# prefer usage of clang over gcc proper
|
||||||
# to match likely scenario on many user mac machines
|
# to match likely scenario on many user mac machines
|
||||||
- script: python setup.py build -j 4 build_src --verbose-cfg install
|
- script: python setup.py build -j 4 build_src --verbose-cfg install
|
||||||
displayName: 'Build NumPy'
|
displayName: 'Build NumPy'
|
||||||
env:
|
env:
|
||||||
BLAS: None
|
BLAS: None
|
||||||
LAPACK: None
|
LAPACK: None
|
||||||
ATLAS: None
|
ATLAS: None
|
||||||
ACCELERATE: None
|
ACCELERATE: None
|
||||||
CC: /usr/bin/clang
|
CC: /usr/bin/clang
|
||||||
condition: eq(variables['USE_OPENBLAS'], '1')
|
condition: eq(variables['USE_OPENBLAS'], '1')
|
||||||
- script: python setup.py build -j 4 build_ext --inplace install
|
- script: python setup.py build -j 4 build_ext --inplace install
|
||||||
displayName: 'Build NumPy without OpenBLAS'
|
displayName: 'Build NumPy without OpenBLAS'
|
||||||
env:
|
env:
|
||||||
BLAS: None
|
BLAS: None
|
||||||
LAPACK: None
|
LAPACK: None
|
||||||
ATLAS: None
|
ATLAS: None
|
||||||
CC: /usr/bin/clang
|
CC: /usr/bin/clang
|
||||||
condition: eq(variables['USE_OPENBLAS'], '0')
|
condition: eq(variables['USE_OPENBLAS'], '0')
|
||||||
# wait until after dev build of NumPy to pip
|
# wait until after dev build of NumPy to pip
|
||||||
# install matplotlib to avoid pip install of older numpy
|
# install matplotlib to avoid pip install of older numpy
|
||||||
- script: python -m pip install matplotlib
|
- script: python -m pip install matplotlib
|
||||||
displayName: 'Install matplotlib before refguide run'
|
displayName: 'Install matplotlib before refguide run'
|
||||||
- script: python runtests.py -g --refguide-check
|
- script: python runtests.py -g --refguide-check
|
||||||
displayName: 'Run Refuide Check'
|
displayName: 'Run Refuide Check'
|
||||||
condition: eq(variables['USE_OPENBLAS'], '1')
|
condition: eq(variables['USE_OPENBLAS'], '1')
|
||||||
- script: python runtests.py -n --mode=full -- -rsx --junitxml=junit/test-results.xml
|
- script: python runtests.py -n --mode=full -- -rsx --junitxml=junit/test-results.xml
|
||||||
displayName: 'Run Full NumPy Test Suite'
|
displayName: 'Run Full NumPy Test Suite'
|
||||||
condition: eq(variables['USE_OPENBLAS'], '1')
|
condition: eq(variables['USE_OPENBLAS'], '1')
|
||||||
- bash: python tools/openblas_support.py --check_version
|
- bash: python tools/openblas_support.py --check_version
|
||||||
displayName: 'Verify OpenBLAS version'
|
displayName: 'Verify OpenBLAS version'
|
||||||
condition: eq(variables['USE_OPENBLAS'], '1')
|
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
|
# import doesn't work when in numpy src directory , so do a pip dev install of build lib to test
|
||||||
- script: |
|
- script: |
|
||||||
#!/bin/bash -v
|
#!/bin/bash -v
|
||||||
set +e
|
set +e
|
||||||
python -c "import numpy as np" > test_output.log 2>&1
|
python -c "import numpy as np" > test_output.log 2>&1
|
||||||
check_output_code=$?
|
check_output_code=$?
|
||||||
cat test_output.log
|
cat test_output.log
|
||||||
grep "buggy Accelerate backend" test_output.log
|
grep "buggy Accelerate backend" test_output.log
|
||||||
check_message=$?
|
check_message=$?
|
||||||
if [ $check_output_code == 1 ] && [ $check_message == 0 ]; then exit 0; else exit 1;fi
|
if [ $check_output_code == 1 ] && [ $check_message == 0 ]; then exit 0; else exit 1;fi
|
||||||
displayName: "Check if numpy import fails with accelerate"
|
displayName: "Check if numpy import fails with accelerate"
|
||||||
condition: eq(variables['USE_OPENBLAS'], '0')
|
condition: eq(variables['USE_OPENBLAS'], '0')
|
||||||
- task: PublishTestResults@2
|
- task: PublishTestResults@2
|
||||||
condition: succeededOrFailed()
|
condition: succeededOrFailed()
|
||||||
inputs:
|
inputs:
|
||||||
testResultsFiles: '**/test-*.xml'
|
testResultsFiles: '**/test-*.xml'
|
||||||
failTaskOnFailedTests: true
|
failTaskOnFailedTests: true
|
||||||
testRunTitle: 'Publish test results for Python 3.6 64-bit full Mac OS'
|
testRunTitle: 'Publish test results for Python 3.6 64-bit full Mac OS'
|
||||||
- job: Windows
|
- job: Windows
|
||||||
pool:
|
pool:
|
||||||
vmImage: 'VS2017-Win2016'
|
vmImage: 'VS2017-Win2016'
|
||||||
strategy:
|
strategy:
|
||||||
maxParallel: 6
|
maxParallel: 6
|
||||||
matrix:
|
matrix:
|
||||||
Python36-32bit-fast:
|
Python36-32bit-fast:
|
||||||
PYTHON_VERSION: '3.6'
|
PYTHON_VERSION: '3.6'
|
||||||
PYTHON_ARCH: 'x86'
|
PYTHON_ARCH: 'x86'
|
||||||
TEST_MODE: fast
|
TEST_MODE: fast
|
||||||
BITS: 32
|
BITS: 32
|
||||||
Python37-32bit-fast:
|
Python37-32bit-fast:
|
||||||
PYTHON_VERSION: '3.7'
|
PYTHON_VERSION: '3.7'
|
||||||
PYTHON_ARCH: 'x86'
|
PYTHON_ARCH: 'x86'
|
||||||
TEST_MODE: fast
|
TEST_MODE: fast
|
||||||
BITS: 32
|
BITS: 32
|
||||||
Python38-32bit-fast:
|
Python38-32bit-fast:
|
||||||
PYTHON_VERSION: '3.8'
|
PYTHON_VERSION: '3.8'
|
||||||
PYTHON_ARCH: 'x86'
|
PYTHON_ARCH: 'x86'
|
||||||
TEST_MODE: fast
|
TEST_MODE: fast
|
||||||
BITS: 32
|
BITS: 32
|
||||||
Python39-32bit-fast:
|
Python39-32bit-fast:
|
||||||
PYTHON_VERSION: '3.9'
|
PYTHON_VERSION: '3.9'
|
||||||
PYTHON_ARCH: 'x86'
|
PYTHON_ARCH: 'x86'
|
||||||
TEST_MODE: fast
|
TEST_MODE: fast
|
||||||
BITS: 32
|
BITS: 32
|
||||||
Python36-64bit-full:
|
Python36-64bit-full:
|
||||||
PYTHON_VERSION: '3.6'
|
PYTHON_VERSION: '3.6'
|
||||||
PYTHON_ARCH: 'x64'
|
PYTHON_ARCH: 'x64'
|
||||||
TEST_MODE: full
|
TEST_MODE: full
|
||||||
BITS: 64
|
BITS: 64
|
||||||
Python37-64bit-full:
|
Python37-64bit-full:
|
||||||
PYTHON_VERSION: '3.7'
|
PYTHON_VERSION: '3.7'
|
||||||
PYTHON_ARCH: 'x64'
|
PYTHON_ARCH: 'x64'
|
||||||
TEST_MODE: full
|
TEST_MODE: full
|
||||||
BITS: 64
|
BITS: 64
|
||||||
Python38-64bit-full:
|
Python38-64bit-full:
|
||||||
PYTHON_VERSION: '3.8'
|
PYTHON_VERSION: '3.8'
|
||||||
PYTHON_ARCH: 'x64'
|
PYTHON_ARCH: 'x64'
|
||||||
TEST_MODE: full
|
TEST_MODE: full
|
||||||
BITS: 64
|
BITS: 64
|
||||||
Python39-64bit-full:
|
Python39-64bit-full:
|
||||||
PYTHON_VERSION: '3.9'
|
PYTHON_VERSION: '3.9'
|
||||||
PYTHON_ARCH: 'x64'
|
PYTHON_ARCH: 'x64'
|
||||||
TEST_MODE: full
|
TEST_MODE: full
|
||||||
BITS: 64
|
BITS: 64
|
||||||
NPY_USE_BLAS_ILP64: '1'
|
NPY_USE_BLAS_ILP64: '1'
|
||||||
OPENBLAS_SUFFIX: '64_'
|
OPENBLAS_SUFFIX: '64_'
|
||||||
steps:
|
steps:
|
||||||
- template: azure-steps-windows.yml
|
- template: azure-steps-windows.yml
|
||||||
- job: Linux_PyPy3
|
- job: Linux_PyPy3
|
||||||
pool:
|
pool:
|
||||||
vmIMage: 'ubuntu-18.04'
|
vmIMage: 'ubuntu-18.04'
|
||||||
steps:
|
steps:
|
||||||
- script: source tools/pypy-test.sh
|
- script: source tools/pypy-test.sh
|
||||||
displayName: 'Run PyPy3 Build / Tests'
|
displayName: 'Run PyPy3 Build / Tests'
|
||||||
- task: PublishTestResults@2
|
- task: PublishTestResults@2
|
||||||
condition: succeededOrFailed()
|
condition: succeededOrFailed()
|
||||||
inputs:
|
inputs:
|
||||||
testResultsFiles: '**/test-*.xml'
|
testResultsFiles: '**/test-*.xml'
|
||||||
testRunTitle: 'Publish test results for PyPy3'
|
testRunTitle: 'Publish test results for PyPy3'
|
||||||
failTaskOnFailedTests: true
|
failTaskOnFailedTests: true
|
||||||
- job: Linux_gcc48
|
- job: Linux_gcc48
|
||||||
pool:
|
pool:
|
||||||
vmImage: 'ubuntu-18.04'
|
vmImage: 'ubuntu-18.04'
|
||||||
steps:
|
steps:
|
||||||
- script: |
|
- script: |
|
||||||
if ! `gcc-4.8 2>/dev/null`; then
|
if ! `gcc-4.8 2>/dev/null`; then
|
||||||
sudo apt install gcc-4.8
|
sudo apt install gcc-4.8
|
||||||
fi
|
fi
|
||||||
displayName: 'add gcc 4.8'
|
displayName: 'add gcc 4.8'
|
||||||
- script: |
|
- script: |
|
||||||
# python3 has no setuptools, so install one to get us going
|
# 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 --upgrade pip 'setuptools<49.2.0'
|
||||||
python3 -m pip install --user -r test_requirements.txt
|
python3 -m pip install --user -r test_requirements.txt
|
||||||
CPPFLAGS='' CC=gcc-4.8 F77=gfortran-5 F90=gfortran-5 \
|
CPPFLAGS='' CC=gcc-4.8 F77=gfortran-5 F90=gfortran-5 \
|
||||||
python3 runtests.py --debug-info --mode=full -- -rsx --junitxml=junit/test-results.xml
|
python3 runtests.py --debug-info --mode=full -- -rsx --junitxml=junit/test-results.xml
|
||||||
displayName: 'Run gcc4.8 Build / Tests'
|
displayName: 'Run gcc4.8 Build / Tests'
|
||||||
- task: PublishTestResults@2
|
- task: PublishTestResults@2
|
||||||
condition: succeededOrFailed()
|
condition: succeededOrFailed()
|
||||||
inputs:
|
inputs:
|
||||||
testResultsFiles: '**/test-*.xml'
|
testResultsFiles: '**/test-*.xml'
|
||||||
failTaskOnFailedTests: true
|
failTaskOnFailedTests: true
|
||||||
testRunTitle: 'Publish test results for gcc 4.8'
|
testRunTitle: 'Publish test results for gcc 4.8'
|
||||||
|
|
||||||
|
|
|
@ -1,72 +1,72 @@
|
||||||
steps:
|
steps:
|
||||||
- task: UsePythonVersion@0
|
- task: UsePythonVersion@0
|
||||||
inputs:
|
inputs:
|
||||||
versionSpec: $(PYTHON_VERSION)
|
versionSpec: $(PYTHON_VERSION)
|
||||||
addToPath: true
|
addToPath: true
|
||||||
architecture: $(PYTHON_ARCH)
|
architecture: $(PYTHON_ARCH)
|
||||||
|
|
||||||
- script: python -m pip install --upgrade pip wheel
|
- script: python -m pip install --upgrade pip wheel
|
||||||
displayName: 'Install tools'
|
displayName: 'Install tools'
|
||||||
|
|
||||||
- script: python -m pip install -r test_requirements.txt
|
- script: python -m pip install -r test_requirements.txt
|
||||||
displayName: 'Install dependencies; some are optional to avoid test skips'
|
displayName: 'Install dependencies; some are optional to avoid test skips'
|
||||||
|
|
||||||
- powershell: |
|
- powershell: |
|
||||||
$ErrorActionPreference = "Stop"
|
$ErrorActionPreference = "Stop"
|
||||||
# Download and get the path to "openblas.a". We cannot copy it
|
# 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
|
# 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,
|
# mingw does not like. Instead copy it to a directory and set OPENBLAS,
|
||||||
# since OPENBLAS will be picked up by the openblas discovery
|
# since OPENBLAS will be picked up by the openblas discovery
|
||||||
$target = $(python tools/openblas_support.py)
|
$target = $(python tools/openblas_support.py)
|
||||||
mkdir openblas
|
mkdir openblas
|
||||||
echo "Copying $target to openblas/openblas$env:OPENBLAS_SUFFIX.a"
|
echo "Copying $target to openblas/openblas$env:OPENBLAS_SUFFIX.a"
|
||||||
cp $target openblas/openblas$env:OPENBLAS_SUFFIX.a
|
cp $target openblas/openblas$env:OPENBLAS_SUFFIX.a
|
||||||
If ( Test-Path env:NPY_USE_BLAS_ILP64 ){
|
If ( Test-Path env:NPY_USE_BLAS_ILP64 ){
|
||||||
echo "##vso[task.setvariable variable=OPENBLAS64_]$pwd\openblas"
|
echo "##vso[task.setvariable variable=OPENBLAS64_]$pwd\openblas"
|
||||||
} else {
|
} else {
|
||||||
echo "##vso[task.setvariable variable=OPENBLAS]$pwd\openblas"
|
echo "##vso[task.setvariable variable=OPENBLAS]$pwd\openblas"
|
||||||
}
|
}
|
||||||
displayName: 'Download / Install OpenBLAS'
|
displayName: 'Download / Install OpenBLAS'
|
||||||
|
|
||||||
- powershell: |
|
- powershell: |
|
||||||
choco install -y mingw --forcex86 --force --version=7.3.0
|
choco install -y mingw --forcex86 --force --version=7.3.0
|
||||||
refreshenv
|
refreshenv
|
||||||
displayName: 'Install 32-bit mingw for 32-bit builds'
|
displayName: 'Install 32-bit mingw for 32-bit builds'
|
||||||
condition: eq(variables['BITS'], 32)
|
condition: eq(variables['BITS'], 32)
|
||||||
# NOTE: for Windows builds it seems much more tractable to use runtests.py
|
# NOTE: for Windows builds it seems much more tractable to use runtests.py
|
||||||
# vs. manual setup.py and then runtests.py for testing only
|
# vs. manual setup.py and then runtests.py for testing only
|
||||||
|
|
||||||
- powershell: |
|
- powershell: |
|
||||||
If ($(BITS) -eq 32) {
|
If ($(BITS) -eq 32) {
|
||||||
$env:CFLAGS = "-m32"
|
$env:CFLAGS = "-m32"
|
||||||
$env:LDFLAGS = "-m32"
|
$env:LDFLAGS = "-m32"
|
||||||
$env:PATH = "C:\\ProgramData\\chocolatey\\lib\\mingw\\tools\\install\\mingw$(BITS)\\bin;" + $env:PATH
|
$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 -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 .
|
python -m pip wheel -v -v -v --no-build-isolation --no-use-pep517 --wheel-dir=dist .
|
||||||
|
|
||||||
ls dist -r | Foreach-Object {
|
ls dist -r | Foreach-Object {
|
||||||
python -m pip install $_.FullName
|
python -m pip install $_.FullName
|
||||||
}
|
}
|
||||||
displayName: 'Build NumPy'
|
displayName: 'Build NumPy'
|
||||||
|
|
||||||
- bash: |
|
- bash: |
|
||||||
pushd . && cd .. && target=$(python -c "import numpy, os; print(os.path.abspath(os.path.join(os.path.dirname(numpy.__file__), '.libs')))") && popd
|
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
|
python -m pip download -d destination --only-binary :all: --no-deps numpy==1.14
|
||||||
cd destination && unzip numpy*.whl && cp numpy/.libs/*.dll $target
|
cd destination && unzip numpy*.whl && cp numpy/.libs/*.dll $target
|
||||||
ls $target
|
ls $target
|
||||||
displayName: 'Add extraneous & older DLL to numpy/.libs to probe DLL handling robustness'
|
displayName: 'Add extraneous & older DLL to numpy/.libs to probe DLL handling robustness'
|
||||||
condition: eq(variables['PYTHON_VERSION'], '3.6')
|
condition: eq(variables['PYTHON_VERSION'], '3.6')
|
||||||
- script: pushd . && cd .. && python -c "from ctypes import windll; windll.kernel32.SetDefaultDllDirectories(0x00000800); import numpy" && popd
|
- script: pushd . && cd .. && python -c "from ctypes import windll; windll.kernel32.SetDefaultDllDirectories(0x00000800); import numpy" && popd
|
||||||
displayName: 'For gh-12667; Windows DLL resolution'
|
displayName: 'For gh-12667; Windows DLL resolution'
|
||||||
condition: eq(variables['PYTHON_VERSION'], '3.6')
|
condition: eq(variables['PYTHON_VERSION'], '3.6')
|
||||||
|
|
||||||
- script: python runtests.py -n --show-build-log --mode=$(TEST_MODE) -- -rsx --junitxml=junit/test-results.xml
|
- script: python runtests.py -n --show-build-log --mode=$(TEST_MODE) -- -rsx --junitxml=junit/test-results.xml
|
||||||
displayName: 'Run NumPy Test Suite'
|
displayName: 'Run NumPy Test Suite'
|
||||||
|
|
||||||
- task: PublishTestResults@2
|
- task: PublishTestResults@2
|
||||||
condition: succeededOrFailed()
|
condition: succeededOrFailed()
|
||||||
inputs:
|
inputs:
|
||||||
testResultsFiles: '**/test-*.xml'
|
testResultsFiles: '**/test-*.xml'
|
||||||
failTaskOnFailedTests: true
|
failTaskOnFailedTests: true
|
||||||
testRunTitle: 'Publish test results for Python $(PYTHON_VERSION) $(BITS)-bit $(TEST_MODE) Windows'
|
testRunTitle: 'Publish test results for Python $(PYTHON_VERSION) $(BITS)-bit $(TEST_MODE) Windows'
|
||||||
|
|
|
@ -1,101 +1,101 @@
|
||||||
.. -*- rst -*-
|
.. -*- rst -*-
|
||||||
|
|
||||||
================
|
================
|
||||||
NumPy benchmarks
|
NumPy benchmarks
|
||||||
================
|
================
|
||||||
|
|
||||||
Benchmarking NumPy with Airspeed Velocity.
|
Benchmarking NumPy with Airspeed Velocity.
|
||||||
|
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
|
||||||
Airspeed Velocity manages building and Python virtualenvs by itself,
|
Airspeed Velocity manages building and Python virtualenvs by itself,
|
||||||
unless told otherwise. Some of the benchmarking features in
|
unless told otherwise. Some of the benchmarking features in
|
||||||
``runtests.py`` also tell ASV to use the NumPy compiled by
|
``runtests.py`` also tell ASV to use the NumPy compiled by
|
||||||
``runtests.py``. To run the benchmarks, you do not need to install a
|
``runtests.py``. To run the benchmarks, you do not need to install a
|
||||||
development version of NumPy to your current Python environment.
|
development version of NumPy to your current Python environment.
|
||||||
|
|
||||||
Before beginning, ensure that *airspeed velocity* is installed.
|
Before beginning, ensure that *airspeed velocity* is installed.
|
||||||
By default, `asv` ships with support for anaconda and virtualenv::
|
By default, `asv` ships with support for anaconda and virtualenv::
|
||||||
|
|
||||||
pip install asv
|
pip install asv
|
||||||
pip install virtualenv
|
pip install virtualenv
|
||||||
|
|
||||||
After contributing new benchmarks, you should test them locally
|
After contributing new benchmarks, you should test them locally
|
||||||
before submitting a pull request.
|
before submitting a pull request.
|
||||||
|
|
||||||
To run all benchmarks, navigate to the root NumPy directory at
|
To run all benchmarks, navigate to the root NumPy directory at
|
||||||
the command line and execute::
|
the command line and execute::
|
||||||
|
|
||||||
python runtests.py --bench
|
python runtests.py --bench
|
||||||
|
|
||||||
where ``--bench`` activates the benchmark suite instead of the
|
where ``--bench`` activates the benchmark suite instead of the
|
||||||
test suite. This builds NumPy and runs all available benchmarks
|
test suite. This builds NumPy and runs all available benchmarks
|
||||||
defined in ``benchmarks/``. (Note: this could take a while. Each
|
defined in ``benchmarks/``. (Note: this could take a while. Each
|
||||||
benchmark is run multiple times to measure the distribution in
|
benchmark is run multiple times to measure the distribution in
|
||||||
execution times.)
|
execution times.)
|
||||||
|
|
||||||
To run benchmarks from a particular benchmark module, such as
|
To run benchmarks from a particular benchmark module, such as
|
||||||
``bench_core.py``, simply append the filename without the extension::
|
``bench_core.py``, simply append the filename without the extension::
|
||||||
|
|
||||||
python runtests.py --bench bench_core
|
python runtests.py --bench bench_core
|
||||||
|
|
||||||
To run a benchmark defined in a class, such as ``Mandelbrot``
|
To run a benchmark defined in a class, such as ``Mandelbrot``
|
||||||
from ``bench_avx.py``::
|
from ``bench_avx.py``::
|
||||||
|
|
||||||
python runtests.py --bench bench_avx.Mandelbrot
|
python runtests.py --bench bench_avx.Mandelbrot
|
||||||
|
|
||||||
Compare change in benchmark results to another version/commit/branch::
|
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 v1.6.2 bench_core
|
||||||
python runtests.py --bench-compare 8bf4e9b bench_core
|
python runtests.py --bench-compare 8bf4e9b bench_core
|
||||||
python runtests.py --bench-compare master bench_core
|
python runtests.py --bench-compare master bench_core
|
||||||
|
|
||||||
All of the commands above display the results in plain text in
|
All of the commands above display the results in plain text in
|
||||||
the console, and the results are not saved for comparison with
|
the console, and the results are not saved for comparison with
|
||||||
future commits. For greater control, a graphical view, and to
|
future commits. For greater control, a graphical view, and to
|
||||||
have results saved for future comparison you can run ASV commands
|
have results saved for future comparison you can run ASV commands
|
||||||
(record results and generate HTML)::
|
(record results and generate HTML)::
|
||||||
|
|
||||||
cd benchmarks
|
cd benchmarks
|
||||||
asv run -n -e --python=same
|
asv run -n -e --python=same
|
||||||
asv publish
|
asv publish
|
||||||
asv preview
|
asv preview
|
||||||
|
|
||||||
More on how to use ``asv`` can be found in `ASV documentation`_
|
More on how to use ``asv`` can be found in `ASV documentation`_
|
||||||
Command-line help is available as usual via ``asv --help`` and
|
Command-line help is available as usual via ``asv --help`` and
|
||||||
``asv run --help``.
|
``asv run --help``.
|
||||||
|
|
||||||
.. _ASV documentation: https://asv.readthedocs.io/
|
.. _ASV documentation: https://asv.readthedocs.io/
|
||||||
|
|
||||||
|
|
||||||
Writing benchmarks
|
Writing benchmarks
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
See `ASV documentation`_ for basics on how to write benchmarks.
|
See `ASV documentation`_ for basics on how to write benchmarks.
|
||||||
|
|
||||||
Some things to consider:
|
Some things to consider:
|
||||||
|
|
||||||
- The benchmark suite should be importable with any NumPy version.
|
- The benchmark suite should be importable with any NumPy version.
|
||||||
|
|
||||||
- The benchmark parameters etc. should not depend on which NumPy version
|
- The benchmark parameters etc. should not depend on which NumPy version
|
||||||
is installed.
|
is installed.
|
||||||
|
|
||||||
- Try to keep the runtime of the benchmark reasonable.
|
- Try to keep the runtime of the benchmark reasonable.
|
||||||
|
|
||||||
- Prefer ASV's ``time_`` methods for benchmarking times rather than cooking up
|
- Prefer ASV's ``time_`` methods for benchmarking times rather than cooking up
|
||||||
time measurements via ``time.clock``, even if it requires some juggling when
|
time measurements via ``time.clock``, even if it requires some juggling when
|
||||||
writing the benchmark.
|
writing the benchmark.
|
||||||
|
|
||||||
- Preparing arrays etc. should generally be put in the ``setup`` method rather
|
- Preparing arrays etc. should generally be put in the ``setup`` method rather
|
||||||
than the ``time_`` methods, to avoid counting preparation time together with
|
than the ``time_`` methods, to avoid counting preparation time together with
|
||||||
the time of the benchmarked operation.
|
the time of the benchmarked operation.
|
||||||
|
|
||||||
- Be mindful that large arrays created with ``np.empty`` or ``np.zeros`` might
|
- 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
|
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
|
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
|
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
|
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
|
pagefaults to occur in the setup phase either by calling ``np.ones`` or
|
||||||
``arr.fill(value)`` after creating the array,
|
``arr.fill(value)`` after creating the array,
|
||||||
|
|
|
@ -1,85 +1,85 @@
|
||||||
{
|
{
|
||||||
// The version of the config file format. Do not change, unless
|
// The version of the config file format. Do not change, unless
|
||||||
// you know what you are doing.
|
// you know what you are doing.
|
||||||
"version": 1,
|
"version": 1,
|
||||||
|
|
||||||
// The name of the project being benchmarked
|
// The name of the project being benchmarked
|
||||||
"project": "numpy",
|
"project": "numpy",
|
||||||
|
|
||||||
// The project's homepage
|
// The project's homepage
|
||||||
"project_url": "https://www.numpy.org/",
|
"project_url": "https://www.numpy.org/",
|
||||||
|
|
||||||
// The URL or local path of the source code repository for the
|
// The URL or local path of the source code repository for the
|
||||||
// project being benchmarked
|
// project being benchmarked
|
||||||
"repo": "..",
|
"repo": "..",
|
||||||
|
|
||||||
// List of branches to benchmark. If not provided, defaults to "master"
|
// List of branches to benchmark. If not provided, defaults to "master"
|
||||||
// (for git) or "tip" (for mercurial).
|
// (for git) or "tip" (for mercurial).
|
||||||
"branches": ["HEAD"],
|
"branches": ["HEAD"],
|
||||||
|
|
||||||
// The DVCS being used. If not set, it will be automatically
|
// The DVCS being used. If not set, it will be automatically
|
||||||
// determined from "repo" by looking at the protocol in the URL
|
// determined from "repo" by looking at the protocol in the URL
|
||||||
// (if remote), or by looking for special directories, such as
|
// (if remote), or by looking for special directories, such as
|
||||||
// ".git" (if local).
|
// ".git" (if local).
|
||||||
"dvcs": "git",
|
"dvcs": "git",
|
||||||
|
|
||||||
// The tool to use to create environments. May be "conda",
|
// The tool to use to create environments. May be "conda",
|
||||||
// "virtualenv" or other value depending on the plugins in use.
|
// "virtualenv" or other value depending on the plugins in use.
|
||||||
// If missing or the empty string, the tool will be automatically
|
// If missing or the empty string, the tool will be automatically
|
||||||
// determined by looking for tools on the PATH environment
|
// determined by looking for tools on the PATH environment
|
||||||
// variable.
|
// variable.
|
||||||
"environment_type": "virtualenv",
|
"environment_type": "virtualenv",
|
||||||
|
|
||||||
// the base URL to show a commit for the project.
|
// the base URL to show a commit for the project.
|
||||||
"show_commit_url": "https://github.com/numpy/numpy/commit/",
|
"show_commit_url": "https://github.com/numpy/numpy/commit/",
|
||||||
|
|
||||||
// The Pythons you'd like to test against. If not provided, defaults
|
// The Pythons you'd like to test against. If not provided, defaults
|
||||||
// to the current version of Python used to run `asv`.
|
// to the current version of Python used to run `asv`.
|
||||||
"pythons": ["3.7"],
|
"pythons": ["3.7"],
|
||||||
|
|
||||||
// The matrix of dependencies to test. Each key is the name of a
|
// The matrix of dependencies to test. Each key is the name of a
|
||||||
// package (in PyPI) and the values are version numbers. An empty
|
// package (in PyPI) and the values are version numbers. An empty
|
||||||
// list indicates to just test against the default (latest)
|
// list indicates to just test against the default (latest)
|
||||||
// version.
|
// version.
|
||||||
"matrix": {
|
"matrix": {
|
||||||
"Cython": [],
|
"Cython": [],
|
||||||
},
|
},
|
||||||
|
|
||||||
// The directory (relative to the current directory) that benchmarks are
|
// The directory (relative to the current directory) that benchmarks are
|
||||||
// stored in. If not provided, defaults to "benchmarks"
|
// stored in. If not provided, defaults to "benchmarks"
|
||||||
"benchmark_dir": "benchmarks",
|
"benchmark_dir": "benchmarks",
|
||||||
|
|
||||||
// The directory (relative to the current directory) to cache the Python
|
// The directory (relative to the current directory) to cache the Python
|
||||||
// environments in. If not provided, defaults to "env"
|
// environments in. If not provided, defaults to "env"
|
||||||
"env_dir": "env",
|
"env_dir": "env",
|
||||||
|
|
||||||
|
|
||||||
// The directory (relative to the current directory) that raw benchmark
|
// The directory (relative to the current directory) that raw benchmark
|
||||||
// results are stored in. If not provided, defaults to "results".
|
// results are stored in. If not provided, defaults to "results".
|
||||||
"results_dir": "results",
|
"results_dir": "results",
|
||||||
|
|
||||||
// The directory (relative to the current directory) that the html tree
|
// The directory (relative to the current directory) that the html tree
|
||||||
// should be written to. If not provided, defaults to "html".
|
// should be written to. If not provided, defaults to "html".
|
||||||
"html_dir": "html",
|
"html_dir": "html",
|
||||||
|
|
||||||
// The number of characters to retain in the commit hashes.
|
// The number of characters to retain in the commit hashes.
|
||||||
// "hash_length": 8,
|
// "hash_length": 8,
|
||||||
|
|
||||||
// `asv` will cache wheels of the recent builds in each
|
// `asv` will cache wheels of the recent builds in each
|
||||||
// environment, making them faster to install next time. This is
|
// environment, making them faster to install next time. This is
|
||||||
// number of builds to keep, per environment.
|
// number of builds to keep, per environment.
|
||||||
"build_cache_size": 8,
|
"build_cache_size": 8,
|
||||||
|
|
||||||
// The commits after which the regression search in `asv publish`
|
// The commits after which the regression search in `asv publish`
|
||||||
// should start looking for regressions. Dictionary whose keys are
|
// should start looking for regressions. Dictionary whose keys are
|
||||||
// regexps matching to benchmark names, and values corresponding to
|
// regexps matching to benchmark names, and values corresponding to
|
||||||
// the commit (exclusive) after which to start looking for
|
// the commit (exclusive) after which to start looking for
|
||||||
// regressions. The default is to start from the first commit
|
// regressions. The default is to start from the first commit
|
||||||
// with results. If the commit is `null`, regression detection is
|
// with results. If the commit is `null`, regression detection is
|
||||||
// skipped for the matching benchmark.
|
// skipped for the matching benchmark.
|
||||||
//
|
//
|
||||||
// "regressions_first_commits": {
|
// "regressions_first_commits": {
|
||||||
// "some_benchmark": "352cdf", // Consider regressions only after this commit
|
// "some_benchmark": "352cdf", // Consider regressions only after this commit
|
||||||
// "another_benchmark": null, // Skip regression detection altogether
|
// "another_benchmark": null, // Skip regression detection altogether
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
from . import common
|
from . import common
|
||||||
|
|
|
@ -1,85 +1,85 @@
|
||||||
from .common import Benchmark
|
from .common import Benchmark
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
class LaplaceInplace(Benchmark):
|
class LaplaceInplace(Benchmark):
|
||||||
params = ['inplace', 'normal']
|
params = ['inplace', 'normal']
|
||||||
param_names = ['update']
|
param_names = ['update']
|
||||||
|
|
||||||
def setup(self, update):
|
def setup(self, update):
|
||||||
N = 150
|
N = 150
|
||||||
Niter = 1000
|
Niter = 1000
|
||||||
dx = 0.1
|
dx = 0.1
|
||||||
dy = 0.1
|
dy = 0.1
|
||||||
dx2 = (dx * dx)
|
dx2 = (dx * dx)
|
||||||
dy2 = (dy * dy)
|
dy2 = (dy * dy)
|
||||||
|
|
||||||
def num_update(u, dx2, dy2):
|
def num_update(u, dx2, dy2):
|
||||||
u[1:(-1), 1:(-1)] = ((((u[2:, 1:(-1)] + u[:(-2), 1:(-1)]) * dy2) +
|
u[1:(-1), 1:(-1)] = ((((u[2:, 1:(-1)] + u[:(-2), 1:(-1)]) * dy2) +
|
||||||
((u[1:(-1), 2:] + u[1:(-1), :(-2)]) * dx2))
|
((u[1:(-1), 2:] + u[1:(-1), :(-2)]) * dx2))
|
||||||
/ (2 * (dx2 + dy2)))
|
/ (2 * (dx2 + dy2)))
|
||||||
|
|
||||||
def num_inplace(u, dx2, dy2):
|
def num_inplace(u, dx2, dy2):
|
||||||
tmp = u[:(-2), 1:(-1)].copy()
|
tmp = u[:(-2), 1:(-1)].copy()
|
||||||
np.add(tmp, u[2:, 1:(-1)], out=tmp)
|
np.add(tmp, u[2:, 1:(-1)], out=tmp)
|
||||||
np.multiply(tmp, dy2, out=tmp)
|
np.multiply(tmp, dy2, out=tmp)
|
||||||
tmp2 = u[1:(-1), 2:].copy()
|
tmp2 = u[1:(-1), 2:].copy()
|
||||||
np.add(tmp2, u[1:(-1), :(-2)], out=tmp2)
|
np.add(tmp2, u[1:(-1), :(-2)], out=tmp2)
|
||||||
np.multiply(tmp2, dx2, out=tmp2)
|
np.multiply(tmp2, dx2, out=tmp2)
|
||||||
np.add(tmp, tmp2, out=tmp)
|
np.add(tmp, tmp2, out=tmp)
|
||||||
np.multiply(tmp, (1.0 / (2.0 * (dx2 + dy2))),
|
np.multiply(tmp, (1.0 / (2.0 * (dx2 + dy2))),
|
||||||
out=u[1:(-1), 1:(-1)])
|
out=u[1:(-1), 1:(-1)])
|
||||||
|
|
||||||
def laplace(N, Niter=100, func=num_update, args=()):
|
def laplace(N, Niter=100, func=num_update, args=()):
|
||||||
u = np.zeros([N, N], order='C')
|
u = np.zeros([N, N], order='C')
|
||||||
u[0] = 1
|
u[0] = 1
|
||||||
for i in range(Niter):
|
for i in range(Niter):
|
||||||
func(u, *args)
|
func(u, *args)
|
||||||
return u
|
return u
|
||||||
|
|
||||||
func = {'inplace': num_inplace, 'normal': num_update}[update]
|
func = {'inplace': num_inplace, 'normal': num_update}[update]
|
||||||
|
|
||||||
def run():
|
def run():
|
||||||
laplace(N, Niter, func, args=(dx2, dy2))
|
laplace(N, Niter, func, args=(dx2, dy2))
|
||||||
|
|
||||||
self.run = run
|
self.run = run
|
||||||
|
|
||||||
def time_it(self, update):
|
def time_it(self, update):
|
||||||
self.run()
|
self.run()
|
||||||
|
|
||||||
|
|
||||||
class MaxesOfDots(Benchmark):
|
class MaxesOfDots(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
np.random.seed(1)
|
np.random.seed(1)
|
||||||
nsubj = 5
|
nsubj = 5
|
||||||
nfeat = 100
|
nfeat = 100
|
||||||
ntime = 200
|
ntime = 200
|
||||||
|
|
||||||
self.arrays = [np.random.normal(size=(ntime, nfeat))
|
self.arrays = [np.random.normal(size=(ntime, nfeat))
|
||||||
for i in range(nsubj)]
|
for i in range(nsubj)]
|
||||||
|
|
||||||
def maxes_of_dots(self, arrays):
|
def maxes_of_dots(self, arrays):
|
||||||
"""
|
"""
|
||||||
A magical feature score for each feature in each dataset
|
A magical feature score for each feature in each dataset
|
||||||
:ref:`Haxby et al., Neuron (2011) <HGC+11>`.
|
:ref:`Haxby et al., Neuron (2011) <HGC+11>`.
|
||||||
If arrays are column-wise zscore-d before computation it
|
If arrays are column-wise zscore-d before computation it
|
||||||
results in characterizing each column in each array with
|
results in characterizing each column in each array with
|
||||||
sum of maximal correlations of that column with columns
|
sum of maximal correlations of that column with columns
|
||||||
in other arrays.
|
in other arrays.
|
||||||
|
|
||||||
Arrays must agree only on the first dimension.
|
Arrays must agree only on the first dimension.
|
||||||
|
|
||||||
For numpy it a join benchmark of dot products and max()
|
For numpy it a join benchmark of dot products and max()
|
||||||
on a set of arrays.
|
on a set of arrays.
|
||||||
"""
|
"""
|
||||||
feature_scores = ([0] * len(arrays))
|
feature_scores = ([0] * len(arrays))
|
||||||
for (i, sd) in enumerate(arrays):
|
for (i, sd) in enumerate(arrays):
|
||||||
for (j, sd2) in enumerate(arrays[(i + 1):]):
|
for (j, sd2) in enumerate(arrays[(i + 1):]):
|
||||||
corr_temp = np.dot(sd.T, sd2)
|
corr_temp = np.dot(sd.T, sd2)
|
||||||
feature_scores[i] += np.max(corr_temp, axis=1)
|
feature_scores[i] += np.max(corr_temp, axis=1)
|
||||||
feature_scores[((j + i) + 1)] += np.max(corr_temp, axis=0)
|
feature_scores[((j + i) + 1)] += np.max(corr_temp, axis=0)
|
||||||
return feature_scores
|
return feature_scores
|
||||||
|
|
||||||
def time_it(self):
|
def time_it(self):
|
||||||
self.maxes_of_dots(self.arrays)
|
self.maxes_of_dots(self.arrays)
|
||||||
|
|
|
@ -1,57 +1,57 @@
|
||||||
from __future__ import absolute_import, division, print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
from .common import Benchmark
|
from .common import Benchmark
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
class ArrayCoercionSmall(Benchmark):
|
class ArrayCoercionSmall(Benchmark):
|
||||||
# More detailed benchmarks for array coercion,
|
# More detailed benchmarks for array coercion,
|
||||||
# some basic benchmarks are in `bench_core.py`.
|
# some basic benchmarks are in `bench_core.py`.
|
||||||
params = [[range(3), [1], 1, np.array([5], dtype=np.int64), np.int64(5)]]
|
params = [[range(3), [1], 1, np.array([5], dtype=np.int64), np.int64(5)]]
|
||||||
param_names = ['array_like']
|
param_names = ['array_like']
|
||||||
int64 = np.dtype(np.int64)
|
int64 = np.dtype(np.int64)
|
||||||
|
|
||||||
def time_array_invalid_kwarg(self, array_like):
|
def time_array_invalid_kwarg(self, array_like):
|
||||||
try:
|
try:
|
||||||
np.array(array_like, ndmin="not-integer")
|
np.array(array_like, ndmin="not-integer")
|
||||||
except TypeError:
|
except TypeError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def time_array(self, array_like):
|
def time_array(self, array_like):
|
||||||
np.array(array_like)
|
np.array(array_like)
|
||||||
|
|
||||||
def time_array_dtype_not_kwargs(self, array_like):
|
def time_array_dtype_not_kwargs(self, array_like):
|
||||||
np.array(array_like, self.int64)
|
np.array(array_like, self.int64)
|
||||||
|
|
||||||
def time_array_no_copy(self, array_like):
|
def time_array_no_copy(self, array_like):
|
||||||
np.array(array_like, copy=False)
|
np.array(array_like, copy=False)
|
||||||
|
|
||||||
def time_array_subok(self, array_like):
|
def time_array_subok(self, array_like):
|
||||||
np.array(array_like, subok=True)
|
np.array(array_like, subok=True)
|
||||||
|
|
||||||
def time_array_all_kwargs(self, array_like):
|
def time_array_all_kwargs(self, array_like):
|
||||||
np.array(array_like, dtype=self.int64, copy=False, order="F",
|
np.array(array_like, dtype=self.int64, copy=False, order="F",
|
||||||
subok=False, ndmin=2)
|
subok=False, ndmin=2)
|
||||||
|
|
||||||
def time_asarray(self, array_like):
|
def time_asarray(self, array_like):
|
||||||
np.asarray(array_like)
|
np.asarray(array_like)
|
||||||
|
|
||||||
def time_asarray_dtype(self, array_like):
|
def time_asarray_dtype(self, array_like):
|
||||||
np.array(array_like, dtype=self.int64)
|
np.array(array_like, dtype=self.int64)
|
||||||
|
|
||||||
def time_asarray_dtype(self, array_like):
|
def time_asarray_dtype(self, array_like):
|
||||||
np.array(array_like, dtype=self.int64, order="F")
|
np.array(array_like, dtype=self.int64, order="F")
|
||||||
|
|
||||||
def time_asanyarray(self, array_like):
|
def time_asanyarray(self, array_like):
|
||||||
np.asarray(array_like)
|
np.asarray(array_like)
|
||||||
|
|
||||||
def time_asanyarray_dtype(self, array_like):
|
def time_asanyarray_dtype(self, array_like):
|
||||||
np.array(array_like, dtype=self.int64)
|
np.array(array_like, dtype=self.int64)
|
||||||
|
|
||||||
def time_asanyarray_dtype(self, array_like):
|
def time_asanyarray_dtype(self, array_like):
|
||||||
np.array(array_like, dtype=self.int64, order="F")
|
np.array(array_like, dtype=self.int64, order="F")
|
||||||
|
|
||||||
def time_ascontiguousarray(self, array_like):
|
def time_ascontiguousarray(self, array_like):
|
||||||
np.ascontiguousarray(array_like)
|
np.ascontiguousarray(array_like)
|
||||||
|
|
||||||
|
|
|
@ -1,159 +1,159 @@
|
||||||
from .common import Benchmark
|
from .common import Benchmark
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
avx_ufuncs = ['sin',
|
avx_ufuncs = ['sin',
|
||||||
'cos',
|
'cos',
|
||||||
'exp',
|
'exp',
|
||||||
'log',
|
'log',
|
||||||
'sqrt',
|
'sqrt',
|
||||||
'absolute',
|
'absolute',
|
||||||
'reciprocal',
|
'reciprocal',
|
||||||
'square',
|
'square',
|
||||||
'rint',
|
'rint',
|
||||||
'floor',
|
'floor',
|
||||||
'ceil' ,
|
'ceil' ,
|
||||||
'trunc']
|
'trunc']
|
||||||
stride = [1, 2, 4]
|
stride = [1, 2, 4]
|
||||||
dtype = ['f', 'd']
|
dtype = ['f', 'd']
|
||||||
|
|
||||||
class AVX_UFunc(Benchmark):
|
class AVX_UFunc(Benchmark):
|
||||||
params = [avx_ufuncs, stride, dtype]
|
params = [avx_ufuncs, stride, dtype]
|
||||||
param_names = ['avx_based_ufunc', 'stride', 'dtype']
|
param_names = ['avx_based_ufunc', 'stride', 'dtype']
|
||||||
timeout = 10
|
timeout = 10
|
||||||
|
|
||||||
def setup(self, ufuncname, stride, dtype):
|
def setup(self, ufuncname, stride, dtype):
|
||||||
np.seterr(all='ignore')
|
np.seterr(all='ignore')
|
||||||
try:
|
try:
|
||||||
self.f = getattr(np, ufuncname)
|
self.f = getattr(np, ufuncname)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
N = 10000
|
N = 10000
|
||||||
self.arr = np.ones(stride*N, dtype)
|
self.arr = np.ones(stride*N, dtype)
|
||||||
|
|
||||||
def time_ufunc(self, ufuncname, stride, dtype):
|
def time_ufunc(self, ufuncname, stride, dtype):
|
||||||
self.f(self.arr[::stride])
|
self.f(self.arr[::stride])
|
||||||
|
|
||||||
avx_bfuncs = ['maximum',
|
avx_bfuncs = ['maximum',
|
||||||
'minimum']
|
'minimum']
|
||||||
|
|
||||||
class AVX_BFunc(Benchmark):
|
class AVX_BFunc(Benchmark):
|
||||||
|
|
||||||
params = [avx_bfuncs, dtype, stride]
|
params = [avx_bfuncs, dtype, stride]
|
||||||
param_names = ['avx_based_bfunc', 'dtype', 'stride']
|
param_names = ['avx_based_bfunc', 'dtype', 'stride']
|
||||||
timeout = 10
|
timeout = 10
|
||||||
|
|
||||||
def setup(self, ufuncname, dtype, stride):
|
def setup(self, ufuncname, dtype, stride):
|
||||||
np.seterr(all='ignore')
|
np.seterr(all='ignore')
|
||||||
try:
|
try:
|
||||||
self.f = getattr(np, ufuncname)
|
self.f = getattr(np, ufuncname)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
N = 10000
|
N = 10000
|
||||||
self.arr1 = np.array(np.random.rand(stride*N), dtype=dtype)
|
self.arr1 = np.array(np.random.rand(stride*N), dtype=dtype)
|
||||||
self.arr2 = 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):
|
def time_ufunc(self, ufuncname, dtype, stride):
|
||||||
self.f(self.arr1[::stride], self.arr2[::stride])
|
self.f(self.arr1[::stride], self.arr2[::stride])
|
||||||
|
|
||||||
cmplx_bfuncs = ['add',
|
cmplx_bfuncs = ['add',
|
||||||
'subtract',
|
'subtract',
|
||||||
'multiply',
|
'multiply',
|
||||||
'divide']
|
'divide']
|
||||||
cmplxstride = [1, 2, 4]
|
cmplxstride = [1, 2, 4]
|
||||||
cmplxdtype = ['F', 'D']
|
cmplxdtype = ['F', 'D']
|
||||||
|
|
||||||
class AVX_cmplx_arithmetic(Benchmark):
|
class AVX_cmplx_arithmetic(Benchmark):
|
||||||
params = [cmplx_bfuncs, cmplxstride, cmplxdtype]
|
params = [cmplx_bfuncs, cmplxstride, cmplxdtype]
|
||||||
param_names = ['bfunc', 'stride', 'dtype']
|
param_names = ['bfunc', 'stride', 'dtype']
|
||||||
timeout = 10
|
timeout = 10
|
||||||
|
|
||||||
def setup(self, bfuncname, stride, dtype):
|
def setup(self, bfuncname, stride, dtype):
|
||||||
np.seterr(all='ignore')
|
np.seterr(all='ignore')
|
||||||
try:
|
try:
|
||||||
self.f = getattr(np, bfuncname)
|
self.f = getattr(np, bfuncname)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
N = 10000
|
N = 10000
|
||||||
self.arr1 = np.ones(stride*N, dtype)
|
self.arr1 = np.ones(stride*N, dtype)
|
||||||
self.arr2 = np.ones(stride*N, dtype)
|
self.arr2 = np.ones(stride*N, dtype)
|
||||||
|
|
||||||
def time_ufunc(self, bfuncname, stride, dtype):
|
def time_ufunc(self, bfuncname, stride, dtype):
|
||||||
self.f(self.arr1[::stride], self.arr2[::stride])
|
self.f(self.arr1[::stride], self.arr2[::stride])
|
||||||
|
|
||||||
cmplx_ufuncs = ['reciprocal',
|
cmplx_ufuncs = ['reciprocal',
|
||||||
'absolute',
|
'absolute',
|
||||||
'square',
|
'square',
|
||||||
'conjugate']
|
'conjugate']
|
||||||
|
|
||||||
class AVX_cmplx_funcs(Benchmark):
|
class AVX_cmplx_funcs(Benchmark):
|
||||||
params = [cmplx_ufuncs, cmplxstride, cmplxdtype]
|
params = [cmplx_ufuncs, cmplxstride, cmplxdtype]
|
||||||
param_names = ['bfunc', 'stride', 'dtype']
|
param_names = ['bfunc', 'stride', 'dtype']
|
||||||
timeout = 10
|
timeout = 10
|
||||||
|
|
||||||
def setup(self, bfuncname, stride, dtype):
|
def setup(self, bfuncname, stride, dtype):
|
||||||
np.seterr(all='ignore')
|
np.seterr(all='ignore')
|
||||||
try:
|
try:
|
||||||
self.f = getattr(np, bfuncname)
|
self.f = getattr(np, bfuncname)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
N = 10000
|
N = 10000
|
||||||
self.arr1 = np.ones(stride*N, dtype)
|
self.arr1 = np.ones(stride*N, dtype)
|
||||||
|
|
||||||
def time_ufunc(self, bfuncname, stride, dtype):
|
def time_ufunc(self, bfuncname, stride, dtype):
|
||||||
self.f(self.arr1[::stride])
|
self.f(self.arr1[::stride])
|
||||||
|
|
||||||
class Mandelbrot(Benchmark):
|
class Mandelbrot(Benchmark):
|
||||||
def f(self,z):
|
def f(self,z):
|
||||||
return np.abs(z) < 4.0
|
return np.abs(z) < 4.0
|
||||||
|
|
||||||
def g(self,z,c):
|
def g(self,z,c):
|
||||||
return np.sum(np.multiply(z,z) + c)
|
return np.sum(np.multiply(z,z) + c)
|
||||||
|
|
||||||
def mandelbrot_numpy(self, c, maxiter):
|
def mandelbrot_numpy(self, c, maxiter):
|
||||||
output = np.zeros(c.shape, np.int)
|
output = np.zeros(c.shape, np.int)
|
||||||
z = np.empty(c.shape, np.complex64)
|
z = np.empty(c.shape, np.complex64)
|
||||||
for it in range(maxiter):
|
for it in range(maxiter):
|
||||||
notdone = self.f(z)
|
notdone = self.f(z)
|
||||||
output[notdone] = it
|
output[notdone] = it
|
||||||
z[notdone] = self.g(z[notdone],c[notdone])
|
z[notdone] = self.g(z[notdone],c[notdone])
|
||||||
output[output == maxiter-1] = 0
|
output[output == maxiter-1] = 0
|
||||||
return output
|
return output
|
||||||
|
|
||||||
def mandelbrot_set(self,xmin,xmax,ymin,ymax,width,height,maxiter):
|
def mandelbrot_set(self,xmin,xmax,ymin,ymax,width,height,maxiter):
|
||||||
r1 = np.linspace(xmin, xmax, width, dtype=np.float32)
|
r1 = np.linspace(xmin, xmax, width, dtype=np.float32)
|
||||||
r2 = np.linspace(ymin, ymax, height, dtype=np.float32)
|
r2 = np.linspace(ymin, ymax, height, dtype=np.float32)
|
||||||
c = r1 + r2[:,None]*1j
|
c = r1 + r2[:,None]*1j
|
||||||
n3 = self.mandelbrot_numpy(c,maxiter)
|
n3 = self.mandelbrot_numpy(c,maxiter)
|
||||||
return (r1,r2,n3.T)
|
return (r1,r2,n3.T)
|
||||||
|
|
||||||
def time_mandel(self):
|
def time_mandel(self):
|
||||||
self.mandelbrot_set(-0.74877,-0.74872,0.06505,0.06510,1000,1000,2048)
|
self.mandelbrot_set(-0.74877,-0.74872,0.06505,0.06510,1000,1000,2048)
|
||||||
|
|
||||||
class LogisticRegression(Benchmark):
|
class LogisticRegression(Benchmark):
|
||||||
param_names = ['dtype']
|
param_names = ['dtype']
|
||||||
params = [np.float32, np.float64]
|
params = [np.float32, np.float64]
|
||||||
|
|
||||||
timeout = 1000
|
timeout = 1000
|
||||||
def train(self, max_epoch):
|
def train(self, max_epoch):
|
||||||
for epoch in range(max_epoch):
|
for epoch in range(max_epoch):
|
||||||
z = np.matmul(self.X_train, self.W)
|
z = np.matmul(self.X_train, self.W)
|
||||||
A = 1 / (1 + np.exp(-z)) # sigmoid(z)
|
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))
|
loss = -np.mean(self.Y_train * np.log(A) + (1-self.Y_train) * np.log(1-A))
|
||||||
dz = A - self.Y_train
|
dz = A - self.Y_train
|
||||||
dw = (1/self.size) * np.matmul(self.X_train.T, dz)
|
dw = (1/self.size) * np.matmul(self.X_train.T, dz)
|
||||||
self.W = self.W - self.alpha*dw
|
self.W = self.W - self.alpha*dw
|
||||||
|
|
||||||
def setup(self, dtype):
|
def setup(self, dtype):
|
||||||
np.random.seed(42)
|
np.random.seed(42)
|
||||||
self.size = 250
|
self.size = 250
|
||||||
features = 16
|
features = 16
|
||||||
self.X_train = np.random.rand(self.size,features).astype(dtype)
|
self.X_train = np.random.rand(self.size,features).astype(dtype)
|
||||||
self.Y_train = np.random.choice(2,self.size).astype(dtype)
|
self.Y_train = np.random.choice(2,self.size).astype(dtype)
|
||||||
# Initialize weights
|
# Initialize weights
|
||||||
self.W = np.zeros((features,1), dtype=dtype)
|
self.W = np.zeros((features,1), dtype=dtype)
|
||||||
self.b = np.zeros((1,1), dtype=dtype)
|
self.b = np.zeros((1,1), dtype=dtype)
|
||||||
self.alpha = 0.1
|
self.alpha = 0.1
|
||||||
|
|
||||||
def time_train(self, dtype):
|
def time_train(self, dtype):
|
||||||
self.train(1000)
|
self.train(1000)
|
||||||
|
|
|
@ -1,193 +1,193 @@
|
||||||
from .common import Benchmark
|
from .common import Benchmark
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
class Core(Benchmark):
|
class Core(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.l100 = range(100)
|
self.l100 = range(100)
|
||||||
self.l50 = range(50)
|
self.l50 = range(50)
|
||||||
self.l = [np.arange(1000), np.arange(1000)]
|
self.l = [np.arange(1000), np.arange(1000)]
|
||||||
self.l_view = [memoryview(a) for a in self.l]
|
self.l_view = [memoryview(a) for a in self.l]
|
||||||
self.l10x10 = np.ones((10, 10))
|
self.l10x10 = np.ones((10, 10))
|
||||||
|
|
||||||
def time_array_1(self):
|
def time_array_1(self):
|
||||||
np.array(1)
|
np.array(1)
|
||||||
|
|
||||||
def time_array_empty(self):
|
def time_array_empty(self):
|
||||||
np.array([])
|
np.array([])
|
||||||
|
|
||||||
def time_array_l1(self):
|
def time_array_l1(self):
|
||||||
np.array([1])
|
np.array([1])
|
||||||
|
|
||||||
def time_array_l100(self):
|
def time_array_l100(self):
|
||||||
np.array(self.l100)
|
np.array(self.l100)
|
||||||
|
|
||||||
def time_array_l(self):
|
def time_array_l(self):
|
||||||
np.array(self.l)
|
np.array(self.l)
|
||||||
|
|
||||||
def time_array_l_view(self):
|
def time_array_l_view(self):
|
||||||
np.array(self.l_view)
|
np.array(self.l_view)
|
||||||
|
|
||||||
def time_vstack_l(self):
|
def time_vstack_l(self):
|
||||||
np.vstack(self.l)
|
np.vstack(self.l)
|
||||||
|
|
||||||
def time_hstack_l(self):
|
def time_hstack_l(self):
|
||||||
np.hstack(self.l)
|
np.hstack(self.l)
|
||||||
|
|
||||||
def time_dstack_l(self):
|
def time_dstack_l(self):
|
||||||
np.dstack(self.l)
|
np.dstack(self.l)
|
||||||
|
|
||||||
def time_arange_100(self):
|
def time_arange_100(self):
|
||||||
np.arange(100)
|
np.arange(100)
|
||||||
|
|
||||||
def time_zeros_100(self):
|
def time_zeros_100(self):
|
||||||
np.zeros(100)
|
np.zeros(100)
|
||||||
|
|
||||||
def time_ones_100(self):
|
def time_ones_100(self):
|
||||||
np.ones(100)
|
np.ones(100)
|
||||||
|
|
||||||
def time_empty_100(self):
|
def time_empty_100(self):
|
||||||
np.empty(100)
|
np.empty(100)
|
||||||
|
|
||||||
def time_eye_100(self):
|
def time_eye_100(self):
|
||||||
np.eye(100)
|
np.eye(100)
|
||||||
|
|
||||||
def time_identity_100(self):
|
def time_identity_100(self):
|
||||||
np.identity(100)
|
np.identity(100)
|
||||||
|
|
||||||
def time_eye_3000(self):
|
def time_eye_3000(self):
|
||||||
np.eye(3000)
|
np.eye(3000)
|
||||||
|
|
||||||
def time_identity_3000(self):
|
def time_identity_3000(self):
|
||||||
np.identity(3000)
|
np.identity(3000)
|
||||||
|
|
||||||
def time_diag_l100(self):
|
def time_diag_l100(self):
|
||||||
np.diag(self.l100)
|
np.diag(self.l100)
|
||||||
|
|
||||||
def time_diagflat_l100(self):
|
def time_diagflat_l100(self):
|
||||||
np.diagflat(self.l100)
|
np.diagflat(self.l100)
|
||||||
|
|
||||||
def time_diagflat_l50_l50(self):
|
def time_diagflat_l50_l50(self):
|
||||||
np.diagflat([self.l50, self.l50])
|
np.diagflat([self.l50, self.l50])
|
||||||
|
|
||||||
def time_triu_l10x10(self):
|
def time_triu_l10x10(self):
|
||||||
np.triu(self.l10x10)
|
np.triu(self.l10x10)
|
||||||
|
|
||||||
def time_tril_l10x10(self):
|
def time_tril_l10x10(self):
|
||||||
np.tril(self.l10x10)
|
np.tril(self.l10x10)
|
||||||
|
|
||||||
|
|
||||||
class Temporaries(Benchmark):
|
class Temporaries(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.amid = np.ones(50000)
|
self.amid = np.ones(50000)
|
||||||
self.bmid = np.ones(50000)
|
self.bmid = np.ones(50000)
|
||||||
self.alarge = np.ones(1000000)
|
self.alarge = np.ones(1000000)
|
||||||
self.blarge = np.ones(1000000)
|
self.blarge = np.ones(1000000)
|
||||||
|
|
||||||
def time_mid(self):
|
def time_mid(self):
|
||||||
(self.amid * 2) + self.bmid
|
(self.amid * 2) + self.bmid
|
||||||
|
|
||||||
def time_mid2(self):
|
def time_mid2(self):
|
||||||
(self.amid + self.bmid) - 2
|
(self.amid + self.bmid) - 2
|
||||||
|
|
||||||
def time_large(self):
|
def time_large(self):
|
||||||
(self.alarge * 2) + self.blarge
|
(self.alarge * 2) + self.blarge
|
||||||
|
|
||||||
def time_large2(self):
|
def time_large2(self):
|
||||||
(self.alarge + self.blarge) - 2
|
(self.alarge + self.blarge) - 2
|
||||||
|
|
||||||
|
|
||||||
class CorrConv(Benchmark):
|
class CorrConv(Benchmark):
|
||||||
params = [[50, 1000, int(1e5)],
|
params = [[50, 1000, int(1e5)],
|
||||||
[10, 100, 1000, int(1e4)],
|
[10, 100, 1000, int(1e4)],
|
||||||
['valid', 'same', 'full']]
|
['valid', 'same', 'full']]
|
||||||
param_names = ['size1', 'size2', 'mode']
|
param_names = ['size1', 'size2', 'mode']
|
||||||
|
|
||||||
def setup(self, size1, size2, mode):
|
def setup(self, size1, size2, mode):
|
||||||
self.x1 = np.linspace(0, 1, num=size1)
|
self.x1 = np.linspace(0, 1, num=size1)
|
||||||
self.x2 = np.cos(np.linspace(0, 2*np.pi, num=size2))
|
self.x2 = np.cos(np.linspace(0, 2*np.pi, num=size2))
|
||||||
|
|
||||||
def time_correlate(self, size1, size2, mode):
|
def time_correlate(self, size1, size2, mode):
|
||||||
np.correlate(self.x1, self.x2, mode=mode)
|
np.correlate(self.x1, self.x2, mode=mode)
|
||||||
|
|
||||||
def time_convolve(self, size1, size2, mode):
|
def time_convolve(self, size1, size2, mode):
|
||||||
np.convolve(self.x1, self.x2, mode=mode)
|
np.convolve(self.x1, self.x2, mode=mode)
|
||||||
|
|
||||||
|
|
||||||
class CountNonzero(Benchmark):
|
class CountNonzero(Benchmark):
|
||||||
param_names = ['numaxes', 'size', 'dtype']
|
param_names = ['numaxes', 'size', 'dtype']
|
||||||
params = [
|
params = [
|
||||||
[1, 2, 3],
|
[1, 2, 3],
|
||||||
[100, 10000, 1000000],
|
[100, 10000, 1000000],
|
||||||
[bool, int, str, object]
|
[bool, int, str, object]
|
||||||
]
|
]
|
||||||
|
|
||||||
def setup(self, numaxes, size, dtype):
|
def setup(self, numaxes, size, dtype):
|
||||||
self.x = np.arange(numaxes * size).reshape(numaxes, size)
|
self.x = np.arange(numaxes * size).reshape(numaxes, size)
|
||||||
self.x = (self.x % 3).astype(dtype)
|
self.x = (self.x % 3).astype(dtype)
|
||||||
|
|
||||||
def time_count_nonzero(self, numaxes, size, dtype):
|
def time_count_nonzero(self, numaxes, size, dtype):
|
||||||
np.count_nonzero(self.x)
|
np.count_nonzero(self.x)
|
||||||
|
|
||||||
def time_count_nonzero_axis(self, numaxes, size, dtype):
|
def time_count_nonzero_axis(self, numaxes, size, dtype):
|
||||||
np.count_nonzero(self.x, axis=self.x.ndim - 1)
|
np.count_nonzero(self.x, axis=self.x.ndim - 1)
|
||||||
|
|
||||||
def time_count_nonzero_multi_axis(self, numaxes, size, dtype):
|
def time_count_nonzero_multi_axis(self, numaxes, size, dtype):
|
||||||
if self.x.ndim >= 2:
|
if self.x.ndim >= 2:
|
||||||
np.count_nonzero(self.x, axis=(
|
np.count_nonzero(self.x, axis=(
|
||||||
self.x.ndim - 1, self.x.ndim - 2))
|
self.x.ndim - 1, self.x.ndim - 2))
|
||||||
|
|
||||||
|
|
||||||
class PackBits(Benchmark):
|
class PackBits(Benchmark):
|
||||||
param_names = ['dtype']
|
param_names = ['dtype']
|
||||||
params = [[bool, np.uintp]]
|
params = [[bool, np.uintp]]
|
||||||
def setup(self, dtype):
|
def setup(self, dtype):
|
||||||
self.d = np.ones(10000, dtype=dtype)
|
self.d = np.ones(10000, dtype=dtype)
|
||||||
self.d2 = np.ones((200, 1000), dtype=dtype)
|
self.d2 = np.ones((200, 1000), dtype=dtype)
|
||||||
|
|
||||||
def time_packbits(self, dtype):
|
def time_packbits(self, dtype):
|
||||||
np.packbits(self.d)
|
np.packbits(self.d)
|
||||||
|
|
||||||
def time_packbits_axis0(self, dtype):
|
def time_packbits_axis0(self, dtype):
|
||||||
np.packbits(self.d2, axis=0)
|
np.packbits(self.d2, axis=0)
|
||||||
|
|
||||||
def time_packbits_axis1(self, dtype):
|
def time_packbits_axis1(self, dtype):
|
||||||
np.packbits(self.d2, axis=1)
|
np.packbits(self.d2, axis=1)
|
||||||
|
|
||||||
|
|
||||||
class UnpackBits(Benchmark):
|
class UnpackBits(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.d = np.ones(10000, dtype=np.uint8)
|
self.d = np.ones(10000, dtype=np.uint8)
|
||||||
self.d2 = np.ones((200, 1000), dtype=np.uint8)
|
self.d2 = np.ones((200, 1000), dtype=np.uint8)
|
||||||
|
|
||||||
def time_unpackbits(self):
|
def time_unpackbits(self):
|
||||||
np.unpackbits(self.d)
|
np.unpackbits(self.d)
|
||||||
|
|
||||||
def time_unpackbits_little(self):
|
def time_unpackbits_little(self):
|
||||||
np.unpackbits(self.d, bitorder="little")
|
np.unpackbits(self.d, bitorder="little")
|
||||||
|
|
||||||
def time_unpackbits_axis0(self):
|
def time_unpackbits_axis0(self):
|
||||||
np.unpackbits(self.d2, axis=0)
|
np.unpackbits(self.d2, axis=0)
|
||||||
|
|
||||||
def time_unpackbits_axis1(self):
|
def time_unpackbits_axis1(self):
|
||||||
np.unpackbits(self.d2, axis=1)
|
np.unpackbits(self.d2, axis=1)
|
||||||
|
|
||||||
def time_unpackbits_axis1_little(self):
|
def time_unpackbits_axis1_little(self):
|
||||||
np.unpackbits(self.d2, bitorder="little", axis=1)
|
np.unpackbits(self.d2, bitorder="little", axis=1)
|
||||||
|
|
||||||
|
|
||||||
class Indices(Benchmark):
|
class Indices(Benchmark):
|
||||||
def time_indices(self):
|
def time_indices(self):
|
||||||
np.indices((1000, 500))
|
np.indices((1000, 500))
|
||||||
|
|
||||||
class VarComplex(Benchmark):
|
class VarComplex(Benchmark):
|
||||||
params = [10**n for n in range(1, 9)]
|
params = [10**n for n in range(1, 9)]
|
||||||
def setup(self, n):
|
def setup(self, n):
|
||||||
self.arr = np.random.randn(n) + 1j * np.random.randn(n)
|
self.arr = np.random.randn(n) + 1j * np.random.randn(n)
|
||||||
|
|
||||||
def teardown(self, n):
|
def teardown(self, n):
|
||||||
del self.arr
|
del self.arr
|
||||||
|
|
||||||
def time_var(self, n):
|
def time_var(self, n):
|
||||||
self.arr.var()
|
self.arr.var()
|
||||||
|
|
|
@ -1,287 +1,287 @@
|
||||||
from .common import Benchmark
|
from .common import Benchmark
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
class Histogram1D(Benchmark):
|
class Histogram1D(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.d = np.linspace(0, 100, 100000)
|
self.d = np.linspace(0, 100, 100000)
|
||||||
|
|
||||||
def time_full_coverage(self):
|
def time_full_coverage(self):
|
||||||
np.histogram(self.d, 200, (0, 100))
|
np.histogram(self.d, 200, (0, 100))
|
||||||
|
|
||||||
def time_small_coverage(self):
|
def time_small_coverage(self):
|
||||||
np.histogram(self.d, 200, (50, 51))
|
np.histogram(self.d, 200, (50, 51))
|
||||||
|
|
||||||
def time_fine_binning(self):
|
def time_fine_binning(self):
|
||||||
np.histogram(self.d, 10000, (0, 100))
|
np.histogram(self.d, 10000, (0, 100))
|
||||||
|
|
||||||
|
|
||||||
class Histogram2D(Benchmark):
|
class Histogram2D(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.d = np.linspace(0, 100, 200000).reshape((-1,2))
|
self.d = np.linspace(0, 100, 200000).reshape((-1,2))
|
||||||
|
|
||||||
def time_full_coverage(self):
|
def time_full_coverage(self):
|
||||||
np.histogramdd(self.d, (200, 200), ((0, 100), (0, 100)))
|
np.histogramdd(self.d, (200, 200), ((0, 100), (0, 100)))
|
||||||
|
|
||||||
def time_small_coverage(self):
|
def time_small_coverage(self):
|
||||||
np.histogramdd(self.d, (200, 200), ((50, 51), (50, 51)))
|
np.histogramdd(self.d, (200, 200), ((50, 51), (50, 51)))
|
||||||
|
|
||||||
def time_fine_binning(self):
|
def time_fine_binning(self):
|
||||||
np.histogramdd(self.d, (10000, 10000), ((0, 100), (0, 100)))
|
np.histogramdd(self.d, (10000, 10000), ((0, 100), (0, 100)))
|
||||||
|
|
||||||
|
|
||||||
class Bincount(Benchmark):
|
class Bincount(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.d = np.arange(80000, dtype=np.intp)
|
self.d = np.arange(80000, dtype=np.intp)
|
||||||
self.e = self.d.astype(np.float64)
|
self.e = self.d.astype(np.float64)
|
||||||
|
|
||||||
def time_bincount(self):
|
def time_bincount(self):
|
||||||
np.bincount(self.d)
|
np.bincount(self.d)
|
||||||
|
|
||||||
def time_weights(self):
|
def time_weights(self):
|
||||||
np.bincount(self.d, weights=self.e)
|
np.bincount(self.d, weights=self.e)
|
||||||
|
|
||||||
|
|
||||||
class Median(Benchmark):
|
class Median(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.e = np.arange(10000, dtype=np.float32)
|
self.e = np.arange(10000, dtype=np.float32)
|
||||||
self.o = np.arange(10001, dtype=np.float32)
|
self.o = np.arange(10001, dtype=np.float32)
|
||||||
|
|
||||||
def time_even(self):
|
def time_even(self):
|
||||||
np.median(self.e)
|
np.median(self.e)
|
||||||
|
|
||||||
def time_odd(self):
|
def time_odd(self):
|
||||||
np.median(self.o)
|
np.median(self.o)
|
||||||
|
|
||||||
def time_even_inplace(self):
|
def time_even_inplace(self):
|
||||||
np.median(self.e, overwrite_input=True)
|
np.median(self.e, overwrite_input=True)
|
||||||
|
|
||||||
def time_odd_inplace(self):
|
def time_odd_inplace(self):
|
||||||
np.median(self.o, overwrite_input=True)
|
np.median(self.o, overwrite_input=True)
|
||||||
|
|
||||||
def time_even_small(self):
|
def time_even_small(self):
|
||||||
np.median(self.e[:500], overwrite_input=True)
|
np.median(self.e[:500], overwrite_input=True)
|
||||||
|
|
||||||
def time_odd_small(self):
|
def time_odd_small(self):
|
||||||
np.median(self.o[:500], overwrite_input=True)
|
np.median(self.o[:500], overwrite_input=True)
|
||||||
|
|
||||||
|
|
||||||
class Percentile(Benchmark):
|
class Percentile(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.e = np.arange(10000, dtype=np.float32)
|
self.e = np.arange(10000, dtype=np.float32)
|
||||||
self.o = np.arange(10001, dtype=np.float32)
|
self.o = np.arange(10001, dtype=np.float32)
|
||||||
|
|
||||||
def time_quartile(self):
|
def time_quartile(self):
|
||||||
np.percentile(self.e, [25, 75])
|
np.percentile(self.e, [25, 75])
|
||||||
|
|
||||||
def time_percentile(self):
|
def time_percentile(self):
|
||||||
np.percentile(self.e, [25, 35, 55, 65, 75])
|
np.percentile(self.e, [25, 35, 55, 65, 75])
|
||||||
|
|
||||||
|
|
||||||
class Select(Benchmark):
|
class Select(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.d = np.arange(20000)
|
self.d = np.arange(20000)
|
||||||
self.e = self.d.copy()
|
self.e = self.d.copy()
|
||||||
self.cond = [(self.d > 4), (self.d < 2)]
|
self.cond = [(self.d > 4), (self.d < 2)]
|
||||||
self.cond_large = [(self.d > 4), (self.d < 2)] * 10
|
self.cond_large = [(self.d > 4), (self.d < 2)] * 10
|
||||||
|
|
||||||
def time_select(self):
|
def time_select(self):
|
||||||
np.select(self.cond, [self.d, self.e])
|
np.select(self.cond, [self.d, self.e])
|
||||||
|
|
||||||
def time_select_larger(self):
|
def time_select_larger(self):
|
||||||
np.select(self.cond_large, ([self.d, self.e] * 10))
|
np.select(self.cond_large, ([self.d, self.e] * 10))
|
||||||
|
|
||||||
|
|
||||||
def memoize(f):
|
def memoize(f):
|
||||||
_memoized = {}
|
_memoized = {}
|
||||||
def wrapped(*args):
|
def wrapped(*args):
|
||||||
if args not in _memoized:
|
if args not in _memoized:
|
||||||
_memoized[args] = f(*args)
|
_memoized[args] = f(*args)
|
||||||
|
|
||||||
return _memoized[args].copy()
|
return _memoized[args].copy()
|
||||||
|
|
||||||
return f
|
return f
|
||||||
|
|
||||||
|
|
||||||
class SortGenerator:
|
class SortGenerator:
|
||||||
# The size of the unsorted area in the "random unsorted area"
|
# The size of the unsorted area in the "random unsorted area"
|
||||||
# benchmarks
|
# benchmarks
|
||||||
AREA_SIZE = 100
|
AREA_SIZE = 100
|
||||||
# The size of the "partially ordered" sub-arrays
|
# The size of the "partially ordered" sub-arrays
|
||||||
BUBBLE_SIZE = 100
|
BUBBLE_SIZE = 100
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@memoize
|
@memoize
|
||||||
def random(size, dtype):
|
def random(size, dtype):
|
||||||
"""
|
"""
|
||||||
Returns a randomly-shuffled array.
|
Returns a randomly-shuffled array.
|
||||||
"""
|
"""
|
||||||
arr = np.arange(size, dtype=dtype)
|
arr = np.arange(size, dtype=dtype)
|
||||||
np.random.shuffle(arr)
|
np.random.shuffle(arr)
|
||||||
return arr
|
return arr
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@memoize
|
@memoize
|
||||||
def ordered(size, dtype):
|
def ordered(size, dtype):
|
||||||
"""
|
"""
|
||||||
Returns an ordered array.
|
Returns an ordered array.
|
||||||
"""
|
"""
|
||||||
return np.arange(size, dtype=dtype)
|
return np.arange(size, dtype=dtype)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@memoize
|
@memoize
|
||||||
def reversed(size, dtype):
|
def reversed(size, dtype):
|
||||||
"""
|
"""
|
||||||
Returns an array that's in descending order.
|
Returns an array that's in descending order.
|
||||||
"""
|
"""
|
||||||
return np.arange(size-1, -1, -1, dtype=dtype)
|
return np.arange(size-1, -1, -1, dtype=dtype)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@memoize
|
@memoize
|
||||||
def uniform(size, dtype):
|
def uniform(size, dtype):
|
||||||
"""
|
"""
|
||||||
Returns an array that has the same value everywhere.
|
Returns an array that has the same value everywhere.
|
||||||
"""
|
"""
|
||||||
return np.ones(size, dtype=dtype)
|
return np.ones(size, dtype=dtype)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@memoize
|
@memoize
|
||||||
def swapped_pair(size, dtype, swap_frac):
|
def swapped_pair(size, dtype, swap_frac):
|
||||||
"""
|
"""
|
||||||
Returns an ordered array, but one that has ``swap_frac * size``
|
Returns an ordered array, but one that has ``swap_frac * size``
|
||||||
pairs swapped.
|
pairs swapped.
|
||||||
"""
|
"""
|
||||||
a = np.arange(size, dtype=dtype)
|
a = np.arange(size, dtype=dtype)
|
||||||
for _ in range(int(size * swap_frac)):
|
for _ in range(int(size * swap_frac)):
|
||||||
x, y = np.random.randint(0, size, 2)
|
x, y = np.random.randint(0, size, 2)
|
||||||
a[x], a[y] = a[y], a[x]
|
a[x], a[y] = a[y], a[x]
|
||||||
return a
|
return a
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@memoize
|
@memoize
|
||||||
def sorted_block(size, dtype, block_size):
|
def sorted_block(size, dtype, block_size):
|
||||||
"""
|
"""
|
||||||
Returns an array with blocks that are all sorted.
|
Returns an array with blocks that are all sorted.
|
||||||
"""
|
"""
|
||||||
a = np.arange(size, dtype=dtype)
|
a = np.arange(size, dtype=dtype)
|
||||||
b = []
|
b = []
|
||||||
if size < block_size:
|
if size < block_size:
|
||||||
return a
|
return a
|
||||||
block_num = size // block_size
|
block_num = size // block_size
|
||||||
for i in range(block_num):
|
for i in range(block_num):
|
||||||
b.extend(a[i::block_num])
|
b.extend(a[i::block_num])
|
||||||
return np.array(b)
|
return np.array(b)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@memoize
|
@memoize
|
||||||
def random_unsorted_area(cls, size, dtype, frac, area_size=None):
|
def random_unsorted_area(cls, size, dtype, frac, area_size=None):
|
||||||
"""
|
"""
|
||||||
This type of array has random unsorted areas such that they
|
This type of array has random unsorted areas such that they
|
||||||
compose the fraction ``frac`` of the original array.
|
compose the fraction ``frac`` of the original array.
|
||||||
"""
|
"""
|
||||||
if area_size is None:
|
if area_size is None:
|
||||||
area_size = cls.AREA_SIZE
|
area_size = cls.AREA_SIZE
|
||||||
|
|
||||||
area_num = int(size * frac / area_size)
|
area_num = int(size * frac / area_size)
|
||||||
a = np.arange(size, dtype=dtype)
|
a = np.arange(size, dtype=dtype)
|
||||||
for _ in range(area_num):
|
for _ in range(area_num):
|
||||||
start = np.random.randint(size-area_size)
|
start = np.random.randint(size-area_size)
|
||||||
end = start + area_size
|
end = start + area_size
|
||||||
np.random.shuffle(a[start:end])
|
np.random.shuffle(a[start:end])
|
||||||
return a
|
return a
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@memoize
|
@memoize
|
||||||
def random_bubble(cls, size, dtype, bubble_num, bubble_size=None):
|
def random_bubble(cls, size, dtype, bubble_num, bubble_size=None):
|
||||||
"""
|
"""
|
||||||
This type of array has ``bubble_num`` random unsorted areas.
|
This type of array has ``bubble_num`` random unsorted areas.
|
||||||
"""
|
"""
|
||||||
if bubble_size is None:
|
if bubble_size is None:
|
||||||
bubble_size = cls.BUBBLE_SIZE
|
bubble_size = cls.BUBBLE_SIZE
|
||||||
frac = bubble_size * bubble_num / size
|
frac = bubble_size * bubble_num / size
|
||||||
|
|
||||||
return cls.random_unsorted_area(size, dtype, frac, bubble_size)
|
return cls.random_unsorted_area(size, dtype, frac, bubble_size)
|
||||||
|
|
||||||
|
|
||||||
class Sort(Benchmark):
|
class Sort(Benchmark):
|
||||||
"""
|
"""
|
||||||
This benchmark tests sorting performance with several
|
This benchmark tests sorting performance with several
|
||||||
different types of arrays that are likely to appear in
|
different types of arrays that are likely to appear in
|
||||||
real-world applications.
|
real-world applications.
|
||||||
"""
|
"""
|
||||||
params = [
|
params = [
|
||||||
# In NumPy 1.17 and newer, 'merge' can be one of several
|
# In NumPy 1.17 and newer, 'merge' can be one of several
|
||||||
# stable sorts, it isn't necessarily merge sort.
|
# stable sorts, it isn't necessarily merge sort.
|
||||||
['quick', 'merge', 'heap'],
|
['quick', 'merge', 'heap'],
|
||||||
['float64', 'int64', 'int16'],
|
['float64', 'int64', 'int16'],
|
||||||
[
|
[
|
||||||
('random',),
|
('random',),
|
||||||
('ordered',),
|
('ordered',),
|
||||||
('reversed',),
|
('reversed',),
|
||||||
('uniform',),
|
('uniform',),
|
||||||
('sorted_block', 10),
|
('sorted_block', 10),
|
||||||
('sorted_block', 100),
|
('sorted_block', 100),
|
||||||
('sorted_block', 1000),
|
('sorted_block', 1000),
|
||||||
# ('swapped_pair', 0.01),
|
# ('swapped_pair', 0.01),
|
||||||
# ('swapped_pair', 0.1),
|
# ('swapped_pair', 0.1),
|
||||||
# ('swapped_pair', 0.5),
|
# ('swapped_pair', 0.5),
|
||||||
# ('random_unsorted_area', 0.5),
|
# ('random_unsorted_area', 0.5),
|
||||||
# ('random_unsorted_area', 0.1),
|
# ('random_unsorted_area', 0.1),
|
||||||
# ('random_unsorted_area', 0.01),
|
# ('random_unsorted_area', 0.01),
|
||||||
# ('random_bubble', 1),
|
# ('random_bubble', 1),
|
||||||
# ('random_bubble', 5),
|
# ('random_bubble', 5),
|
||||||
# ('random_bubble', 10),
|
# ('random_bubble', 10),
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
param_names = ['kind', 'dtype', 'array_type']
|
param_names = ['kind', 'dtype', 'array_type']
|
||||||
|
|
||||||
# The size of the benchmarked arrays.
|
# The size of the benchmarked arrays.
|
||||||
ARRAY_SIZE = 10000
|
ARRAY_SIZE = 10000
|
||||||
|
|
||||||
def setup(self, kind, dtype, array_type):
|
def setup(self, kind, dtype, array_type):
|
||||||
np.random.seed(1234)
|
np.random.seed(1234)
|
||||||
array_class = array_type[0]
|
array_class = array_type[0]
|
||||||
self.arr = getattr(SortGenerator, array_class)(self.ARRAY_SIZE, dtype, *array_type[1:])
|
self.arr = getattr(SortGenerator, array_class)(self.ARRAY_SIZE, dtype, *array_type[1:])
|
||||||
|
|
||||||
def time_sort(self, kind, dtype, array_type):
|
def time_sort(self, kind, dtype, array_type):
|
||||||
# Using np.sort(...) instead of arr.sort(...) because it makes a copy.
|
# Using np.sort(...) instead of arr.sort(...) because it makes a copy.
|
||||||
# This is important because the data is prepared once per benchmark, but
|
# This is important because the data is prepared once per benchmark, but
|
||||||
# used across multiple runs.
|
# used across multiple runs.
|
||||||
np.sort(self.arr, kind=kind)
|
np.sort(self.arr, kind=kind)
|
||||||
|
|
||||||
def time_argsort(self, kind, dtype, array_type):
|
def time_argsort(self, kind, dtype, array_type):
|
||||||
np.argsort(self.arr, kind=kind)
|
np.argsort(self.arr, kind=kind)
|
||||||
|
|
||||||
|
|
||||||
class SortWorst(Benchmark):
|
class SortWorst(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
# quicksort median of 3 worst case
|
# quicksort median of 3 worst case
|
||||||
self.worst = np.arange(1000000)
|
self.worst = np.arange(1000000)
|
||||||
x = self.worst
|
x = self.worst
|
||||||
while x.size > 3:
|
while x.size > 3:
|
||||||
mid = x.size // 2
|
mid = x.size // 2
|
||||||
x[mid], x[-2] = x[-2], x[mid]
|
x[mid], x[-2] = x[-2], x[mid]
|
||||||
x = x[:-2]
|
x = x[:-2]
|
||||||
|
|
||||||
def time_sort_worst(self):
|
def time_sort_worst(self):
|
||||||
np.sort(self.worst)
|
np.sort(self.worst)
|
||||||
|
|
||||||
# Retain old benchmark name for backward compatibility
|
# Retain old benchmark name for backward compatibility
|
||||||
time_sort_worst.benchmark_name = "bench_function_base.Sort.time_sort_worst"
|
time_sort_worst.benchmark_name = "bench_function_base.Sort.time_sort_worst"
|
||||||
|
|
||||||
|
|
||||||
class Where(Benchmark):
|
class Where(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.d = np.arange(20000)
|
self.d = np.arange(20000)
|
||||||
self.e = self.d.copy()
|
self.e = self.d.copy()
|
||||||
self.cond = (self.d > 5000)
|
self.cond = (self.d > 5000)
|
||||||
|
|
||||||
def time_1(self):
|
def time_1(self):
|
||||||
np.where(self.cond)
|
np.where(self.cond)
|
||||||
|
|
||||||
def time_2(self):
|
def time_2(self):
|
||||||
np.where(self.cond, self.d, self.e)
|
np.where(self.cond, self.d, self.e)
|
||||||
|
|
||||||
def time_2_broadcast(self):
|
def time_2_broadcast(self):
|
||||||
np.where(self.cond, self.d, 0)
|
np.where(self.cond, self.d, 0)
|
||||||
|
|
|
@ -1,34 +1,34 @@
|
||||||
from subprocess import call
|
from subprocess import call
|
||||||
from sys import executable
|
from sys import executable
|
||||||
from timeit import default_timer
|
from timeit import default_timer
|
||||||
|
|
||||||
from .common import Benchmark
|
from .common import Benchmark
|
||||||
|
|
||||||
|
|
||||||
class Import(Benchmark):
|
class Import(Benchmark):
|
||||||
timer = default_timer
|
timer = default_timer
|
||||||
|
|
||||||
def execute(self, command):
|
def execute(self, command):
|
||||||
call((executable, '-c', command))
|
call((executable, '-c', command))
|
||||||
|
|
||||||
def time_numpy(self):
|
def time_numpy(self):
|
||||||
self.execute('import numpy')
|
self.execute('import numpy')
|
||||||
|
|
||||||
def time_numpy_inspect(self):
|
def time_numpy_inspect(self):
|
||||||
# What are the savings from avoiding to import the inspect module?
|
# What are the savings from avoiding to import the inspect module?
|
||||||
self.execute('import numpy, inspect')
|
self.execute('import numpy, inspect')
|
||||||
|
|
||||||
def time_fft(self):
|
def time_fft(self):
|
||||||
self.execute('from numpy import fft')
|
self.execute('from numpy import fft')
|
||||||
|
|
||||||
def time_linalg(self):
|
def time_linalg(self):
|
||||||
self.execute('from numpy import linalg')
|
self.execute('from numpy import linalg')
|
||||||
|
|
||||||
def time_ma(self):
|
def time_ma(self):
|
||||||
self.execute('from numpy import ma')
|
self.execute('from numpy import ma')
|
||||||
|
|
||||||
def time_matlib(self):
|
def time_matlib(self):
|
||||||
self.execute('from numpy import matlib')
|
self.execute('from numpy import matlib')
|
||||||
|
|
||||||
def time_random(self):
|
def time_random(self):
|
||||||
self.execute('from numpy import random')
|
self.execute('from numpy import random')
|
||||||
|
|
|
@ -1,74 +1,74 @@
|
||||||
from .common import Benchmark, get_squares_, get_indexes_, get_indexes_rand_
|
from .common import Benchmark, get_squares_, get_indexes_, get_indexes_rand_
|
||||||
|
|
||||||
from os.path import join as pjoin
|
from os.path import join as pjoin
|
||||||
import shutil
|
import shutil
|
||||||
from numpy import memmap, float32, array
|
from numpy import memmap, float32, array
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from tempfile import mkdtemp
|
from tempfile import mkdtemp
|
||||||
|
|
||||||
|
|
||||||
class Indexing(Benchmark):
|
class Indexing(Benchmark):
|
||||||
params = [["indexes_", "indexes_rand_"],
|
params = [["indexes_", "indexes_rand_"],
|
||||||
['I', ':,I', 'np.ix_(I, I)'],
|
['I', ':,I', 'np.ix_(I, I)'],
|
||||||
['', '=1']]
|
['', '=1']]
|
||||||
param_names = ['indexes', 'sel', 'op']
|
param_names = ['indexes', 'sel', 'op']
|
||||||
|
|
||||||
def setup(self, indexes, sel, op):
|
def setup(self, indexes, sel, op):
|
||||||
sel = sel.replace('I', indexes)
|
sel = sel.replace('I', indexes)
|
||||||
|
|
||||||
ns = {'squares_': get_squares_(),
|
ns = {'squares_': get_squares_(),
|
||||||
'np': np,
|
'np': np,
|
||||||
'indexes_': get_indexes_(),
|
'indexes_': get_indexes_(),
|
||||||
'indexes_rand_': get_indexes_rand_()}
|
'indexes_rand_': get_indexes_rand_()}
|
||||||
|
|
||||||
code = "def run():\n for a in squares_.values(): a[%s]%s"
|
code = "def run():\n for a in squares_.values(): a[%s]%s"
|
||||||
code = code % (sel, op)
|
code = code % (sel, op)
|
||||||
|
|
||||||
exec(code, ns)
|
exec(code, ns)
|
||||||
self.func = ns['run']
|
self.func = ns['run']
|
||||||
|
|
||||||
def time_op(self, indexes, sel, op):
|
def time_op(self, indexes, sel, op):
|
||||||
self.func()
|
self.func()
|
||||||
|
|
||||||
|
|
||||||
class IndexingSeparate(Benchmark):
|
class IndexingSeparate(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.tmp_dir = mkdtemp()
|
self.tmp_dir = mkdtemp()
|
||||||
self.fp = memmap(pjoin(self.tmp_dir, 'tmp.dat'),
|
self.fp = memmap(pjoin(self.tmp_dir, 'tmp.dat'),
|
||||||
dtype=float32, mode='w+', shape=(50, 60))
|
dtype=float32, mode='w+', shape=(50, 60))
|
||||||
self.indexes = array([3, 4, 6, 10, 20])
|
self.indexes = array([3, 4, 6, 10, 20])
|
||||||
|
|
||||||
def teardown(self):
|
def teardown(self):
|
||||||
del self.fp
|
del self.fp
|
||||||
shutil.rmtree(self.tmp_dir)
|
shutil.rmtree(self.tmp_dir)
|
||||||
|
|
||||||
def time_mmap_slicing(self):
|
def time_mmap_slicing(self):
|
||||||
for i in range(1000):
|
for i in range(1000):
|
||||||
self.fp[5:10]
|
self.fp[5:10]
|
||||||
|
|
||||||
def time_mmap_fancy_indexing(self):
|
def time_mmap_fancy_indexing(self):
|
||||||
for i in range(1000):
|
for i in range(1000):
|
||||||
self.fp[self.indexes]
|
self.fp[self.indexes]
|
||||||
|
|
||||||
|
|
||||||
class IndexingStructured0D(Benchmark):
|
class IndexingStructured0D(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.dt = np.dtype([('a', 'f4', 256)])
|
self.dt = np.dtype([('a', 'f4', 256)])
|
||||||
|
|
||||||
self.A = np.zeros((), self.dt)
|
self.A = np.zeros((), self.dt)
|
||||||
self.B = self.A.copy()
|
self.B = self.A.copy()
|
||||||
|
|
||||||
self.a = np.zeros(1, self.dt)[0]
|
self.a = np.zeros(1, self.dt)[0]
|
||||||
self.b = self.a.copy()
|
self.b = self.a.copy()
|
||||||
|
|
||||||
def time_array_slice(self):
|
def time_array_slice(self):
|
||||||
self.B['a'][:] = self.A['a']
|
self.B['a'][:] = self.A['a']
|
||||||
|
|
||||||
def time_array_all(self):
|
def time_array_all(self):
|
||||||
self.B['a'] = self.A['a']
|
self.B['a'] = self.A['a']
|
||||||
|
|
||||||
def time_scalar_slice(self):
|
def time_scalar_slice(self):
|
||||||
self.b['a'][:] = self.a['a']
|
self.b['a'][:] = self.a['a']
|
||||||
|
|
||||||
def time_scalar_all(self):
|
def time_scalar_all(self):
|
||||||
self.b['a'] = self.a['a']
|
self.b['a'] = self.a['a']
|
||||||
|
|
|
@ -1,244 +1,244 @@
|
||||||
from .common import Benchmark, get_squares
|
from .common import Benchmark, get_squares
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
|
||||||
|
|
||||||
class Copy(Benchmark):
|
class Copy(Benchmark):
|
||||||
params = ["int8", "int16", "float32", "float64",
|
params = ["int8", "int16", "float32", "float64",
|
||||||
"complex64", "complex128"]
|
"complex64", "complex128"]
|
||||||
param_names = ['type']
|
param_names = ['type']
|
||||||
|
|
||||||
def setup(self, typename):
|
def setup(self, typename):
|
||||||
dtype = np.dtype(typename)
|
dtype = np.dtype(typename)
|
||||||
self.d = np.arange((50 * 500), dtype=dtype).reshape((500, 50))
|
self.d = np.arange((50 * 500), dtype=dtype).reshape((500, 50))
|
||||||
self.e = np.arange((50 * 500), dtype=dtype).reshape((50, 500))
|
self.e = np.arange((50 * 500), dtype=dtype).reshape((50, 500))
|
||||||
self.e_d = self.e.reshape(self.d.shape)
|
self.e_d = self.e.reshape(self.d.shape)
|
||||||
self.dflat = np.arange((50 * 500), dtype=dtype)
|
self.dflat = np.arange((50 * 500), dtype=dtype)
|
||||||
|
|
||||||
def time_memcpy(self, typename):
|
def time_memcpy(self, typename):
|
||||||
self.d[...] = self.e_d
|
self.d[...] = self.e_d
|
||||||
|
|
||||||
def time_memcpy_large_out_of_place(self, typename):
|
def time_memcpy_large_out_of_place(self, typename):
|
||||||
l = np.ones(1024**2, dtype=np.dtype(typename))
|
l = np.ones(1024**2, dtype=np.dtype(typename))
|
||||||
l.copy()
|
l.copy()
|
||||||
|
|
||||||
def time_cont_assign(self, typename):
|
def time_cont_assign(self, typename):
|
||||||
self.d[...] = 1
|
self.d[...] = 1
|
||||||
|
|
||||||
def time_strided_copy(self, typename):
|
def time_strided_copy(self, typename):
|
||||||
self.d[...] = self.e.T
|
self.d[...] = self.e.T
|
||||||
|
|
||||||
def time_strided_assign(self, typename):
|
def time_strided_assign(self, typename):
|
||||||
self.dflat[::2] = 2
|
self.dflat[::2] = 2
|
||||||
|
|
||||||
|
|
||||||
class CopyTo(Benchmark):
|
class CopyTo(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.d = np.ones(50000)
|
self.d = np.ones(50000)
|
||||||
self.e = self.d.copy()
|
self.e = self.d.copy()
|
||||||
self.m = (self.d == 1)
|
self.m = (self.d == 1)
|
||||||
self.im = (~ self.m)
|
self.im = (~ self.m)
|
||||||
self.m8 = self.m.copy()
|
self.m8 = self.m.copy()
|
||||||
self.m8[::8] = (~ self.m[::8])
|
self.m8[::8] = (~ self.m[::8])
|
||||||
self.im8 = (~ self.m8)
|
self.im8 = (~ self.m8)
|
||||||
|
|
||||||
def time_copyto(self):
|
def time_copyto(self):
|
||||||
np.copyto(self.d, self.e)
|
np.copyto(self.d, self.e)
|
||||||
|
|
||||||
def time_copyto_sparse(self):
|
def time_copyto_sparse(self):
|
||||||
np.copyto(self.d, self.e, where=self.m)
|
np.copyto(self.d, self.e, where=self.m)
|
||||||
|
|
||||||
def time_copyto_dense(self):
|
def time_copyto_dense(self):
|
||||||
np.copyto(self.d, self.e, where=self.im)
|
np.copyto(self.d, self.e, where=self.im)
|
||||||
|
|
||||||
def time_copyto_8_sparse(self):
|
def time_copyto_8_sparse(self):
|
||||||
np.copyto(self.d, self.e, where=self.m8)
|
np.copyto(self.d, self.e, where=self.m8)
|
||||||
|
|
||||||
def time_copyto_8_dense(self):
|
def time_copyto_8_dense(self):
|
||||||
np.copyto(self.d, self.e, where=self.im8)
|
np.copyto(self.d, self.e, where=self.im8)
|
||||||
|
|
||||||
|
|
||||||
class Savez(Benchmark):
|
class Savez(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.squares = get_squares()
|
self.squares = get_squares()
|
||||||
|
|
||||||
def time_vb_savez_squares(self):
|
def time_vb_savez_squares(self):
|
||||||
np.savez('tmp.npz', **self.squares)
|
np.savez('tmp.npz', **self.squares)
|
||||||
|
|
||||||
|
|
||||||
class LoadtxtCSVComments(Benchmark):
|
class LoadtxtCSVComments(Benchmark):
|
||||||
# benchmarks for np.loadtxt comment handling
|
# benchmarks for np.loadtxt comment handling
|
||||||
# when reading in CSV files
|
# when reading in CSV files
|
||||||
|
|
||||||
params = [10, int(1e2), int(1e4), int(1e5)]
|
params = [10, int(1e2), int(1e4), int(1e5)]
|
||||||
param_names = ['num_lines']
|
param_names = ['num_lines']
|
||||||
|
|
||||||
def setup(self, num_lines):
|
def setup(self, num_lines):
|
||||||
data = [u'1,2,3 # comment'] * num_lines
|
data = [u'1,2,3 # comment'] * num_lines
|
||||||
# unfortunately, timeit will only run setup()
|
# unfortunately, timeit will only run setup()
|
||||||
# between repeat events, but not for iterations
|
# between repeat events, but not for iterations
|
||||||
# within repeats, so the StringIO object
|
# within repeats, so the StringIO object
|
||||||
# will have to be rewinded in the benchmark proper
|
# will have to be rewinded in the benchmark proper
|
||||||
self.data_comments = StringIO(u'\n'.join(data))
|
self.data_comments = StringIO(u'\n'.join(data))
|
||||||
|
|
||||||
def time_comment_loadtxt_csv(self, num_lines):
|
def time_comment_loadtxt_csv(self, num_lines):
|
||||||
# benchmark handling of lines with comments
|
# benchmark handling of lines with comments
|
||||||
# when loading in from csv files
|
# when loading in from csv files
|
||||||
|
|
||||||
# inspired by similar benchmark in pandas
|
# inspired by similar benchmark in pandas
|
||||||
# for read_csv
|
# for read_csv
|
||||||
|
|
||||||
# need to rewind StringIO object (unfortunately
|
# need to rewind StringIO object (unfortunately
|
||||||
# confounding timing result somewhat) for every
|
# confounding timing result somewhat) for every
|
||||||
# call to timing test proper
|
# call to timing test proper
|
||||||
np.loadtxt(self.data_comments,
|
np.loadtxt(self.data_comments,
|
||||||
delimiter=u',')
|
delimiter=u',')
|
||||||
self.data_comments.seek(0)
|
self.data_comments.seek(0)
|
||||||
|
|
||||||
class LoadtxtCSVdtypes(Benchmark):
|
class LoadtxtCSVdtypes(Benchmark):
|
||||||
# benchmarks for np.loadtxt operating with
|
# benchmarks for np.loadtxt operating with
|
||||||
# different dtypes parsed / cast from CSV files
|
# different dtypes parsed / cast from CSV files
|
||||||
|
|
||||||
params = (['float32', 'float64', 'int32', 'int64',
|
params = (['float32', 'float64', 'int32', 'int64',
|
||||||
'complex128', 'str', 'object'],
|
'complex128', 'str', 'object'],
|
||||||
[10, int(1e2), int(1e4), int(1e5)])
|
[10, int(1e2), int(1e4), int(1e5)])
|
||||||
param_names = ['dtype', 'num_lines']
|
param_names = ['dtype', 'num_lines']
|
||||||
|
|
||||||
def setup(self, dtype, num_lines):
|
def setup(self, dtype, num_lines):
|
||||||
data = [u'5, 7, 888'] * num_lines
|
data = [u'5, 7, 888'] * num_lines
|
||||||
self.csv_data = StringIO(u'\n'.join(data))
|
self.csv_data = StringIO(u'\n'.join(data))
|
||||||
|
|
||||||
def time_loadtxt_dtypes_csv(self, dtype, num_lines):
|
def time_loadtxt_dtypes_csv(self, dtype, num_lines):
|
||||||
# benchmark loading arrays of various dtypes
|
# benchmark loading arrays of various dtypes
|
||||||
# from csv files
|
# from csv files
|
||||||
|
|
||||||
# state-dependent timing benchmark requires
|
# state-dependent timing benchmark requires
|
||||||
# rewind of StringIO object
|
# rewind of StringIO object
|
||||||
|
|
||||||
np.loadtxt(self.csv_data,
|
np.loadtxt(self.csv_data,
|
||||||
delimiter=u',',
|
delimiter=u',',
|
||||||
dtype=dtype)
|
dtype=dtype)
|
||||||
self.csv_data.seek(0)
|
self.csv_data.seek(0)
|
||||||
|
|
||||||
class LoadtxtCSVStructured(Benchmark):
|
class LoadtxtCSVStructured(Benchmark):
|
||||||
# benchmarks for np.loadtxt operating with
|
# benchmarks for np.loadtxt operating with
|
||||||
# a structured data type & CSV file
|
# a structured data type & CSV file
|
||||||
|
|
||||||
def setup(self):
|
def setup(self):
|
||||||
num_lines = 50000
|
num_lines = 50000
|
||||||
data = [u"M, 21, 72, X, 155"] * num_lines
|
data = [u"M, 21, 72, X, 155"] * num_lines
|
||||||
self.csv_data = StringIO(u'\n'.join(data))
|
self.csv_data = StringIO(u'\n'.join(data))
|
||||||
|
|
||||||
def time_loadtxt_csv_struct_dtype(self):
|
def time_loadtxt_csv_struct_dtype(self):
|
||||||
# obligate rewind of StringIO object
|
# obligate rewind of StringIO object
|
||||||
# between iterations of a repeat:
|
# between iterations of a repeat:
|
||||||
|
|
||||||
np.loadtxt(self.csv_data,
|
np.loadtxt(self.csv_data,
|
||||||
delimiter=u',',
|
delimiter=u',',
|
||||||
dtype=[('category_1', 'S1'),
|
dtype=[('category_1', 'S1'),
|
||||||
('category_2', 'i4'),
|
('category_2', 'i4'),
|
||||||
('category_3', 'f8'),
|
('category_3', 'f8'),
|
||||||
('category_4', 'S1'),
|
('category_4', 'S1'),
|
||||||
('category_5', 'f8')])
|
('category_5', 'f8')])
|
||||||
self.csv_data.seek(0)
|
self.csv_data.seek(0)
|
||||||
|
|
||||||
|
|
||||||
class LoadtxtCSVSkipRows(Benchmark):
|
class LoadtxtCSVSkipRows(Benchmark):
|
||||||
# benchmarks for loadtxt row skipping when
|
# benchmarks for loadtxt row skipping when
|
||||||
# reading in csv file data; a similar benchmark
|
# reading in csv file data; a similar benchmark
|
||||||
# is present in the pandas asv suite
|
# is present in the pandas asv suite
|
||||||
|
|
||||||
params = [0, 500, 10000]
|
params = [0, 500, 10000]
|
||||||
param_names = ['skiprows']
|
param_names = ['skiprows']
|
||||||
|
|
||||||
def setup(self, skiprows):
|
def setup(self, skiprows):
|
||||||
np.random.seed(123)
|
np.random.seed(123)
|
||||||
test_array = np.random.rand(100000, 3)
|
test_array = np.random.rand(100000, 3)
|
||||||
self.fname = 'test_array.csv'
|
self.fname = 'test_array.csv'
|
||||||
np.savetxt(fname=self.fname,
|
np.savetxt(fname=self.fname,
|
||||||
X=test_array,
|
X=test_array,
|
||||||
delimiter=',')
|
delimiter=',')
|
||||||
|
|
||||||
def time_skiprows_csv(self, skiprows):
|
def time_skiprows_csv(self, skiprows):
|
||||||
np.loadtxt(self.fname,
|
np.loadtxt(self.fname,
|
||||||
delimiter=',',
|
delimiter=',',
|
||||||
skiprows=skiprows)
|
skiprows=skiprows)
|
||||||
|
|
||||||
class LoadtxtReadUint64Integers(Benchmark):
|
class LoadtxtReadUint64Integers(Benchmark):
|
||||||
# pandas has a similar CSV reading benchmark
|
# pandas has a similar CSV reading benchmark
|
||||||
# modified to suit np.loadtxt
|
# modified to suit np.loadtxt
|
||||||
|
|
||||||
params = [550, 1000, 10000]
|
params = [550, 1000, 10000]
|
||||||
param_names = ['size']
|
param_names = ['size']
|
||||||
|
|
||||||
def setup(self, size):
|
def setup(self, size):
|
||||||
arr = np.arange(size).astype('uint64') + 2**63
|
arr = np.arange(size).astype('uint64') + 2**63
|
||||||
self.data1 = StringIO(u'\n'.join(arr.astype(str).tolist()))
|
self.data1 = StringIO(u'\n'.join(arr.astype(str).tolist()))
|
||||||
arr = arr.astype(object)
|
arr = arr.astype(object)
|
||||||
arr[500] = -1
|
arr[500] = -1
|
||||||
self.data2 = StringIO(u'\n'.join(arr.astype(str).tolist()))
|
self.data2 = StringIO(u'\n'.join(arr.astype(str).tolist()))
|
||||||
|
|
||||||
def time_read_uint64(self, size):
|
def time_read_uint64(self, size):
|
||||||
# mandatory rewind of StringIO object
|
# mandatory rewind of StringIO object
|
||||||
# between iterations of a repeat:
|
# between iterations of a repeat:
|
||||||
np.loadtxt(self.data1)
|
np.loadtxt(self.data1)
|
||||||
self.data1.seek(0)
|
self.data1.seek(0)
|
||||||
|
|
||||||
def time_read_uint64_neg_values(self, size):
|
def time_read_uint64_neg_values(self, size):
|
||||||
# mandatory rewind of StringIO object
|
# mandatory rewind of StringIO object
|
||||||
# between iterations of a repeat:
|
# between iterations of a repeat:
|
||||||
np.loadtxt(self.data2)
|
np.loadtxt(self.data2)
|
||||||
self.data2.seek(0)
|
self.data2.seek(0)
|
||||||
|
|
||||||
class LoadtxtUseColsCSV(Benchmark):
|
class LoadtxtUseColsCSV(Benchmark):
|
||||||
# benchmark selective column reading from CSV files
|
# benchmark selective column reading from CSV files
|
||||||
# using np.loadtxt
|
# using np.loadtxt
|
||||||
|
|
||||||
params = [2, [1, 3], [1, 3, 5, 7]]
|
params = [2, [1, 3], [1, 3, 5, 7]]
|
||||||
param_names = ['usecols']
|
param_names = ['usecols']
|
||||||
|
|
||||||
def setup(self, usecols):
|
def setup(self, usecols):
|
||||||
num_lines = 5000
|
num_lines = 5000
|
||||||
data = [u'0, 1, 2, 3, 4, 5, 6, 7, 8, 9'] * num_lines
|
data = [u'0, 1, 2, 3, 4, 5, 6, 7, 8, 9'] * num_lines
|
||||||
self.csv_data = StringIO(u'\n'.join(data))
|
self.csv_data = StringIO(u'\n'.join(data))
|
||||||
|
|
||||||
def time_loadtxt_usecols_csv(self, usecols):
|
def time_loadtxt_usecols_csv(self, usecols):
|
||||||
# must rewind StringIO because of state
|
# must rewind StringIO because of state
|
||||||
# dependence of file reading
|
# dependence of file reading
|
||||||
np.loadtxt(self.csv_data,
|
np.loadtxt(self.csv_data,
|
||||||
delimiter=u',',
|
delimiter=u',',
|
||||||
usecols=usecols)
|
usecols=usecols)
|
||||||
self.csv_data.seek(0)
|
self.csv_data.seek(0)
|
||||||
|
|
||||||
class LoadtxtCSVDateTime(Benchmark):
|
class LoadtxtCSVDateTime(Benchmark):
|
||||||
# benchmarks for np.loadtxt operating with
|
# benchmarks for np.loadtxt operating with
|
||||||
# datetime data in a CSV file
|
# datetime data in a CSV file
|
||||||
|
|
||||||
params = [20, 200, 2000, 20000]
|
params = [20, 200, 2000, 20000]
|
||||||
param_names = ['num_lines']
|
param_names = ['num_lines']
|
||||||
|
|
||||||
def setup(self, num_lines):
|
def setup(self, num_lines):
|
||||||
# create the equivalent of a two-column CSV file
|
# create the equivalent of a two-column CSV file
|
||||||
# with date strings in the first column and random
|
# with date strings in the first column and random
|
||||||
# floating point data in the second column
|
# floating point data in the second column
|
||||||
dates = np.arange('today', 20, dtype=np.datetime64)
|
dates = np.arange('today', 20, dtype=np.datetime64)
|
||||||
np.random.seed(123)
|
np.random.seed(123)
|
||||||
values = np.random.rand(20)
|
values = np.random.rand(20)
|
||||||
date_line = u''
|
date_line = u''
|
||||||
|
|
||||||
for date, value in zip(dates, values):
|
for date, value in zip(dates, values):
|
||||||
date_line += (str(date) + ',' + str(value) + '\n')
|
date_line += (str(date) + ',' + str(value) + '\n')
|
||||||
|
|
||||||
# expand data to specified number of lines
|
# expand data to specified number of lines
|
||||||
data = date_line * (num_lines // 20)
|
data = date_line * (num_lines // 20)
|
||||||
self.csv_data = StringIO(data)
|
self.csv_data = StringIO(data)
|
||||||
|
|
||||||
def time_loadtxt_csv_datetime(self, num_lines):
|
def time_loadtxt_csv_datetime(self, num_lines):
|
||||||
# rewind StringIO object -- the timing iterations
|
# rewind StringIO object -- the timing iterations
|
||||||
# are state-dependent
|
# are state-dependent
|
||||||
X = np.loadtxt(self.csv_data,
|
X = np.loadtxt(self.csv_data,
|
||||||
delimiter=u',',
|
delimiter=u',',
|
||||||
dtype=([('dates', 'M8[us]'),
|
dtype=([('dates', 'M8[us]'),
|
||||||
('values', 'float64')]))
|
('values', 'float64')]))
|
||||||
self.csv_data.seek(0)
|
self.csv_data.seek(0)
|
||||||
|
|
|
@ -1,45 +1,45 @@
|
||||||
from __future__ import absolute_import, division, print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
from .common import Benchmark, TYPES1
|
from .common import Benchmark, TYPES1
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
class Take(Benchmark):
|
class Take(Benchmark):
|
||||||
params = [
|
params = [
|
||||||
[(1000, 1), (1000, 2), (2, 1000, 1), (1000, 3)],
|
[(1000, 1), (1000, 2), (2, 1000, 1), (1000, 3)],
|
||||||
["raise", "wrap", "clip"],
|
["raise", "wrap", "clip"],
|
||||||
TYPES1]
|
TYPES1]
|
||||||
param_names = ["shape", "mode", "dtype"]
|
param_names = ["shape", "mode", "dtype"]
|
||||||
|
|
||||||
def setup(self, shape, mode, dtype):
|
def setup(self, shape, mode, dtype):
|
||||||
self.arr = np.ones(shape, dtype)
|
self.arr = np.ones(shape, dtype)
|
||||||
self.indices = np.arange(1000)
|
self.indices = np.arange(1000)
|
||||||
|
|
||||||
def time_contiguous(self, shape, mode, dtype):
|
def time_contiguous(self, shape, mode, dtype):
|
||||||
self.arr.take(self.indices, axis=-2, mode=mode)
|
self.arr.take(self.indices, axis=-2, mode=mode)
|
||||||
|
|
||||||
|
|
||||||
class PutMask(Benchmark):
|
class PutMask(Benchmark):
|
||||||
params = [
|
params = [
|
||||||
[True, False],
|
[True, False],
|
||||||
TYPES1]
|
TYPES1]
|
||||||
param_names = ["values_is_scalar", "dtype"]
|
param_names = ["values_is_scalar", "dtype"]
|
||||||
|
|
||||||
def setup(self, values_is_scalar, dtype):
|
def setup(self, values_is_scalar, dtype):
|
||||||
if values_is_scalar:
|
if values_is_scalar:
|
||||||
self.vals = np.array(1., dtype=dtype)
|
self.vals = np.array(1., dtype=dtype)
|
||||||
else:
|
else:
|
||||||
self.vals = np.ones(1000, dtype=dtype)
|
self.vals = np.ones(1000, dtype=dtype)
|
||||||
|
|
||||||
self.arr = np.ones(1000, dtype=dtype)
|
self.arr = np.ones(1000, dtype=dtype)
|
||||||
|
|
||||||
self.dense_mask = np.ones(1000, dtype="bool")
|
self.dense_mask = np.ones(1000, dtype="bool")
|
||||||
self.sparse_mask = np.zeros(1000, dtype="bool")
|
self.sparse_mask = np.zeros(1000, dtype="bool")
|
||||||
|
|
||||||
def time_dense(self, values_is_scalar, dtype):
|
def time_dense(self, values_is_scalar, dtype):
|
||||||
np.putmask(self.arr, self.dense_mask, self.vals)
|
np.putmask(self.arr, self.dense_mask, self.vals)
|
||||||
|
|
||||||
def time_sparse(self, values_is_scalar, dtype):
|
def time_sparse(self, values_is_scalar, dtype):
|
||||||
np.putmask(self.arr, self.sparse_mask, self.vals)
|
np.putmask(self.arr, self.sparse_mask, self.vals)
|
||||||
|
|
||||||
|
|
|
@ -1,115 +1,115 @@
|
||||||
"""Benchmarks for `numpy.lib`."""
|
"""Benchmarks for `numpy.lib`."""
|
||||||
|
|
||||||
|
|
||||||
from .common import Benchmark
|
from .common import Benchmark
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
class Pad(Benchmark):
|
class Pad(Benchmark):
|
||||||
"""Benchmarks for `numpy.pad`.
|
"""Benchmarks for `numpy.pad`.
|
||||||
|
|
||||||
When benchmarking the pad function it is useful to cover scenarios where
|
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
|
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
|
significantly (original area vs. padded area). This allows to evaluate for
|
||||||
which scenario a padding algorithm is optimized. Furthermore involving
|
which scenario a padding algorithm is optimized. Furthermore involving
|
||||||
large range of array sizes ensures that the effects of CPU-bound caching is
|
large range of array sizes ensures that the effects of CPU-bound caching is
|
||||||
visible.
|
visible.
|
||||||
|
|
||||||
The table below shows the sizes of the arrays involved in this benchmark:
|
The table below shows the sizes of the arrays involved in this benchmark:
|
||||||
|
|
||||||
+-----------------+----------+-----------+-----------+-----------------+
|
+-----------------+----------+-----------+-----------+-----------------+
|
||||||
| shape | original | padded: 1 | padded: 8 | padded: (0, 32) |
|
| shape | original | padded: 1 | padded: 8 | padded: (0, 32) |
|
||||||
+=================+==========+===========+===========+=================+
|
+=================+==========+===========+===========+=================+
|
||||||
| (2 ** 22,) | 32 MiB | 32.0 MiB | 32.0 MiB | 32.0 MiB |
|
| (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 |
|
| (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 |
|
| (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 |
|
| (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 |
|
| (1, 1, 1, 1, 1) | 8 B | 1.90 MiB | 10.8 MiB | 299 MiB |
|
||||||
+-----------------+----------+-----------+-----------+-----------------+
|
+-----------------+----------+-----------+-----------+-----------------+
|
||||||
"""
|
"""
|
||||||
|
|
||||||
param_names = ["shape", "pad_width", "mode"]
|
param_names = ["shape", "pad_width", "mode"]
|
||||||
params = [
|
params = [
|
||||||
# Shape of the input arrays
|
# Shape of the input arrays
|
||||||
[(2 ** 22,), (1024, 1024), (256, 128, 1),
|
[(2 ** 22,), (1024, 1024), (256, 128, 1),
|
||||||
(4, 4, 4, 4), (1, 1, 1, 1, 1)],
|
(4, 4, 4, 4), (1, 1, 1, 1, 1)],
|
||||||
# Tested pad widths
|
# Tested pad widths
|
||||||
[1, 8, (0, 32)],
|
[1, 8, (0, 32)],
|
||||||
# Tested modes: mean, median, minimum & maximum use the same code path
|
# Tested modes: mean, median, minimum & maximum use the same code path
|
||||||
# reflect & symmetric share a lot of their code path
|
# reflect & symmetric share a lot of their code path
|
||||||
["constant", "edge", "linear_ramp", "mean", "reflect", "wrap"],
|
["constant", "edge", "linear_ramp", "mean", "reflect", "wrap"],
|
||||||
]
|
]
|
||||||
|
|
||||||
def setup(self, shape, pad_width, mode):
|
def setup(self, shape, pad_width, mode):
|
||||||
# Make sure to fill the array to make the OS page fault
|
# Make sure to fill the array to make the OS page fault
|
||||||
# in the setup phase and not the timed phase
|
# in the setup phase and not the timed phase
|
||||||
self.array = np.full(shape, fill_value=1, dtype=np.float64)
|
self.array = np.full(shape, fill_value=1, dtype=np.float64)
|
||||||
|
|
||||||
def time_pad(self, shape, pad_width, mode):
|
def time_pad(self, shape, pad_width, mode):
|
||||||
np.pad(self.array, pad_width, mode)
|
np.pad(self.array, pad_width, mode)
|
||||||
|
|
||||||
class Nan(Benchmark):
|
class Nan(Benchmark):
|
||||||
"""Benchmarks for nan functions"""
|
"""Benchmarks for nan functions"""
|
||||||
|
|
||||||
param_names = ["array_size", "percent_nans"]
|
param_names = ["array_size", "percent_nans"]
|
||||||
params = [
|
params = [
|
||||||
# sizes of the 1D arrays
|
# sizes of the 1D arrays
|
||||||
[200, int(2e5)],
|
[200, int(2e5)],
|
||||||
# percent of np.nan in arrays
|
# percent of np.nan in arrays
|
||||||
[0, 0.1, 2., 50., 90.],
|
[0, 0.1, 2., 50., 90.],
|
||||||
]
|
]
|
||||||
|
|
||||||
def setup(self, array_size, percent_nans):
|
def setup(self, array_size, percent_nans):
|
||||||
np.random.seed(123)
|
np.random.seed(123)
|
||||||
# produce a randomly shuffled array with the
|
# produce a randomly shuffled array with the
|
||||||
# approximate desired percentage np.nan content
|
# approximate desired percentage np.nan content
|
||||||
base_array = np.random.uniform(size=array_size)
|
base_array = np.random.uniform(size=array_size)
|
||||||
base_array[base_array < percent_nans / 100.] = np.nan
|
base_array[base_array < percent_nans / 100.] = np.nan
|
||||||
self.arr = base_array
|
self.arr = base_array
|
||||||
|
|
||||||
def time_nanmin(self, array_size, percent_nans):
|
def time_nanmin(self, array_size, percent_nans):
|
||||||
np.nanmin(self.arr)
|
np.nanmin(self.arr)
|
||||||
|
|
||||||
def time_nanmax(self, array_size, percent_nans):
|
def time_nanmax(self, array_size, percent_nans):
|
||||||
np.nanmax(self.arr)
|
np.nanmax(self.arr)
|
||||||
|
|
||||||
def time_nanargmin(self, array_size, percent_nans):
|
def time_nanargmin(self, array_size, percent_nans):
|
||||||
np.nanargmin(self.arr)
|
np.nanargmin(self.arr)
|
||||||
|
|
||||||
def time_nanargmax(self, array_size, percent_nans):
|
def time_nanargmax(self, array_size, percent_nans):
|
||||||
np.nanargmax(self.arr)
|
np.nanargmax(self.arr)
|
||||||
|
|
||||||
def time_nansum(self, array_size, percent_nans):
|
def time_nansum(self, array_size, percent_nans):
|
||||||
np.nansum(self.arr)
|
np.nansum(self.arr)
|
||||||
|
|
||||||
def time_nanprod(self, array_size, percent_nans):
|
def time_nanprod(self, array_size, percent_nans):
|
||||||
np.nanprod(self.arr)
|
np.nanprod(self.arr)
|
||||||
|
|
||||||
def time_nancumsum(self, array_size, percent_nans):
|
def time_nancumsum(self, array_size, percent_nans):
|
||||||
np.nancumsum(self.arr)
|
np.nancumsum(self.arr)
|
||||||
|
|
||||||
def time_nancumprod(self, array_size, percent_nans):
|
def time_nancumprod(self, array_size, percent_nans):
|
||||||
np.nancumprod(self.arr)
|
np.nancumprod(self.arr)
|
||||||
|
|
||||||
def time_nanmean(self, array_size, percent_nans):
|
def time_nanmean(self, array_size, percent_nans):
|
||||||
np.nanmean(self.arr)
|
np.nanmean(self.arr)
|
||||||
|
|
||||||
def time_nanvar(self, array_size, percent_nans):
|
def time_nanvar(self, array_size, percent_nans):
|
||||||
np.nanvar(self.arr)
|
np.nanvar(self.arr)
|
||||||
|
|
||||||
def time_nanstd(self, array_size, percent_nans):
|
def time_nanstd(self, array_size, percent_nans):
|
||||||
np.nanstd(self.arr)
|
np.nanstd(self.arr)
|
||||||
|
|
||||||
def time_nanmedian(self, array_size, percent_nans):
|
def time_nanmedian(self, array_size, percent_nans):
|
||||||
np.nanmedian(self.arr)
|
np.nanmedian(self.arr)
|
||||||
|
|
||||||
def time_nanquantile(self, array_size, percent_nans):
|
def time_nanquantile(self, array_size, percent_nans):
|
||||||
np.nanquantile(self.arr, q=0.2)
|
np.nanquantile(self.arr, q=0.2)
|
||||||
|
|
||||||
def time_nanpercentile(self, array_size, percent_nans):
|
def time_nanpercentile(self, array_size, percent_nans):
|
||||||
np.nanpercentile(self.arr, q=50)
|
np.nanpercentile(self.arr, q=50)
|
||||||
|
|
|
@ -1,107 +1,107 @@
|
||||||
from .common import Benchmark, get_squares_, get_indexes_rand, TYPES1
|
from .common import Benchmark, get_squares_, get_indexes_rand, TYPES1
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
class Eindot(Benchmark):
|
class Eindot(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.a = np.arange(60000.0).reshape(150, 400)
|
self.a = np.arange(60000.0).reshape(150, 400)
|
||||||
self.ac = self.a.copy()
|
self.ac = self.a.copy()
|
||||||
self.at = self.a.T
|
self.at = self.a.T
|
||||||
self.atc = self.a.T.copy()
|
self.atc = self.a.T.copy()
|
||||||
self.b = np.arange(240000.0).reshape(400, 600)
|
self.b = np.arange(240000.0).reshape(400, 600)
|
||||||
self.c = np.arange(600)
|
self.c = np.arange(600)
|
||||||
self.d = np.arange(400)
|
self.d = np.arange(400)
|
||||||
|
|
||||||
self.a3 = np.arange(480000.).reshape(60, 80, 100)
|
self.a3 = np.arange(480000.).reshape(60, 80, 100)
|
||||||
self.b3 = np.arange(192000.).reshape(80, 60, 40)
|
self.b3 = np.arange(192000.).reshape(80, 60, 40)
|
||||||
|
|
||||||
def time_dot_a_b(self):
|
def time_dot_a_b(self):
|
||||||
np.dot(self.a, self.b)
|
np.dot(self.a, self.b)
|
||||||
|
|
||||||
def time_dot_d_dot_b_c(self):
|
def time_dot_d_dot_b_c(self):
|
||||||
np.dot(self.d, np.dot(self.b, self.c))
|
np.dot(self.d, np.dot(self.b, self.c))
|
||||||
|
|
||||||
def time_dot_trans_a_at(self):
|
def time_dot_trans_a_at(self):
|
||||||
np.dot(self.a, self.at)
|
np.dot(self.a, self.at)
|
||||||
|
|
||||||
def time_dot_trans_a_atc(self):
|
def time_dot_trans_a_atc(self):
|
||||||
np.dot(self.a, self.atc)
|
np.dot(self.a, self.atc)
|
||||||
|
|
||||||
def time_dot_trans_at_a(self):
|
def time_dot_trans_at_a(self):
|
||||||
np.dot(self.at, self.a)
|
np.dot(self.at, self.a)
|
||||||
|
|
||||||
def time_dot_trans_atc_a(self):
|
def time_dot_trans_atc_a(self):
|
||||||
np.dot(self.atc, self.a)
|
np.dot(self.atc, self.a)
|
||||||
|
|
||||||
def time_einsum_i_ij_j(self):
|
def time_einsum_i_ij_j(self):
|
||||||
np.einsum('i,ij,j', self.d, self.b, self.c)
|
np.einsum('i,ij,j', self.d, self.b, self.c)
|
||||||
|
|
||||||
def time_einsum_ij_jk_a_b(self):
|
def time_einsum_ij_jk_a_b(self):
|
||||||
np.einsum('ij,jk', self.a, self.b)
|
np.einsum('ij,jk', self.a, self.b)
|
||||||
|
|
||||||
def time_einsum_ijk_jil_kl(self):
|
def time_einsum_ijk_jil_kl(self):
|
||||||
np.einsum('ijk,jil->kl', self.a3, self.b3)
|
np.einsum('ijk,jil->kl', self.a3, self.b3)
|
||||||
|
|
||||||
def time_inner_trans_a_a(self):
|
def time_inner_trans_a_a(self):
|
||||||
np.inner(self.a, self.a)
|
np.inner(self.a, self.a)
|
||||||
|
|
||||||
def time_inner_trans_a_ac(self):
|
def time_inner_trans_a_ac(self):
|
||||||
np.inner(self.a, self.ac)
|
np.inner(self.a, self.ac)
|
||||||
|
|
||||||
def time_matmul_a_b(self):
|
def time_matmul_a_b(self):
|
||||||
np.matmul(self.a, self.b)
|
np.matmul(self.a, self.b)
|
||||||
|
|
||||||
def time_matmul_d_matmul_b_c(self):
|
def time_matmul_d_matmul_b_c(self):
|
||||||
np.matmul(self.d, np.matmul(self.b, self.c))
|
np.matmul(self.d, np.matmul(self.b, self.c))
|
||||||
|
|
||||||
def time_matmul_trans_a_at(self):
|
def time_matmul_trans_a_at(self):
|
||||||
np.matmul(self.a, self.at)
|
np.matmul(self.a, self.at)
|
||||||
|
|
||||||
def time_matmul_trans_a_atc(self):
|
def time_matmul_trans_a_atc(self):
|
||||||
np.matmul(self.a, self.atc)
|
np.matmul(self.a, self.atc)
|
||||||
|
|
||||||
def time_matmul_trans_at_a(self):
|
def time_matmul_trans_at_a(self):
|
||||||
np.matmul(self.at, self.a)
|
np.matmul(self.at, self.a)
|
||||||
|
|
||||||
def time_matmul_trans_atc_a(self):
|
def time_matmul_trans_atc_a(self):
|
||||||
np.matmul(self.atc, self.a)
|
np.matmul(self.atc, self.a)
|
||||||
|
|
||||||
def time_tensordot_a_b_axes_1_0_0_1(self):
|
def time_tensordot_a_b_axes_1_0_0_1(self):
|
||||||
np.tensordot(self.a3, self.b3, axes=([1, 0], [0, 1]))
|
np.tensordot(self.a3, self.b3, axes=([1, 0], [0, 1]))
|
||||||
|
|
||||||
|
|
||||||
class Linalg(Benchmark):
|
class Linalg(Benchmark):
|
||||||
params = [['svd', 'pinv', 'det', 'norm'],
|
params = [['svd', 'pinv', 'det', 'norm'],
|
||||||
TYPES1]
|
TYPES1]
|
||||||
param_names = ['op', 'type']
|
param_names = ['op', 'type']
|
||||||
|
|
||||||
def setup(self, op, typename):
|
def setup(self, op, typename):
|
||||||
np.seterr(all='ignore')
|
np.seterr(all='ignore')
|
||||||
|
|
||||||
self.func = getattr(np.linalg, op)
|
self.func = getattr(np.linalg, op)
|
||||||
|
|
||||||
if op == 'cholesky':
|
if op == 'cholesky':
|
||||||
# we need a positive definite
|
# we need a positive definite
|
||||||
self.a = np.dot(get_squares_()[typename],
|
self.a = np.dot(get_squares_()[typename],
|
||||||
get_squares_()[typename].T)
|
get_squares_()[typename].T)
|
||||||
else:
|
else:
|
||||||
self.a = get_squares_()[typename]
|
self.a = get_squares_()[typename]
|
||||||
|
|
||||||
# check that dtype is supported at all
|
# check that dtype is supported at all
|
||||||
try:
|
try:
|
||||||
self.func(self.a[:2, :2])
|
self.func(self.a[:2, :2])
|
||||||
except TypeError:
|
except TypeError:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
def time_op(self, op, typename):
|
def time_op(self, op, typename):
|
||||||
self.func(self.a)
|
self.func(self.a)
|
||||||
|
|
||||||
|
|
||||||
class Lstsq(Benchmark):
|
class Lstsq(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.a = get_squares_()['float64']
|
self.a = get_squares_()['float64']
|
||||||
self.b = get_indexes_rand()[:100].astype(np.float64)
|
self.b = get_indexes_rand()[:100].astype(np.float64)
|
||||||
|
|
||||||
def time_numpy_linalg_lstsq_a__b_float64(self):
|
def time_numpy_linalg_lstsq_a__b_float64(self):
|
||||||
np.linalg.lstsq(self.a, self.b, rcond=-1)
|
np.linalg.lstsq(self.a, self.b, rcond=-1)
|
||||||
|
|
|
@ -1,113 +1,113 @@
|
||||||
from .common import Benchmark
|
from .common import Benchmark
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
class MA(Benchmark):
|
class MA(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.l100 = range(100)
|
self.l100 = range(100)
|
||||||
self.t100 = ([True] * 100)
|
self.t100 = ([True] * 100)
|
||||||
|
|
||||||
def time_masked_array(self):
|
def time_masked_array(self):
|
||||||
np.ma.masked_array()
|
np.ma.masked_array()
|
||||||
|
|
||||||
def time_masked_array_l100(self):
|
def time_masked_array_l100(self):
|
||||||
np.ma.masked_array(self.l100)
|
np.ma.masked_array(self.l100)
|
||||||
|
|
||||||
def time_masked_array_l100_t100(self):
|
def time_masked_array_l100_t100(self):
|
||||||
np.ma.masked_array(self.l100, self.t100)
|
np.ma.masked_array(self.l100, self.t100)
|
||||||
|
|
||||||
|
|
||||||
class Indexing(Benchmark):
|
class Indexing(Benchmark):
|
||||||
param_names = ['masked', 'ndim', 'size']
|
param_names = ['masked', 'ndim', 'size']
|
||||||
params = [[True, False],
|
params = [[True, False],
|
||||||
[1, 2],
|
[1, 2],
|
||||||
[10, 100, 1000]]
|
[10, 100, 1000]]
|
||||||
def setup(self, masked, ndim, size):
|
def setup(self, masked, ndim, size):
|
||||||
x = np.arange(size**ndim).reshape(ndim * (size,))
|
x = np.arange(size**ndim).reshape(ndim * (size,))
|
||||||
|
|
||||||
if masked:
|
if masked:
|
||||||
self.m = np.ma.array(x, mask=x%2 == 0)
|
self.m = np.ma.array(x, mask=x%2 == 0)
|
||||||
else:
|
else:
|
||||||
self.m = np.ma.array(x)
|
self.m = np.ma.array(x)
|
||||||
|
|
||||||
self.idx_scalar = (size//2,) * ndim
|
self.idx_scalar = (size//2,) * ndim
|
||||||
self.idx_0d = (size//2,) * ndim + (Ellipsis,)
|
self.idx_0d = (size//2,) * ndim + (Ellipsis,)
|
||||||
self.idx_1d = (size//2,) * (ndim - 1)
|
self.idx_1d = (size//2,) * (ndim - 1)
|
||||||
|
|
||||||
def time_scalar(self, masked, ndim, size):
|
def time_scalar(self, masked, ndim, size):
|
||||||
self.m[self.idx_scalar]
|
self.m[self.idx_scalar]
|
||||||
|
|
||||||
def time_0d(self, masked, ndim, size):
|
def time_0d(self, masked, ndim, size):
|
||||||
self.m[self.idx_0d]
|
self.m[self.idx_0d]
|
||||||
|
|
||||||
def time_1d(self, masked, ndim, size):
|
def time_1d(self, masked, ndim, size):
|
||||||
self.m[self.idx_1d]
|
self.m[self.idx_1d]
|
||||||
|
|
||||||
|
|
||||||
class UFunc(Benchmark):
|
class UFunc(Benchmark):
|
||||||
param_names = ['a_masked', 'b_masked', 'size']
|
param_names = ['a_masked', 'b_masked', 'size']
|
||||||
params = [[True, False],
|
params = [[True, False],
|
||||||
[True, False],
|
[True, False],
|
||||||
[10, 100, 1000]]
|
[10, 100, 1000]]
|
||||||
|
|
||||||
def setup(self, a_masked, b_masked, size):
|
def setup(self, a_masked, b_masked, size):
|
||||||
x = np.arange(size).astype(np.uint8)
|
x = np.arange(size).astype(np.uint8)
|
||||||
|
|
||||||
self.a_scalar = np.ma.masked if a_masked else 5
|
self.a_scalar = np.ma.masked if a_masked else 5
|
||||||
self.b_scalar = np.ma.masked if b_masked else 3
|
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.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.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.a_2d = self.a_1d.reshape(1, -1)
|
||||||
self.b_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):
|
def time_scalar(self, a_masked, b_masked, size):
|
||||||
np.ma.add(self.a_scalar, self.b_scalar)
|
np.ma.add(self.a_scalar, self.b_scalar)
|
||||||
|
|
||||||
def time_scalar_1d(self, a_masked, b_masked, size):
|
def time_scalar_1d(self, a_masked, b_masked, size):
|
||||||
np.ma.add(self.a_scalar, self.b_1d)
|
np.ma.add(self.a_scalar, self.b_1d)
|
||||||
|
|
||||||
def time_1d(self, a_masked, b_masked, size):
|
def time_1d(self, a_masked, b_masked, size):
|
||||||
np.ma.add(self.a_1d, self.b_1d)
|
np.ma.add(self.a_1d, self.b_1d)
|
||||||
|
|
||||||
def time_2d(self, a_masked, b_masked, size):
|
def time_2d(self, a_masked, b_masked, size):
|
||||||
# broadcasting happens this time
|
# broadcasting happens this time
|
||||||
np.ma.add(self.a_2d, self.b_2d)
|
np.ma.add(self.a_2d, self.b_2d)
|
||||||
|
|
||||||
|
|
||||||
class Concatenate(Benchmark):
|
class Concatenate(Benchmark):
|
||||||
param_names = ['mode', 'n']
|
param_names = ['mode', 'n']
|
||||||
params = [
|
params = [
|
||||||
['ndarray', 'unmasked',
|
['ndarray', 'unmasked',
|
||||||
'ndarray+masked', 'unmasked+masked',
|
'ndarray+masked', 'unmasked+masked',
|
||||||
'masked'],
|
'masked'],
|
||||||
[2, 100, 2000]
|
[2, 100, 2000]
|
||||||
]
|
]
|
||||||
|
|
||||||
def setup(self, mode, n):
|
def setup(self, mode, n):
|
||||||
# avoid np.zeros's lazy allocation that cause page faults during benchmark.
|
# avoid np.zeros's lazy allocation that cause page faults during benchmark.
|
||||||
# np.fill will cause pagefaults to happen during setup.
|
# np.fill will cause pagefaults to happen during setup.
|
||||||
normal = np.full((n, n), 0, int)
|
normal = np.full((n, n), 0, int)
|
||||||
unmasked = np.ma.zeros((n, n), int)
|
unmasked = np.ma.zeros((n, n), int)
|
||||||
masked = np.ma.array(normal, mask=True)
|
masked = np.ma.array(normal, mask=True)
|
||||||
|
|
||||||
mode_parts = mode.split('+')
|
mode_parts = mode.split('+')
|
||||||
base = mode_parts[0]
|
base = mode_parts[0]
|
||||||
promote = 'masked' in mode_parts[1:]
|
promote = 'masked' in mode_parts[1:]
|
||||||
|
|
||||||
if base == 'ndarray':
|
if base == 'ndarray':
|
||||||
args = 10 * (normal,)
|
args = 10 * (normal,)
|
||||||
elif base == 'unmasked':
|
elif base == 'unmasked':
|
||||||
args = 10 * (unmasked,)
|
args = 10 * (unmasked,)
|
||||||
else:
|
else:
|
||||||
args = 10 * (masked,)
|
args = 10 * (masked,)
|
||||||
|
|
||||||
if promote:
|
if promote:
|
||||||
args = args[:-1] + (masked,)
|
args = args[:-1] + (masked,)
|
||||||
|
|
||||||
self.args = args
|
self.args = args
|
||||||
|
|
||||||
def time_it(self, mode, n):
|
def time_it(self, mode, n):
|
||||||
np.ma.concatenate(self.args)
|
np.ma.concatenate(self.args)
|
||||||
|
|
|
@ -1,67 +1,67 @@
|
||||||
from .common import Benchmark
|
from .common import Benchmark
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from numpy.core.overrides import array_function_dispatch
|
from numpy.core.overrides import array_function_dispatch
|
||||||
except ImportError:
|
except ImportError:
|
||||||
# Don't fail at import time with old Numpy versions
|
# Don't fail at import time with old Numpy versions
|
||||||
def array_function_dispatch(*args, **kwargs):
|
def array_function_dispatch(*args, **kwargs):
|
||||||
def wrap(*args, **kwargs):
|
def wrap(*args, **kwargs):
|
||||||
return None
|
return None
|
||||||
return wrap
|
return wrap
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
def _broadcast_to_dispatcher(array, shape, subok=None):
|
def _broadcast_to_dispatcher(array, shape, subok=None):
|
||||||
return (array,)
|
return (array,)
|
||||||
|
|
||||||
|
|
||||||
@array_function_dispatch(_broadcast_to_dispatcher)
|
@array_function_dispatch(_broadcast_to_dispatcher)
|
||||||
def mock_broadcast_to(array, shape, subok=False):
|
def mock_broadcast_to(array, shape, subok=False):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def _concatenate_dispatcher(arrays, axis=None, out=None):
|
def _concatenate_dispatcher(arrays, axis=None, out=None):
|
||||||
if out is not None:
|
if out is not None:
|
||||||
arrays = list(arrays)
|
arrays = list(arrays)
|
||||||
arrays.append(out)
|
arrays.append(out)
|
||||||
return arrays
|
return arrays
|
||||||
|
|
||||||
|
|
||||||
@array_function_dispatch(_concatenate_dispatcher)
|
@array_function_dispatch(_concatenate_dispatcher)
|
||||||
def mock_concatenate(arrays, axis=0, out=None):
|
def mock_concatenate(arrays, axis=0, out=None):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class DuckArray:
|
class DuckArray:
|
||||||
def __array_function__(self, func, types, args, kwargs):
|
def __array_function__(self, func, types, args, kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class ArrayFunction(Benchmark):
|
class ArrayFunction(Benchmark):
|
||||||
|
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.numpy_array = np.array(1)
|
self.numpy_array = np.array(1)
|
||||||
self.numpy_arrays = [np.array(1), np.array(2)]
|
self.numpy_arrays = [np.array(1), np.array(2)]
|
||||||
self.many_arrays = 500 * self.numpy_arrays
|
self.many_arrays = 500 * self.numpy_arrays
|
||||||
self.duck_array = DuckArray()
|
self.duck_array = DuckArray()
|
||||||
self.duck_arrays = [DuckArray(), DuckArray()]
|
self.duck_arrays = [DuckArray(), DuckArray()]
|
||||||
self.mixed_arrays = [np.array(1), DuckArray()]
|
self.mixed_arrays = [np.array(1), DuckArray()]
|
||||||
|
|
||||||
def time_mock_broadcast_to_numpy(self):
|
def time_mock_broadcast_to_numpy(self):
|
||||||
mock_broadcast_to(self.numpy_array, ())
|
mock_broadcast_to(self.numpy_array, ())
|
||||||
|
|
||||||
def time_mock_broadcast_to_duck(self):
|
def time_mock_broadcast_to_duck(self):
|
||||||
mock_broadcast_to(self.duck_array, ())
|
mock_broadcast_to(self.duck_array, ())
|
||||||
|
|
||||||
def time_mock_concatenate_numpy(self):
|
def time_mock_concatenate_numpy(self):
|
||||||
mock_concatenate(self.numpy_arrays, axis=0)
|
mock_concatenate(self.numpy_arrays, axis=0)
|
||||||
|
|
||||||
def time_mock_concatenate_many(self):
|
def time_mock_concatenate_many(self):
|
||||||
mock_concatenate(self.many_arrays, axis=0)
|
mock_concatenate(self.many_arrays, axis=0)
|
||||||
|
|
||||||
def time_mock_concatenate_duck(self):
|
def time_mock_concatenate_duck(self):
|
||||||
mock_concatenate(self.duck_arrays, axis=0)
|
mock_concatenate(self.duck_arrays, axis=0)
|
||||||
|
|
||||||
def time_mock_concatenate_mixed(self):
|
def time_mock_concatenate_mixed(self):
|
||||||
mock_concatenate(self.mixed_arrays, axis=0)
|
mock_concatenate(self.mixed_arrays, axis=0)
|
||||||
|
|
|
@ -1,184 +1,184 @@
|
||||||
from .common import Benchmark
|
from .common import Benchmark
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from numpy.random import Generator
|
from numpy.random import Generator
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Random(Benchmark):
|
class Random(Benchmark):
|
||||||
params = ['normal', 'uniform', 'weibull 1', 'binomial 10 0.5',
|
params = ['normal', 'uniform', 'weibull 1', 'binomial 10 0.5',
|
||||||
'poisson 10']
|
'poisson 10']
|
||||||
|
|
||||||
def setup(self, name):
|
def setup(self, name):
|
||||||
items = name.split()
|
items = name.split()
|
||||||
name = items.pop(0)
|
name = items.pop(0)
|
||||||
params = [float(x) for x in items]
|
params = [float(x) for x in items]
|
||||||
|
|
||||||
self.func = getattr(np.random, name)
|
self.func = getattr(np.random, name)
|
||||||
self.params = tuple(params) + ((100, 100),)
|
self.params = tuple(params) + ((100, 100),)
|
||||||
|
|
||||||
def time_rng(self, name):
|
def time_rng(self, name):
|
||||||
self.func(*self.params)
|
self.func(*self.params)
|
||||||
|
|
||||||
|
|
||||||
class Shuffle(Benchmark):
|
class Shuffle(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.a = np.arange(100000)
|
self.a = np.arange(100000)
|
||||||
|
|
||||||
def time_100000(self):
|
def time_100000(self):
|
||||||
np.random.shuffle(self.a)
|
np.random.shuffle(self.a)
|
||||||
|
|
||||||
|
|
||||||
class Randint(Benchmark):
|
class Randint(Benchmark):
|
||||||
|
|
||||||
def time_randint_fast(self):
|
def time_randint_fast(self):
|
||||||
"""Compare to uint32 below"""
|
"""Compare to uint32 below"""
|
||||||
np.random.randint(0, 2**30, size=10**5)
|
np.random.randint(0, 2**30, size=10**5)
|
||||||
|
|
||||||
def time_randint_slow(self):
|
def time_randint_slow(self):
|
||||||
"""Compare to uint32 below"""
|
"""Compare to uint32 below"""
|
||||||
np.random.randint(0, 2**30 + 1, size=10**5)
|
np.random.randint(0, 2**30 + 1, size=10**5)
|
||||||
|
|
||||||
|
|
||||||
class Randint_dtype(Benchmark):
|
class Randint_dtype(Benchmark):
|
||||||
high = {
|
high = {
|
||||||
'bool': 1,
|
'bool': 1,
|
||||||
'uint8': 2**7,
|
'uint8': 2**7,
|
||||||
'uint16': 2**15,
|
'uint16': 2**15,
|
||||||
'uint32': 2**31,
|
'uint32': 2**31,
|
||||||
'uint64': 2**63
|
'uint64': 2**63
|
||||||
}
|
}
|
||||||
|
|
||||||
param_names = ['dtype']
|
param_names = ['dtype']
|
||||||
params = ['bool', 'uint8', 'uint16', 'uint32', 'uint64']
|
params = ['bool', 'uint8', 'uint16', 'uint32', 'uint64']
|
||||||
|
|
||||||
def setup(self, name):
|
def setup(self, name):
|
||||||
from numpy.lib import NumpyVersion
|
from numpy.lib import NumpyVersion
|
||||||
if NumpyVersion(np.__version__) < '1.11.0.dev0':
|
if NumpyVersion(np.__version__) < '1.11.0.dev0':
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def time_randint_fast(self, name):
|
def time_randint_fast(self, name):
|
||||||
high = self.high[name]
|
high = self.high[name]
|
||||||
np.random.randint(0, high, size=10**5, dtype=name)
|
np.random.randint(0, high, size=10**5, dtype=name)
|
||||||
|
|
||||||
def time_randint_slow(self, name):
|
def time_randint_slow(self, name):
|
||||||
high = self.high[name]
|
high = self.high[name]
|
||||||
np.random.randint(0, high + 1, size=10**5, dtype=name)
|
np.random.randint(0, high + 1, size=10**5, dtype=name)
|
||||||
|
|
||||||
|
|
||||||
class Permutation(Benchmark):
|
class Permutation(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.n = 10000
|
self.n = 10000
|
||||||
self.a_1d = np.random.random(self.n)
|
self.a_1d = np.random.random(self.n)
|
||||||
self.a_2d = np.random.random((self.n, 2))
|
self.a_2d = np.random.random((self.n, 2))
|
||||||
|
|
||||||
def time_permutation_1d(self):
|
def time_permutation_1d(self):
|
||||||
np.random.permutation(self.a_1d)
|
np.random.permutation(self.a_1d)
|
||||||
|
|
||||||
def time_permutation_2d(self):
|
def time_permutation_2d(self):
|
||||||
np.random.permutation(self.a_2d)
|
np.random.permutation(self.a_2d)
|
||||||
|
|
||||||
def time_permutation_int(self):
|
def time_permutation_int(self):
|
||||||
np.random.permutation(self.n)
|
np.random.permutation(self.n)
|
||||||
|
|
||||||
nom_size = 100000
|
nom_size = 100000
|
||||||
|
|
||||||
class RNG(Benchmark):
|
class RNG(Benchmark):
|
||||||
param_names = ['rng']
|
param_names = ['rng']
|
||||||
params = ['PCG64', 'MT19937', 'Philox', 'SFC64', 'numpy']
|
params = ['PCG64', 'MT19937', 'Philox', 'SFC64', 'numpy']
|
||||||
|
|
||||||
def setup(self, bitgen):
|
def setup(self, bitgen):
|
||||||
if bitgen == 'numpy':
|
if bitgen == 'numpy':
|
||||||
self.rg = np.random.RandomState()
|
self.rg = np.random.RandomState()
|
||||||
else:
|
else:
|
||||||
self.rg = Generator(getattr(np.random, bitgen)())
|
self.rg = Generator(getattr(np.random, bitgen)())
|
||||||
self.rg.random()
|
self.rg.random()
|
||||||
self.int32info = np.iinfo(np.int32)
|
self.int32info = np.iinfo(np.int32)
|
||||||
self.uint32info = np.iinfo(np.uint32)
|
self.uint32info = np.iinfo(np.uint32)
|
||||||
self.uint64info = np.iinfo(np.uint64)
|
self.uint64info = np.iinfo(np.uint64)
|
||||||
|
|
||||||
def time_raw(self, bitgen):
|
def time_raw(self, bitgen):
|
||||||
if bitgen == 'numpy':
|
if bitgen == 'numpy':
|
||||||
self.rg.random_integers(self.int32info.max, size=nom_size)
|
self.rg.random_integers(self.int32info.max, size=nom_size)
|
||||||
else:
|
else:
|
||||||
self.rg.integers(self.int32info.max, size=nom_size, endpoint=True)
|
self.rg.integers(self.int32info.max, size=nom_size, endpoint=True)
|
||||||
|
|
||||||
def time_32bit(self, bitgen):
|
def time_32bit(self, bitgen):
|
||||||
min, max = self.uint32info.min, self.uint32info.max
|
min, max = self.uint32info.min, self.uint32info.max
|
||||||
if bitgen == 'numpy':
|
if bitgen == 'numpy':
|
||||||
self.rg.randint(min, max + 1, nom_size, dtype=np.uint32)
|
self.rg.randint(min, max + 1, nom_size, dtype=np.uint32)
|
||||||
else:
|
else:
|
||||||
self.rg.integers(min, max + 1, nom_size, dtype=np.uint32)
|
self.rg.integers(min, max + 1, nom_size, dtype=np.uint32)
|
||||||
|
|
||||||
def time_64bit(self, bitgen):
|
def time_64bit(self, bitgen):
|
||||||
min, max = self.uint64info.min, self.uint64info.max
|
min, max = self.uint64info.min, self.uint64info.max
|
||||||
if bitgen == 'numpy':
|
if bitgen == 'numpy':
|
||||||
self.rg.randint(min, max + 1, nom_size, dtype=np.uint64)
|
self.rg.randint(min, max + 1, nom_size, dtype=np.uint64)
|
||||||
else:
|
else:
|
||||||
self.rg.integers(min, max + 1, nom_size, dtype=np.uint64)
|
self.rg.integers(min, max + 1, nom_size, dtype=np.uint64)
|
||||||
|
|
||||||
def time_normal_zig(self, bitgen):
|
def time_normal_zig(self, bitgen):
|
||||||
self.rg.standard_normal(nom_size)
|
self.rg.standard_normal(nom_size)
|
||||||
|
|
||||||
class Bounded(Benchmark):
|
class Bounded(Benchmark):
|
||||||
u8 = np.uint8
|
u8 = np.uint8
|
||||||
u16 = np.uint16
|
u16 = np.uint16
|
||||||
u32 = np.uint32
|
u32 = np.uint32
|
||||||
u64 = np.uint64
|
u64 = np.uint64
|
||||||
param_names = ['rng', 'dt_max']
|
param_names = ['rng', 'dt_max']
|
||||||
params = [['PCG64', 'MT19937', 'Philox', 'SFC64', 'numpy'],
|
params = [['PCG64', 'MT19937', 'Philox', 'SFC64', 'numpy'],
|
||||||
[[u8, 95],
|
[[u8, 95],
|
||||||
[u8, 64], # Worst case for legacy
|
[u8, 64], # Worst case for legacy
|
||||||
[u8, 127], # Best case for legacy
|
[u8, 127], # Best case for legacy
|
||||||
[u16, 95],
|
[u16, 95],
|
||||||
[u16, 1024], # Worst case for legacy
|
[u16, 1024], # Worst case for legacy
|
||||||
[u16, 1535], # Typ. avg. case for legacy
|
[u16, 1535], # Typ. avg. case for legacy
|
||||||
[u16, 2047], # Best case for legacy
|
[u16, 2047], # Best case for legacy
|
||||||
[u32, 1024], # Worst case for legacy
|
[u32, 1024], # Worst case for legacy
|
||||||
[u32, 1535], # Typ. avg. case for legacy
|
[u32, 1535], # Typ. avg. case for legacy
|
||||||
[u32, 2047], # Best case for legacy
|
[u32, 2047], # Best case for legacy
|
||||||
[u64, 95],
|
[u64, 95],
|
||||||
[u64, 1024], # Worst case for legacy
|
[u64, 1024], # Worst case for legacy
|
||||||
[u64, 1535], # Typ. avg. case for legacy
|
[u64, 1535], # Typ. avg. case for legacy
|
||||||
[u64, 2047], # Best case for legacy
|
[u64, 2047], # Best case for legacy
|
||||||
]]
|
]]
|
||||||
|
|
||||||
def setup(self, bitgen, args):
|
def setup(self, bitgen, args):
|
||||||
if bitgen == 'numpy':
|
if bitgen == 'numpy':
|
||||||
self.rg = np.random.RandomState()
|
self.rg = np.random.RandomState()
|
||||||
else:
|
else:
|
||||||
self.rg = Generator(getattr(np.random, bitgen)())
|
self.rg = Generator(getattr(np.random, bitgen)())
|
||||||
self.rg.random()
|
self.rg.random()
|
||||||
|
|
||||||
def time_bounded(self, bitgen, args):
|
def time_bounded(self, bitgen, args):
|
||||||
"""
|
"""
|
||||||
Timer for 8-bit bounded values.
|
Timer for 8-bit bounded values.
|
||||||
|
|
||||||
Parameters (packed as args)
|
Parameters (packed as args)
|
||||||
----------
|
----------
|
||||||
dt : {uint8, uint16, uint32, unit64}
|
dt : {uint8, uint16, uint32, unit64}
|
||||||
output dtype
|
output dtype
|
||||||
max : int
|
max : int
|
||||||
Upper bound for range. Lower is always 0. Must be <= 2**bits.
|
Upper bound for range. Lower is always 0. Must be <= 2**bits.
|
||||||
"""
|
"""
|
||||||
dt, max = args
|
dt, max = args
|
||||||
if bitgen == 'numpy':
|
if bitgen == 'numpy':
|
||||||
self.rg.randint(0, max + 1, nom_size, dtype=dt)
|
self.rg.randint(0, max + 1, nom_size, dtype=dt)
|
||||||
else:
|
else:
|
||||||
self.rg.integers(0, max + 1, nom_size, dtype=dt)
|
self.rg.integers(0, max + 1, nom_size, dtype=dt)
|
||||||
|
|
||||||
class Choice(Benchmark):
|
class Choice(Benchmark):
|
||||||
params = [1e3, 1e6, 1e8]
|
params = [1e3, 1e6, 1e8]
|
||||||
|
|
||||||
def setup(self, v):
|
def setup(self, v):
|
||||||
self.a = np.arange(v)
|
self.a = np.arange(v)
|
||||||
self.rng = np.random.default_rng()
|
self.rng = np.random.default_rng()
|
||||||
|
|
||||||
def time_legacy_choice(self, v):
|
def time_legacy_choice(self, v):
|
||||||
np.random.choice(self.a, 1000, replace=False)
|
np.random.choice(self.a, 1000, replace=False)
|
||||||
|
|
||||||
def time_choice(self, v):
|
def time_choice(self, v):
|
||||||
self.rng.choice(self.a, 1000, replace=False)
|
self.rng.choice(self.a, 1000, replace=False)
|
||||||
|
|
|
@ -1,40 +1,40 @@
|
||||||
from .common import Benchmark
|
from .common import Benchmark
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
class Records(Benchmark):
|
class Records(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.l50 = np.arange(1000)
|
self.l50 = np.arange(1000)
|
||||||
self.fields_number = 10000
|
self.fields_number = 10000
|
||||||
self.arrays = [self.l50 for _ in range(self.fields_number)]
|
self.arrays = [self.l50 for _ in range(self.fields_number)]
|
||||||
self.formats = [self.l50.dtype.str 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.formats_str = ','.join(self.formats)
|
||||||
self.dtype_ = np.dtype(
|
self.dtype_ = np.dtype(
|
||||||
[
|
[
|
||||||
('field_{}'.format(i), self.l50.dtype.str)
|
('field_{}'.format(i), self.l50.dtype.str)
|
||||||
for i in range(self.fields_number)
|
for i in range(self.fields_number)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
self.buffer = self.l50.tostring() * self.fields_number
|
self.buffer = self.l50.tostring() * self.fields_number
|
||||||
|
|
||||||
def time_fromarrays_w_dtype(self):
|
def time_fromarrays_w_dtype(self):
|
||||||
np.core.records.fromarrays(self.arrays, dtype=self.dtype_)
|
np.core.records.fromarrays(self.arrays, dtype=self.dtype_)
|
||||||
|
|
||||||
def time_fromarrays_wo_dtype(self):
|
def time_fromarrays_wo_dtype(self):
|
||||||
np.core.records.fromarrays(self.arrays)
|
np.core.records.fromarrays(self.arrays)
|
||||||
|
|
||||||
def time_fromarrays_formats_as_list(self):
|
def time_fromarrays_formats_as_list(self):
|
||||||
np.core.records.fromarrays(self.arrays, formats=self.formats)
|
np.core.records.fromarrays(self.arrays, formats=self.formats)
|
||||||
|
|
||||||
def time_fromarrays_formats_as_string(self):
|
def time_fromarrays_formats_as_string(self):
|
||||||
np.core.records.fromarrays(self.arrays, formats=self.formats_str)
|
np.core.records.fromarrays(self.arrays, formats=self.formats_str)
|
||||||
|
|
||||||
def time_fromstring_w_dtype(self):
|
def time_fromstring_w_dtype(self):
|
||||||
np.core.records.fromstring(self.buffer, dtype=self.dtype_)
|
np.core.records.fromstring(self.buffer, dtype=self.dtype_)
|
||||||
|
|
||||||
def time_fromstring_formats_as_list(self):
|
def time_fromstring_formats_as_list(self):
|
||||||
np.core.records.fromstring(self.buffer, formats=self.formats)
|
np.core.records.fromstring(self.buffer, formats=self.formats)
|
||||||
|
|
||||||
def time_fromstring_formats_as_string(self):
|
def time_fromstring_formats_as_string(self):
|
||||||
np.core.records.fromstring(self.buffer, formats=self.formats_str)
|
np.core.records.fromstring(self.buffer, formats=self.formats_str)
|
||||||
|
|
|
@ -1,67 +1,67 @@
|
||||||
from .common import Benchmark, TYPES1, get_squares
|
from .common import Benchmark, TYPES1, get_squares
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
class AddReduce(Benchmark):
|
class AddReduce(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.squares = get_squares().values()
|
self.squares = get_squares().values()
|
||||||
|
|
||||||
def time_axis_0(self):
|
def time_axis_0(self):
|
||||||
[np.add.reduce(a, axis=0) for a in self.squares]
|
[np.add.reduce(a, axis=0) for a in self.squares]
|
||||||
|
|
||||||
def time_axis_1(self):
|
def time_axis_1(self):
|
||||||
[np.add.reduce(a, axis=1) for a in self.squares]
|
[np.add.reduce(a, axis=1) for a in self.squares]
|
||||||
|
|
||||||
|
|
||||||
class AddReduceSeparate(Benchmark):
|
class AddReduceSeparate(Benchmark):
|
||||||
params = [[0, 1], TYPES1]
|
params = [[0, 1], TYPES1]
|
||||||
param_names = ['axis', 'type']
|
param_names = ['axis', 'type']
|
||||||
|
|
||||||
def setup(self, axis, typename):
|
def setup(self, axis, typename):
|
||||||
self.a = get_squares()[typename]
|
self.a = get_squares()[typename]
|
||||||
|
|
||||||
def time_reduce(self, axis, typename):
|
def time_reduce(self, axis, typename):
|
||||||
np.add.reduce(self.a, axis=axis)
|
np.add.reduce(self.a, axis=axis)
|
||||||
|
|
||||||
|
|
||||||
class AnyAll(Benchmark):
|
class AnyAll(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
# avoid np.zeros's lazy allocation that would
|
# avoid np.zeros's lazy allocation that would
|
||||||
# cause page faults during benchmark
|
# cause page faults during benchmark
|
||||||
self.zeros = np.full(100000, 0, bool)
|
self.zeros = np.full(100000, 0, bool)
|
||||||
self.ones = np.full(100000, 1, bool)
|
self.ones = np.full(100000, 1, bool)
|
||||||
|
|
||||||
def time_all_fast(self):
|
def time_all_fast(self):
|
||||||
self.zeros.all()
|
self.zeros.all()
|
||||||
|
|
||||||
def time_all_slow(self):
|
def time_all_slow(self):
|
||||||
self.ones.all()
|
self.ones.all()
|
||||||
|
|
||||||
def time_any_fast(self):
|
def time_any_fast(self):
|
||||||
self.ones.any()
|
self.ones.any()
|
||||||
|
|
||||||
def time_any_slow(self):
|
def time_any_slow(self):
|
||||||
self.zeros.any()
|
self.zeros.any()
|
||||||
|
|
||||||
|
|
||||||
class MinMax(Benchmark):
|
class MinMax(Benchmark):
|
||||||
params = [np.float32, np.float64, np.intp]
|
params = [np.float32, np.float64, np.intp]
|
||||||
param_names = ['dtype']
|
param_names = ['dtype']
|
||||||
|
|
||||||
def setup(self, dtype):
|
def setup(self, dtype):
|
||||||
self.d = np.ones(20000, dtype=dtype)
|
self.d = np.ones(20000, dtype=dtype)
|
||||||
|
|
||||||
def time_min(self, dtype):
|
def time_min(self, dtype):
|
||||||
np.min(self.d)
|
np.min(self.d)
|
||||||
|
|
||||||
def time_max(self, dtype):
|
def time_max(self, dtype):
|
||||||
np.max(self.d)
|
np.max(self.d)
|
||||||
|
|
||||||
|
|
||||||
class SmallReduction(Benchmark):
|
class SmallReduction(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.d = np.ones(100, dtype=np.float32)
|
self.d = np.ones(100, dtype=np.float32)
|
||||||
|
|
||||||
def time_small(self):
|
def time_small(self):
|
||||||
np.sum(self.d)
|
np.sum(self.d)
|
||||||
|
|
|
@ -1,136 +1,136 @@
|
||||||
from .common import Benchmark
|
from .common import Benchmark
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
class Block(Benchmark):
|
class Block(Benchmark):
|
||||||
params = [1, 10, 100]
|
params = [1, 10, 100]
|
||||||
param_names = ['size']
|
param_names = ['size']
|
||||||
|
|
||||||
def setup(self, n):
|
def setup(self, n):
|
||||||
self.a_2d = np.ones((2 * n, 2 * n))
|
self.a_2d = np.ones((2 * n, 2 * n))
|
||||||
self.b_1d = np.ones(2 * n)
|
self.b_1d = np.ones(2 * n)
|
||||||
self.b_2d = 2 * self.a_2d
|
self.b_2d = 2 * self.a_2d
|
||||||
|
|
||||||
self.a = np.ones(3 * n)
|
self.a = np.ones(3 * n)
|
||||||
self.b = np.ones(3 * n)
|
self.b = np.ones(3 * n)
|
||||||
|
|
||||||
self.one_2d = np.ones((1 * n, 3 * n))
|
self.one_2d = np.ones((1 * n, 3 * n))
|
||||||
self.two_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.three_2d = np.ones((1 * n, 6 * n))
|
||||||
self.four_1d = np.ones(6 * n)
|
self.four_1d = np.ones(6 * n)
|
||||||
self.five_0d = np.ones(1 * n)
|
self.five_0d = np.ones(1 * n)
|
||||||
self.six_1d = np.ones(5 * n)
|
self.six_1d = np.ones(5 * n)
|
||||||
# avoid np.zeros's lazy allocation that might cause
|
# avoid np.zeros's lazy allocation that might cause
|
||||||
# page faults during benchmark
|
# page faults during benchmark
|
||||||
self.zero_2d = np.full((2 * n, 6 * n), 0)
|
self.zero_2d = np.full((2 * n, 6 * n), 0)
|
||||||
|
|
||||||
self.one = np.ones(3 * n)
|
self.one = np.ones(3 * n)
|
||||||
self.two = 2 * np.ones((3, 3 * n))
|
self.two = 2 * np.ones((3, 3 * n))
|
||||||
self.three = 3 * np.ones(3 * n)
|
self.three = 3 * np.ones(3 * n)
|
||||||
self.four = 4 * np.ones(3 * n)
|
self.four = 4 * np.ones(3 * n)
|
||||||
self.five = 5 * np.ones(1 * n)
|
self.five = 5 * np.ones(1 * n)
|
||||||
self.six = 6 * np.ones(5 * n)
|
self.six = 6 * np.ones(5 * n)
|
||||||
# avoid np.zeros's lazy allocation that might cause
|
# avoid np.zeros's lazy allocation that might cause
|
||||||
# page faults during benchmark
|
# page faults during benchmark
|
||||||
self.zero = np.full((2 * n, 6 * n), 0)
|
self.zero = np.full((2 * n, 6 * n), 0)
|
||||||
|
|
||||||
def time_block_simple_row_wise(self, n):
|
def time_block_simple_row_wise(self, n):
|
||||||
np.block([self.a_2d, self.b_2d])
|
np.block([self.a_2d, self.b_2d])
|
||||||
|
|
||||||
def time_block_simple_column_wise(self, n):
|
def time_block_simple_column_wise(self, n):
|
||||||
np.block([[self.a_2d], [self.b_2d]])
|
np.block([[self.a_2d], [self.b_2d]])
|
||||||
|
|
||||||
def time_block_complicated(self, n):
|
def time_block_complicated(self, n):
|
||||||
np.block([[self.one_2d, self.two_2d],
|
np.block([[self.one_2d, self.two_2d],
|
||||||
[self.three_2d],
|
[self.three_2d],
|
||||||
[self.four_1d],
|
[self.four_1d],
|
||||||
[self.five_0d, self.six_1d],
|
[self.five_0d, self.six_1d],
|
||||||
[self.zero_2d]])
|
[self.zero_2d]])
|
||||||
|
|
||||||
def time_nested(self, n):
|
def time_nested(self, n):
|
||||||
np.block([
|
np.block([
|
||||||
[
|
[
|
||||||
np.block([
|
np.block([
|
||||||
[self.one],
|
[self.one],
|
||||||
[self.three],
|
[self.three],
|
||||||
[self.four]
|
[self.four]
|
||||||
]),
|
]),
|
||||||
self.two
|
self.two
|
||||||
],
|
],
|
||||||
[self.five, self.six],
|
[self.five, self.six],
|
||||||
[self.zero]
|
[self.zero]
|
||||||
])
|
])
|
||||||
|
|
||||||
def time_no_lists(self, n):
|
def time_no_lists(self, n):
|
||||||
np.block(1)
|
np.block(1)
|
||||||
np.block(np.eye(3 * n))
|
np.block(np.eye(3 * n))
|
||||||
|
|
||||||
|
|
||||||
class Block2D(Benchmark):
|
class Block2D(Benchmark):
|
||||||
params = [[(16, 16), (32, 32), (64, 64), (128, 128), (256, 256), (512, 512), (1024, 1024)],
|
params = [[(16, 16), (32, 32), (64, 64), (128, 128), (256, 256), (512, 512), (1024, 1024)],
|
||||||
['uint8', 'uint16', 'uint32', 'uint64'],
|
['uint8', 'uint16', 'uint32', 'uint64'],
|
||||||
[(2, 2), (4, 4)]]
|
[(2, 2), (4, 4)]]
|
||||||
param_names = ['shape', 'dtype', 'n_chunks']
|
param_names = ['shape', 'dtype', 'n_chunks']
|
||||||
|
|
||||||
def setup(self, shape, dtype, n_chunks):
|
def setup(self, shape, dtype, n_chunks):
|
||||||
|
|
||||||
self.block_list = [
|
self.block_list = [
|
||||||
[np.full(shape=[s//n_chunk for s, n_chunk in zip(shape, n_chunks)],
|
[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])]
|
fill_value=1, dtype=dtype) for _ in range(n_chunks[1])]
|
||||||
for _ in range(n_chunks[0])
|
for _ in range(n_chunks[0])
|
||||||
]
|
]
|
||||||
|
|
||||||
def time_block2d(self, shape, dtype, n_chunks):
|
def time_block2d(self, shape, dtype, n_chunks):
|
||||||
np.block(self.block_list)
|
np.block(self.block_list)
|
||||||
|
|
||||||
|
|
||||||
class Block3D(Benchmark):
|
class Block3D(Benchmark):
|
||||||
"""This benchmark concatenates an array of size ``(5n)^3``"""
|
"""This benchmark concatenates an array of size ``(5n)^3``"""
|
||||||
# Having copy as a `mode` of the block3D
|
# Having copy as a `mode` of the block3D
|
||||||
# allows us to directly compare the benchmark of block
|
# allows us to directly compare the benchmark of block
|
||||||
# to that of a direct memory copy into new buffers with
|
# to that of a direct memory copy into new buffers with
|
||||||
# the ASV framework.
|
# the ASV framework.
|
||||||
# block and copy will be plotted on the same graph
|
# block and copy will be plotted on the same graph
|
||||||
# as opposed to being displayed as separate benchmarks
|
# as opposed to being displayed as separate benchmarks
|
||||||
params = [[1, 10, 100],
|
params = [[1, 10, 100],
|
||||||
['block', 'copy']]
|
['block', 'copy']]
|
||||||
param_names = ['n', 'mode']
|
param_names = ['n', 'mode']
|
||||||
|
|
||||||
def setup(self, n, mode):
|
def setup(self, n, mode):
|
||||||
# Slow setup method: hence separated from the others above
|
# Slow setup method: hence separated from the others above
|
||||||
self.a000 = np.ones((2 * n, 2 * n, 2 * n), int) * 1
|
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.a100 = np.ones((3 * n, 2 * n, 2 * n), int) * 2
|
||||||
self.a010 = np.ones((2 * n, 3 * n, 2 * n), int) * 3
|
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.a001 = np.ones((2 * n, 2 * n, 3 * n), int) * 4
|
||||||
|
|
||||||
self.a011 = np.ones((2 * n, 3 * n, 3 * n), int) * 5
|
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.a101 = np.ones((3 * n, 2 * n, 3 * n), int) * 6
|
||||||
self.a110 = np.ones((3 * n, 3 * n, 2 * n), int) * 7
|
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.a111 = np.ones((3 * n, 3 * n, 3 * n), int) * 8
|
||||||
|
|
||||||
self.block = [
|
self.block = [
|
||||||
[
|
[
|
||||||
[self.a000, self.a001],
|
[self.a000, self.a001],
|
||||||
[self.a010, self.a011],
|
[self.a010, self.a011],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
[self.a100, self.a101],
|
[self.a100, self.a101],
|
||||||
[self.a110, self.a111],
|
[self.a110, self.a111],
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
self.arr_list = [a
|
self.arr_list = [a
|
||||||
for two_d in self.block
|
for two_d in self.block
|
||||||
for one_d in two_d
|
for one_d in two_d
|
||||||
for a in one_d]
|
for a in one_d]
|
||||||
|
|
||||||
def time_3d(self, n, mode):
|
def time_3d(self, n, mode):
|
||||||
if mode == 'block':
|
if mode == 'block':
|
||||||
np.block(self.block)
|
np.block(self.block)
|
||||||
else: # mode == 'copy'
|
else: # mode == 'copy'
|
||||||
[arr.copy() for arr in self.arr_list]
|
[arr.copy() for arr in self.arr_list]
|
||||||
|
|
||||||
# Retain old benchmark name for backward compat
|
# Retain old benchmark name for backward compat
|
||||||
time_3d.benchmark_name = "bench_shape_base.Block.time_3d"
|
time_3d.benchmark_name = "bench_shape_base.Block.time_3d"
|
||||||
|
|
|
@ -1,209 +1,209 @@
|
||||||
from .common import Benchmark, get_squares_
|
from .common import Benchmark, get_squares_
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
ufuncs = ['abs', 'absolute', 'add', 'arccos', 'arccosh', 'arcsin', 'arcsinh',
|
ufuncs = ['abs', 'absolute', 'add', 'arccos', 'arccosh', 'arcsin', 'arcsinh',
|
||||||
'arctan', 'arctan2', 'arctanh', 'bitwise_and', 'bitwise_not',
|
'arctan', 'arctan2', 'arctanh', 'bitwise_and', 'bitwise_not',
|
||||||
'bitwise_or', 'bitwise_xor', 'cbrt', 'ceil', 'conj', 'conjugate',
|
'bitwise_or', 'bitwise_xor', 'cbrt', 'ceil', 'conj', 'conjugate',
|
||||||
'copysign', 'cos', 'cosh', 'deg2rad', 'degrees', 'divide', 'divmod',
|
'copysign', 'cos', 'cosh', 'deg2rad', 'degrees', 'divide', 'divmod',
|
||||||
'equal', 'exp', 'exp2', 'expm1', 'fabs', 'float_power', 'floor',
|
'equal', 'exp', 'exp2', 'expm1', 'fabs', 'float_power', 'floor',
|
||||||
'floor_divide', 'fmax', 'fmin', 'fmod', 'frexp', 'gcd', 'greater',
|
'floor_divide', 'fmax', 'fmin', 'fmod', 'frexp', 'gcd', 'greater',
|
||||||
'greater_equal', 'heaviside', 'hypot', 'invert', 'isfinite',
|
'greater_equal', 'heaviside', 'hypot', 'invert', 'isfinite',
|
||||||
'isinf', 'isnan', 'isnat', 'lcm', 'ldexp', 'left_shift', 'less',
|
'isinf', 'isnan', 'isnat', 'lcm', 'ldexp', 'left_shift', 'less',
|
||||||
'less_equal', 'log', 'log10', 'log1p', 'log2', 'logaddexp',
|
'less_equal', 'log', 'log10', 'log1p', 'log2', 'logaddexp',
|
||||||
'logaddexp2', 'logical_and', 'logical_not', 'logical_or',
|
'logaddexp2', 'logical_and', 'logical_not', 'logical_or',
|
||||||
'logical_xor', 'matmul', 'maximum', 'minimum', 'mod', 'modf', 'multiply',
|
'logical_xor', 'matmul', 'maximum', 'minimum', 'mod', 'modf', 'multiply',
|
||||||
'negative', 'nextafter', 'not_equal', 'positive', 'power',
|
'negative', 'nextafter', 'not_equal', 'positive', 'power',
|
||||||
'rad2deg', 'radians', 'reciprocal', 'remainder', 'right_shift',
|
'rad2deg', 'radians', 'reciprocal', 'remainder', 'right_shift',
|
||||||
'rint', 'sign', 'signbit', 'sin', 'sinh', 'spacing', 'sqrt',
|
'rint', 'sign', 'signbit', 'sin', 'sinh', 'spacing', 'sqrt',
|
||||||
'square', 'subtract', 'tan', 'tanh', 'true_divide', 'trunc']
|
'square', 'subtract', 'tan', 'tanh', 'true_divide', 'trunc']
|
||||||
|
|
||||||
|
|
||||||
for name in dir(np):
|
for name in dir(np):
|
||||||
if isinstance(getattr(np, name, None), np.ufunc) and name not in ufuncs:
|
if isinstance(getattr(np, name, None), np.ufunc) and name not in ufuncs:
|
||||||
print("Missing ufunc %r" % (name,))
|
print("Missing ufunc %r" % (name,))
|
||||||
|
|
||||||
|
|
||||||
class Broadcast(Benchmark):
|
class Broadcast(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.d = np.ones((50000, 100), dtype=np.float64)
|
self.d = np.ones((50000, 100), dtype=np.float64)
|
||||||
self.e = np.ones((100,), dtype=np.float64)
|
self.e = np.ones((100,), dtype=np.float64)
|
||||||
|
|
||||||
def time_broadcast(self):
|
def time_broadcast(self):
|
||||||
self.d - self.e
|
self.d - self.e
|
||||||
|
|
||||||
|
|
||||||
class UFunc(Benchmark):
|
class UFunc(Benchmark):
|
||||||
params = [ufuncs]
|
params = [ufuncs]
|
||||||
param_names = ['ufunc']
|
param_names = ['ufunc']
|
||||||
timeout = 10
|
timeout = 10
|
||||||
|
|
||||||
def setup(self, ufuncname):
|
def setup(self, ufuncname):
|
||||||
np.seterr(all='ignore')
|
np.seterr(all='ignore')
|
||||||
try:
|
try:
|
||||||
self.f = getattr(np, ufuncname)
|
self.f = getattr(np, ufuncname)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
self.args = []
|
self.args = []
|
||||||
for t, a in get_squares_().items():
|
for t, a in get_squares_().items():
|
||||||
arg = (a,) * self.f.nin
|
arg = (a,) * self.f.nin
|
||||||
try:
|
try:
|
||||||
self.f(*arg)
|
self.f(*arg)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
continue
|
continue
|
||||||
self.args.append(arg)
|
self.args.append(arg)
|
||||||
|
|
||||||
def time_ufunc_types(self, ufuncname):
|
def time_ufunc_types(self, ufuncname):
|
||||||
[self.f(*arg) for arg in self.args]
|
[self.f(*arg) for arg in self.args]
|
||||||
|
|
||||||
|
|
||||||
class Custom(Benchmark):
|
class Custom(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.b = np.ones(20000, dtype=bool)
|
self.b = np.ones(20000, dtype=bool)
|
||||||
|
|
||||||
def time_nonzero(self):
|
def time_nonzero(self):
|
||||||
np.nonzero(self.b)
|
np.nonzero(self.b)
|
||||||
|
|
||||||
def time_not_bool(self):
|
def time_not_bool(self):
|
||||||
(~self.b)
|
(~self.b)
|
||||||
|
|
||||||
def time_and_bool(self):
|
def time_and_bool(self):
|
||||||
(self.b & self.b)
|
(self.b & self.b)
|
||||||
|
|
||||||
def time_or_bool(self):
|
def time_or_bool(self):
|
||||||
(self.b | self.b)
|
(self.b | self.b)
|
||||||
|
|
||||||
|
|
||||||
class CustomInplace(Benchmark):
|
class CustomInplace(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.c = np.ones(500000, dtype=np.int8)
|
self.c = np.ones(500000, dtype=np.int8)
|
||||||
self.i = np.ones(150000, dtype=np.int32)
|
self.i = np.ones(150000, dtype=np.int32)
|
||||||
self.f = np.zeros(150000, dtype=np.float32)
|
self.f = np.zeros(150000, dtype=np.float32)
|
||||||
self.d = np.zeros(75000, dtype=np.float64)
|
self.d = np.zeros(75000, dtype=np.float64)
|
||||||
# fault memory
|
# fault memory
|
||||||
self.f *= 1.
|
self.f *= 1.
|
||||||
self.d *= 1.
|
self.d *= 1.
|
||||||
|
|
||||||
def time_char_or(self):
|
def time_char_or(self):
|
||||||
np.bitwise_or(self.c, 0, out=self.c)
|
np.bitwise_or(self.c, 0, out=self.c)
|
||||||
np.bitwise_or(0, self.c, out=self.c)
|
np.bitwise_or(0, self.c, out=self.c)
|
||||||
|
|
||||||
def time_char_or_temp(self):
|
def time_char_or_temp(self):
|
||||||
0 | self.c | 0
|
0 | self.c | 0
|
||||||
|
|
||||||
def time_int_or(self):
|
def time_int_or(self):
|
||||||
np.bitwise_or(self.i, 0, out=self.i)
|
np.bitwise_or(self.i, 0, out=self.i)
|
||||||
np.bitwise_or(0, self.i, out=self.i)
|
np.bitwise_or(0, self.i, out=self.i)
|
||||||
|
|
||||||
def time_int_or_temp(self):
|
def time_int_or_temp(self):
|
||||||
0 | self.i | 0
|
0 | self.i | 0
|
||||||
|
|
||||||
def time_float_add(self):
|
def time_float_add(self):
|
||||||
np.add(self.f, 1., out=self.f)
|
np.add(self.f, 1., out=self.f)
|
||||||
np.add(1., self.f, out=self.f)
|
np.add(1., self.f, out=self.f)
|
||||||
|
|
||||||
def time_float_add_temp(self):
|
def time_float_add_temp(self):
|
||||||
1. + self.f + 1.
|
1. + self.f + 1.
|
||||||
|
|
||||||
def time_double_add(self):
|
def time_double_add(self):
|
||||||
np.add(self.d, 1., out=self.d)
|
np.add(self.d, 1., out=self.d)
|
||||||
np.add(1., self.d, out=self.d)
|
np.add(1., self.d, out=self.d)
|
||||||
|
|
||||||
def time_double_add_temp(self):
|
def time_double_add_temp(self):
|
||||||
1. + self.d + 1.
|
1. + self.d + 1.
|
||||||
|
|
||||||
|
|
||||||
class CustomScalar(Benchmark):
|
class CustomScalar(Benchmark):
|
||||||
params = [np.float32, np.float64]
|
params = [np.float32, np.float64]
|
||||||
param_names = ['dtype']
|
param_names = ['dtype']
|
||||||
|
|
||||||
def setup(self, dtype):
|
def setup(self, dtype):
|
||||||
self.d = np.ones(20000, dtype=dtype)
|
self.d = np.ones(20000, dtype=dtype)
|
||||||
|
|
||||||
def time_add_scalar2(self, dtype):
|
def time_add_scalar2(self, dtype):
|
||||||
np.add(self.d, 1)
|
np.add(self.d, 1)
|
||||||
|
|
||||||
def time_divide_scalar2(self, dtype):
|
def time_divide_scalar2(self, dtype):
|
||||||
np.divide(self.d, 1)
|
np.divide(self.d, 1)
|
||||||
|
|
||||||
def time_divide_scalar2_inplace(self, dtype):
|
def time_divide_scalar2_inplace(self, dtype):
|
||||||
np.divide(self.d, 1, out=self.d)
|
np.divide(self.d, 1, out=self.d)
|
||||||
|
|
||||||
def time_less_than_scalar2(self, dtype):
|
def time_less_than_scalar2(self, dtype):
|
||||||
(self.d < 1)
|
(self.d < 1)
|
||||||
|
|
||||||
|
|
||||||
class Scalar(Benchmark):
|
class Scalar(Benchmark):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
self.x = np.asarray(1.0)
|
self.x = np.asarray(1.0)
|
||||||
self.y = np.asarray((1.0 + 1j))
|
self.y = np.asarray((1.0 + 1j))
|
||||||
self.z = complex(1.0, 1.0)
|
self.z = complex(1.0, 1.0)
|
||||||
|
|
||||||
def time_add_scalar(self):
|
def time_add_scalar(self):
|
||||||
(self.x + self.x)
|
(self.x + self.x)
|
||||||
|
|
||||||
def time_add_scalar_conv(self):
|
def time_add_scalar_conv(self):
|
||||||
(self.x + 1.0)
|
(self.x + 1.0)
|
||||||
|
|
||||||
def time_add_scalar_conv_complex(self):
|
def time_add_scalar_conv_complex(self):
|
||||||
(self.y + self.z)
|
(self.y + self.z)
|
||||||
|
|
||||||
|
|
||||||
class ArgPack:
|
class ArgPack:
|
||||||
__slots__ = ['args', 'kwargs']
|
__slots__ = ['args', 'kwargs']
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self.args = args
|
self.args = args
|
||||||
self.kwargs = kwargs
|
self.kwargs = kwargs
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '({})'.format(', '.join(
|
return '({})'.format(', '.join(
|
||||||
[repr(a) for a in self.args] +
|
[repr(a) for a in self.args] +
|
||||||
['{}={}'.format(k, repr(v)) for k, v in self.kwargs.items()]
|
['{}={}'.format(k, repr(v)) for k, v in self.kwargs.items()]
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
||||||
class ArgParsing(Benchmark):
|
class ArgParsing(Benchmark):
|
||||||
# In order to benchmark the speed of argument parsing, all but the
|
# In order to benchmark the speed of argument parsing, all but the
|
||||||
# out arguments are chosen such that they have no effect on the
|
# out arguments are chosen such that they have no effect on the
|
||||||
# calculation. In particular, subok=True and where=True are
|
# calculation. In particular, subok=True and where=True are
|
||||||
# defaults, and the dtype is the correct one (the latter will
|
# defaults, and the dtype is the correct one (the latter will
|
||||||
# still have some effect on the search for the correct inner loop).
|
# still have some effect on the search for the correct inner loop).
|
||||||
x = np.array(1.)
|
x = np.array(1.)
|
||||||
y = np.array(2.)
|
y = np.array(2.)
|
||||||
out = np.array(3.)
|
out = np.array(3.)
|
||||||
param_names = ['arg_kwarg']
|
param_names = ['arg_kwarg']
|
||||||
params = [[
|
params = [[
|
||||||
ArgPack(x, y),
|
ArgPack(x, y),
|
||||||
ArgPack(x, y, out),
|
ArgPack(x, y, out),
|
||||||
ArgPack(x, y, out=out),
|
ArgPack(x, y, out=out),
|
||||||
ArgPack(x, y, out=(out,)),
|
ArgPack(x, y, out=(out,)),
|
||||||
ArgPack(x, y, out=out, subok=True, where=True),
|
ArgPack(x, y, out=out, subok=True, where=True),
|
||||||
ArgPack(x, y, subok=True),
|
ArgPack(x, y, subok=True),
|
||||||
ArgPack(x, y, subok=True, where=True),
|
ArgPack(x, y, subok=True, where=True),
|
||||||
ArgPack(x, y, out, subok=True, where=True)
|
ArgPack(x, y, out, subok=True, where=True)
|
||||||
]]
|
]]
|
||||||
|
|
||||||
def time_add_arg_parsing(self, arg_pack):
|
def time_add_arg_parsing(self, arg_pack):
|
||||||
np.add(*arg_pack.args, **arg_pack.kwargs)
|
np.add(*arg_pack.args, **arg_pack.kwargs)
|
||||||
|
|
||||||
|
|
||||||
class ArgParsingReduce(Benchmark):
|
class ArgParsingReduce(Benchmark):
|
||||||
# In order to benchmark the speed of argument parsing, all but the
|
# In order to benchmark the speed of argument parsing, all but the
|
||||||
# out arguments are chosen such that they have minimal effect on the
|
# out arguments are chosen such that they have minimal effect on the
|
||||||
# calculation.
|
# calculation.
|
||||||
a = np.arange(2.)
|
a = np.arange(2.)
|
||||||
out = np.array(0.)
|
out = np.array(0.)
|
||||||
param_names = ['arg_kwarg']
|
param_names = ['arg_kwarg']
|
||||||
params = [[
|
params = [[
|
||||||
ArgPack(a,),
|
ArgPack(a,),
|
||||||
ArgPack(a, 0),
|
ArgPack(a, 0),
|
||||||
ArgPack(a, axis=0),
|
ArgPack(a, axis=0),
|
||||||
ArgPack(a, 0, None),
|
ArgPack(a, 0, None),
|
||||||
ArgPack(a, axis=0, dtype=None),
|
ArgPack(a, axis=0, dtype=None),
|
||||||
ArgPack(a, 0, None, out),
|
ArgPack(a, 0, None, out),
|
||||||
ArgPack(a, axis=0, dtype=None, out=out),
|
ArgPack(a, axis=0, dtype=None, out=out),
|
||||||
ArgPack(a, out=out)
|
ArgPack(a, out=out)
|
||||||
]]
|
]]
|
||||||
|
|
||||||
def time_add_reduce_arg_parsing(self, arg_pack):
|
def time_add_reduce_arg_parsing(self, arg_pack):
|
||||||
np.add.reduce(*arg_pack.args, **arg_pack.kwargs)
|
np.add.reduce(*arg_pack.args, **arg_pack.kwargs)
|
||||||
|
|
|
@ -1,114 +1,114 @@
|
||||||
import numpy
|
import numpy
|
||||||
import random
|
import random
|
||||||
|
|
||||||
# Various pre-crafted datasets/variables for testing
|
# Various pre-crafted datasets/variables for testing
|
||||||
# !!! Must not be changed -- only appended !!!
|
# !!! Must not be changed -- only appended !!!
|
||||||
# while testing numpy we better not rely on numpy to produce random
|
# while testing numpy we better not rely on numpy to produce random
|
||||||
# sequences
|
# sequences
|
||||||
random.seed(1)
|
random.seed(1)
|
||||||
# but will seed it nevertheless
|
# but will seed it nevertheless
|
||||||
numpy.random.seed(1)
|
numpy.random.seed(1)
|
||||||
|
|
||||||
nx, ny = 1000, 1000
|
nx, ny = 1000, 1000
|
||||||
# reduced squares based on indexes_rand, primarily for testing more
|
# reduced squares based on indexes_rand, primarily for testing more
|
||||||
# time-consuming functions (ufunc, linalg, etc)
|
# time-consuming functions (ufunc, linalg, etc)
|
||||||
nxs, nys = 100, 100
|
nxs, nys = 100, 100
|
||||||
|
|
||||||
# a set of interesting types to test
|
# a set of interesting types to test
|
||||||
TYPES1 = [
|
TYPES1 = [
|
||||||
'int16', 'float16',
|
'int16', 'float16',
|
||||||
'int32', 'float32',
|
'int32', 'float32',
|
||||||
'int64', 'float64', 'complex64',
|
'int64', 'float64', 'complex64',
|
||||||
'longfloat', 'complex128',
|
'longfloat', 'complex128',
|
||||||
]
|
]
|
||||||
if 'complex256' in numpy.typeDict:
|
if 'complex256' in numpy.typeDict:
|
||||||
TYPES1.append('complex256')
|
TYPES1.append('complex256')
|
||||||
|
|
||||||
|
|
||||||
def memoize(func):
|
def memoize(func):
|
||||||
result = []
|
result = []
|
||||||
def wrapper():
|
def wrapper():
|
||||||
if not result:
|
if not result:
|
||||||
result.append(func())
|
result.append(func())
|
||||||
return result[0]
|
return result[0]
|
||||||
return wrapper
|
return wrapper
|
||||||
|
|
||||||
|
|
||||||
# values which will be used to construct our sample data matrices
|
# values which will be used to construct our sample data matrices
|
||||||
# replicate 10 times to speed up initial imports of this helper
|
# replicate 10 times to speed up initial imports of this helper
|
||||||
# and generate some redundancy
|
# and generate some redundancy
|
||||||
|
|
||||||
@memoize
|
@memoize
|
||||||
def get_values():
|
def get_values():
|
||||||
rnd = numpy.random.RandomState(1)
|
rnd = numpy.random.RandomState(1)
|
||||||
values = numpy.tile(rnd.uniform(0, 100, size=nx*ny//10), 10)
|
values = numpy.tile(rnd.uniform(0, 100, size=nx*ny//10), 10)
|
||||||
return values
|
return values
|
||||||
|
|
||||||
|
|
||||||
@memoize
|
@memoize
|
||||||
def get_squares():
|
def get_squares():
|
||||||
values = get_values()
|
values = get_values()
|
||||||
squares = {t: numpy.array(values,
|
squares = {t: numpy.array(values,
|
||||||
dtype=getattr(numpy, t)).reshape((nx, ny))
|
dtype=getattr(numpy, t)).reshape((nx, ny))
|
||||||
for t in TYPES1}
|
for t in TYPES1}
|
||||||
|
|
||||||
# adjust complex ones to have non-degenerated imagery part -- use
|
# adjust complex ones to have non-degenerated imagery part -- use
|
||||||
# original data transposed for that
|
# original data transposed for that
|
||||||
for t, v in squares.items():
|
for t, v in squares.items():
|
||||||
if t.startswith('complex'):
|
if t.startswith('complex'):
|
||||||
v += v.T*1j
|
v += v.T*1j
|
||||||
return squares
|
return squares
|
||||||
|
|
||||||
|
|
||||||
@memoize
|
@memoize
|
||||||
def get_squares_():
|
def get_squares_():
|
||||||
# smaller squares
|
# smaller squares
|
||||||
squares_ = {t: s[:nxs, :nys] for t, s in get_squares().items()}
|
squares_ = {t: s[:nxs, :nys] for t, s in get_squares().items()}
|
||||||
return squares_
|
return squares_
|
||||||
|
|
||||||
|
|
||||||
@memoize
|
@memoize
|
||||||
def get_vectors():
|
def get_vectors():
|
||||||
# vectors
|
# vectors
|
||||||
vectors = {t: s[0] for t, s in get_squares().items()}
|
vectors = {t: s[0] for t, s in get_squares().items()}
|
||||||
return vectors
|
return vectors
|
||||||
|
|
||||||
|
|
||||||
@memoize
|
@memoize
|
||||||
def get_indexes():
|
def get_indexes():
|
||||||
indexes = list(range(nx))
|
indexes = list(range(nx))
|
||||||
# so we do not have all items
|
# so we do not have all items
|
||||||
indexes.pop(5)
|
indexes.pop(5)
|
||||||
indexes.pop(95)
|
indexes.pop(95)
|
||||||
|
|
||||||
indexes = numpy.array(indexes)
|
indexes = numpy.array(indexes)
|
||||||
return indexes
|
return indexes
|
||||||
|
|
||||||
|
|
||||||
@memoize
|
@memoize
|
||||||
def get_indexes_rand():
|
def get_indexes_rand():
|
||||||
rnd = random.Random(1)
|
rnd = random.Random(1)
|
||||||
|
|
||||||
indexes_rand = get_indexes().tolist() # copy
|
indexes_rand = get_indexes().tolist() # copy
|
||||||
rnd.shuffle(indexes_rand) # in-place shuffle
|
rnd.shuffle(indexes_rand) # in-place shuffle
|
||||||
indexes_rand = numpy.array(indexes_rand)
|
indexes_rand = numpy.array(indexes_rand)
|
||||||
return indexes_rand
|
return indexes_rand
|
||||||
|
|
||||||
|
|
||||||
@memoize
|
@memoize
|
||||||
def get_indexes_():
|
def get_indexes_():
|
||||||
# smaller versions
|
# smaller versions
|
||||||
indexes = get_indexes()
|
indexes = get_indexes()
|
||||||
indexes_ = indexes[indexes < nxs]
|
indexes_ = indexes[indexes < nxs]
|
||||||
return indexes_
|
return indexes_
|
||||||
|
|
||||||
|
|
||||||
@memoize
|
@memoize
|
||||||
def get_indexes_rand_():
|
def get_indexes_rand_():
|
||||||
indexes_rand = get_indexes_rand()
|
indexes_rand = get_indexes_rand()
|
||||||
indexes_rand_ = indexes_rand[indexes_rand < nxs]
|
indexes_rand_ = indexes_rand[indexes_rand < nxs]
|
||||||
return indexes_rand_
|
return indexes_rand_
|
||||||
|
|
||||||
|
|
||||||
class Benchmark:
|
class Benchmark:
|
||||||
goal_time = 0.25
|
goal_time = 0.25
|
||||||
|
|
|
@ -1,211 +1,211 @@
|
||||||
===================
|
===================
|
||||||
NumPy C Style Guide
|
NumPy C Style Guide
|
||||||
===================
|
===================
|
||||||
|
|
||||||
The NumPy C coding conventions are based on Python PEP-0007 by Guido van
|
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
|
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
|
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 choose the 'best', about which there is certain to be disagreement, but
|
||||||
to achieve uniformity. Because the NumPy conventions are very close to
|
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
|
those in PEP-0007, that PEP is used as a template below with the NumPy
|
||||||
additions and variations in the appropriate spots.
|
additions and variations in the appropriate spots.
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
------------
|
------------
|
||||||
|
|
||||||
This document gives coding conventions for the C code comprising
|
This document gives coding conventions for the C code comprising
|
||||||
the C implementation of NumPy. Note, rules are there to be broken.
|
the C implementation of NumPy. Note, rules are there to be broken.
|
||||||
Two good reasons to break a particular rule:
|
Two good reasons to break a particular rule:
|
||||||
|
|
||||||
1. When applying the rule would make the code less readable, even
|
1. When applying the rule would make the code less readable, even
|
||||||
for someone who is used to reading code that follows the rules.
|
for someone who is used to reading code that follows the rules.
|
||||||
|
|
||||||
2. To be consistent with surrounding code that also breaks it
|
2. To be consistent with surrounding code that also breaks it
|
||||||
(maybe for historic reasons) -- although this is also an
|
(maybe for historic reasons) -- although this is also an
|
||||||
opportunity to clean up someone else's mess.
|
opportunity to clean up someone else's mess.
|
||||||
|
|
||||||
|
|
||||||
C dialect
|
C dialect
|
||||||
---------
|
---------
|
||||||
|
|
||||||
* Use C99 (that is, the standard defined by ISO/IEC 9899:1999).
|
* 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
|
* Don't use GCC extensions (e.g. don't write multi-line strings
|
||||||
without trailing backslashes). Preferably break long strings
|
without trailing backslashes). Preferably break long strings
|
||||||
up onto separate lines like so::
|
up onto separate lines like so::
|
||||||
|
|
||||||
"blah blah"
|
"blah blah"
|
||||||
"blah blah"
|
"blah blah"
|
||||||
|
|
||||||
This will work with MSVC, which otherwise chokes on very long
|
This will work with MSVC, which otherwise chokes on very long
|
||||||
strings.
|
strings.
|
||||||
|
|
||||||
* All function declarations and definitions must use full
|
* All function declarations and definitions must use full
|
||||||
prototypes (i.e. specify the types of all arguments).
|
prototypes (i.e. specify the types of all arguments).
|
||||||
|
|
||||||
* No compiler warnings with major compilers (gcc, VC++, a few others).
|
* No compiler warnings with major compilers (gcc, VC++, a few others).
|
||||||
Note: NumPy still produces compiler warnings that need to be addressed.
|
Note: NumPy still produces compiler warnings that need to be addressed.
|
||||||
|
|
||||||
|
|
||||||
Code lay-out
|
Code lay-out
|
||||||
------------
|
------------
|
||||||
|
|
||||||
* Use 4-space indents and no tabs at all.
|
* Use 4-space indents and no tabs at all.
|
||||||
|
|
||||||
* No line should be longer than 80 characters. If this and the
|
* 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
|
previous rule together don't give you enough room to code, your code is
|
||||||
too complicated, consider using subroutines.
|
too complicated, consider using subroutines.
|
||||||
|
|
||||||
* No line should end in whitespace. If you think you need
|
* No line should end in whitespace. If you think you need
|
||||||
significant trailing whitespace, think again, somebody's editor might
|
significant trailing whitespace, think again, somebody's editor might
|
||||||
delete it as a matter of routine.
|
delete it as a matter of routine.
|
||||||
|
|
||||||
* Function definition style: function name in column 1, outermost
|
* Function definition style: function name in column 1, outermost
|
||||||
curly braces in column 1, blank line after local variable declarations::
|
curly braces in column 1, blank line after local variable declarations::
|
||||||
|
|
||||||
static int
|
static int
|
||||||
extra_ivars(PyTypeObject *type, PyTypeObject *base)
|
extra_ivars(PyTypeObject *type, PyTypeObject *base)
|
||||||
{
|
{
|
||||||
int t_size = PyType_BASICSIZE(type);
|
int t_size = PyType_BASICSIZE(type);
|
||||||
int b_size = PyType_BASICSIZE(base);
|
int b_size = PyType_BASICSIZE(base);
|
||||||
|
|
||||||
assert(t_size >= b_size); /* type smaller than base! */
|
assert(t_size >= b_size); /* type smaller than base! */
|
||||||
...
|
...
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
If the transition to C++ goes through it is possible that this form will
|
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
|
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
|
return type on the same line as the function name. However, that is yet to
|
||||||
be determined.
|
be determined.
|
||||||
|
|
||||||
* Code structure: one space between keywords like ``if``, ``for`` and
|
* Code structure: one space between keywords like ``if``, ``for`` and
|
||||||
the following left parenthesis; no spaces inside the parenthesis; braces
|
the following left parenthesis; no spaces inside the parenthesis; braces
|
||||||
around all ``if`` branches and no statements on the same line as the
|
around all ``if`` branches and no statements on the same line as the
|
||||||
``if``. They should be formatted as shown::
|
``if``. They should be formatted as shown::
|
||||||
|
|
||||||
if (mro != NULL) {
|
if (mro != NULL) {
|
||||||
one_line_statement;
|
one_line_statement;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
one_line_statement;
|
one_line_statement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
while (isstuff) {
|
while (isstuff) {
|
||||||
dostuff;
|
dostuff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
stuff;
|
stuff;
|
||||||
} while (isstuff);
|
} while (isstuff);
|
||||||
|
|
||||||
|
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
/* Boolean kind */
|
/* Boolean kind */
|
||||||
case 'b':
|
case 'b':
|
||||||
return 0;
|
return 0;
|
||||||
/* Unsigned int kind */
|
/* Unsigned int kind */
|
||||||
case 'u':
|
case 'u':
|
||||||
...
|
...
|
||||||
/* Anything else */
|
/* Anything else */
|
||||||
default:
|
default:
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
* The return statement should *not* get redundant parentheses::
|
* The return statement should *not* get redundant parentheses::
|
||||||
|
|
||||||
return Py_None; /* correct */
|
return Py_None; /* correct */
|
||||||
return(Py_None); /* incorrect */
|
return(Py_None); /* incorrect */
|
||||||
|
|
||||||
* Function and macro call style: ``foo(a, b, c)``, no space before
|
* Function and macro call style: ``foo(a, b, c)``, no space before
|
||||||
the open paren, no spaces inside the parens, no spaces before
|
the open paren, no spaces inside the parens, no spaces before
|
||||||
commas, one space after each comma.
|
commas, one space after each comma.
|
||||||
|
|
||||||
* Always put spaces around the assignment, Boolean and comparison
|
* Always put spaces around the assignment, Boolean and comparison
|
||||||
operators. In expressions using a lot of operators, add spaces
|
operators. In expressions using a lot of operators, add spaces
|
||||||
around the outermost (lowest priority) operators.
|
around the outermost (lowest priority) operators.
|
||||||
|
|
||||||
* Breaking long lines: if you can, break after commas in the
|
* Breaking long lines: if you can, break after commas in the
|
||||||
outermost argument list. Always indent continuation lines
|
outermost argument list. Always indent continuation lines
|
||||||
appropriately, e.g., ::
|
appropriately, e.g., ::
|
||||||
|
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
"Oh dear, you messed up.");
|
"Oh dear, you messed up.");
|
||||||
|
|
||||||
Here appropriately means at least two tabs. It isn't necessary to
|
Here appropriately means at least two tabs. It isn't necessary to
|
||||||
line everything up with the opening parenthesis of the function
|
line everything up with the opening parenthesis of the function
|
||||||
call.
|
call.
|
||||||
|
|
||||||
* When you break a long expression at a binary operator, the
|
* When you break a long expression at a binary operator, the
|
||||||
operator goes at the end of the previous line, e.g., ::
|
operator goes at the end of the previous line, e.g., ::
|
||||||
|
|
||||||
if (type > tp_dictoffset != 0 &&
|
if (type > tp_dictoffset != 0 &&
|
||||||
base > tp_dictoffset == 0 &&
|
base > tp_dictoffset == 0 &&
|
||||||
type > tp_dictoffset == b_size &&
|
type > tp_dictoffset == b_size &&
|
||||||
(size_t)t_size == b_size + sizeof(PyObject *)) {
|
(size_t)t_size == b_size + sizeof(PyObject *)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Note that the terms in the multi-line Boolean expression are indented so
|
Note that the terms in the multi-line Boolean expression are indented so
|
||||||
as to make the beginning of the code block clearly visible.
|
as to make the beginning of the code block clearly visible.
|
||||||
|
|
||||||
* Put blank lines around functions, structure definitions, and
|
* Put blank lines around functions, structure definitions, and
|
||||||
major sections inside functions.
|
major sections inside functions.
|
||||||
|
|
||||||
* Comments go before the code they describe. Multi-line comments should
|
* Comments go before the code they describe. Multi-line comments should
|
||||||
be like so::
|
be like so::
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This would be a long
|
* This would be a long
|
||||||
* explanatory comment.
|
* explanatory comment.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Trailing comments should be used sparingly. Instead of ::
|
Trailing comments should be used sparingly. Instead of ::
|
||||||
|
|
||||||
if (yes) { // Success!
|
if (yes) { // Success!
|
||||||
|
|
||||||
do ::
|
do ::
|
||||||
|
|
||||||
if (yes) {
|
if (yes) {
|
||||||
// Success!
|
// Success!
|
||||||
|
|
||||||
* All functions and global variables should be declared static
|
* All functions and global variables should be declared static
|
||||||
when they aren't needed outside the current compilation unit.
|
when they aren't needed outside the current compilation unit.
|
||||||
|
|
||||||
* Declare external functions and variables in a header file.
|
* Declare external functions and variables in a header file.
|
||||||
|
|
||||||
|
|
||||||
Naming conventions
|
Naming conventions
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
* There has been no consistent prefix for NumPy public functions, but
|
* 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
|
they all begin with a prefix of some sort, followed by an underscore, and
|
||||||
are in camel case: ``PyArray_DescrAlignConverter``, ``NpyIter_GetIterNext``.
|
are in camel case: ``PyArray_DescrAlignConverter``, ``NpyIter_GetIterNext``.
|
||||||
In the future the names should be of the form ``Npy*_PublicFunction``,
|
In the future the names should be of the form ``Npy*_PublicFunction``,
|
||||||
where the star is something appropriate.
|
where the star is something appropriate.
|
||||||
|
|
||||||
* Public Macros should have a ``NPY_`` prefix and then use upper case,
|
* Public Macros should have a ``NPY_`` prefix and then use upper case,
|
||||||
for example, ``NPY_DOUBLE``.
|
for example, ``NPY_DOUBLE``.
|
||||||
|
|
||||||
* Private functions should be lower case with underscores, for example:
|
* Private functions should be lower case with underscores, for example:
|
||||||
``array_real_get``. Single leading underscores should not be used, but
|
``array_real_get``. Single leading underscores should not be used, but
|
||||||
some current function names violate that rule due to historical accident.
|
some current function names violate that rule due to historical accident.
|
||||||
Those functions should be renamed at some point.
|
Those functions should be renamed at some point.
|
||||||
|
|
||||||
|
|
||||||
Function documentation
|
Function documentation
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
NumPy doesn't have a C function documentation standard at this time, but
|
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
|
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
|
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
|
NumPy style used for Python functions can also be used for documenting
|
||||||
C functions, see the files in doc/cdoc/.
|
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
|
.. Here follows an example docstring for a C-function. Note that the
|
||||||
signature is given. This is done only for functions written is C,
|
signature is given. This is done only for functions written is C,
|
||||||
since Python cannot find their signature by inspection. For all
|
since Python cannot find their signature by inspection. For all
|
||||||
other functions, start with the one line description.
|
other functions, start with the one line description.
|
||||||
|
|
||||||
|
|
||||||
multivariate_normal(mean, cov[, shape])
|
multivariate_normal(mean, cov[, shape])
|
||||||
|
|
||||||
Draw samples from a multivariate normal distribution.
|
Draw samples from a multivariate normal distribution.
|
||||||
|
|
||||||
The multivariate normal, multinormal or Gaussian distribution is a
|
The multivariate normal, multinormal or Gaussian distribution is a
|
||||||
generalisation of the one-dimensional normal distribution to higher
|
generalisation of the one-dimensional normal distribution to higher
|
||||||
dimensions.
|
dimensions.
|
||||||
|
|
||||||
Such a distribution is specified by its mean and covariance matrix,
|
Such a distribution is specified by its mean and covariance matrix,
|
||||||
which are analogous to the mean (average or "centre") and variance
|
which are analogous to the mean (average or "centre") and variance
|
||||||
(standard deviation squared or "width") of the one-dimensional normal
|
(standard deviation squared or "width") of the one-dimensional normal
|
||||||
distribution.
|
distribution.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
mean : (N,) ndarray
|
mean : (N,) ndarray
|
||||||
Mean of the N-dimensional distribution.
|
Mean of the N-dimensional distribution.
|
||||||
cov : (N,N) ndarray
|
cov : (N,N) ndarray
|
||||||
Covariance matrix of the distribution.
|
Covariance matrix of the distribution.
|
||||||
shape : tuple of ints, optional
|
shape : tuple of ints, optional
|
||||||
Given a shape of, for example, (m,n,k), m*n*k samples are
|
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
|
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
|
sample is N-dimensional, the output shape is (m,n,k,N). If no
|
||||||
shape is specified, a single sample is returned.
|
shape is specified, a single sample is returned.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
out : ndarray
|
out : ndarray
|
||||||
The drawn samples, arranged according to `shape`. If the
|
The drawn samples, arranged according to `shape`. If the
|
||||||
shape given is (m,n,...), then the shape of `out` is
|
shape given is (m,n,...), then the shape of `out` is
|
||||||
(m,n,...,N).
|
(m,n,...,N).
|
||||||
|
|
||||||
In other words, each entry ``out[i,j,...,:]`` is an N-dimensional
|
In other words, each entry ``out[i,j,...,:]`` is an N-dimensional
|
||||||
value drawn from the distribution.
|
value drawn from the distribution.
|
||||||
|
|
||||||
See Also
|
See Also
|
||||||
--------
|
--------
|
||||||
normal
|
normal
|
||||||
scipy.stats.norm : Provides random variates, as well as probability density
|
scipy.stats.norm : Provides random variates, as well as probability density
|
||||||
function, cumulative density function, etc.
|
function, cumulative density function, etc.
|
||||||
|
|
||||||
Notes
|
Notes
|
||||||
-----
|
-----
|
||||||
The mean is a coordinate in N-dimensional space, which represents the
|
The mean is a coordinate in N-dimensional space, which represents the
|
||||||
location where samples are most likely to be generated. This is
|
location where samples are most likely to be generated. This is
|
||||||
analogous to the peak of the bell curve for the one-dimensional or
|
analogous to the peak of the bell curve for the one-dimensional or
|
||||||
univariate normal distribution.
|
univariate normal distribution.
|
||||||
|
|
||||||
Covariance indicates the level to which two variables vary together.
|
Covariance indicates the level to which two variables vary together.
|
||||||
From the multivariate normal distribution, we draw N-dimensional
|
From the multivariate normal distribution, we draw N-dimensional
|
||||||
samples, :math:`X = [x_1, x_2, ... x_N]`. The covariance matrix
|
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`.
|
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
|
The element :math:`C_ii` is the variance of :math:`x_i` (i.e. its
|
||||||
"spread").
|
"spread").
|
||||||
|
|
||||||
Instead of specifying the full covariance matrix, popular
|
Instead of specifying the full covariance matrix, popular
|
||||||
approximations include:
|
approximations include:
|
||||||
|
|
||||||
- Spherical covariance (`cov` is a multiple of the identity matrix)
|
- Spherical covariance (`cov` is a multiple of the identity matrix)
|
||||||
- Diagonal covariance (`cov` has non-negative elements, and only on
|
- Diagonal covariance (`cov` has non-negative elements, and only on
|
||||||
the diagonal)
|
the diagonal)
|
||||||
|
|
||||||
This geometrical property can be seen in two dimensions by plotting
|
This geometrical property can be seen in two dimensions by plotting
|
||||||
generated data-points:
|
generated data-points:
|
||||||
|
|
||||||
>>> mean = [0,0]
|
>>> mean = [0,0]
|
||||||
>>> cov = [[1,0],[0,100]] # diagonal covariance, points lie on x or y-axis
|
>>> cov = [[1,0],[0,100]] # diagonal covariance, points lie on x or y-axis
|
||||||
>>> x,y = np.random.multivariate_normal(mean,cov,5000).T
|
>>> x,y = np.random.multivariate_normal(mean,cov,5000).T
|
||||||
|
|
||||||
>>> import matplotlib.pyplot as plt
|
>>> import matplotlib.pyplot as plt
|
||||||
>>> plt.plot(x,y,'x'); plt.axis('equal'); pyplot.show()
|
>>> plt.plot(x,y,'x'); plt.axis('equal'); pyplot.show()
|
||||||
|
|
||||||
Note that the covariance matrix must be non-negative definite.
|
Note that the covariance matrix must be non-negative definite.
|
||||||
|
|
||||||
References
|
References
|
||||||
----------
|
----------
|
||||||
.. [1] A. Papoulis, "Probability, Random Variables, and Stochastic
|
.. [1] A. Papoulis, "Probability, Random Variables, and Stochastic
|
||||||
Processes," 3rd ed., McGraw-Hill Companies, 1991
|
Processes," 3rd ed., McGraw-Hill Companies, 1991
|
||||||
.. [2] R.O. Duda, P.E. Hart, and D.G. Stork, "Pattern Classification,"
|
.. [2] R.O. Duda, P.E. Hart, and D.G. Stork, "Pattern Classification,"
|
||||||
2nd ed., Wiley, 2001.
|
2nd ed., Wiley, 2001.
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
--------
|
--------
|
||||||
>>> mean = (1,2)
|
>>> mean = (1,2)
|
||||||
>>> cov = [[1,0],[1,0]]
|
>>> cov = [[1,0],[1,0]]
|
||||||
>>> x = np.random.multivariate_normal(mean,cov,(3,3))
|
>>> x = np.random.multivariate_normal(mean,cov,(3,3))
|
||||||
>>> x.shape
|
>>> x.shape
|
||||||
(3, 3, 2)
|
(3, 3, 2)
|
||||||
|
|
||||||
The following is probably true, given that 0.6 is roughly twice the
|
The following is probably true, given that 0.6 is roughly twice the
|
||||||
standard deviation:
|
standard deviation:
|
||||||
|
|
||||||
>>> print list( (x[0,0,:] - mean) < 0.6 )
|
>>> print list( (x[0,0,:] - mean) < 0.6 )
|
||||||
[True, True]
|
[True, True]
|
||||||
|
|
||||||
.. index:
|
.. index:
|
||||||
:refguide: random:distributions
|
: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
|
This file gives an overview of what is necessary to build binary releases for
|
||||||
NumPy.
|
NumPy.
|
||||||
|
|
||||||
Current build and release info
|
Current build and release info
|
||||||
==============================
|
==============================
|
||||||
The current info on building and releasing NumPy and SciPy is scattered in
|
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
|
several places. It should be summarized in one place, updated, and where
|
||||||
necessary described in more detail. The sections below list all places where
|
necessary described in more detail. The sections below list all places where
|
||||||
useful info can be found.
|
useful info can be found.
|
||||||
|
|
||||||
|
|
||||||
Source tree
|
Source tree
|
||||||
-----------
|
-----------
|
||||||
- INSTALL.rst.txt
|
- INSTALL.rst.txt
|
||||||
- release.sh
|
- release.sh
|
||||||
- pavement.py
|
- pavement.py
|
||||||
|
|
||||||
|
|
||||||
NumPy Docs
|
NumPy Docs
|
||||||
----------
|
----------
|
||||||
- https://github.com/numpy/numpy/blob/master/doc/HOWTO_RELEASE.rst.txt
|
- https://github.com/numpy/numpy/blob/master/doc/HOWTO_RELEASE.rst.txt
|
||||||
- http://projects.scipy.org/numpy/wiki/MicrosoftToolchainSupport (dead link)
|
- http://projects.scipy.org/numpy/wiki/MicrosoftToolchainSupport (dead link)
|
||||||
|
|
||||||
|
|
||||||
SciPy.org wiki
|
SciPy.org wiki
|
||||||
--------------
|
--------------
|
||||||
- https://www.scipy.org/Installing_SciPy and links on that page.
|
- https://www.scipy.org/Installing_SciPy and links on that page.
|
||||||
- http://new.scipy.org/building/windows.html (dead link)
|
- http://new.scipy.org/building/windows.html (dead link)
|
||||||
|
|
||||||
|
|
||||||
Doc wiki
|
Doc wiki
|
||||||
--------
|
--------
|
||||||
- http://docs.scipy.org/numpy/docs/numpy-docs/user/install.rst/ (dead link)
|
- http://docs.scipy.org/numpy/docs/numpy-docs/user/install.rst/ (dead link)
|
||||||
|
|
||||||
|
|
||||||
Release Scripts
|
Release Scripts
|
||||||
---------------
|
---------------
|
||||||
- https://github.com/numpy/numpy-vendor
|
- https://github.com/numpy/numpy-vendor
|
||||||
|
|
||||||
|
|
||||||
Supported platforms and versions
|
Supported platforms and versions
|
||||||
================================
|
================================
|
||||||
`NEP 29`_ outlines which Python versions are supported; For the first half of
|
`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
|
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
|
every time we merge code to master. Binary installers may be available for a
|
||||||
subset of these versions (see below).
|
subset of these versions (see below).
|
||||||
|
|
||||||
OS X
|
OS X
|
||||||
----
|
----
|
||||||
OS X versions >= 10.9 are supported, for Python version support see `NEP 29`_.
|
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,
|
We build binary wheels for OSX that are compatible with Python.org Python,
|
||||||
system Python, homebrew and macports - see this `OSX wheel building summary
|
system Python, homebrew and macports - see this `OSX wheel building summary
|
||||||
<https://github.com/MacPython/wiki/wiki/Spinning-wheels>`_ for details.
|
<https://github.com/MacPython/wiki/wiki/Spinning-wheels>`_ for details.
|
||||||
|
|
||||||
|
|
||||||
Windows
|
Windows
|
||||||
-------
|
-------
|
||||||
We build 32- and 64-bit wheels on Windows. Windows 7, 8 and 10 are supported.
|
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.
|
We build NumPy using the `mingw-w64 toolchain`_ on Appveyor.
|
||||||
|
|
||||||
|
|
||||||
Linux
|
Linux
|
||||||
-----
|
-----
|
||||||
We build and ship `manylinux1 <https://www.python.org/dev/peps/pep-0513>`_
|
We build and ship `manylinux1 <https://www.python.org/dev/peps/pep-0513>`_
|
||||||
wheels for NumPy. Many Linux distributions include their own binary builds
|
wheels for NumPy. Many Linux distributions include their own binary builds
|
||||||
of NumPy.
|
of NumPy.
|
||||||
|
|
||||||
|
|
||||||
BSD / Solaris
|
BSD / Solaris
|
||||||
-------------
|
-------------
|
||||||
No binaries are provided, but successful builds on Solaris and BSD have been
|
No binaries are provided, but successful builds on Solaris and BSD have been
|
||||||
reported.
|
reported.
|
||||||
|
|
||||||
|
|
||||||
Tool chain
|
Tool chain
|
||||||
==========
|
==========
|
||||||
We build all our wheels on cloud infrastructure - so this list of compilers is
|
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
|
for information and debugging builds locally. See the ``.travis.yml`` and
|
||||||
``appveyor.yml`` scripts in the `numpy wheels`_ repo for the definitive source
|
``appveyor.yml`` scripts in the `numpy wheels`_ repo for the definitive source
|
||||||
of the build recipes. Packages that are available using pip are noted.
|
of the build recipes. Packages that are available using pip are noted.
|
||||||
|
|
||||||
|
|
||||||
Compilers
|
Compilers
|
||||||
---------
|
---------
|
||||||
The same gcc version is used as the one with which Python itself is built on
|
The same gcc version is used as the one with which Python itself is built on
|
||||||
each platform. At the moment this means:
|
each platform. At the moment this means:
|
||||||
|
|
||||||
- OS X builds on travis currently use `clang`. It appears that binary wheels
|
- 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
|
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;
|
when building against the Python from the Python.org installers;
|
||||||
- Windows builds use the `mingw-w64 toolchain`_;
|
- Windows builds use the `mingw-w64 toolchain`_;
|
||||||
- Manylinux1 wheels use the gcc provided on the Manylinux docker images.
|
- Manylinux1 wheels use the gcc provided on the Manylinux docker images.
|
||||||
|
|
||||||
You will need Cython for building the binaries. Cython compiles the ``.pyx``
|
You will need Cython for building the binaries. Cython compiles the ``.pyx``
|
||||||
files in the NumPy distribution to ``.c`` files.
|
files in the NumPy distribution to ``.c`` files.
|
||||||
|
|
||||||
.. _mingw-w64 toolchain : https://mingwpy.github.io
|
.. _mingw-w64 toolchain : https://mingwpy.github.io
|
||||||
.. _NEP 29 : https://numpy.org/neps/nep-0029-deprecation_policy.html
|
.. _NEP 29 : https://numpy.org/neps/nep-0029-deprecation_policy.html
|
||||||
|
|
||||||
OpenBLAS
|
OpenBLAS
|
||||||
------------
|
------------
|
||||||
All the wheels link to a version of OpenBLAS_ supplied via the openblas-libs_ repo.
|
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
|
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.
|
collisions with other OpenBLAS shared objects that may exist in the filesystem.
|
||||||
|
|
||||||
.. _OpenBLAS: https://github.com/xianyi/OpenBLAS
|
.. _OpenBLAS: https://github.com/xianyi/OpenBLAS
|
||||||
.. _openblas-libs: https://github.com/MacPython/openblas-libs
|
.. _openblas-libs: https://github.com/MacPython/openblas-libs
|
||||||
|
|
||||||
|
|
||||||
Building source archives and wheels
|
Building source archives and wheels
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
You will need write permission for numpy-wheels in order to trigger wheel
|
You will need write permission for numpy-wheels in order to trigger wheel
|
||||||
builds.
|
builds.
|
||||||
|
|
||||||
- Python(s) from `python.org <https://python.org>`_ or linux distro.
|
- Python(s) from `python.org <https://python.org>`_ or linux distro.
|
||||||
- cython (pip)
|
- cython (pip)
|
||||||
- virtualenv (pip)
|
- virtualenv (pip)
|
||||||
- Paver (pip)
|
- Paver (pip)
|
||||||
- pandoc `pandoc.org <https://www.pandoc.org>`_ or linux distro.
|
- pandoc `pandoc.org <https://www.pandoc.org>`_ or linux distro.
|
||||||
- numpy-wheels `<https://github.com/MacPython/numpy-wheels>`_ (clone)
|
- numpy-wheels `<https://github.com/MacPython/numpy-wheels>`_ (clone)
|
||||||
|
|
||||||
|
|
||||||
Building docs
|
Building docs
|
||||||
-------------
|
-------------
|
||||||
Building the documents requires a number of latex ``.sty`` files. Install them
|
Building the documents requires a number of latex ``.sty`` files. Install them
|
||||||
all to avoid aggravation.
|
all to avoid aggravation.
|
||||||
|
|
||||||
- Sphinx (pip)
|
- Sphinx (pip)
|
||||||
- numpydoc (pip)
|
- numpydoc (pip)
|
||||||
- Matplotlib
|
- Matplotlib
|
||||||
- Texlive (or MikTeX on Windows)
|
- Texlive (or MikTeX on Windows)
|
||||||
|
|
||||||
|
|
||||||
Uploading to PyPI
|
Uploading to PyPI
|
||||||
-----------------
|
-----------------
|
||||||
- terryfy `<https://github.com/MacPython/terryfy>`_ (clone).
|
- terryfy `<https://github.com/MacPython/terryfy>`_ (clone).
|
||||||
- beautifulsoup4 (pip)
|
- beautifulsoup4 (pip)
|
||||||
- delocate (pip)
|
- delocate (pip)
|
||||||
- auditwheel (pip)
|
- auditwheel (pip)
|
||||||
- twine (pip)
|
- twine (pip)
|
||||||
|
|
||||||
|
|
||||||
Generating author/pr lists
|
Generating author/pr lists
|
||||||
--------------------------
|
--------------------------
|
||||||
You will need a personal access token
|
You will need a personal access token
|
||||||
`<https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/>`_
|
`<https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/>`_
|
||||||
so that scripts can access the github NumPy repository.
|
so that scripts can access the github NumPy repository.
|
||||||
|
|
||||||
- gitpython (pip)
|
- gitpython (pip)
|
||||||
- pygithub (pip)
|
- pygithub (pip)
|
||||||
|
|
||||||
|
|
||||||
Virtualenv
|
Virtualenv
|
||||||
----------
|
----------
|
||||||
Virtualenv is a very useful tool to keep several versions of packages around.
|
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.
|
It is also used in the Paver script to build the docs.
|
||||||
|
|
||||||
|
|
||||||
What is released
|
What is released
|
||||||
================
|
================
|
||||||
|
|
||||||
Wheels
|
Wheels
|
||||||
------
|
------
|
||||||
We currently support Python 3.6-3.8 on Windows, OSX, and Linux
|
We currently support Python 3.6-3.8 on Windows, OSX, and Linux
|
||||||
|
|
||||||
* Windows: 32-bit and 64-bit wheels built using Appveyor;
|
* Windows: 32-bit and 64-bit wheels built using Appveyor;
|
||||||
* OSX: x64_86 OSX wheels built using travis-ci;
|
* OSX: x64_86 OSX wheels built using travis-ci;
|
||||||
* Linux: 32-bit and 64-bit Manylinux1 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.
|
See the `numpy wheels`_ building repository for more detail.
|
||||||
|
|
||||||
.. _numpy wheels : https://github.com/MacPython/numpy-wheels
|
.. _numpy wheels : https://github.com/MacPython/numpy-wheels
|
||||||
|
|
||||||
|
|
||||||
Other
|
Other
|
||||||
-----
|
-----
|
||||||
- Release Notes
|
- Release Notes
|
||||||
- Changelog
|
- Changelog
|
||||||
|
|
||||||
|
|
||||||
Source distribution
|
Source distribution
|
||||||
-------------------
|
-------------------
|
||||||
We build source releases in both .zip and .tar.gz formats.
|
We build source releases in both .zip and .tar.gz formats.
|
||||||
|
|
||||||
|
|
||||||
Release process
|
Release process
|
||||||
===============
|
===============
|
||||||
|
|
||||||
Agree on a release schedule
|
Agree on a release schedule
|
||||||
---------------------------
|
---------------------------
|
||||||
A typical release schedule is one beta, two release candidates and a final
|
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
|
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.
|
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
|
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
|
release notes for the next version in the master branch and update the Trac
|
||||||
Milestones.
|
Milestones.
|
||||||
|
|
||||||
|
|
||||||
Make sure current branch builds a package correctly
|
Make sure current branch builds a package correctly
|
||||||
---------------------------------------------------
|
---------------------------------------------------
|
||||||
::
|
::
|
||||||
|
|
||||||
git clean -fxd
|
git clean -fxd
|
||||||
python setup.py bdist
|
python setup.py bdist
|
||||||
python setup.py sdist
|
python setup.py sdist
|
||||||
|
|
||||||
To actually build the binaries after everything is set up correctly, the
|
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
|
release.sh script can be used. For details of the build process itself, it is
|
||||||
best to read the pavement.py script.
|
best to read the pavement.py script.
|
||||||
|
|
||||||
.. note:: The following steps are repeated for the beta(s), release
|
.. note:: The following steps are repeated for the beta(s), release
|
||||||
candidates(s) and the final release.
|
candidates(s) and the final release.
|
||||||
|
|
||||||
|
|
||||||
Check deprecations
|
Check deprecations
|
||||||
------------------
|
------------------
|
||||||
Before the release branch is made, it should be checked that all deprecated
|
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
|
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
|
in the docstring or deprecation warning at what version the code will be
|
||||||
removed.
|
removed.
|
||||||
|
|
||||||
Check the C API version number
|
Check the C API version number
|
||||||
------------------------------
|
------------------------------
|
||||||
The C API version needs to be tracked in three places
|
The C API version needs to be tracked in three places
|
||||||
|
|
||||||
- numpy/core/setup_common.py
|
- numpy/core/setup_common.py
|
||||||
- numpy/core/code_generators/cversions.txt
|
- numpy/core/code_generators/cversions.txt
|
||||||
- numpy/core/include/numpy/numpyconfig.h
|
- numpy/core/include/numpy/numpyconfig.h
|
||||||
|
|
||||||
There are three steps to the process.
|
There are three steps to the process.
|
||||||
|
|
||||||
1. If the API has changed, increment the C_API_VERSION in setup_common.py. The
|
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
|
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
|
backward compatible with the last released NumPy version. Any changes to
|
||||||
C structures or additions to the public interface will make the new API
|
C structures or additions to the public interface will make the new API
|
||||||
not backward compatible.
|
not backward compatible.
|
||||||
|
|
||||||
2. If the C_API_VERSION in the first step has changed, or if the hash of
|
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 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
|
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
|
is printed. If that hash does not match the last hash in
|
||||||
numpy/core/code_generators/cversions.txt the hash has changed. Using both
|
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.
|
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
|
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
|
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
|
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
|
same as in 1.8. The hash serves as a check for API changes, but it is not
|
||||||
definitive.
|
definitive.
|
||||||
|
|
||||||
If steps 1 and 2 are done correctly, compiling the release should not give
|
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".
|
a warning "API mismatch detect at the beginning of the build".
|
||||||
|
|
||||||
3. The numpy/core/include/numpy/numpyconfig.h will need a new
|
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
|
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
|
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
|
increased from the previous version if some of the functions or macros in
|
||||||
the include files were deprecated.
|
the include files were deprecated.
|
||||||
|
|
||||||
The C ABI version number in numpy/core/setup_common.py should only be
|
The C ABI version number in numpy/core/setup_common.py should only be
|
||||||
updated for a major release.
|
updated for a major release.
|
||||||
|
|
||||||
|
|
||||||
Check the release notes
|
Check the release notes
|
||||||
-----------------------
|
-----------------------
|
||||||
Use `towncrier`_ to build the release note and
|
Use `towncrier`_ to build the release note and
|
||||||
commit the changes. This will remove all the fragments from
|
commit the changes. This will remove all the fragments from
|
||||||
``doc/release/upcoming_changes`` and add ``doc/release/<version>-note.rst``.
|
``doc/release/upcoming_changes`` and add ``doc/release/<version>-note.rst``.
|
||||||
Note that currently towncrier must be installed from its master branch as the
|
Note that currently towncrier must be installed from its master branch as the
|
||||||
last release (19.2.0) is outdated.
|
last release (19.2.0) is outdated.
|
||||||
|
|
||||||
towncrier --version "<version>"
|
towncrier --version "<version>"
|
||||||
git commit -m"Create release note"
|
git commit -m"Create release note"
|
||||||
|
|
||||||
Check that the release notes are up-to-date.
|
Check that the release notes are up-to-date.
|
||||||
|
|
||||||
Update the release notes with a Highlights section. Mention some of the
|
Update the release notes with a Highlights section. Mention some of the
|
||||||
following:
|
following:
|
||||||
|
|
||||||
- major new features
|
- major new features
|
||||||
- deprecated and removed features
|
- deprecated and removed features
|
||||||
- supported Python versions
|
- supported Python versions
|
||||||
- for SciPy, supported NumPy version(s)
|
- for SciPy, supported NumPy version(s)
|
||||||
- outlook for the near future
|
- outlook for the near future
|
||||||
|
|
||||||
.. _towncrier: https://github.com/hawkowl/towncrier
|
.. _towncrier: https://github.com/hawkowl/towncrier
|
||||||
|
|
||||||
|
|
||||||
Update the release status and create a release "tag"
|
Update the release status and create a release "tag"
|
||||||
----------------------------------------------------
|
----------------------------------------------------
|
||||||
Identify the commit hash of the release, e.g. 1b2e1d63ff.
|
Identify the commit hash of the release, e.g. 1b2e1d63ff.
|
||||||
|
|
||||||
::
|
::
|
||||||
git co 1b2e1d63ff # gives warning about detached head
|
git co 1b2e1d63ff # gives warning about detached head
|
||||||
|
|
||||||
First, change/check the following variables in ``pavement.py`` depending on the
|
First, change/check the following variables in ``pavement.py`` depending on the
|
||||||
release version::
|
release version::
|
||||||
|
|
||||||
RELEASE_NOTES = 'doc/release/1.7.0-notes.rst'
|
RELEASE_NOTES = 'doc/release/1.7.0-notes.rst'
|
||||||
LOG_START = 'v1.6.0'
|
LOG_START = 'v1.6.0'
|
||||||
LOG_END = 'maintenance/1.7.x'
|
LOG_END = 'maintenance/1.7.x'
|
||||||
|
|
||||||
Do any other changes. When you are ready to release, do the following
|
Do any other changes. When you are ready to release, do the following
|
||||||
changes::
|
changes::
|
||||||
|
|
||||||
diff --git a/setup.py b/setup.py
|
diff --git a/setup.py b/setup.py
|
||||||
index b1f53e3..8b36dbe 100755
|
index b1f53e3..8b36dbe 100755
|
||||||
--- a/setup.py
|
--- a/setup.py
|
||||||
+++ b/setup.py
|
+++ b/setup.py
|
||||||
@@ -57,7 +57,7 @@ PLATFORMS = ["Windows", "Linux", "Solaris", "Mac OS-
|
@@ -57,7 +57,7 @@ PLATFORMS = ["Windows", "Linux", "Solaris", "Mac OS-
|
||||||
MAJOR = 1
|
MAJOR = 1
|
||||||
MINOR = 7
|
MINOR = 7
|
||||||
MICRO = 0
|
MICRO = 0
|
||||||
-ISRELEASED = False
|
-ISRELEASED = False
|
||||||
+ISRELEASED = True
|
+ISRELEASED = True
|
||||||
VERSION = '%d.%d.%drc1' % (MAJOR, MINOR, MICRO)
|
VERSION = '%d.%d.%drc1' % (MAJOR, MINOR, MICRO)
|
||||||
|
|
||||||
# Return the git revision as a string
|
# Return the git revision as a string
|
||||||
|
|
||||||
And make sure the ``VERSION`` variable is set properly.
|
And make sure the ``VERSION`` variable is set properly.
|
||||||
|
|
||||||
Now you can make the release commit and tag. We recommend you don't push
|
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
|
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
|
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`):
|
form of the released code (see: :ref:`push-tag-and-commit`):
|
||||||
|
|
||||||
git commit -s -m "REL: Release." setup.py
|
git commit -s -m "REL: Release." setup.py
|
||||||
git tag -s <version>
|
git tag -s <version>
|
||||||
|
|
||||||
The ``-s`` flag makes a PGP (usually GPG) signed tag. Please do sign the
|
The ``-s`` flag makes a PGP (usually GPG) signed tag. Please do sign the
|
||||||
release tags.
|
release tags.
|
||||||
|
|
||||||
The release tag should have the release number in the annotation (tag
|
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
|
message). Unfortunately, the name of a tag can be changed without breaking the
|
||||||
signature, the contents of the message cannot.
|
signature, the contents of the message cannot.
|
||||||
|
|
||||||
See: https://github.com/scipy/scipy/issues/4919 for a discussion of signing
|
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
|
release tags, and https://keyring.debian.org/creating-key.html for instructions
|
||||||
on creating a GPG key if you do not have one.
|
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 make your key more readily identifiable as you, consider sending your key
|
||||||
to public keyservers, with a command such as::
|
to public keyservers, with a command such as::
|
||||||
|
|
||||||
gpg --send-keys <yourkeyid>
|
gpg --send-keys <yourkeyid>
|
||||||
|
|
||||||
|
|
||||||
Update the version of the master branch
|
Update the version of the master branch
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
Increment the release number in setup.py. Release candidates should have "rc1"
|
Increment the release number in setup.py. Release candidates should have "rc1"
|
||||||
(or "rc2", "rcN") appended to the X.Y.Z format.
|
(or "rc2", "rcN") appended to the X.Y.Z format.
|
||||||
|
|
||||||
Also create a new version hash in cversions.txt and a corresponding version
|
Also create a new version hash in cversions.txt and a corresponding version
|
||||||
define NPY_x_y_API_VERSION in numpyconfig.h
|
define NPY_x_y_API_VERSION in numpyconfig.h
|
||||||
|
|
||||||
|
|
||||||
Trigger the wheel builds
|
Trigger the wheel builds
|
||||||
------------------------
|
------------------------
|
||||||
See the `MacPython/numpy wheels` repository.
|
See the `MacPython/numpy wheels` repository.
|
||||||
|
|
||||||
In that repository edit the files:
|
In that repository edit the files:
|
||||||
|
|
||||||
- ``azure/posix.yml``
|
- ``azure/posix.yml``
|
||||||
- ``azure/windows.yml``.
|
- ``azure/windows.yml``.
|
||||||
|
|
||||||
In both cases, set the ``BUILD_COMMIT`` variable to the current release tag -
|
In both cases, set the ``BUILD_COMMIT`` variable to the current release tag -
|
||||||
e.g. ``v1.19.0``::
|
e.g. ``v1.19.0``::
|
||||||
|
|
||||||
$ gvim azure/posix.yml azure/windows.yml
|
$ gvim azure/posix.yml azure/windows.yml
|
||||||
$ git commit -a
|
$ git commit -a
|
||||||
$ git push upstream HEAD
|
$ git push upstream HEAD
|
||||||
|
|
||||||
Make sure that the release tag has been pushed.
|
Make sure that the release tag has been pushed.
|
||||||
|
|
||||||
Trigger a build by pushing a commit of your edits to the repository. Note that
|
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
|
you can do this on a branch, but it must be pushed upstream to the
|
||||||
``MacPython/numpy-wheels`` repository to trigger uploads since only
|
``MacPython/numpy-wheels`` repository to trigger uploads since only
|
||||||
that repo has the appropriate tokens to allow uploads.
|
that repo has the appropriate tokens to allow uploads.
|
||||||
|
|
||||||
The wheels, once built, appear at https://anaconda.org/multibuild-wheels-staging/numpy
|
The wheels, once built, appear at https://anaconda.org/multibuild-wheels-staging/numpy
|
||||||
|
|
||||||
Make the release
|
Make the release
|
||||||
----------------
|
----------------
|
||||||
Build the changelog and notes for upload with::
|
Build the changelog and notes for upload with::
|
||||||
|
|
||||||
paver write_release
|
paver write_release
|
||||||
|
|
||||||
|
|
||||||
Build and archive documentation
|
Build and archive documentation
|
||||||
-------------------------------
|
-------------------------------
|
||||||
Do::
|
Do::
|
||||||
|
|
||||||
cd doc/
|
cd doc/
|
||||||
make dist
|
make dist
|
||||||
|
|
||||||
to check that the documentation is in a buildable state. Then, after tagging,
|
to check that the documentation is in a buildable state. Then, after tagging,
|
||||||
create an archive of the documentation in the numpy/doc repo::
|
create an archive of the documentation in the numpy/doc repo::
|
||||||
|
|
||||||
# This checks out github.com/numpy/doc and adds (``git add``) the
|
# This checks out github.com/numpy/doc and adds (``git add``) the
|
||||||
# documentation to the checked out repo.
|
# documentation to the checked out repo.
|
||||||
make merge-doc
|
make merge-doc
|
||||||
# Now edit the ``index.html`` file in the repo to reflect the new content,
|
# Now edit the ``index.html`` file in the repo to reflect the new content,
|
||||||
# and commit the changes
|
# and commit the changes
|
||||||
git -C build/merge commit -am "Add documentation for <version>"
|
git -C build/merge commit -am "Add documentation for <version>"
|
||||||
# Push to numpy/doc repo
|
# Push to numpy/doc repo
|
||||||
git -C build/merge push
|
git -C build/merge push
|
||||||
|
|
||||||
|
|
||||||
Update PyPI
|
Update PyPI
|
||||||
-----------
|
-----------
|
||||||
The wheels and source should be uploaded to PyPI.
|
The wheels and source should be uploaded to PyPI.
|
||||||
|
|
||||||
You should upload the wheels first, and the source formats last, to make sure
|
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
|
that pip users don't accidentally get a source install when they were
|
||||||
expecting a binary wheel.
|
expecting a binary wheel.
|
||||||
|
|
||||||
You can do this automatically using the ``wheel-uploader`` script from
|
You can do this automatically using the ``wheel-uploader`` script from
|
||||||
https://github.com/MacPython/terryfy. Here is the recommended incantation for
|
https://github.com/MacPython/terryfy. Here is the recommended incantation for
|
||||||
downloading all the Windows, Manylinux, OSX wheels and uploading to PyPI. ::
|
downloading all the Windows, Manylinux, OSX wheels and uploading to PyPI. ::
|
||||||
|
|
||||||
NPY_WHLS=~/wheelhouse # local directory to cache wheel downloads
|
NPY_WHLS=~/wheelhouse # local directory to cache wheel downloads
|
||||||
CDN_URL=https://anaconda.org/multibuild-wheels-staging/numpy/files
|
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 $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 macosx numpy 1.11.1rc1
|
||||||
wheel-uploader -u $CDN_URL -w warehouse -v -s -t manylinux1 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
|
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
|
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
|
before the source tarball, so there is no period for which people switch from
|
||||||
an expected binary install to a source install from PyPI.
|
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::
|
There are two ways to update the source release on PyPI, the first one is::
|
||||||
|
|
||||||
$ git clean -fxd # to be safe
|
$ git clean -fxd # to be safe
|
||||||
$ python setup.py sdist --formats=gztar,zip # to check
|
$ python setup.py sdist --formats=gztar,zip # to check
|
||||||
# python setup.py sdist --formats=gztar,zip upload --sign
|
# python setup.py sdist --formats=gztar,zip upload --sign
|
||||||
|
|
||||||
This will ask for your key PGP passphrase, in order to sign the built source
|
This will ask for your key PGP passphrase, in order to sign the built source
|
||||||
packages.
|
packages.
|
||||||
|
|
||||||
The second way is to upload the PKG_INFO file inside the sdist dir in the
|
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
|
web interface of PyPI. The source tarball can also be uploaded through this
|
||||||
interface.
|
interface.
|
||||||
|
|
||||||
.. _push-tag-and-commit:
|
.. _push-tag-and-commit:
|
||||||
|
|
||||||
|
|
||||||
Push the release tag and commit
|
Push the release tag and commit
|
||||||
-------------------------------
|
-------------------------------
|
||||||
Finally, now you are confident this tag correctly defines the source code that
|
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::
|
you released you can push the tag and release commit up to github::
|
||||||
|
|
||||||
git push # Push release commit
|
git push # Push release commit
|
||||||
git push upstream <version> # Push tag named <version>
|
git push upstream <version> # Push tag named <version>
|
||||||
|
|
||||||
where ``upstream`` points to the main https://github.com/numpy/numpy.git
|
where ``upstream`` points to the main https://github.com/numpy/numpy.git
|
||||||
repository.
|
repository.
|
||||||
|
|
||||||
|
|
||||||
Update scipy.org
|
Update scipy.org
|
||||||
----------------
|
----------------
|
||||||
A release announcement with a link to the download site should be placed in the
|
A release announcement with a link to the download site should be placed in the
|
||||||
sidebar of the front page of scipy.org.
|
sidebar of the front page of scipy.org.
|
||||||
|
|
||||||
The scipy.org should be a PR at https://github.com/scipy/scipy.org. The file
|
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``.
|
that needs modification is ``www/index.rst``. Search for ``News``.
|
||||||
|
|
||||||
|
|
||||||
Announce to the lists
|
Announce to the lists
|
||||||
---------------------
|
---------------------
|
||||||
The release should be announced on the mailing lists of
|
The release should be announced on the mailing lists of
|
||||||
NumPy and SciPy, to python-announce, and possibly also those of
|
NumPy and SciPy, to python-announce, and possibly also those of
|
||||||
Matplotlib, IPython and/or Pygame.
|
Matplotlib, IPython and/or Pygame.
|
||||||
|
|
||||||
During the beta/RC phase, an explicit request for testing the binaries with
|
During the beta/RC phase, an explicit request for testing the binaries with
|
||||||
several other libraries (SciPy/Matplotlib/Pygame) should be posted on the
|
several other libraries (SciPy/Matplotlib/Pygame) should be posted on the
|
||||||
mailing list.
|
mailing list.
|
||||||
|
|
||||||
|
|
||||||
Announce to Linux Weekly News
|
Announce to Linux Weekly News
|
||||||
-----------------------------
|
-----------------------------
|
||||||
Email the editor of LWN to let them know of the release. Directions at:
|
Email the editor of LWN to let them know of the release. Directions at:
|
||||||
https://lwn.net/op/FAQ.lwn#contact
|
https://lwn.net/op/FAQ.lwn#contact
|
||||||
|
|
||||||
|
|
||||||
After the final release
|
After the final release
|
||||||
-----------------------
|
-----------------------
|
||||||
After the final release is announced, a few administrative tasks are left to be
|
After the final release is announced, a few administrative tasks are left to be
|
||||||
done:
|
done:
|
||||||
|
|
||||||
- Forward port changes in the release branch to release notes and release
|
- Forward port changes in the release branch to release notes and release
|
||||||
scripts, if any, to master branch.
|
scripts, if any, to master branch.
|
||||||
- Update the Milestones in Trac.
|
- Update the Milestones in Trac.
|
||||||
|
|
|
@ -1,255 +1,255 @@
|
||||||
# Makefile for Sphinx documentation
|
# Makefile for Sphinx documentation
|
||||||
#
|
#
|
||||||
|
|
||||||
# PYVER needs to be major.minor, just "3" doesn't work - it will result in
|
# 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).
|
# issues with the amendments to PYTHONPATH and install paths (see DIST_VARS).
|
||||||
|
|
||||||
# Use explicit "version_info" indexing since make cannot handle colon characters, and
|
# Use explicit "version_info" indexing since make cannot handle colon characters, and
|
||||||
# evaluate it now to allow easier debugging when printing the variable
|
# 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]))')
|
PYVER:=$(shell python3 -c 'from sys import version_info as v; print("{0}.{1}".format(v[0], v[1]))')
|
||||||
PYTHON = python$(PYVER)
|
PYTHON = python$(PYVER)
|
||||||
|
|
||||||
# You can set these variables from the command line.
|
# You can set these variables from the command line.
|
||||||
SPHINXOPTS ?=
|
SPHINXOPTS ?=
|
||||||
SPHINXBUILD ?= LANG=C sphinx-build
|
SPHINXBUILD ?= LANG=C sphinx-build
|
||||||
PAPER ?=
|
PAPER ?=
|
||||||
# For merging a documentation archive into a git checkout of numpy/doc
|
# For merging a documentation archive into a git checkout of numpy/doc
|
||||||
# Turn a tag like v1.18.0 into 1.18
|
# 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
|
# 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')
|
TAG ?= $(shell git describe --tag | sed -n -e's,v\([1-9]\.[0-9]*\)\.[0-9].*,\1,p')
|
||||||
|
|
||||||
FILES=
|
FILES=
|
||||||
|
|
||||||
# Internal variables.
|
# Internal variables.
|
||||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||||
PAPEROPT_letter = -D latex_paper_size=letter
|
PAPEROPT_letter = -D latex_paper_size=letter
|
||||||
ALLSPHINXOPTS = -WT --keep-going -d build/doctrees $(PAPEROPT_$(PAPER)) \
|
ALLSPHINXOPTS = -WT --keep-going -d build/doctrees $(PAPEROPT_$(PAPER)) \
|
||||||
$(SPHINXOPTS) source
|
$(SPHINXOPTS) source
|
||||||
|
|
||||||
.PHONY: help clean html web pickle htmlhelp latex changes linkcheck \
|
.PHONY: help clean html web pickle htmlhelp latex changes linkcheck \
|
||||||
dist dist-build gitwash-update version-check html-build latex-build \
|
dist dist-build gitwash-update version-check html-build latex-build \
|
||||||
merge-doc
|
merge-doc
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
help:
|
help:
|
||||||
@echo "Please use \`make <target>' where <target> is one of"
|
@echo "Please use \`make <target>' where <target> is one of"
|
||||||
@echo " html to make standalone HTML files"
|
@echo " html to make standalone HTML files"
|
||||||
@echo " html-scipyorg to make standalone HTML files with scipy.org theming"
|
@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 " pickle to make pickle files (usable by e.g. sphinx-web)"
|
||||||
@echo " htmlhelp to make HTML files and a HTML help project"
|
@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 " 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 " changes to make an overview over all changed/added/deprecated items"
|
||||||
@echo " linkcheck to check all external links for integrity"
|
@echo " linkcheck to check all external links for integrity"
|
||||||
@echo " dist PYVER=... to make a distribution-ready tree"
|
@echo " dist PYVER=... to make a distribution-ready tree"
|
||||||
@echo " gitwash-update GITWASH=path/to/gitwash update gitwash developer docs"
|
@echo " gitwash-update GITWASH=path/to/gitwash update gitwash developer docs"
|
||||||
@echo " upload USERNAME=... RELEASE=... to upload built docs to docs.scipy.org"
|
@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"
|
@echo " merge-doc TAG=... to clone numpy/doc and archive documentation into it"
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
-rm -rf build/*
|
-rm -rf build/*
|
||||||
find . -name generated -type d -prune -exec rm -rf "{}" ";"
|
find . -name generated -type d -prune -exec rm -rf "{}" ";"
|
||||||
|
|
||||||
gitwash-update:
|
gitwash-update:
|
||||||
rm -rf source/dev/gitwash
|
rm -rf source/dev/gitwash
|
||||||
install -d source/dev/gitwash
|
install -d source/dev/gitwash
|
||||||
python $(GITWASH)/gitwash_dumper.py source/dev NumPy \
|
python $(GITWASH)/gitwash_dumper.py source/dev NumPy \
|
||||||
--repo-name=numpy \
|
--repo-name=numpy \
|
||||||
--github-user=numpy
|
--github-user=numpy
|
||||||
cat source/dev/gitwash_links.txt >> source/dev/gitwash/git_links.inc
|
cat source/dev/gitwash_links.txt >> source/dev/gitwash/git_links.inc
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# Automated generation of all documents
|
# Automated generation of all documents
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
# Build the current numpy version, and extract docs from it.
|
# Build the current numpy version, and extract docs from it.
|
||||||
# We have to be careful of some issues:
|
# We have to be careful of some issues:
|
||||||
#
|
#
|
||||||
# - Everything must be done using the same Python version
|
# - Everything must be done using the same Python version
|
||||||
# - We must use eggs (otherwise they might override PYTHONPATH on import).
|
# - We must use eggs (otherwise they might override PYTHONPATH on import).
|
||||||
# - Different versions of easy_install install to different directories (!)
|
# - Different versions of easy_install install to different directories (!)
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
INSTALL_DIR = $(CURDIR)/build/inst-dist
|
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
|
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)
|
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)"
|
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)
|
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; \
|
GITVER ?= $(shell cd ..; $(PYTHON) -c "from setup import git_version; \
|
||||||
print(git_version()[:10])")
|
print(git_version()[:10])")
|
||||||
|
|
||||||
version-check:
|
version-check:
|
||||||
ifeq "$(GITVER)" "Unknown"
|
ifeq "$(GITVER)" "Unknown"
|
||||||
# @echo sdist build with unlabeled sources
|
# @echo sdist build with unlabeled sources
|
||||||
else ifeq ("", "$(NUMPYVER)")
|
else ifeq ("", "$(NUMPYVER)")
|
||||||
@echo numpy not found, cannot build documentation without successful \"import numpy\"
|
@echo numpy not found, cannot build documentation without successful \"import numpy\"
|
||||||
@exit 1
|
@exit 1
|
||||||
else ifneq ($(NUMPYVER),$(GITVER))
|
else ifneq ($(NUMPYVER),$(GITVER))
|
||||||
@echo installed numpy $(NUMPYVER) != current repo git version \'$(GITVER)\'
|
@echo installed numpy $(NUMPYVER) != current repo git version \'$(GITVER)\'
|
||||||
@echo use '"make dist"' or '"GITVER=$(NUMPYVER) make $(MAKECMDGOALS) ..."'
|
@echo use '"make dist"' or '"GITVER=$(NUMPYVER) make $(MAKECMDGOALS) ..."'
|
||||||
@exit 1
|
@exit 1
|
||||||
else
|
else
|
||||||
# for testing
|
# for testing
|
||||||
# @echo installed numpy $(NUMPYVER) matches git version $(GITVER); exit 1
|
# @echo installed numpy $(NUMPYVER) matches git version $(GITVER); exit 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
dist: build/dist.tar.gz
|
dist: build/dist.tar.gz
|
||||||
|
|
||||||
build/dist.tar.gz:
|
build/dist.tar.gz:
|
||||||
make $(DIST_VARS) real-dist
|
make $(DIST_VARS) real-dist
|
||||||
|
|
||||||
real-dist: dist-build html-build
|
real-dist: dist-build html-build
|
||||||
test -d build/latex || make latex-build
|
test -d build/latex || make latex-build
|
||||||
make -C build/latex all-pdf
|
make -C build/latex all-pdf
|
||||||
-rm -rf build/dist
|
-rm -rf build/dist
|
||||||
cp -r build/html build/dist
|
cp -r build/html build/dist
|
||||||
cd build/html && zip -9r ../dist/numpy-html.zip .
|
cd build/html && zip -9r ../dist/numpy-html.zip .
|
||||||
cp build/latex/numpy-ref.pdf build/dist
|
cp build/latex/numpy-ref.pdf build/dist
|
||||||
cp build/latex/numpy-user.pdf build/dist
|
cp build/latex/numpy-user.pdf build/dist
|
||||||
cd build/dist && tar czf ../dist.tar.gz *
|
cd build/dist && tar czf ../dist.tar.gz *
|
||||||
chmod ug=rwX,o=rX -R build/dist
|
chmod ug=rwX,o=rX -R build/dist
|
||||||
find build/dist -type d -print0 | xargs -0r chmod g+s
|
find build/dist -type d -print0 | xargs -0r chmod g+s
|
||||||
|
|
||||||
dist-build:
|
dist-build:
|
||||||
rm -f ../dist/*.egg
|
rm -f ../dist/*.egg
|
||||||
cd .. && $(PYTHON) setup.py bdist_egg
|
cd .. && $(PYTHON) setup.py bdist_egg
|
||||||
install -d $(subst :, ,$(INSTALL_PPH))
|
install -d $(subst :, ,$(INSTALL_PPH))
|
||||||
$(PYTHON) `which easy_install` --prefix=$(INSTALL_DIR) ../dist/*.egg
|
$(PYTHON) `which easy_install` --prefix=$(INSTALL_DIR) ../dist/*.egg
|
||||||
|
|
||||||
upload: build/dist.tar.gz
|
upload: build/dist.tar.gz
|
||||||
# SSH must be correctly configured for this to work.
|
# SSH must be correctly configured for this to work.
|
||||||
# Assumes that ``make dist`` was already run
|
# Assumes that ``make dist`` was already run
|
||||||
# Example usage: ``make upload USERNAME=rgommers RELEASE=1.10.1``
|
# Example usage: ``make upload USERNAME=rgommers RELEASE=1.10.1``
|
||||||
ssh $(USERNAME)@docs.scipy.org mkdir $(UPLOAD_DIR)
|
ssh $(USERNAME)@docs.scipy.org mkdir $(UPLOAD_DIR)
|
||||||
scp build/dist.tar.gz $(USERNAME)@docs.scipy.org:$(UPLOAD_DIR)
|
scp build/dist.tar.gz $(USERNAME)@docs.scipy.org:$(UPLOAD_DIR)
|
||||||
ssh $(USERNAME)@docs.scipy.org tar xvC $(UPLOAD_DIR) \
|
ssh $(USERNAME)@docs.scipy.org tar xvC $(UPLOAD_DIR) \
|
||||||
-zf $(UPLOAD_DIR)/dist.tar.gz
|
-zf $(UPLOAD_DIR)/dist.tar.gz
|
||||||
ssh $(USERNAME)@docs.scipy.org mv $(UPLOAD_DIR)/numpy-ref.pdf \
|
ssh $(USERNAME)@docs.scipy.org mv $(UPLOAD_DIR)/numpy-ref.pdf \
|
||||||
$(UPLOAD_DIR)/numpy-ref-$(RELEASE).pdf
|
$(UPLOAD_DIR)/numpy-ref-$(RELEASE).pdf
|
||||||
ssh $(USERNAME)@docs.scipy.org mv $(UPLOAD_DIR)/numpy-user.pdf \
|
ssh $(USERNAME)@docs.scipy.org mv $(UPLOAD_DIR)/numpy-user.pdf \
|
||||||
$(UPLOAD_DIR)/numpy-user-$(RELEASE).pdf
|
$(UPLOAD_DIR)/numpy-user-$(RELEASE).pdf
|
||||||
ssh $(USERNAME)@docs.scipy.org mv $(UPLOAD_DIR)/numpy-html.zip \
|
ssh $(USERNAME)@docs.scipy.org mv $(UPLOAD_DIR)/numpy-html.zip \
|
||||||
$(UPLOAD_DIR)/numpy-html-$(RELEASE).zip
|
$(UPLOAD_DIR)/numpy-html-$(RELEASE).zip
|
||||||
ssh $(USERNAME)@docs.scipy.org rm $(UPLOAD_DIR)/dist.tar.gz
|
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
|
ssh $(USERNAME)@docs.scipy.org ln -snf numpy-$(RELEASE) /srv/docs_scipy_org/doc/numpy
|
||||||
|
|
||||||
|
|
||||||
merge-doc: build/dist.tar.gz
|
merge-doc: build/dist.tar.gz
|
||||||
ifeq "$(TAG)" ""
|
ifeq "$(TAG)" ""
|
||||||
echo tag "$(TAG)" not of the form 1.18;
|
echo tag "$(TAG)" not of the form 1.18;
|
||||||
exit 1;
|
exit 1;
|
||||||
endif
|
endif
|
||||||
@# Only clone if the directory does not exist
|
@# Only clone if the directory does not exist
|
||||||
@if ! test -d build/merge; then \
|
@if ! test -d build/merge; then \
|
||||||
git clone https://github.com/numpy/doc build/merge; \
|
git clone https://github.com/numpy/doc build/merge; \
|
||||||
fi;
|
fi;
|
||||||
@# Remove any old content and copy in the new, add it to git
|
@# Remove any old content and copy in the new, add it to git
|
||||||
-rm -rf build/merge/$(TAG)/*
|
-rm -rf build/merge/$(TAG)/*
|
||||||
-mkdir -p build/merge/$(TAG)
|
-mkdir -p build/merge/$(TAG)
|
||||||
@# -C changes working directory
|
@# -C changes working directory
|
||||||
tar -C build/merge/$(TAG) -xf build/dist.tar.gz
|
tar -C build/merge/$(TAG) -xf build/dist.tar.gz
|
||||||
git -C build/merge add $(TAG)
|
git -C build/merge add $(TAG)
|
||||||
@# For now, the user must do this. If it is onerous, automate it and change
|
@# For now, the user must do this. If it is onerous, automate it and change
|
||||||
@# the instructions in doc/HOWTO_RELEASE.rst.txt
|
@# the instructions in doc/HOWTO_RELEASE.rst.txt
|
||||||
@echo " "
|
@echo " "
|
||||||
@echo New documentation archive added to ./build/merge.
|
@echo New documentation archive added to ./build/merge.
|
||||||
@echo Now add/modify the appropriate section after
|
@echo Now add/modify the appropriate section after
|
||||||
@echo " <!-- insert here -->"
|
@echo " <!-- insert here -->"
|
||||||
@echo in build/merge/index.html,
|
@echo in build/merge/index.html,
|
||||||
@echo then \"git commit\", \"git push\"
|
@echo then \"git commit\", \"git push\"
|
||||||
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# Basic Sphinx generation rules for different formats
|
# Basic Sphinx generation rules for different formats
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
generate: build/generate-stamp
|
generate: build/generate-stamp
|
||||||
build/generate-stamp: $(wildcard source/reference/*.rst)
|
build/generate-stamp: $(wildcard source/reference/*.rst)
|
||||||
mkdir -p build
|
mkdir -p build
|
||||||
touch build/generate-stamp
|
touch build/generate-stamp
|
||||||
|
|
||||||
html: version-check html-build
|
html: version-check html-build
|
||||||
html-build: generate
|
html-build: generate
|
||||||
mkdir -p build/html build/doctrees
|
mkdir -p build/html build/doctrees
|
||||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html $(FILES)
|
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html $(FILES)
|
||||||
$(PYTHON) postprocess.py html build/html/*.html
|
$(PYTHON) postprocess.py html build/html/*.html
|
||||||
@echo
|
@echo
|
||||||
@echo "Build finished. The HTML pages are in build/html."
|
@echo "Build finished. The HTML pages are in build/html."
|
||||||
|
|
||||||
html-scipyorg:
|
html-scipyorg:
|
||||||
mkdir -p build/html build/doctrees
|
mkdir -p build/html build/doctrees
|
||||||
$(SPHINXBUILD) -t scipyorg -b html $(ALLSPHINXOPTS) build/html-scipyorg $(FILES)
|
$(SPHINXBUILD) -t scipyorg -b html $(ALLSPHINXOPTS) build/html-scipyorg $(FILES)
|
||||||
@echo
|
@echo
|
||||||
@echo "Build finished. The HTML pages are in build/html."
|
@echo "Build finished. The HTML pages are in build/html."
|
||||||
|
|
||||||
pickle: generate version-check
|
pickle: generate version-check
|
||||||
mkdir -p build/pickle build/doctrees
|
mkdir -p build/pickle build/doctrees
|
||||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle $(FILES)
|
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle $(FILES)
|
||||||
@echo
|
@echo
|
||||||
@echo "Build finished; now you can process the pickle files or run"
|
@echo "Build finished; now you can process the pickle files or run"
|
||||||
@echo " sphinx-web build/pickle"
|
@echo " sphinx-web build/pickle"
|
||||||
@echo "to start the sphinx-web server."
|
@echo "to start the sphinx-web server."
|
||||||
|
|
||||||
web: pickle
|
web: pickle
|
||||||
|
|
||||||
htmlhelp: generate version-check
|
htmlhelp: generate version-check
|
||||||
mkdir -p build/htmlhelp build/doctrees
|
mkdir -p build/htmlhelp build/doctrees
|
||||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp $(FILES)
|
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp $(FILES)
|
||||||
@echo
|
@echo
|
||||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||||
".hhp project file in build/htmlhelp."
|
".hhp project file in build/htmlhelp."
|
||||||
|
|
||||||
htmlhelp-build: htmlhelp build/htmlhelp/numpy.chm
|
htmlhelp-build: htmlhelp build/htmlhelp/numpy.chm
|
||||||
%.chm: %.hhp
|
%.chm: %.hhp
|
||||||
-hhc.exe $^
|
-hhc.exe $^
|
||||||
|
|
||||||
qthelp: generate version-check
|
qthelp: generate version-check
|
||||||
mkdir -p build/qthelp build/doctrees
|
mkdir -p build/qthelp build/doctrees
|
||||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) build/qthelp $(FILES)
|
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) build/qthelp $(FILES)
|
||||||
|
|
||||||
latex: version-check latex-build
|
latex: version-check latex-build
|
||||||
latex-build: generate
|
latex-build: generate
|
||||||
mkdir -p build/latex build/doctrees
|
mkdir -p build/latex build/doctrees
|
||||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex $(FILES)
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex $(FILES)
|
||||||
$(PYTHON) postprocess.py tex build/latex/*.tex
|
$(PYTHON) postprocess.py tex build/latex/*.tex
|
||||||
perl -pi -e 's/LATEXOPTS =/LATEXOPTS ?= --halt-on-error/' build/latex/Makefile
|
perl -pi -e 's/LATEXOPTS =/LATEXOPTS ?= --halt-on-error/' build/latex/Makefile
|
||||||
@echo
|
@echo
|
||||||
@echo "Build finished; the LaTeX files are in build/latex."
|
@echo "Build finished; the LaTeX files are in build/latex."
|
||||||
@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
|
@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
|
||||||
"run these through (pdf)latex."
|
"run these through (pdf)latex."
|
||||||
|
|
||||||
coverage: build version-check
|
coverage: build version-check
|
||||||
mkdir -p build/coverage build/doctrees
|
mkdir -p build/coverage build/doctrees
|
||||||
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) build/coverage $(FILES)
|
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) build/coverage $(FILES)
|
||||||
@echo "Coverage finished; see c.txt and python.txt in build/coverage"
|
@echo "Coverage finished; see c.txt and python.txt in build/coverage"
|
||||||
|
|
||||||
changes: generate version-check
|
changes: generate version-check
|
||||||
mkdir -p build/changes build/doctrees
|
mkdir -p build/changes build/doctrees
|
||||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes $(FILES)
|
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes $(FILES)
|
||||||
@echo
|
@echo
|
||||||
@echo "The overview file is in build/changes."
|
@echo "The overview file is in build/changes."
|
||||||
|
|
||||||
linkcheck: generate version-check
|
linkcheck: generate version-check
|
||||||
mkdir -p build/linkcheck build/doctrees
|
mkdir -p build/linkcheck build/doctrees
|
||||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck $(FILES)
|
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck $(FILES)
|
||||||
@echo
|
@echo
|
||||||
@echo "Link check complete; look for any errors in the above output " \
|
@echo "Link check complete; look for any errors in the above output " \
|
||||||
"or in build/linkcheck/output.txt."
|
"or in build/linkcheck/output.txt."
|
||||||
|
|
||||||
texinfo:
|
texinfo:
|
||||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) build/texinfo
|
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) build/texinfo
|
||||||
@echo
|
@echo
|
||||||
@echo "Build finished. The Texinfo files are in build/texinfo."
|
@echo "Build finished. The Texinfo files are in build/texinfo."
|
||||||
@echo "Run \`make' in that directory to run these through makeinfo" \
|
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||||
"(use \`make info' here to do that automatically)."
|
"(use \`make info' here to do that automatically)."
|
||||||
|
|
||||||
info:
|
info:
|
||||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) build/texinfo
|
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) build/texinfo
|
||||||
@echo "Running Texinfo files through makeinfo..."
|
@echo "Running Texinfo files through makeinfo..."
|
||||||
make -C build/texinfo info
|
make -C build/texinfo info
|
||||||
@echo "makeinfo finished; the Info files are in build/texinfo."
|
@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
|
This file contains a walkthrough of the NumPy 1.14.5 release on Linux, modified
|
||||||
for building on azure and uploading to anaconda.org
|
for building on azure and uploading to anaconda.org
|
||||||
The commands can be copied into the command line, but be sure to
|
The commands can be copied into the command line, but be sure to
|
||||||
replace 1.14.5 by the correct version.
|
replace 1.14.5 by the correct version.
|
||||||
|
|
||||||
This should be read together with the general directions in `releasing`.
|
This should be read together with the general directions in `releasing`.
|
||||||
|
|
||||||
|
|
||||||
Release Walkthrough
|
Release Walkthrough
|
||||||
====================
|
====================
|
||||||
|
|
||||||
Note that in the code snippets below, ``upstream`` refers to the root repository on
|
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
|
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
|
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.
|
also edit ``.git/config`` and add ``upstream`` if it isn't already present.
|
||||||
|
|
||||||
|
|
||||||
Backport Pull Requests
|
Backport Pull Requests
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
Changes that have been marked for this release must be backported to the
|
Changes that have been marked for this release must be backported to the
|
||||||
maintenance/1.14.x branch.
|
maintenance/1.14.x branch.
|
||||||
|
|
||||||
|
|
||||||
Update Release documentation
|
Update Release documentation
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
The file ``doc/changelog/1.14.5-changelog.rst`` should be updated to reflect
|
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::
|
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
|
$ 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
|
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
|
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
|
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
|
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
|
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.
|
to the maintenance branch, and later will be forward ported to master.
|
||||||
|
|
||||||
|
|
||||||
Finish the Release Note
|
Finish the Release Note
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
.. note:
|
.. note:
|
||||||
|
|
||||||
This has changed now that we use ``towncrier``. See the instructions for
|
This has changed now that we use ``towncrier``. See the instructions for
|
||||||
creating the release note in ``doc/release/upcoming_changes/README.rst``.
|
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
|
Fill out the release note ``doc/release/1.14.5-notes.rst`` calling out
|
||||||
significant changes.
|
significant changes.
|
||||||
|
|
||||||
|
|
||||||
Prepare the release commit
|
Prepare the release commit
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
Checkout the branch for the release, make sure it is up to date, and clean the
|
Checkout the branch for the release, make sure it is up to date, and clean the
|
||||||
repository::
|
repository::
|
||||||
|
|
||||||
$ git checkout maintenance/1.14.x
|
$ git checkout maintenance/1.14.x
|
||||||
$ git pull upstream maintenance/1.14.x
|
$ git pull upstream maintenance/1.14.x
|
||||||
$ git submodule update
|
$ git submodule update
|
||||||
$ git clean -xdfq
|
$ git clean -xdfq
|
||||||
|
|
||||||
Edit pavement.py and setup.py as detailed in HOWTO_RELEASE::
|
Edit pavement.py and setup.py as detailed in HOWTO_RELEASE::
|
||||||
|
|
||||||
$ gvim pavement.py setup.py
|
$ gvim pavement.py setup.py
|
||||||
$ git commit -a -m"REL: NumPy 1.14.5 release."
|
$ git commit -a -m"REL: NumPy 1.14.5 release."
|
||||||
|
|
||||||
Sanity check::
|
Sanity check::
|
||||||
|
|
||||||
$ python3 runtests.py -m "full"
|
$ python3 runtests.py -m "full"
|
||||||
|
|
||||||
Push this release directly onto the end of the maintenance branch. This
|
Push this release directly onto the end of the maintenance branch. This
|
||||||
requires write permission to the numpy repository::
|
requires write permission to the numpy repository::
|
||||||
|
|
||||||
$ git push upstream maintenance/1.14.x
|
$ git push upstream maintenance/1.14.x
|
||||||
|
|
||||||
As an example, see the 1.14.3 REL commit: `<https://github.com/numpy/numpy/commit/73299826729be58cec179b52c656adfcaefada93>`_.
|
As an example, see the 1.14.3 REL commit: `<https://github.com/numpy/numpy/commit/73299826729be58cec179b52c656adfcaefada93>`_.
|
||||||
|
|
||||||
|
|
||||||
Build source releases
|
Build source releases
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
Paver is used to build the source releases. It will create the ``release`` and
|
Paver is used to build the source releases. It will create the ``release`` and
|
||||||
``release/installers`` directories and put the ``*.zip`` and ``*.tar.gz``
|
``release/installers`` directories and put the ``*.zip`` and ``*.tar.gz``
|
||||||
source releases in the latter. ::
|
source releases in the latter. ::
|
||||||
|
|
||||||
$ python3 -m cython --version # check for correct cython version
|
$ python3 -m cython --version # check for correct cython version
|
||||||
$ paver sdist # sdist will do a git clean -xdf, so we omit that
|
$ paver sdist # sdist will do a git clean -xdf, so we omit that
|
||||||
|
|
||||||
|
|
||||||
Build wheels
|
Build wheels
|
||||||
------------
|
------------
|
||||||
|
|
||||||
Trigger the wheels build by pointing the numpy-wheels repository at this
|
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
|
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
|
`<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::
|
may have been accessed and changed by someone else and a push will fail::
|
||||||
|
|
||||||
$ cd ../numpy-wheels
|
$ cd ../numpy-wheels
|
||||||
$ git pull upstream master
|
$ git pull upstream master
|
||||||
$ git branch <new version> # only when starting new numpy version
|
$ 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
|
$ 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
|
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
|
have the correct version, and put in the commit hash for the ``REL`` commit
|
||||||
created above for ``BUILD_COMMIT``, see an _example::
|
created above for ``BUILD_COMMIT``, see an _example::
|
||||||
|
|
||||||
$ gvim azure/posix.yml azure/windows.yml
|
$ gvim azure/posix.yml azure/windows.yml
|
||||||
$ git commit -a
|
$ git commit -a
|
||||||
$ git push upstream HEAD
|
$ git push upstream HEAD
|
||||||
|
|
||||||
Now wait. If you get nervous at the amount of time taken -- the builds can take
|
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
|
a while -- you can check the build progress by following the links
|
||||||
provided at `<https://github.com/MacPython/numpy-wheels>`_ to check the
|
provided at `<https://github.com/MacPython/numpy-wheels>`_ to check the
|
||||||
build status. Check if all the needed wheels have been built and
|
build status. Check if all the needed wheels have been built and
|
||||||
uploaded before proceeding. There should currently be 21 of them at
|
uploaded before proceeding. There should currently be 21 of them at
|
||||||
`<https://anaconda.org/multibuild-wheels-staging/numpy/files>`_, 3 for Mac, 6
|
`<https://anaconda.org/multibuild-wheels-staging/numpy/files>`_, 3 for Mac, 6
|
||||||
for Windows, and 12 for Linux.
|
for Windows, and 12 for Linux.
|
||||||
|
|
||||||
.. example_: https://github.com/MacPython/numpy-wheels/pull/80/commits/cbf4af4
|
.. example_: https://github.com/MacPython/numpy-wheels/pull/80/commits/cbf4af4
|
||||||
|
|
||||||
Note that sometimes builds, like tests, fail for unrelated reasons and
|
Note that sometimes builds, like tests, fail for unrelated reasons and
|
||||||
you will need to restart them.
|
you will need to restart them.
|
||||||
|
|
||||||
Download wheels
|
Download wheels
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
When the wheels have all been successfully built, download them using the ``wheel-uploader``
|
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
|
in the ``terryfy`` repository. The terryfy repository may be cloned from
|
||||||
`<https://github.com/MacPython/terryfy>`_ if you don't already have it. The
|
`<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
|
wheels can also be uploaded using the ``wheel-uploader``, but we prefer to
|
||||||
download all the wheels to the ``../numpy/release/installers`` directory and
|
download all the wheels to the ``../numpy/release/installers`` directory and
|
||||||
upload later using ``twine``::
|
upload later using ``twine``::
|
||||||
|
|
||||||
$ cd ../terryfy
|
$ cd ../terryfy
|
||||||
$ git pull upstream master
|
$ git pull upstream master
|
||||||
$ CDN_URL=https://anaconda.org/multibuild-wheels-staging/numpy/files
|
$ CDN_URL=https://anaconda.org/multibuild-wheels-staging/numpy/files
|
||||||
$ NPY_WHLS=../numpy/release/installers
|
$ 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 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 manylinux1 numpy 1.14.5
|
||||||
$ ./wheel-uploader -u $CDN_URL -n -v -w $NPY_WHLS -t macosx 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
|
If you do this often, consider making CDN_URL and NPY_WHLS part of your default
|
||||||
environment.
|
environment.
|
||||||
|
|
||||||
Generate the README files
|
Generate the README files
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
This needs to be done after all installers are downloaded, but before the pavement
|
This needs to be done after all installers are downloaded, but before the pavement
|
||||||
file is updated for continued development::
|
file is updated for continued development::
|
||||||
|
|
||||||
$ cd ../numpy
|
$ cd ../numpy
|
||||||
$ paver write_release
|
$ paver write_release
|
||||||
|
|
||||||
|
|
||||||
Tag the release
|
Tag the release
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
Once the wheels have been built and downloaded without errors, go back to your
|
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
|
numpy repository in the maintenance branch and tag the ``REL`` commit, signing
|
||||||
it with your gpg key::
|
it with your gpg key::
|
||||||
|
|
||||||
$ git tag -s v1.14.5
|
$ git tag -s v1.14.5
|
||||||
|
|
||||||
You should upload your public gpg key to github, so that the tag will appear
|
You should upload your public gpg key to github, so that the tag will appear
|
||||||
"verified" there.
|
"verified" there.
|
||||||
|
|
||||||
Check that the files in ``release/installers`` have the correct versions, then
|
Check that the files in ``release/installers`` have the correct versions, then
|
||||||
push the tag upstream::
|
push the tag upstream::
|
||||||
|
|
||||||
$ git push upstream v1.14.5
|
$ git push upstream v1.14.5
|
||||||
|
|
||||||
We wait until this point to push the tag because it is public and should not
|
We wait until this point to push the tag because it is public and should not
|
||||||
be changed after it has been pushed.
|
be changed after it has been pushed.
|
||||||
|
|
||||||
|
|
||||||
Reset the maintenance branch into a development state
|
Reset the maintenance branch into a development state
|
||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
|
|
||||||
Add another ``REL`` commit to the numpy maintenance branch, which resets the
|
Add another ``REL`` commit to the numpy maintenance branch, which resets the
|
||||||
``ISREALEASED`` flag to ``False`` and increments the version counter::
|
``ISREALEASED`` flag to ``False`` and increments the version counter::
|
||||||
|
|
||||||
$ gvim pavement.py setup.py
|
$ gvim pavement.py setup.py
|
||||||
|
|
||||||
Create release notes for next release and edit them to set the version::
|
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
|
$ cp doc/source/release/template.rst doc/source/release/1.14.6-notes.rst
|
||||||
$ gvim 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
|
$ git add doc/source/release/1.14.6-notes.rst
|
||||||
|
|
||||||
Add new release notes to the documentation release list::
|
Add new release notes to the documentation release list::
|
||||||
|
|
||||||
$ gvim doc/source/release.rst
|
$ gvim doc/source/release.rst
|
||||||
|
|
||||||
Commit the result::
|
Commit the result::
|
||||||
|
|
||||||
$ git commit -a -m"REL: prepare 1.14.x for further development"
|
$ git commit -a -m"REL: prepare 1.14.x for further development"
|
||||||
$ git push upstream maintenance/1.14.x
|
$ git push upstream maintenance/1.14.x
|
||||||
|
|
||||||
|
|
||||||
Upload to PyPI
|
Upload to PyPI
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
Upload to PyPI using ``twine``. A recent version of ``twine`` of is needed
|
Upload to PyPI using ``twine``. A recent version of ``twine`` of is needed
|
||||||
after recent PyPI changes, version ``1.11.0`` was used here.
|
after recent PyPI changes, version ``1.11.0`` was used here.
|
||||||
|
|
||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
$ cd ../numpy
|
$ cd ../numpy
|
||||||
$ twine upload release/installers/*.whl
|
$ twine upload release/installers/*.whl
|
||||||
$ twine upload release/installers/numpy-1.14.5.zip # Upload last.
|
$ 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
|
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
|
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
|
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
|
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
|
process. Note that PyPI only allows a single source distribution, here we have
|
||||||
chosen the zip archive.
|
chosen the zip archive.
|
||||||
|
|
||||||
|
|
||||||
Upload files to github
|
Upload files to github
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
Go to `<https://github.com/numpy/numpy/releases>`_, there should be a ``v1.14.5
|
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
|
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.
|
add files, using an editable text window and as binary uploads.
|
||||||
|
|
||||||
- Cut and paste the ``release/README.md`` file contents into the text window.
|
- 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.tar.gz`` as a binary file.
|
||||||
- Upload ``release/installers/numpy-1.14.5.zip`` 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 ``release/README.rst`` as a binary file.
|
||||||
- Upload ``doc/changelog/1.14.5-changelog.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.
|
- Check the pre-release button if this is a pre-releases.
|
||||||
- Hit the ``{Publish,Update} release`` button at the bottom.
|
- Hit the ``{Publish,Update} release`` button at the bottom.
|
||||||
|
|
||||||
|
|
||||||
Upload documents to numpy.org
|
Upload documents to numpy.org
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
This step is only needed for final releases and can be skipped for
|
This step is only needed for final releases and can be skipped for
|
||||||
pre-releases. ``make merge-doc`` clones the ``numpy/doc`` repo into
|
pre-releases. ``make merge-doc`` clones the ``numpy/doc`` repo into
|
||||||
``doc/build/merge`` and updates it with the new documentation::
|
``doc/build/merge`` and updates it with the new documentation::
|
||||||
|
|
||||||
$ pushd doc
|
$ pushd doc
|
||||||
$ make dist
|
$ make dist
|
||||||
$ make merge-doc
|
$ make merge-doc
|
||||||
$ popd
|
$ popd
|
||||||
|
|
||||||
If the release series is a new one, you will need to add a new section to the
|
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::
|
``doc/build/merge/index.html`` front page just after the "insert here" comment::
|
||||||
|
|
||||||
$ gvim doc/build/merge/index.html +/'insert here'
|
$ gvim doc/build/merge/index.html +/'insert here'
|
||||||
|
|
||||||
Otherwise, only the ``zip`` and ``pdf`` links should be updated with the
|
Otherwise, only the ``zip`` and ``pdf`` links should be updated with the
|
||||||
new tag name::
|
new tag name::
|
||||||
|
|
||||||
$ gvim doc/build/merge/index.html +/'tag v1.14'
|
$ gvim doc/build/merge/index.html +/'tag v1.14'
|
||||||
|
|
||||||
You can "test run" the new documentation in a browser to make sure the links
|
You can "test run" the new documentation in a browser to make sure the links
|
||||||
work::
|
work::
|
||||||
|
|
||||||
$ firefox doc/build/merge/index.html
|
$ firefox doc/build/merge/index.html
|
||||||
|
|
||||||
Once everything seems satisfactory, commit and upload the changes::
|
Once everything seems satisfactory, commit and upload the changes::
|
||||||
|
|
||||||
$ pushd doc/build/merge
|
$ pushd doc/build/merge
|
||||||
$ git commit -am"Add documentation for v1.14.5"
|
$ git commit -am"Add documentation for v1.14.5"
|
||||||
$ git push
|
$ git push
|
||||||
$ popd
|
$ popd
|
||||||
|
|
||||||
Announce the release on scipy.org
|
Announce the release on scipy.org
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
This assumes that you have forked `<https://github.com/scipy/scipy.org>`_::
|
This assumes that you have forked `<https://github.com/scipy/scipy.org>`_::
|
||||||
|
|
||||||
$ cd ../scipy.org
|
$ cd ../scipy.org
|
||||||
$ git checkout master
|
$ git checkout master
|
||||||
$ git pull upstream master
|
$ git pull upstream master
|
||||||
$ git checkout -b numpy-1.14.5
|
$ git checkout -b numpy-1.14.5
|
||||||
$ gvim www/index.rst # edit the News section
|
$ gvim www/index.rst # edit the News section
|
||||||
$ git commit -a
|
$ git commit -a
|
||||||
$ git push origin HEAD
|
$ git push origin HEAD
|
||||||
|
|
||||||
Now go to your fork and make a pull request for the branch.
|
Now go to your fork and make a pull request for the branch.
|
||||||
|
|
||||||
|
|
||||||
Announce to mailing lists
|
Announce to mailing lists
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
The release should be announced on the numpy-discussion, scipy-devel,
|
The release should be announced on the numpy-discussion, scipy-devel,
|
||||||
scipy-user, and python-announce-list mailing lists. Look at previous
|
scipy-user, and python-announce-list mailing lists. Look at previous
|
||||||
announcements for the basic template. The contributor and PR lists are the same
|
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
|
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.
|
python-announce-list is BCC so that replies will not be sent to that list.
|
||||||
|
|
||||||
|
|
||||||
Post-Release Tasks
|
Post-Release Tasks
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
Checkout master and forward port the documentation changes::
|
Checkout master and forward port the documentation changes::
|
||||||
|
|
||||||
$ git checkout -b update-after-1.14.5-release
|
$ 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/source/release/1.14.5-notes.rst
|
||||||
$ git checkout maintenance/1.14.x doc/changelog/1.14.5-changelog.rst
|
$ git checkout maintenance/1.14.x doc/changelog/1.14.5-changelog.rst
|
||||||
$ gvim doc/source/release.rst # Add link to new notes
|
$ 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 add doc/changelog/1.14.5-changelog.rst doc/source/release/1.14.5-notes.rst
|
||||||
$ git status # check status before commit
|
$ git status # check status before commit
|
||||||
$ git commit -a -m"REL: Update master after 1.14.5 release."
|
$ git commit -a -m"REL: Update master after 1.14.5 release."
|
||||||
$ git push origin HEAD
|
$ git push origin HEAD
|
||||||
|
|
||||||
Go to github and make a PR.
|
Go to github and make a PR.
|
||||||
|
|
|
@ -1,397 +1,397 @@
|
||||||
NumPy/SciPy Testing Guidelines
|
NumPy/SciPy Testing Guidelines
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
.. contents::
|
.. contents::
|
||||||
|
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
''''''''''''
|
''''''''''''
|
||||||
|
|
||||||
Until the 1.15 release, NumPy used the `nose`_ testing framework, it now uses
|
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
|
the `pytest`_ framework. The older framework is still maintained in order to
|
||||||
support downstream projects that use the old numpy framework, but all tests
|
support downstream projects that use the old numpy framework, but all tests
|
||||||
for NumPy should use pytest.
|
for NumPy should use pytest.
|
||||||
|
|
||||||
Our goal is that every module and package in NumPy
|
Our goal is that every module and package in NumPy
|
||||||
should have a thorough set of unit
|
should have a thorough set of unit
|
||||||
tests. These tests should exercise the full functionality of a given
|
tests. These tests should exercise the full functionality of a given
|
||||||
routine as well as its robustness to erroneous or unexpected input
|
routine as well as its robustness to erroneous or unexpected input
|
||||||
arguments. Long experience has shown that by far the best time to
|
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
|
write the tests is before you write or change the code - this is
|
||||||
`test-driven development
|
`test-driven development
|
||||||
<https://en.wikipedia.org/wiki/Test-driven_development>`__. The
|
<https://en.wikipedia.org/wiki/Test-driven_development>`__. The
|
||||||
arguments for this can sound rather abstract, but we can assure you
|
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
|
that you will find that writing the tests first leads to more robust
|
||||||
and better designed code. Well-designed tests with good coverage make
|
and better designed code. Well-designed tests with good coverage make
|
||||||
an enormous difference to the ease of refactoring. Whenever a new bug
|
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
|
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
|
case and add it to the test suite to prevent that bug from creeping
|
||||||
back in unnoticed.
|
back in unnoticed.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
SciPy uses the testing framework from :mod:`numpy.testing`,
|
SciPy uses the testing framework from :mod:`numpy.testing`,
|
||||||
so all of the NumPy examples shown below are also applicable to SciPy
|
so all of the NumPy examples shown below are also applicable to SciPy
|
||||||
|
|
||||||
Testing NumPy
|
Testing NumPy
|
||||||
'''''''''''''
|
'''''''''''''
|
||||||
|
|
||||||
NumPy can be tested in a number of ways, choose any way you feel comfortable.
|
NumPy can be tested in a number of ways, choose any way you feel comfortable.
|
||||||
|
|
||||||
Running tests from inside Python
|
Running tests from inside Python
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
You can test an installed NumPy by `numpy.test`, for example,
|
You can test an installed NumPy by `numpy.test`, for example,
|
||||||
To run NumPy's full test suite, use the following::
|
To run NumPy's full test suite, use the following::
|
||||||
|
|
||||||
>>> import numpy
|
>>> import numpy
|
||||||
>>> numpy.test(label='slow')
|
>>> numpy.test(label='slow')
|
||||||
|
|
||||||
The test method may take two or more arguments; the first ``label`` is a
|
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
|
string specifying what should be tested and the second ``verbose`` is an
|
||||||
integer giving the level of output verbosity. See the docstring
|
integer giving the level of output verbosity. See the docstring
|
||||||
`numpy.test`
|
`numpy.test`
|
||||||
for details. The default value for ``label`` is 'fast' - which
|
for details. The default value for ``label`` is 'fast' - which
|
||||||
will run the standard tests. The string 'full' will run the full battery
|
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``
|
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
|
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
|
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
|
warnings on missing tests. So if you want to run every test and get
|
||||||
messages about which modules don't have tests::
|
messages about which modules don't have tests::
|
||||||
|
|
||||||
>>> numpy.test(label='full', verbose=2) # or numpy.test('full', 2)
|
>>> numpy.test(label='full', verbose=2) # or numpy.test('full', 2)
|
||||||
|
|
||||||
Finally, if you are only interested in testing a subset of NumPy, for
|
Finally, if you are only interested in testing a subset of NumPy, for
|
||||||
example, the ``core`` module, use the following::
|
example, the ``core`` module, use the following::
|
||||||
|
|
||||||
>>> numpy.core.test()
|
>>> numpy.core.test()
|
||||||
|
|
||||||
Running tests from the command line
|
Running tests from the command line
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
If you want to build NumPy in order to work on NumPy itself, use
|
If you want to build NumPy in order to work on NumPy itself, use
|
||||||
``runtests.py``.To run NumPy's full test suite::
|
``runtests.py``.To run NumPy's full test suite::
|
||||||
|
|
||||||
$ python runtests.py
|
$ python runtests.py
|
||||||
|
|
||||||
Testing a subset of NumPy::
|
Testing a subset of NumPy::
|
||||||
|
|
||||||
$python runtests.py -t numpy/core/tests
|
$python runtests.py -t numpy/core/tests
|
||||||
|
|
||||||
For detailed info on testing, see :ref:`testing-builds`
|
For detailed info on testing, see :ref:`testing-builds`
|
||||||
|
|
||||||
Other methods of running tests
|
Other methods of running tests
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
Run tests using your favourite IDE such as `vscode`_ or `pycharm`_
|
Run tests using your favourite IDE such as `vscode`_ or `pycharm`_
|
||||||
|
|
||||||
Writing your own tests
|
Writing your own tests
|
||||||
''''''''''''''''''''''
|
''''''''''''''''''''''
|
||||||
|
|
||||||
If you are writing a package that you'd like to become part of NumPy,
|
If you are writing a package that you'd like to become part of NumPy,
|
||||||
please write the tests as you develop the package.
|
please write the tests as you develop the package.
|
||||||
Every Python module, extension module, or subpackage in the NumPy
|
Every Python module, extension module, or subpackage in the NumPy
|
||||||
package directory should have a corresponding ``test_<name>.py`` file.
|
package directory should have a corresponding ``test_<name>.py`` file.
|
||||||
Pytest examines these files for test methods (named ``test*``) and test
|
Pytest examines these files for test methods (named ``test*``) and test
|
||||||
classes (named ``Test*``).
|
classes (named ``Test*``).
|
||||||
|
|
||||||
Suppose you have a NumPy module ``numpy/xxx/yyy.py`` containing a
|
Suppose you have a NumPy module ``numpy/xxx/yyy.py`` containing a
|
||||||
function ``zzz()``. To test this function you would create a test
|
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
|
module called ``test_yyy.py``. If you only need to test one aspect of
|
||||||
``zzz``, you can simply add a test function::
|
``zzz``, you can simply add a test function::
|
||||||
|
|
||||||
def test_zzz():
|
def test_zzz():
|
||||||
assert_(zzz() == 'Hello from zzz')
|
assert_(zzz() == 'Hello from zzz')
|
||||||
|
|
||||||
More often, we need to group a number of tests together, so we create
|
More often, we need to group a number of tests together, so we create
|
||||||
a test class::
|
a test class::
|
||||||
|
|
||||||
from numpy.testing import assert_, assert_raises
|
from numpy.testing import assert_, assert_raises
|
||||||
|
|
||||||
# import xxx symbols
|
# import xxx symbols
|
||||||
from numpy.xxx.yyy import zzz
|
from numpy.xxx.yyy import zzz
|
||||||
|
|
||||||
class TestZzz:
|
class TestZzz:
|
||||||
def test_simple(self):
|
def test_simple(self):
|
||||||
assert_(zzz() == 'Hello from zzz')
|
assert_(zzz() == 'Hello from zzz')
|
||||||
|
|
||||||
def test_invalid_parameter(self):
|
def test_invalid_parameter(self):
|
||||||
assert_raises(...)
|
assert_raises(...)
|
||||||
|
|
||||||
Within these test methods, ``assert_()`` and related functions are used to test
|
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.
|
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
|
Note that the Python builtin ``assert`` should not be used, because it is
|
||||||
stripped during compilation with ``-O``.
|
stripped during compilation with ``-O``.
|
||||||
|
|
||||||
Note that ``test_`` functions or methods should not have a docstring, because
|
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
|
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
|
suite with ``verbose=2`` (or similar verbosity setting). Use plain comments
|
||||||
(``#``) if necessary.
|
(``#``) if necessary.
|
||||||
|
|
||||||
Also since much of NumPy is legacy code that was
|
Also since much of NumPy is legacy code that was
|
||||||
originally written without unit tests, there are still several modules
|
originally written without unit tests, there are still several modules
|
||||||
that don't have tests yet. Please feel free to choose one of these
|
that don't have tests yet. Please feel free to choose one of these
|
||||||
modules and develop tests for it.
|
modules and develop tests for it.
|
||||||
|
|
||||||
Labeling tests
|
Labeling tests
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
As an alternative to ``pytest.mark.<label>``, there are a number of labels you
|
As an alternative to ``pytest.mark.<label>``, there are a number of labels you
|
||||||
can use.
|
can use.
|
||||||
|
|
||||||
Unlabeled tests like the ones above are run in the default
|
Unlabeled tests like the ones above are run in the default
|
||||||
``numpy.test()`` run. If you want to label your test as slow - and
|
``numpy.test()`` run. If you want to label your test as slow - and
|
||||||
therefore reserved for a full ``numpy.test(label='full')`` run, you
|
therefore reserved for a full ``numpy.test(label='full')`` run, you
|
||||||
can label it with a decorator::
|
can label it with a decorator::
|
||||||
|
|
||||||
# numpy.testing module includes 'import decorators as dec'
|
# numpy.testing module includes 'import decorators as dec'
|
||||||
from numpy.testing import dec, assert_
|
from numpy.testing import dec, assert_
|
||||||
|
|
||||||
@dec.slow
|
@dec.slow
|
||||||
def test_big(self):
|
def test_big(self):
|
||||||
print 'Big, slow test'
|
print 'Big, slow test'
|
||||||
|
|
||||||
Similarly for methods::
|
Similarly for methods::
|
||||||
|
|
||||||
class test_zzz:
|
class test_zzz:
|
||||||
@dec.slow
|
@dec.slow
|
||||||
def test_simple(self):
|
def test_simple(self):
|
||||||
assert_(zzz() == 'Hello from zzz')
|
assert_(zzz() == 'Hello from zzz')
|
||||||
|
|
||||||
Available labels are:
|
Available labels are:
|
||||||
|
|
||||||
- ``slow``: marks a test as taking a long time
|
- ``slow``: marks a test as taking a long time
|
||||||
- ``setastest(tf)``: work-around for test discovery when the test name is
|
- ``setastest(tf)``: work-around for test discovery when the test name is
|
||||||
non conformant
|
non conformant
|
||||||
- ``skipif(condition, msg=None)``: skips the test when ``eval(condition)`` is
|
- ``skipif(condition, msg=None)``: skips the test when ``eval(condition)`` is
|
||||||
``True``
|
``True``
|
||||||
- ``knownfailureif(fail_cond, msg=None)``: will avoid running the test if
|
- ``knownfailureif(fail_cond, msg=None)``: will avoid running the test if
|
||||||
``eval(fail_cond)`` is ``True``, useful for tests that conditionally segfault
|
``eval(fail_cond)`` is ``True``, useful for tests that conditionally segfault
|
||||||
- ``deprecated(conditional=True)``: filters deprecation warnings emitted in the
|
- ``deprecated(conditional=True)``: filters deprecation warnings emitted in the
|
||||||
test
|
test
|
||||||
- ``paramaterize(var, input)``: an alternative to
|
- ``paramaterize(var, input)``: an alternative to
|
||||||
`pytest.mark.paramaterized
|
`pytest.mark.paramaterized
|
||||||
<https://docs.pytest.org/en/latest/parametrize.html>`_
|
<https://docs.pytest.org/en/latest/parametrize.html>`_
|
||||||
|
|
||||||
Easier setup and teardown functions / methods
|
Easier setup and teardown functions / methods
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
|
|
||||||
Testing looks for module-level or class-level setup and teardown functions by
|
Testing looks for module-level or class-level setup and teardown functions by
|
||||||
name; thus::
|
name; thus::
|
||||||
|
|
||||||
def setup():
|
def setup():
|
||||||
"""Module-level setup"""
|
"""Module-level setup"""
|
||||||
print 'doing setup'
|
print 'doing setup'
|
||||||
|
|
||||||
def teardown():
|
def teardown():
|
||||||
"""Module-level teardown"""
|
"""Module-level teardown"""
|
||||||
print 'doing teardown'
|
print 'doing teardown'
|
||||||
|
|
||||||
|
|
||||||
class TestMe:
|
class TestMe:
|
||||||
def setup():
|
def setup():
|
||||||
"""Class-level setup"""
|
"""Class-level setup"""
|
||||||
print 'doing setup'
|
print 'doing setup'
|
||||||
|
|
||||||
def teardown():
|
def teardown():
|
||||||
"""Class-level teardown"""
|
"""Class-level teardown"""
|
||||||
print 'doing teardown'
|
print 'doing teardown'
|
||||||
|
|
||||||
|
|
||||||
Setup and teardown functions to functions and methods are known as "fixtures",
|
Setup and teardown functions to functions and methods are known as "fixtures",
|
||||||
and their use is not encouraged.
|
and their use is not encouraged.
|
||||||
|
|
||||||
Parametric tests
|
Parametric tests
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
One very nice feature of testing is allowing easy testing across a range
|
One very nice feature of testing is allowing easy testing across a range
|
||||||
of parameters - a nasty problem for standard unit tests. Use the
|
of parameters - a nasty problem for standard unit tests. Use the
|
||||||
``dec.paramaterize`` decorator.
|
``dec.paramaterize`` decorator.
|
||||||
|
|
||||||
Doctests
|
Doctests
|
||||||
--------
|
--------
|
||||||
|
|
||||||
Doctests are a convenient way of documenting the behavior of a function
|
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
|
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
|
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
|
function, and the test framework can run the example and compare the
|
||||||
actual output to the expected output.
|
actual output to the expected output.
|
||||||
|
|
||||||
The doctests can be run by adding the ``doctests`` argument to the
|
The doctests can be run by adding the ``doctests`` argument to the
|
||||||
``test()`` call; for example, to run all tests (including doctests)
|
``test()`` call; for example, to run all tests (including doctests)
|
||||||
for numpy.lib::
|
for numpy.lib::
|
||||||
|
|
||||||
>>> import numpy as np
|
>>> import numpy as np
|
||||||
>>> np.lib.test(doctests=True)
|
>>> np.lib.test(doctests=True)
|
||||||
|
|
||||||
The doctests are run as if they are in a fresh Python instance which
|
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
|
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
|
subpackage will have that subpackage already imported. E.g. for a test
|
||||||
in ``numpy/linalg/tests/``, the namespace will be created such that
|
in ``numpy/linalg/tests/``, the namespace will be created such that
|
||||||
``from numpy import linalg`` has already executed.
|
``from numpy import linalg`` has already executed.
|
||||||
|
|
||||||
|
|
||||||
``tests/``
|
``tests/``
|
||||||
----------
|
----------
|
||||||
|
|
||||||
Rather than keeping the code and the tests in the same directory, we
|
Rather than keeping the code and the tests in the same directory, we
|
||||||
put all the tests for a given subpackage in a ``tests/``
|
put all the tests for a given subpackage in a ``tests/``
|
||||||
subdirectory. For our example, if it doesn't already exist you will
|
subdirectory. For our example, if it doesn't already exist you will
|
||||||
need to create a ``tests/`` directory in ``numpy/xxx/``. So the path
|
need to create a ``tests/`` directory in ``numpy/xxx/``. So the path
|
||||||
for ``test_yyy.py`` is ``numpy/xxx/tests/test_yyy.py``.
|
for ``test_yyy.py`` is ``numpy/xxx/tests/test_yyy.py``.
|
||||||
|
|
||||||
Once the ``numpy/xxx/tests/test_yyy.py`` is written, its possible to
|
Once the ``numpy/xxx/tests/test_yyy.py`` is written, its possible to
|
||||||
run the tests by going to the ``tests/`` directory and typing::
|
run the tests by going to the ``tests/`` directory and typing::
|
||||||
|
|
||||||
python test_yyy.py
|
python test_yyy.py
|
||||||
|
|
||||||
Or if you add ``numpy/xxx/tests/`` to the Python path, you could run
|
Or if you add ``numpy/xxx/tests/`` to the Python path, you could run
|
||||||
the tests interactively in the interpreter like this::
|
the tests interactively in the interpreter like this::
|
||||||
|
|
||||||
>>> import test_yyy
|
>>> import test_yyy
|
||||||
>>> test_yyy.test()
|
>>> test_yyy.test()
|
||||||
|
|
||||||
``__init__.py`` and ``setup.py``
|
``__init__.py`` and ``setup.py``
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
Usually, however, adding the ``tests/`` directory to the python path
|
Usually, however, adding the ``tests/`` directory to the python path
|
||||||
isn't desirable. Instead it would better to invoke the test straight
|
isn't desirable. Instead it would better to invoke the test straight
|
||||||
from the module ``xxx``. To this end, simply place the following lines
|
from the module ``xxx``. To this end, simply place the following lines
|
||||||
at the end of your package's ``__init__.py`` file::
|
at the end of your package's ``__init__.py`` file::
|
||||||
|
|
||||||
...
|
...
|
||||||
def test(level=1, verbosity=1):
|
def test(level=1, verbosity=1):
|
||||||
from numpy.testing import Tester
|
from numpy.testing import Tester
|
||||||
return Tester().test(level, verbosity)
|
return Tester().test(level, verbosity)
|
||||||
|
|
||||||
You will also need to add the tests directory in the configuration
|
You will also need to add the tests directory in the configuration
|
||||||
section of your setup.py::
|
section of your setup.py::
|
||||||
|
|
||||||
...
|
...
|
||||||
def configuration(parent_package='', top_path=None):
|
def configuration(parent_package='', top_path=None):
|
||||||
...
|
...
|
||||||
config.add_subpackage('tests')
|
config.add_subpackage('tests')
|
||||||
return config
|
return config
|
||||||
...
|
...
|
||||||
|
|
||||||
Now you can do the following to test your module::
|
Now you can do the following to test your module::
|
||||||
|
|
||||||
>>> import numpy
|
>>> import numpy
|
||||||
>>> numpy.xxx.test()
|
>>> numpy.xxx.test()
|
||||||
|
|
||||||
Also, when invoking the entire NumPy test suite, your tests will be
|
Also, when invoking the entire NumPy test suite, your tests will be
|
||||||
found and run::
|
found and run::
|
||||||
|
|
||||||
>>> import numpy
|
>>> import numpy
|
||||||
>>> numpy.test()
|
>>> numpy.test()
|
||||||
# your tests are included and run automatically!
|
# your tests are included and run automatically!
|
||||||
|
|
||||||
Tips & Tricks
|
Tips & Tricks
|
||||||
'''''''''''''
|
'''''''''''''
|
||||||
|
|
||||||
Creating many similar tests
|
Creating many similar tests
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
If you have a collection of tests that must be run multiple times with
|
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
|
minor variations, it can be helpful to create a base class containing
|
||||||
all the common tests, and then create a subclass for each variation.
|
all the common tests, and then create a subclass for each variation.
|
||||||
Several examples of this technique exist in NumPy; below are excerpts
|
Several examples of this technique exist in NumPy; below are excerpts
|
||||||
from one in `numpy/linalg/tests/test_linalg.py
|
from one in `numpy/linalg/tests/test_linalg.py
|
||||||
<https://github.com/numpy/numpy/blob/master/numpy/linalg/tests/test_linalg.py>`__::
|
<https://github.com/numpy/numpy/blob/master/numpy/linalg/tests/test_linalg.py>`__::
|
||||||
|
|
||||||
class LinalgTestCase:
|
class LinalgTestCase:
|
||||||
def test_single(self):
|
def test_single(self):
|
||||||
a = array([[1.,2.], [3.,4.]], dtype=single)
|
a = array([[1.,2.], [3.,4.]], dtype=single)
|
||||||
b = array([2., 1.], dtype=single)
|
b = array([2., 1.], dtype=single)
|
||||||
self.do(a, b)
|
self.do(a, b)
|
||||||
|
|
||||||
def test_double(self):
|
def test_double(self):
|
||||||
a = array([[1.,2.], [3.,4.]], dtype=double)
|
a = array([[1.,2.], [3.,4.]], dtype=double)
|
||||||
b = array([2., 1.], dtype=double)
|
b = array([2., 1.], dtype=double)
|
||||||
self.do(a, b)
|
self.do(a, b)
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
||||||
class TestSolve(LinalgTestCase):
|
class TestSolve(LinalgTestCase):
|
||||||
def do(self, a, b):
|
def do(self, a, b):
|
||||||
x = linalg.solve(a, b)
|
x = linalg.solve(a, b)
|
||||||
assert_almost_equal(b, dot(a, x))
|
assert_almost_equal(b, dot(a, x))
|
||||||
assert_(imply(isinstance(b, matrix), isinstance(x, matrix)))
|
assert_(imply(isinstance(b, matrix), isinstance(x, matrix)))
|
||||||
|
|
||||||
class TestInv(LinalgTestCase):
|
class TestInv(LinalgTestCase):
|
||||||
def do(self, a, b):
|
def do(self, a, b):
|
||||||
a_inv = linalg.inv(a)
|
a_inv = linalg.inv(a)
|
||||||
assert_almost_equal(dot(a, a_inv), identity(asarray(a).shape[0]))
|
assert_almost_equal(dot(a, a_inv), identity(asarray(a).shape[0]))
|
||||||
assert_(imply(isinstance(a, matrix), isinstance(a_inv, matrix)))
|
assert_(imply(isinstance(a, matrix), isinstance(a_inv, matrix)))
|
||||||
|
|
||||||
In this case, we wanted to test solving a linear algebra problem using
|
In this case, we wanted to test solving a linear algebra problem using
|
||||||
matrices of several data types, using ``linalg.solve`` and
|
matrices of several data types, using ``linalg.solve`` and
|
||||||
``linalg.inv``. The common test cases (for single-precision,
|
``linalg.inv``. The common test cases (for single-precision,
|
||||||
double-precision, etc. matrices) are collected in ``LinalgTestCase``.
|
double-precision, etc. matrices) are collected in ``LinalgTestCase``.
|
||||||
|
|
||||||
Known failures & skipping tests
|
Known failures & skipping tests
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
Sometimes you might want to skip a test or mark it as a known failure,
|
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
|
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.
|
meant to test, or if a test only fails on a particular architecture.
|
||||||
|
|
||||||
To skip a test, simply use ``skipif``::
|
To skip a test, simply use ``skipif``::
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
@pytest.mark.skipif(SkipMyTest, reason="Skipping this test because...")
|
@pytest.mark.skipif(SkipMyTest, reason="Skipping this test because...")
|
||||||
def test_something(foo):
|
def test_something(foo):
|
||||||
...
|
...
|
||||||
|
|
||||||
The test is marked as skipped if ``SkipMyTest`` evaluates to nonzero,
|
The test is marked as skipped if ``SkipMyTest`` evaluates to nonzero,
|
||||||
and the message in verbose test output is the second argument given to
|
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
|
``skipif``. Similarly, a test can be marked as a known failure by
|
||||||
using ``xfail``::
|
using ``xfail``::
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
@pytest.mark.xfail(MyTestFails, reason="This test is known to fail because...")
|
@pytest.mark.xfail(MyTestFails, reason="This test is known to fail because...")
|
||||||
def test_something_else(foo):
|
def test_something_else(foo):
|
||||||
...
|
...
|
||||||
|
|
||||||
Of course, a test can be unconditionally skipped or marked as a known
|
Of course, a test can be unconditionally skipped or marked as a known
|
||||||
failure by using ``skip`` or ``xfail`` without argument, respectively.
|
failure by using ``skip`` or ``xfail`` without argument, respectively.
|
||||||
|
|
||||||
A total of the number of skipped and known failing tests is displayed
|
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
|
at the end of the test run. Skipped tests are marked as ``'S'`` in
|
||||||
the test results (or ``'SKIPPED'`` for ``verbose > 1``), and known
|
the test results (or ``'SKIPPED'`` for ``verbose > 1``), and known
|
||||||
failing tests are marked as ``'x'`` (or ``'XFAIL'`` if ``verbose >
|
failing tests are marked as ``'x'`` (or ``'XFAIL'`` if ``verbose >
|
||||||
1``).
|
1``).
|
||||||
|
|
||||||
Tests on random data
|
Tests on random data
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
Tests on random data are good, but since test failures are meant to expose
|
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
|
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
|
occasionally with no code changes is not helpful. Make the random data
|
||||||
deterministic by setting the random number seed before generating it. Use
|
deterministic by setting the random number seed before generating it. Use
|
||||||
either Python's ``random.seed(some_number)`` or NumPy's
|
either Python's ``random.seed(some_number)`` or NumPy's
|
||||||
``numpy.random.seed(some_number)``, depending on the source of random numbers.
|
``numpy.random.seed(some_number)``, depending on the source of random numbers.
|
||||||
|
|
||||||
Alternatively, you can use `Hypothesis`_ to generate arbitrary data.
|
Alternatively, you can use `Hypothesis`_ to generate arbitrary data.
|
||||||
Hypothesis manages both Python's and Numpy's random seeds for you, and
|
Hypothesis manages both Python's and Numpy's random seeds for you, and
|
||||||
provides a very concise and powerful way to describe data (including
|
provides a very concise and powerful way to describe data (including
|
||||||
``hypothesis.extra.numpy``, e.g. for a set of mutually-broadcastable shapes).
|
``hypothesis.extra.numpy``, e.g. for a set of mutually-broadcastable shapes).
|
||||||
|
|
||||||
The advantages over random generation include tools to replay and share
|
The advantages over random generation include tools to replay and share
|
||||||
failures without requiring a fixed seed, reporting *minimal* examples for
|
failures without requiring a fixed seed, reporting *minimal* examples for
|
||||||
each failure, and better-than-naive-random techniques for triggering bugs.
|
each failure, and better-than-naive-random techniques for triggering bugs.
|
||||||
|
|
||||||
|
|
||||||
Documentation for ``numpy.test``
|
Documentation for ``numpy.test``
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
.. autofunction:: numpy.test
|
.. autofunction:: numpy.test
|
||||||
|
|
||||||
.. _nose: https://nose.readthedocs.io/en/latest/
|
.. _nose: https://nose.readthedocs.io/en/latest/
|
||||||
.. _pytest: https://pytest.readthedocs.io
|
.. _pytest: https://pytest.readthedocs.io
|
||||||
.. _parameterization: https://docs.pytest.org/en/latest/parametrize.html
|
.. _parameterization: https://docs.pytest.org/en/latest/parametrize.html
|
||||||
.. _Hypothesis: https://hypothesis.readthedocs.io/en/latest/
|
.. _Hypothesis: https://hypothesis.readthedocs.io/en/latest/
|
||||||
.. _vscode: https://code.visualstudio.com/docs/python/testing#_enable-a-test-framework
|
.. _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
|
.. _pycharm: https://www.jetbrains.com/help/pycharm/testing-your-first-python-application.html
|
||||||
|
|
|
@ -1,29 +1,29 @@
|
||||||
# Doxyfile for NumPy C API
|
# Doxyfile for NumPy C API
|
||||||
# See http://www.doxygen.nl/manual/config.html
|
# See http://www.doxygen.nl/manual/config.html
|
||||||
PROJECT_NAME = numpy
|
PROJECT_NAME = numpy
|
||||||
PROJECT_NUMBER = 2.0.0
|
PROJECT_NUMBER = 2.0.0
|
||||||
OUTPUT_DIRECTORY = build
|
OUTPUT_DIRECTORY = build
|
||||||
STRIP_FROM_PATH = ../../numpy/core
|
STRIP_FROM_PATH = ../../numpy/core
|
||||||
INHERIT_DOCS = YES
|
INHERIT_DOCS = YES
|
||||||
TAB_SIZE = 8
|
TAB_SIZE = 8
|
||||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||||
EXTRACT_ALL = YES
|
EXTRACT_ALL = YES
|
||||||
EXTRACT_PRIVATE = YES
|
EXTRACT_PRIVATE = YES
|
||||||
EXTRACT_STATIC = YES
|
EXTRACT_STATIC = YES
|
||||||
CASE_SENSE_NAMES = NO
|
CASE_SENSE_NAMES = NO
|
||||||
INPUT = ../../numpy/core/src \
|
INPUT = ../../numpy/core/src \
|
||||||
../../numpy/core/include
|
../../numpy/core/include
|
||||||
FILE_PATTERNS = *.h *.c *.src
|
FILE_PATTERNS = *.h *.c *.src
|
||||||
RECURSIVE = YES
|
RECURSIVE = YES
|
||||||
INPUT_FILTER = ./numpyfilter.py
|
INPUT_FILTER = ./numpyfilter.py
|
||||||
REFERENCED_BY_RELATION = YES
|
REFERENCED_BY_RELATION = YES
|
||||||
REFERENCES_RELATION = YES
|
REFERENCES_RELATION = YES
|
||||||
ALPHABETICAL_INDEX = NO
|
ALPHABETICAL_INDEX = NO
|
||||||
GENERATE_HTML = YES
|
GENERATE_HTML = YES
|
||||||
HTML_TIMESTAMP = YES
|
HTML_TIMESTAMP = YES
|
||||||
GENERATE_TREEVIEW = YES
|
GENERATE_TREEVIEW = YES
|
||||||
SEARCHENGINE = NO
|
SEARCHENGINE = NO
|
||||||
GENERATE_LATEX = NO
|
GENERATE_LATEX = NO
|
||||||
PAPER_TYPE = a4wide
|
PAPER_TYPE = a4wide
|
||||||
GENERATE_XML = NO
|
GENERATE_XML = NO
|
||||||
HAVE_DOT = NO
|
HAVE_DOT = NO
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
all: build
|
all: build
|
||||||
|
|
||||||
build:
|
build:
|
||||||
doxygen
|
doxygen
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf build
|
rm -rf build
|
||||||
|
|
||||||
.PHONY: all build clean
|
.PHONY: all build clean
|
||||||
|
|
||||||
|
|
|
@ -1,31 +1,31 @@
|
||||||
cdoc
|
cdoc
|
||||||
====
|
====
|
||||||
|
|
||||||
This is a simple Doxygen project for building NumPy C code documentation,
|
This is a simple Doxygen project for building NumPy C code documentation,
|
||||||
with docstrings extracted from the C sources themselves.
|
with docstrings extracted from the C sources themselves.
|
||||||
|
|
||||||
The understood syntax for documentation in the C source is
|
The understood syntax for documentation in the C source is
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some text in reStructuredText format
|
* Some text in reStructuredText format
|
||||||
*/
|
*/
|
||||||
int function_to_which_the_text_applies()
|
int function_to_which_the_text_applies()
|
||||||
{
|
{
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* More text in reStructuredText format
|
* More text in reStructuredText format
|
||||||
*/
|
*/
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
int variable_1; /* Documentation for variable_1 */
|
int variable_1; /* Documentation for variable_1 */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Documentation for variable_2
|
* Documentation for variable_2
|
||||||
*/
|
*/
|
||||||
int variable_2;
|
int variable_2;
|
||||||
} struct_name_t;
|
} struct_name_t;
|
||||||
|
|
||||||
Please do not use JavaDoc or Doxygen-specific formatting at the moment.
|
Please do not use JavaDoc or Doxygen-specific formatting at the moment.
|
||||||
|
|
||||||
|
|
|
@ -1,104 +1,104 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
"""
|
"""
|
||||||
numpyfilter.py [-h] inputfile
|
numpyfilter.py [-h] inputfile
|
||||||
|
|
||||||
Interpret C comments as ReStructuredText, and replace them by the HTML output.
|
Interpret C comments as ReStructuredText, and replace them by the HTML output.
|
||||||
Also, add Doxygen /** and /**< syntax automatically where appropriate.
|
Also, add Doxygen /** and /**< syntax automatically where appropriate.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
import sys
|
import sys
|
||||||
import re
|
import re
|
||||||
import os
|
import os
|
||||||
import textwrap
|
import textwrap
|
||||||
|
|
||||||
from numpy.compat import pickle
|
from numpy.compat import pickle
|
||||||
|
|
||||||
CACHE_FILE = 'build/rst-cache.pck'
|
CACHE_FILE = 'build/rst-cache.pck'
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(usage=__doc__.strip())
|
parser = argparse.ArgumentParser(usage=__doc__.strip())
|
||||||
parser.add_argument('input_file', help='input file')
|
parser.add_argument('input_file', help='input file')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
comment_re = re.compile(r'(\n.*?)/\*(.*?)\*/', re.S)
|
comment_re = re.compile(r'(\n.*?)/\*(.*?)\*/', re.S)
|
||||||
|
|
||||||
cache = load_cache()
|
cache = load_cache()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(args.input_file, 'r') as f:
|
with open(args.input_file, 'r') as f:
|
||||||
text = f.read()
|
text = f.read()
|
||||||
text = comment_re.sub(lambda m: process_match(m, cache), text)
|
text = comment_re.sub(lambda m: process_match(m, cache), text)
|
||||||
sys.stdout.write(text)
|
sys.stdout.write(text)
|
||||||
finally:
|
finally:
|
||||||
save_cache(cache)
|
save_cache(cache)
|
||||||
|
|
||||||
def filter_comment(text):
|
def filter_comment(text):
|
||||||
if text.startswith('NUMPY_API'):
|
if text.startswith('NUMPY_API'):
|
||||||
text = text[9:].strip()
|
text = text[9:].strip()
|
||||||
if text.startswith('UFUNC_API'):
|
if text.startswith('UFUNC_API'):
|
||||||
text = text[9:].strip()
|
text = text[9:].strip()
|
||||||
|
|
||||||
html = render_html(text)
|
html = render_html(text)
|
||||||
return html
|
return html
|
||||||
|
|
||||||
def process_match(m, cache=None):
|
def process_match(m, cache=None):
|
||||||
pre, rawtext = m.groups()
|
pre, rawtext = m.groups()
|
||||||
|
|
||||||
preline = pre.split("\n")[-1]
|
preline = pre.split("\n")[-1]
|
||||||
|
|
||||||
if cache is not None and rawtext in cache:
|
if cache is not None and rawtext in cache:
|
||||||
text = cache[rawtext]
|
text = cache[rawtext]
|
||||||
else:
|
else:
|
||||||
text = re.compile(r'^\s*\*', re.M).sub('', rawtext)
|
text = re.compile(r'^\s*\*', re.M).sub('', rawtext)
|
||||||
text = textwrap.dedent(text)
|
text = textwrap.dedent(text)
|
||||||
text = filter_comment(text)
|
text = filter_comment(text)
|
||||||
|
|
||||||
if cache is not None:
|
if cache is not None:
|
||||||
cache[rawtext] = text
|
cache[rawtext] = text
|
||||||
|
|
||||||
if preline.strip():
|
if preline.strip():
|
||||||
return pre + "/**< " + text + " */"
|
return pre + "/**< " + text + " */"
|
||||||
else:
|
else:
|
||||||
return pre + "/** " + text + " */"
|
return pre + "/** " + text + " */"
|
||||||
|
|
||||||
def load_cache():
|
def load_cache():
|
||||||
if os.path.exists(CACHE_FILE):
|
if os.path.exists(CACHE_FILE):
|
||||||
with open(CACHE_FILE, 'rb') as f:
|
with open(CACHE_FILE, 'rb') as f:
|
||||||
try:
|
try:
|
||||||
cache = pickle.load(f)
|
cache = pickle.load(f)
|
||||||
except Exception:
|
except Exception:
|
||||||
cache = {}
|
cache = {}
|
||||||
else:
|
else:
|
||||||
cache = {}
|
cache = {}
|
||||||
return cache
|
return cache
|
||||||
|
|
||||||
def save_cache(cache):
|
def save_cache(cache):
|
||||||
with open(CACHE_FILE + '.new', 'wb') as f:
|
with open(CACHE_FILE + '.new', 'wb') as f:
|
||||||
pickle.dump(cache, f)
|
pickle.dump(cache, f)
|
||||||
os.rename(CACHE_FILE + '.new', CACHE_FILE)
|
os.rename(CACHE_FILE + '.new', CACHE_FILE)
|
||||||
|
|
||||||
def render_html(text):
|
def render_html(text):
|
||||||
import docutils.parsers.rst
|
import docutils.parsers.rst
|
||||||
import docutils.writers.html4css1
|
import docutils.writers.html4css1
|
||||||
import docutils.core
|
import docutils.core
|
||||||
|
|
||||||
docutils.parsers.rst.roles.DEFAULT_INTERPRETED_ROLE = 'title-reference'
|
docutils.parsers.rst.roles.DEFAULT_INTERPRETED_ROLE = 'title-reference'
|
||||||
writer = docutils.writers.html4css1.Writer()
|
writer = docutils.writers.html4css1.Writer()
|
||||||
parts = docutils.core.publish_parts(
|
parts = docutils.core.publish_parts(
|
||||||
text,
|
text,
|
||||||
writer=writer,
|
writer=writer,
|
||||||
settings_overrides = dict(halt_level=5,
|
settings_overrides = dict(halt_level=5,
|
||||||
traceback=True,
|
traceback=True,
|
||||||
default_reference_context='title-reference',
|
default_reference_context='title-reference',
|
||||||
stylesheet_path='',
|
stylesheet_path='',
|
||||||
# security settings:
|
# security settings:
|
||||||
raw_enabled=0,
|
raw_enabled=0,
|
||||||
file_insertion_enabled=0,
|
file_insertion_enabled=0,
|
||||||
_disable_config=1,
|
_disable_config=1,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return parts['html_body']
|
return parts['html_body']
|
||||||
|
|
||||||
if __name__ == "__main__": main()
|
if __name__ == "__main__": main()
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,39 +1,39 @@
|
||||||
=========
|
=========
|
||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 10 people contributed to this release. People with a "+" by their
|
A total of 10 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Greg Young
|
* Greg Young
|
||||||
* Joerg Behrmann +
|
* Joerg Behrmann +
|
||||||
* John Kirkham
|
* John Kirkham
|
||||||
* Julian Taylor
|
* Julian Taylor
|
||||||
* Marten van Kerkwijk
|
* Marten van Kerkwijk
|
||||||
* Matthew Brett
|
* Matthew Brett
|
||||||
* Shota Kawabuchi
|
* Shota Kawabuchi
|
||||||
* Jean Utke +
|
* Jean Utke +
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
* `#8483 <https://github.com/numpy/numpy/pull/8483>`__: BUG: Fix wrong future nat warning and equiv type logic error...
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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...
|
* `#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
|
* `#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__
|
* `#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__
|
* `#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
|
* `#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`
|
* `#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
|
* `#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.
|
* `#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
|
* `#8707 <https://github.com/numpy/numpy/pull/8707>`__: BUG: Fix ma.median for empty ndarrays
|
||||||
|
|
|
@ -1,426 +1,426 @@
|
||||||
=========
|
=========
|
||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 102 people contributed to this release. People with a "+" by their
|
A total of 102 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* A. Jesse Jiryu Davis +
|
* A. Jesse Jiryu Davis +
|
||||||
* Alessandro Pietro Bardelli +
|
* Alessandro Pietro Bardelli +
|
||||||
* Alex Rothberg +
|
* Alex Rothberg +
|
||||||
* Alexander Shadchin
|
* Alexander Shadchin
|
||||||
* Allan Haldane
|
* Allan Haldane
|
||||||
* Andres Guzman-Ballen +
|
* Andres Guzman-Ballen +
|
||||||
* Antoine Pitrou
|
* Antoine Pitrou
|
||||||
* Antony Lee
|
* Antony Lee
|
||||||
* B R S Recht +
|
* B R S Recht +
|
||||||
* Baurzhan Muftakhidinov +
|
* Baurzhan Muftakhidinov +
|
||||||
* Ben Rowland
|
* Ben Rowland
|
||||||
* Benda Xu +
|
* Benda Xu +
|
||||||
* Blake Griffith
|
* Blake Griffith
|
||||||
* Bradley Wogsland +
|
* Bradley Wogsland +
|
||||||
* Brandon Carter +
|
* Brandon Carter +
|
||||||
* CJ Carey
|
* CJ Carey
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Christoph Gohlke
|
* Christoph Gohlke
|
||||||
* Danny Hermes +
|
* Danny Hermes +
|
||||||
* David Hagen +
|
* David Hagen +
|
||||||
* Duke Vijitbenjaronk +
|
* Duke Vijitbenjaronk +
|
||||||
* Egor Klenin +
|
* Egor Klenin +
|
||||||
* Elliott Forney +
|
* Elliott Forney +
|
||||||
* Elliott M Forney +
|
* Elliott M Forney +
|
||||||
* Endolith
|
* Endolith
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Erik M. Bray
|
* Erik M. Bray
|
||||||
* Eugene +
|
* Eugene +
|
||||||
* Evan Limanto +
|
* Evan Limanto +
|
||||||
* Felix Berkenkamp +
|
* Felix Berkenkamp +
|
||||||
* François Bissey +
|
* François Bissey +
|
||||||
* Frederic Bastien
|
* Frederic Bastien
|
||||||
* Greg Young
|
* Greg Young
|
||||||
* Gregory R. Lee
|
* Gregory R. Lee
|
||||||
* Importance of Being Ernest +
|
* Importance of Being Ernest +
|
||||||
* Jaime Fernandez
|
* Jaime Fernandez
|
||||||
* Jakub Wilk +
|
* Jakub Wilk +
|
||||||
* James Cowgill +
|
* James Cowgill +
|
||||||
* James Sanders
|
* James Sanders
|
||||||
* Jean Utke +
|
* Jean Utke +
|
||||||
* Jesse Thoren +
|
* Jesse Thoren +
|
||||||
* Jim Crist +
|
* Jim Crist +
|
||||||
* Joerg Behrmann +
|
* Joerg Behrmann +
|
||||||
* John Kirkham
|
* John Kirkham
|
||||||
* Jonathan Helmus
|
* Jonathan Helmus
|
||||||
* Jonathan L Long
|
* Jonathan L Long
|
||||||
* Jonathan Tammo Siebert +
|
* Jonathan Tammo Siebert +
|
||||||
* Joseph Fox-Rabinovitz
|
* Joseph Fox-Rabinovitz
|
||||||
* Joshua Loyal +
|
* Joshua Loyal +
|
||||||
* Juan Nunez-Iglesias +
|
* Juan Nunez-Iglesias +
|
||||||
* Julian Taylor
|
* Julian Taylor
|
||||||
* Kirill Balunov +
|
* Kirill Balunov +
|
||||||
* Likhith Chitneni +
|
* Likhith Chitneni +
|
||||||
* Loïc Estève
|
* Loïc Estève
|
||||||
* Mads Ohm Larsen
|
* Mads Ohm Larsen
|
||||||
* Marein Könings +
|
* Marein Könings +
|
||||||
* Marten van Kerkwijk
|
* Marten van Kerkwijk
|
||||||
* Martin Thoma
|
* Martin Thoma
|
||||||
* Martino Sorbaro +
|
* Martino Sorbaro +
|
||||||
* Marvin Schmidt +
|
* Marvin Schmidt +
|
||||||
* Matthew Brett
|
* Matthew Brett
|
||||||
* Matthias Bussonnier +
|
* Matthias Bussonnier +
|
||||||
* Matthias C. M. Troffaes +
|
* Matthias C. M. Troffaes +
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Michael Seifert
|
* Michael Seifert
|
||||||
* Mikhail Pak +
|
* Mikhail Pak +
|
||||||
* Mortada Mehyar
|
* Mortada Mehyar
|
||||||
* Nathaniel J. Smith
|
* Nathaniel J. Smith
|
||||||
* Nick Papior
|
* Nick Papior
|
||||||
* Oscar Villellas +
|
* Oscar Villellas +
|
||||||
* Pauli Virtanen
|
* Pauli Virtanen
|
||||||
* Pavel Potocek
|
* Pavel Potocek
|
||||||
* Pete Peeradej Tanruangporn +
|
* Pete Peeradej Tanruangporn +
|
||||||
* Philipp A +
|
* Philipp A +
|
||||||
* Ralf Gommers
|
* Ralf Gommers
|
||||||
* Robert Kern
|
* Robert Kern
|
||||||
* Roland Kaufmann +
|
* Roland Kaufmann +
|
||||||
* Ronan Lamy
|
* Ronan Lamy
|
||||||
* Sami Salonen +
|
* Sami Salonen +
|
||||||
* Sanchez Gonzalez Alvaro
|
* Sanchez Gonzalez Alvaro
|
||||||
* Sebastian Berg
|
* Sebastian Berg
|
||||||
* Shota Kawabuchi
|
* Shota Kawabuchi
|
||||||
* Simon Gibbons
|
* Simon Gibbons
|
||||||
* Stefan Otte
|
* Stefan Otte
|
||||||
* Stefan Peterson +
|
* Stefan Peterson +
|
||||||
* Stephan Hoyer
|
* Stephan Hoyer
|
||||||
* Søren Fuglede Jørgensen +
|
* Søren Fuglede Jørgensen +
|
||||||
* Takuya Akiba
|
* Takuya Akiba
|
||||||
* Tom Boyd +
|
* Tom Boyd +
|
||||||
* Ville Skyttä +
|
* Ville Skyttä +
|
||||||
* Warren Weckesser
|
* Warren Weckesser
|
||||||
* Wendell Smith
|
* Wendell Smith
|
||||||
* Yu Feng
|
* Yu Feng
|
||||||
* Zixu Zhao +
|
* Zixu Zhao +
|
||||||
* Zè Vinícius +
|
* Zè Vinícius +
|
||||||
* aha66 +
|
* aha66 +
|
||||||
* davidjn +
|
* davidjn +
|
||||||
* drabach +
|
* drabach +
|
||||||
* drlvk +
|
* drlvk +
|
||||||
* jsh9 +
|
* jsh9 +
|
||||||
* solarjoe +
|
* solarjoe +
|
||||||
* zengi +
|
* zengi +
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 309 pull requests were merged for this release.
|
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
|
* `#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.
|
* `#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...
|
* `#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
|
* `#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.
|
* `#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
|
* `#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()
|
* `#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)
|
* `#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...
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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__`
|
* `#8247 <https://github.com/numpy/numpy/pull/8247>`__: ENH: Add `__array_ufunc__`
|
||||||
* `#8251 <https://github.com/numpy/numpy/pull/8251>`__: MAINT: Cleaned up mailmap
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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@
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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...
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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).
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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 <...
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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.
|
* `#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...
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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__`
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#8542 <https://github.com/numpy/numpy/pull/8542>`__: MAINT: typo in histogram docstring
|
||||||
* `#8551 <https://github.com/numpy/numpy/pull/8551>`__: DOC: Missing backticks
|
* `#8551 <https://github.com/numpy/numpy/pull/8551>`__: DOC: Missing backticks
|
||||||
* `#8555 <https://github.com/numpy/numpy/pull/8555>`__: Fixing docstring error in polyvander2d
|
* `#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.
|
* `#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
|
* `#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
|
* `#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.
|
* `#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...
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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()
|
* `#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
|
* `#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
|
* `#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__`
|
* `#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__`
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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__`
|
* `#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
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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_`
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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__`
|
* `#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.
|
* `#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
|
* `#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
|
* `#8792 <https://github.com/numpy/numpy/pull/8792>`__: DOC: Fix typos
|
||||||
* `#8793 <https://github.com/numpy/numpy/pull/8793>`__: DOC: fix minor docstring 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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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...
|
* `#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`
|
* `#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
|
* `#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
|
* `#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`
|
* `#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
|
* `#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
|
* `#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.
|
* `#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()
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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__`
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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`
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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...
|
* `#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)
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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,...
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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)
|
* `#9199 <https://github.com/numpy/numpy/pull/9199>`__: DOC: Update bincount docs to reflect gh-8348 (backport)
|
||||||
|
|
|
@ -1,44 +1,44 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 12 people contributed to this release. People with a "+" by their
|
A total of 12 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Andras Deak +
|
* Andras Deak +
|
||||||
* Bob Eldering +
|
* Bob Eldering +
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Daniel Hrisca +
|
* Daniel Hrisca +
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Joshua Leahy +
|
* Joshua Leahy +
|
||||||
* Julian Taylor
|
* Julian Taylor
|
||||||
* Michael Seifert
|
* Michael Seifert
|
||||||
* Pauli Virtanen
|
* Pauli Virtanen
|
||||||
* Ralf Gommers
|
* Ralf Gommers
|
||||||
* Roland Kaufmann
|
* Roland Kaufmann
|
||||||
* Warren Weckesser
|
* Warren Weckesser
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 19 pull requests were merged for this release.
|
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.
|
* `#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_)."
|
* `#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...
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#9379 <https://github.com/numpy/numpy/pull/9379>`__: DOC: Update the 1.13.1 release notes
|
||||||
|
|
|
@ -1,46 +1,46 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 12 people contributed to this release. People with a "+" by their
|
A total of 12 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Allan Haldane
|
* Allan Haldane
|
||||||
* Brandon Carter
|
* Brandon Carter
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Iryna Shcherbina +
|
* Iryna Shcherbina +
|
||||||
* James Bourbeau +
|
* James Bourbeau +
|
||||||
* Jonathan Helmus
|
* Jonathan Helmus
|
||||||
* Julian Taylor
|
* Julian Taylor
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Michael Lamparski +
|
* Michael Lamparski +
|
||||||
* Michael Seifert
|
* Michael Seifert
|
||||||
* Ralf Gommers
|
* Ralf Gommers
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 21 pull requests were merged for this release.
|
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
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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)...
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#9772 <https://github.com/numpy/numpy/pull/9772>`__: DOC: Create the 1.13.2 release notes.
|
||||||
|
|
|
@ -1,73 +1,73 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 19 people contributed to this release. People with a "+" by their
|
A total of 19 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Allan Haldane
|
* Allan Haldane
|
||||||
* Andras Deak +
|
* Andras Deak +
|
||||||
* Bob Eldering +
|
* Bob Eldering +
|
||||||
* Brandon Carter
|
* Brandon Carter
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Daniel Hrisca +
|
* Daniel Hrisca +
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Iryna Shcherbina +
|
* Iryna Shcherbina +
|
||||||
* James Bourbeau +
|
* James Bourbeau +
|
||||||
* Jonathan Helmus
|
* Jonathan Helmus
|
||||||
* Joshua Leahy +
|
* Joshua Leahy +
|
||||||
* Julian Taylor
|
* Julian Taylor
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Michael Lamparski +
|
* Michael Lamparski +
|
||||||
* Michael Seifert
|
* Michael Seifert
|
||||||
* Pauli Virtanen
|
* Pauli Virtanen
|
||||||
* Ralf Gommers
|
* Ralf Gommers
|
||||||
* Roland Kaufmann
|
* Roland Kaufmann
|
||||||
* Warren Weckesser
|
* Warren Weckesser
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 41 pull requests were merged for this release.
|
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.
|
* `#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_)."
|
* `#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...
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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)...
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#9794 <https://github.com/numpy/numpy/pull/9794>`__: DOC: Create 1.13.3 release notes.
|
||||||
|
|
|
@ -1,494 +1,494 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 100 people contributed to this release. People with a "+" by their
|
A total of 100 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Alexey Brodkin +
|
* Alexey Brodkin +
|
||||||
* Allan Haldane
|
* Allan Haldane
|
||||||
* Andras Deak +
|
* Andras Deak +
|
||||||
* Andrew Lawson +
|
* Andrew Lawson +
|
||||||
* Anna Chiara +
|
* Anna Chiara +
|
||||||
* Antoine Pitrou
|
* Antoine Pitrou
|
||||||
* Bernhard M. Wiedemann +
|
* Bernhard M. Wiedemann +
|
||||||
* Bob Eldering +
|
* Bob Eldering +
|
||||||
* Brandon Carter
|
* Brandon Carter
|
||||||
* CJ Carey
|
* CJ Carey
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Chris Lamb
|
* Chris Lamb
|
||||||
* Christoph Boeddeker +
|
* Christoph Boeddeker +
|
||||||
* Christoph Gohlke
|
* Christoph Gohlke
|
||||||
* Daniel Hrisca +
|
* Daniel Hrisca +
|
||||||
* Daniel Smith
|
* Daniel Smith
|
||||||
* Danny Hermes
|
* Danny Hermes
|
||||||
* David Freese
|
* David Freese
|
||||||
* David Hagen
|
* David Hagen
|
||||||
* David Linke +
|
* David Linke +
|
||||||
* David Schaefer +
|
* David Schaefer +
|
||||||
* Dillon Niederhut +
|
* Dillon Niederhut +
|
||||||
* Egor Panfilov +
|
* Egor Panfilov +
|
||||||
* Emilien Kofman
|
* Emilien Kofman
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Erik Bray +
|
* Erik Bray +
|
||||||
* Erik Quaeghebeur +
|
* Erik Quaeghebeur +
|
||||||
* Garry Polley +
|
* Garry Polley +
|
||||||
* Gunjan +
|
* Gunjan +
|
||||||
* Han Shen +
|
* Han Shen +
|
||||||
* Henke Adolfsson +
|
* Henke Adolfsson +
|
||||||
* Hidehiro NAGAOKA +
|
* Hidehiro NAGAOKA +
|
||||||
* Hemil Desai +
|
* Hemil Desai +
|
||||||
* Hong Xu +
|
* Hong Xu +
|
||||||
* Iryna Shcherbina +
|
* Iryna Shcherbina +
|
||||||
* Jaime Fernandez
|
* Jaime Fernandez
|
||||||
* James Bourbeau +
|
* James Bourbeau +
|
||||||
* Jamie Townsend +
|
* Jamie Townsend +
|
||||||
* Jarrod Millman
|
* Jarrod Millman
|
||||||
* Jean Helie +
|
* Jean Helie +
|
||||||
* Jeroen Demeyer +
|
* Jeroen Demeyer +
|
||||||
* John Goetz +
|
* John Goetz +
|
||||||
* John Kirkham
|
* John Kirkham
|
||||||
* John Zwinck
|
* John Zwinck
|
||||||
* Jonathan Helmus
|
* Jonathan Helmus
|
||||||
* Joseph Fox-Rabinovitz
|
* Joseph Fox-Rabinovitz
|
||||||
* Joseph Paul Cohen +
|
* Joseph Paul Cohen +
|
||||||
* Joshua Leahy +
|
* Joshua Leahy +
|
||||||
* Julian Taylor
|
* Julian Taylor
|
||||||
* Jörg Döpfert +
|
* Jörg Döpfert +
|
||||||
* Keno Goertz +
|
* Keno Goertz +
|
||||||
* Kevin Sheppard +
|
* Kevin Sheppard +
|
||||||
* Kexuan Sun +
|
* Kexuan Sun +
|
||||||
* Konrad Kapp +
|
* Konrad Kapp +
|
||||||
* Kristofor Maynard +
|
* Kristofor Maynard +
|
||||||
* Licht Takeuchi +
|
* Licht Takeuchi +
|
||||||
* Loïc Estève
|
* Loïc Estève
|
||||||
* Lukas Mericle +
|
* Lukas Mericle +
|
||||||
* Marten van Kerkwijk
|
* Marten van Kerkwijk
|
||||||
* Matheus Portela +
|
* Matheus Portela +
|
||||||
* Matthew Brett
|
* Matthew Brett
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Michael Lamparski +
|
* Michael Lamparski +
|
||||||
* Michael Odintsov +
|
* Michael Odintsov +
|
||||||
* Michael Schnaitter +
|
* Michael Schnaitter +
|
||||||
* Michael Seifert
|
* Michael Seifert
|
||||||
* Mike Nolta
|
* Mike Nolta
|
||||||
* Nathaniel J. Smith
|
* Nathaniel J. Smith
|
||||||
* Nelle Varoquaux +
|
* Nelle Varoquaux +
|
||||||
* Nicholas Del Grosso +
|
* Nicholas Del Grosso +
|
||||||
* Nico Schlömer +
|
* Nico Schlömer +
|
||||||
* Oleg Zabluda +
|
* Oleg Zabluda +
|
||||||
* Oleksandr Pavlyk
|
* Oleksandr Pavlyk
|
||||||
* Pauli Virtanen
|
* Pauli Virtanen
|
||||||
* Pim de Haan +
|
* Pim de Haan +
|
||||||
* Ralf Gommers
|
* Ralf Gommers
|
||||||
* Robert T. McGibbon +
|
* Robert T. McGibbon +
|
||||||
* Roland Kaufmann
|
* Roland Kaufmann
|
||||||
* Sebastian Berg
|
* Sebastian Berg
|
||||||
* Serhiy Storchaka +
|
* Serhiy Storchaka +
|
||||||
* Shitian Ni +
|
* Shitian Ni +
|
||||||
* Spencer Hill +
|
* Spencer Hill +
|
||||||
* Srinivas Reddy Thatiparthy +
|
* Srinivas Reddy Thatiparthy +
|
||||||
* Stefan Winkler +
|
* Stefan Winkler +
|
||||||
* Stephan Hoyer
|
* Stephan Hoyer
|
||||||
* Steven Maude +
|
* Steven Maude +
|
||||||
* SuperBo +
|
* SuperBo +
|
||||||
* Thomas Köppe +
|
* Thomas Köppe +
|
||||||
* Toon Verstraelen
|
* Toon Verstraelen
|
||||||
* Vedant Misra +
|
* Vedant Misra +
|
||||||
* Warren Weckesser
|
* Warren Weckesser
|
||||||
* Wirawan Purwanto +
|
* Wirawan Purwanto +
|
||||||
* Yang Li +
|
* Yang Li +
|
||||||
* Ziyan Zhou +
|
* Ziyan Zhou +
|
||||||
* chaoyu3 +
|
* chaoyu3 +
|
||||||
* orbit-stabilizer +
|
* orbit-stabilizer +
|
||||||
* solarjoe
|
* solarjoe
|
||||||
* wufangjie +
|
* wufangjie +
|
||||||
* xoviat +
|
* xoviat +
|
||||||
* Élie Gouzien +
|
* Élie Gouzien +
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 381 pull requests were merged for this release.
|
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 )
|
* `#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...
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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()
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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`
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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...
|
* `#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
|
* `#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
|
* `#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.
|
* `#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`
|
* `#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
|
* `#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
|
* `#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,
|
* `#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...
|
* `#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``.
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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`.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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...
|
* `#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
|
* `#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)
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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}.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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...
|
* `#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
|
* `#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...
|
* `#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.
|
* `#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
|
* `#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...
|
* `#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)...
|
* `#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.
|
* `#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.
|
* `#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()
|
* `#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
|
* `#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
|
* `#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
|
* `#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)
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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".
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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_
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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...
|
* `#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.
|
* `#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
|
* `#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
|
* `#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__`
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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)
|
* `#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()
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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`
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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.
|
* `#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...
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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 ()
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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...
|
* `#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
|
* `#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
|
* `#9911 <https://github.com/numpy/numpy/pull/9911>`__: CI: travis: switch to container
|
||||||
* `#9912 <https://github.com/numpy/numpy/pull/9912>`__: BENCH: histogramming benchmarks
|
* `#9912 <https://github.com/numpy/numpy/pull/9912>`__: BENCH: histogramming benchmarks
|
||||||
* `#9913 <https://github.com/numpy/numpy/pull/9913>`__: MAINT: Tidy up Maskedarray repr
|
* `#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
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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...
|
* `#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
|
* `#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...
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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'
|
* `#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()`.
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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.
|
* `#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...
|
* `#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.
|
* `#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
|
* `#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
|
* `#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__`
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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)
|
* `#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.
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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.
|
* `#10315 <https://github.com/numpy/numpy/pull/10315>`__: DOC: NumPy 1.14.0 release prep.
|
||||||
|
|
|
@ -1,63 +1,63 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 14 people contributed to this release. People with a "+" by their
|
A total of 14 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Allan Haldane
|
* Allan Haldane
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Daniel Smith
|
* Daniel Smith
|
||||||
* Dennis Weyland +
|
* Dennis Weyland +
|
||||||
* Eric Larson
|
* Eric Larson
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Jarrod Millman
|
* Jarrod Millman
|
||||||
* Kenichi Maehashi +
|
* Kenichi Maehashi +
|
||||||
* Marten van Kerkwijk
|
* Marten van Kerkwijk
|
||||||
* Mathieu Lamarre
|
* Mathieu Lamarre
|
||||||
* Sebastian Berg
|
* Sebastian Berg
|
||||||
* Simon Conseil
|
* Simon Conseil
|
||||||
* Simon Gibbons
|
* Simon Gibbons
|
||||||
* xoviat
|
* xoviat
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 36 pull requests were merged for this release.
|
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
|
* `#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
|
* `#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...
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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`.
|
* `#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
|
* `#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
|
* `#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
|
* `#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)
|
* `#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
|
* `#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)
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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)
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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)
|
* `#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.
|
* `#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`
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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)
|
* `#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
|
* `#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...
|
* `#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.
|
* `#10630 <https://github.com/numpy/numpy/pull/10630>`__: REL: Prepare for 1.14.1 release.
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 4 people contributed to this release. People with a "+" by their
|
A total of 4 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Allan Haldane
|
* Allan Haldane
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Pauli Virtanen
|
* Pauli Virtanen
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 5 pull requests were merged for this release.
|
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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#10729 <https://github.com/numpy/numpy/pull/10729>`__: DOC: Create 1.14.2 notes and changelog.
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 6 people contributed to this release. People with a "+" by their
|
A total of 6 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Allan Haldane
|
* Allan Haldane
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Jonathan March +
|
* Jonathan March +
|
||||||
* Malcolm Smith +
|
* Malcolm Smith +
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Pauli Virtanen
|
* Pauli Virtanen
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 8 pull requests were merged for this release.
|
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)
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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)
|
* `#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
|
* `#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...
|
* `#10974 <https://github.com/numpy/numpy/pull/10974>`__: BUG: test, fix PyArray_DiscardWritebackIfCopy...
|
||||||
|
|
|
@ -1,31 +1,31 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 7 people contributed to this release. People with a "+" by their
|
A total of 7 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Allan Haldane
|
* Allan Haldane
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Marten van Kerkwijk
|
* Marten van Kerkwijk
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Pauli Virtanen
|
* Pauli Virtanen
|
||||||
* Ryan Soklaski +
|
* Ryan Soklaski +
|
||||||
* Sebastian Berg
|
* Sebastian Berg
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 11 pull requests were merged for this release.
|
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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#11251 <https://github.com/numpy/numpy/pull/11251>`__: DOC: Document 1.14.4 release.
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 1 person contributed to this release. People with a "+" by their
|
A total of 1 person contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 2 pull requests were merged for this release.
|
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.
|
* `#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.
|
* `#11294 <https://github.com/numpy/numpy/pull/11294>`__: BUG: Remove extra trailing parentheses.
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 4 people contributed to this release. People with a "+" by their
|
A total of 4 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Julian Taylor
|
* Julian Taylor
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 4 pull requests were merged for this release.
|
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
|
* `#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)
|
* `#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
|
* `#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.
|
* `#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
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 7 people contributed to this release. People with a "+" by their
|
A total of 7 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Chris Billington
|
* Chris Billington
|
||||||
* Elliott Sales de Andrade +
|
* Elliott Sales de Andrade +
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Jeremy Manning +
|
* Jeremy Manning +
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Ralf Gommers
|
* Ralf Gommers
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 24 pull requests were merged for this release.
|
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``
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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`.
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#11786 <https://github.com/numpy/numpy/pull/11786>`__: BUG: Deprecation triggers segfault
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 4 people contributed to this release. People with a "+" by their
|
A total of 4 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Julian Taylor
|
* Julian Taylor
|
||||||
* Marten van Kerkwijk
|
* Marten van Kerkwijk
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 4 pull requests were merged for this release.
|
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...
|
* `#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
|
* `#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
|
* `#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.
|
* `#11992 <https://github.com/numpy/numpy/pull/11992>`__: BUG: Ensure boolean indexing of subclasses sets base correctly.
|
||||||
|
|
|
@ -1,32 +1,32 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 7 people contributed to this release. People with a "+" by their
|
A total of 7 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Allan Haldane
|
* Allan Haldane
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Jeroen Demeyer
|
* Jeroen Demeyer
|
||||||
* Kevin Sheppard
|
* Kevin Sheppard
|
||||||
* Matthew Bowden +
|
* Matthew Bowden +
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Tyler Reddy
|
* Tyler Reddy
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 12 pull requests were merged for this release.
|
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.
|
* `#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.
|
* `#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()
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#12238 <https://github.com/numpy/numpy/pull/12238>`__: TST: Backport azure-pipeline testing fixes for Mac
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 4 people contributed to this release. People with a "+" by their
|
A total of 4 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Sebastian Berg
|
* Sebastian Berg
|
||||||
* bbbbbbbbba +
|
* bbbbbbbbba +
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 4 pull requests were merged for this release.
|
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)
|
* `#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.
|
* `#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`
|
* `#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
|
* `#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
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 16 people contributed to this release. People with a "+" by their
|
A total of 16 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Antoine Pitrou
|
* Antoine Pitrou
|
||||||
* Arcesio Castaneda Medina +
|
* Arcesio Castaneda Medina +
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Chris Markiewicz +
|
* Chris Markiewicz +
|
||||||
* Christoph Gohlke
|
* Christoph Gohlke
|
||||||
* Christopher J. Markiewicz +
|
* Christopher J. Markiewicz +
|
||||||
* Daniel Hrisca +
|
* Daniel Hrisca +
|
||||||
* EelcoPeacs +
|
* EelcoPeacs +
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Kevin Sheppard
|
* Kevin Sheppard
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* OBATA Akio +
|
* OBATA Akio +
|
||||||
* Ralf Gommers
|
* Ralf Gommers
|
||||||
* Sebastian Berg
|
* Sebastian Berg
|
||||||
* Stephan Hoyer
|
* Stephan Hoyer
|
||||||
* Tyler Reddy
|
* Tyler Reddy
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 33 pull requests were merged for this release.
|
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
|
* `#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
|
* `#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
|
* `#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`
|
* `#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
|
* `#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.
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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...
|
* `#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.
|
* `#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
|
* `#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
|
* `#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,...
|
* `#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
|
* `#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
|
* `#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`
|
* `#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
|
* `#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.
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#12902 <https://github.com/numpy/numpy/pull/12902>`__: DOC: Prepare for 1.16.1 release.
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 5 people contributed to this release. People with a "+" by their
|
A total of 5 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Tyler Reddy
|
* Tyler Reddy
|
||||||
* Tony LaTorre +
|
* Tony LaTorre +
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 7 pull requests were merged for this release.
|
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
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#13041 <https://github.com/numpy/numpy/pull/13041>`__: BLD: Windows absolute path DLL loading
|
||||||
|
|
|
@ -1,55 +1,55 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 16 people contributed to this release. People with a "+" by their
|
A total of 16 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Andreas Schwab
|
* Andreas Schwab
|
||||||
* Bharat Raghunathan +
|
* Bharat Raghunathan +
|
||||||
* Bran +
|
* Bran +
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Jakub Wilk
|
* Jakub Wilk
|
||||||
* Kevin Sheppard
|
* Kevin Sheppard
|
||||||
* Marten van Kerkwijk
|
* Marten van Kerkwijk
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Paul Ivanov
|
* Paul Ivanov
|
||||||
* Ralf Gommers
|
* Ralf Gommers
|
||||||
* Sebastian Berg
|
* Sebastian Berg
|
||||||
* Tyler Reddy
|
* Tyler Reddy
|
||||||
* Warren Weckesser
|
* Warren Weckesser
|
||||||
* Yu Feng
|
* Yu Feng
|
||||||
* adeak +
|
* adeak +
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 26 pull requests were merged for this release.
|
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)
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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`
|
* `#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
|
* `#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``
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#13382 <https://github.com/numpy/numpy/pull/13382>`__: REL: Prepare for the NumPy release.
|
||||||
|
|
|
@ -1,39 +1,39 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 10 people contributed to this release. People with a "+" by their
|
A total of 10 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Dennis Zollo +
|
* Dennis Zollo +
|
||||||
* Hunter Damron +
|
* Hunter Damron +
|
||||||
* Jingbei Li +
|
* Jingbei Li +
|
||||||
* Kevin Sheppard
|
* Kevin Sheppard
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Nicola Soranzo +
|
* Nicola Soranzo +
|
||||||
* Sebastian Berg
|
* Sebastian Berg
|
||||||
* Tyler Reddy
|
* Tyler Reddy
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 16 pull requests were merged for this release.
|
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.
|
* `#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()``
|
* `#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)
|
* `#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
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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
|
* `#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)
|
* `#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...
|
* `#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
|
* `#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
|
* `#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)
|
* `#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
|
* `#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.
|
* `#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
|
* `#13644 <https://github.com/numpy/numpy/pull/13644>`__: BUG: special case object arrays when printing rel-, abs-error
|
||||||
|
|
|
@ -1,54 +1,54 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 18 people contributed to this release. People with a "+" by their
|
A total of 18 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Alexander Shadchin
|
* Alexander Shadchin
|
||||||
* Allan Haldane
|
* Allan Haldane
|
||||||
* Bruce Merry +
|
* Bruce Merry +
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Colin Snyder +
|
* Colin Snyder +
|
||||||
* Dan Allan +
|
* Dan Allan +
|
||||||
* Emile +
|
* Emile +
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Grey Baker +
|
* Grey Baker +
|
||||||
* Maksim Shabunin +
|
* Maksim Shabunin +
|
||||||
* Marten van Kerkwijk
|
* Marten van Kerkwijk
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Peter Andreas Entschev +
|
* Peter Andreas Entschev +
|
||||||
* Ralf Gommers
|
* Ralf Gommers
|
||||||
* Richard Harris +
|
* Richard Harris +
|
||||||
* Sebastian Berg
|
* Sebastian Berg
|
||||||
* Sergei Lebedev +
|
* Sergei Lebedev +
|
||||||
* Stephan Hoyer
|
* Stephan Hoyer
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 23 pull requests were merged for this release.
|
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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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]
|
* `#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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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
|
* `#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...
|
* `#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
|
* `#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.
|
* `#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__`
|
* `#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
|
* `#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.
|
* `#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
|
* `#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...
|
* `#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.
|
* `#14382 <https://github.com/numpy/numpy/pull/14382>`__: REL: Prepare for the NumPy 1.16.5 release.
|
||||||
|
|
|
@ -1,36 +1,36 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 10 people contributed to this release.
|
A total of 10 people contributed to this release.
|
||||||
|
|
||||||
* CakeWithSteak
|
* CakeWithSteak
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Chris Burr
|
* Chris Burr
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Fernando Saravia
|
* Fernando Saravia
|
||||||
* Lars Grueter
|
* Lars Grueter
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Maxwell Aladago
|
* Maxwell Aladago
|
||||||
* Qiming Sun
|
* Qiming Sun
|
||||||
* Warren Weckesser
|
* Warren Weckesser
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 14 pull requests were merged for this release.
|
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...
|
* `#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
|
* `#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...
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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)
|
* `#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
|
* `#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...
|
* `#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.
|
* `#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.
|
* `#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.
|
* `#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
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 17 people contributed to this release. People with a "+" by their
|
A total of 17 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Alexander Jung +
|
* Alexander Jung +
|
||||||
* Allan Haldane
|
* Allan Haldane
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Giuseppe Cuccu +
|
* Giuseppe Cuccu +
|
||||||
* Hiroyuki V. Yamazaki
|
* Hiroyuki V. Yamazaki
|
||||||
* Jérémie du Boisberranger
|
* Jérémie du Boisberranger
|
||||||
* Kmol Yuan +
|
* Kmol Yuan +
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Max Bolingbroke +
|
* Max Bolingbroke +
|
||||||
* Maxwell Aladago +
|
* Maxwell Aladago +
|
||||||
* Oleksandr Pavlyk
|
* Oleksandr Pavlyk
|
||||||
* Peter Andreas Entschev
|
* Peter Andreas Entschev
|
||||||
* Sergei Lebedev
|
* Sergei Lebedev
|
||||||
* Seth Troisi +
|
* Seth Troisi +
|
||||||
* Vladimir Pershin +
|
* Vladimir Pershin +
|
||||||
* Warren Weckesser
|
* Warren Weckesser
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 24 pull requests were merged for this release.
|
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
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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'
|
* `#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.
|
* `#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)
|
* `#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.
|
* `#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
|
* `#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
|
* `#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...
|
* `#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
|
* `#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
|
* `#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
|
* `#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`...
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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.
|
* `#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)
|
* `#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...
|
* `#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...
|
* `#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
|
* `#14350 <https://github.com/numpy/numpy/pull/14350>`__: REL: Prepare 1.17.1 release
|
||||||
|
|
|
@ -1,28 +1,28 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 7 people contributed to this release. People with a "+" by their
|
A total of 7 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* CakeWithSteak +
|
* CakeWithSteak +
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Dan Allan
|
* Dan Allan
|
||||||
* Hameer Abbasi
|
* Hameer Abbasi
|
||||||
* Lars Grueter
|
* Lars Grueter
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Sebastian Berg
|
* Sebastian Berg
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 8 pull requests were merged for this release.
|
A total of 8 pull requests were merged for this release.
|
||||||
|
|
||||||
* `#14418 <https://github.com/numpy/numpy/pull/14418>`__: BUG: Fix aradixsort indirect indexing.
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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.
|
* `#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...
|
* `#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.
|
* `#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.
|
* `#14446 <https://github.com/numpy/numpy/pull/14446>`__: REL: Prepare for NumPy 1.17.2 release.
|
||||||
|
|
|
@ -1,32 +1,32 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 7 people contributed to this release. People with a "+" by their
|
A total of 7 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Allan Haldane
|
* Allan Haldane
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Kevin Sheppard
|
* Kevin Sheppard
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Ralf Gommers
|
* Ralf Gommers
|
||||||
* Sebastian Berg
|
* Sebastian Berg
|
||||||
* Warren Weckesser
|
* Warren Weckesser
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 12 pull requests were merged for this release.
|
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.
|
* `#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...
|
* `#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.
|
* `#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.
|
* `#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
|
* `#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.
|
* `#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
|
* `#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
|
* `#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
|
* `#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).
|
* `#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.
|
* `#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
|
* `#14687 <https://github.com/numpy/numpy/pull/14687>`__: BUG: properly define PyArray_DescrCheck
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 5 people contributed to this release. People with a "+" by their
|
A total of 5 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Chris Burr +
|
* Chris Burr +
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Qiming Sun +
|
* Qiming Sun +
|
||||||
* Warren Weckesser
|
* Warren Weckesser
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 8 pull requests were merged for this release.
|
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
|
* `#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...
|
* `#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)
|
* `#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
|
* `#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
|
* `#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.
|
* `#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...
|
* `#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
|
* `#14866 <https://github.com/numpy/numpy/pull/14866>`__: MAINT: move buffer.h -> npy_buffer.h to avoid conflicts
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
============
|
============
|
||||||
|
|
||||||
A total of 6 people contributed to this release. People with a "+" by their
|
A total of 6 people contributed to this release. People with a "+" by their
|
||||||
names contributed a patch for the first time.
|
names contributed a patch for the first time.
|
||||||
|
|
||||||
* Charles Harris
|
* Charles Harris
|
||||||
* Eric Wieser
|
* Eric Wieser
|
||||||
* Ilhan Polat
|
* Ilhan Polat
|
||||||
* Matti Picus
|
* Matti Picus
|
||||||
* Michael Hudson-Doyle
|
* Michael Hudson-Doyle
|
||||||
* Ralf Gommers
|
* Ralf Gommers
|
||||||
|
|
||||||
Pull requests merged
|
Pull requests merged
|
||||||
====================
|
====================
|
||||||
|
|
||||||
A total of 7 pull requests were merged for this release.
|
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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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
|
* `#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.
|
* `#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