From 64cee30970eec69ff689e1c68a2db41613baf0c3 Mon Sep 17 00:00:00 2001 From: Aaron Smith Date: Thu, 7 Nov 2024 17:05:03 -0600 Subject: [PATCH] [MRG+1] Remove support for Python 3.7 (#548) --- .circleci/config.yml | 54 ++------------ .github/workflows/build_and_deploy.yml | 2 +- README.md | 4 +- build_tools/circle/build_wheel.sh | 4 +- doc/conf.py | 2 +- doc/sg_execution_times.rst | 73 +++++++++++++++++++ doc/whats_new.rst | 6 ++ .../arima/tests/test_arima_diagnostics.py | 4 +- pmdarima/datasets/tests/test_load_datasets.py | 2 +- setup.py | 4 +- 10 files changed, 93 insertions(+), 62 deletions(-) create mode 100644 doc/sg_execution_times.rst diff --git a/.circleci/config.yml b/.circleci/config.yml index e2e06bc24..3a041c8b4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -81,7 +81,7 @@ commands: -v `pwd`:/app \ -w /app \ --env-file vars.env \ - python:3.7 \ + python:3.9 \ ./build_tools/circle/deploy.sh jobs: @@ -94,8 +94,10 @@ jobs: # larger unit tests, and to avoid multiple setup steps that can slow the pipeline down test-sanity: docker: - - image: python:3.7 + - image: python:3.9 working_directory: ~/pmdarima + environment: + SETUPTOOLS_USE_DISTUTILS: stdlib steps: - checkout - run: @@ -130,26 +132,6 @@ jobs: python -c 'import pmdarima as pm; print(pm.__version__)' # --- Unit tests --- - # These are all executed on `machine` executors, since they require DinD to build the whl - # files and perform the whl repair for manylinux support. - test-unit-cpython37: - machine: - image: ubuntu-2004:202111-02 - working_directory: ~/pmdarima - steps: - - checkout - - build-test-and-persist: - pythonversion: "3.7" - - test-unit-cpython38: - machine: - image: ubuntu-2004:202111-02 - working_directory: ~/pmdarima - steps: - - checkout - - build-test-and-persist: - pythonversion: "3.8" - test-unit-cpython39: machine: image: ubuntu-2004:202111-02 @@ -219,16 +201,6 @@ jobs: # # ############################################ - deploy-cpython37-whl: - machine: - image: ubuntu-2004:202111-02 - working_directory: ~/pmdarima - steps: - - checkout - - restore-whl-file: - key: "3.7" - - deploy-to-pypi - deploy-cpython38-whl: machine: image: ubuntu-2004:202111-02 @@ -287,7 +259,7 @@ jobs: # GH_TOKEN (the personal Git token with pushes enabled) deploy-doc: docker: - - image: python:3.7 + - image: python:3.9 working_directory: ~/pmdarima steps: - checkout @@ -306,10 +278,6 @@ workflows: # run on test and tag - test-sanity: filters: *test-filters - - test-unit-cpython37: - filters: *test-filters - - test-unit-cpython38: - filters: *test-filters - test-unit-cpython39: filters: *test-filters - test-unit-cpython310: @@ -323,8 +291,6 @@ workflows: - testing-passed: requires: - test-sanity - - test-unit-cpython37 - - test-unit-cpython38 - test-unit-cpython39 - test-unit-cpython310 - test-unit-cpython311 @@ -339,16 +305,6 @@ workflows: - testing-passed filters: *test-filters - - deploy-cpython37-whl: - filters: *deploy-filters - requires: - - deploy-doc - - - deploy-cpython38-whl: - filters: *deploy-filters - requires: - - deploy-doc - - deploy-cpython39-whl: filters: *deploy-filters requires: diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index 7e20b6397..578cc9859 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -20,7 +20,7 @@ jobs: build-and-deploy: strategy: matrix: - python3-minor-version: [7, 8, 9, 10, 11, 12] + python3-minor-version: [9, 10, 11, 12] # TODO: Figure out macos-14/macos-latest os: [macos-13, ubuntu-latest, windows-latest] defaults: diff --git a/README.md b/README.md index 7ba1456ff..09a68c6a2 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![CircleCI](https://circleci.com/gh/alkaline-ml/pmdarima.svg?style=svg)](https://circleci.com/gh/alkaline-ml/pmdarima) [![Github Actions Status](https://github.com/alkaline-ml/pmdarima/workflows/Mac%20and%20Windows%20Builds/badge.svg?branch=master)](https://github.com/alkaline-ml/pmdarima/actions?query=workflow%3A%22Mac+and+Windows+Builds%22+branch%3Amaster) [![codecov](https://codecov.io/gh/alkaline-ml/pmdarima/branch/master/graph/badge.svg)](https://codecov.io/gh/alkaline-ml/pmdarima) -![Supported versions](https://img.shields.io/badge/python-3.7+-blue.svg) +![Supported versions](https://img.shields.io/badge/python-3.9+-blue.svg) ![Downloads](https://img.shields.io/badge/dynamic/json?color=blue&label=downloads&query=%24.total&url=https%3A%2F%2Fstore.zapier.com%2Fapi%2Frecords%3Fsecret%3D1e061b29db6c4f15af01103d403b0237) ![Downloads/Week](https://img.shields.io/badge/dynamic/json?color=blue&label=downloads%2Fweek&query=%24.weekly&url=https%3A%2F%2Fstore.zapier.com%2Fapi%2Frecords%3Fsecret%3D1e061b29db6c4f15af01103d403b0237) @@ -118,7 +118,7 @@ with open('model.pkl', 'rb') as pkl: ### Availability -`pmdarima` is available on PyPi in pre-built Wheel files for Python 3.7+ for the following platforms: +`pmdarima` is available on PyPi in pre-built Wheel files for Python 3.9+ for the following platforms: * Mac (64-bit) * Linux (64-bit manylinux) diff --git a/build_tools/circle/build_wheel.sh b/build_tools/circle/build_wheel.sh index 8785a1745..4e28b1df6 100755 --- a/build_tools/circle/build_wheel.sh +++ b/build_tools/circle/build_wheel.sh @@ -9,9 +9,7 @@ function build_wheel { # https://www.python.org/dev/peps/pep-0513/#ucs-2-vs-ucs-4-builds ucs_tag="" - if [ "$pyver" = "3.7" ]; then - ucs_tag="m" - elif [ "$ucs_setting" = "ucs4" ]; then + if [ "$ucs_setting" = "ucs4" ]; then ucs_tag="${ucs_tag}u" fi diff --git a/doc/conf.py b/doc/conf.py index dc6d1ebdb..53fa13038 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -224,7 +224,7 @@ def setup(app): def adds(pth): print("Adding stylesheet: %s" % pth) - app.add_stylesheet(pth) + app.add_css_file(pth) adds('css/fields.css') # for parameters, etc. adds('css/gitcontrib.css') # for git contributors diff --git a/doc/sg_execution_times.rst b/doc/sg_execution_times.rst new file mode 100644 index 000000000..81ec8ce28 --- /dev/null +++ b/doc/sg_execution_times.rst @@ -0,0 +1,73 @@ + +:orphan: + +.. _sphx_glr_sg_execution_times: + + +Computation times +================= +**00:11.856** total execution time for 13 files **from all galleries**: + +.. container:: + + .. raw:: html + + + + + + + + .. list-table:: + :header-rows: 1 + :class: table table-striped sg-datatable + + * - Example + - Time + - Mem (MB) + * - :ref:`sphx_glr_auto_examples_preprocessing_example_date_featurizer.py` (``../examples/preprocessing/example_date_featurizer.py``) + - 00:03.490 + - 0.0 + * - :ref:`sphx_glr_auto_examples_example_simple_fit.py` (``../examples/example_simple_fit.py``) + - 00:03.400 + - 0.0 + * - :ref:`sphx_glr_auto_examples_model_selection_example_cross_val_predict.py` (``../examples/model_selection/example_cross_val_predict.py``) + - 00:01.976 + - 0.0 + * - :ref:`sphx_glr_auto_examples_example_pipeline.py` (``../examples/example_pipeline.py``) + - 00:00.937 + - 0.0 + * - :ref:`sphx_glr_auto_examples_model_selection_example_cross_validation.py` (``../examples/model_selection/example_cross_validation.py``) + - 00:00.775 + - 0.0 + * - :ref:`sphx_glr_auto_examples_arima_example_persisting_a_model.py` (``../examples/arima/example_persisting_a_model.py``) + - 00:00.602 + - 0.0 + * - :ref:`sphx_glr_auto_examples_utils_example_tsdisplay.py` (``../examples/utils/example_tsdisplay.py``) + - 00:00.233 + - 0.0 + * - :ref:`sphx_glr_auto_examples_arima_example_add_new_samples.py` (``../examples/arima/example_add_new_samples.py``) + - 00:00.198 + - 0.0 + * - :ref:`sphx_glr_auto_examples_arima_example_seasonal_decomposition.py` (``../examples/arima/example_seasonal_decomposition.py``) + - 00:00.140 + - 0.0 + * - :ref:`sphx_glr_auto_examples_arima_example_auto_arima.py` (``../examples/arima/example_auto_arima.py``) + - 00:00.102 + - 0.0 + * - :ref:`sphx_glr_auto_examples_datasets_example_load_data.py` (``../examples/datasets/example_load_data.py``) + - 00:00.001 + - 0.0 + * - :ref:`sphx_glr_auto_examples_utils_example_array_differencing.py` (``../examples/utils/example_array_differencing.py``) + - 00:00.001 + - 0.0 + * - :ref:`sphx_glr_auto_examples_utils_example_array_concatenation.py` (``../examples/utils/example_array_concatenation.py``) + - 00:00.000 + - 0.0 diff --git a/doc/whats_new.rst b/doc/whats_new.rst index 43daa830e..524c3c025 100644 --- a/doc/whats_new.rst +++ b/doc/whats_new.rst @@ -7,6 +7,12 @@ What's new in pmdarima As new releases of pmdarima are pushed out, the following list (introduced in v0.8.1) will document the latest features. +`v2.0.5 `_ +------------------------------------------------- + +* Remove support for Python 3.7 (end-of-life 2023-06-23) +* Remove support for Python 3.8 (end-of-life 2024-10-07) + `v2.0.4 `_ ------------------------------------------------- diff --git a/pmdarima/arima/tests/test_arima_diagnostics.py b/pmdarima/arima/tests/test_arima_diagnostics.py index c31cd6f99..022265e9f 100644 --- a/pmdarima/arima/tests/test_arima_diagnostics.py +++ b/pmdarima/arima/tests/test_arima_diagnostics.py @@ -76,8 +76,8 @@ def mock_acf_plot(resid, ax, lags): def test_mock_plot_diagnostics(model_type, model): model.fit(lynx) - with patch('statsmodels.graphics.utils.create_mpl_fig', MockMPLFigure),\ - patch('statsmodels.graphics.gofplots.qqplot', mock_qqplot),\ + with patch('statsmodels.graphics.utils.create_mpl_fig', MockMPLFigure), \ + patch('statsmodels.graphics.gofplots.qqplot', mock_qqplot), \ patch('statsmodels.graphics.tsaplots.plot_acf', mock_acf_plot): diag = model.plot_diagnostics(figsize=(10, 12)) diff --git a/pmdarima/datasets/tests/test_load_datasets.py b/pmdarima/datasets/tests/test_load_datasets.py index f867e68c7..df73afd28 100644 --- a/pmdarima/datasets/tests/test_load_datasets.py +++ b/pmdarima/datasets/tests/test_load_datasets.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -from pmdarima.datasets import load_heartrate, load_lynx, load_wineind,\ +from pmdarima.datasets import load_heartrate, load_lynx, load_wineind, \ load_woolyrnq, load_ausbeer, load_austres, load_gasoline, \ load_airpassengers, load_taylor, load_msft, load_sunspots, _base as base diff --git a/setup.py b/setup.py index 1d82068d6..8487c639e 100644 --- a/setup.py +++ b/setup.py @@ -20,8 +20,8 @@ import builtins # Minimum allowed version -MIN_PYTHON = (3, 7) IS_PYTHON_312 = sys.version_info[0] == 3 and sys.version_info[1] >= 12 +MIN_PYTHON = (3, 9) # Hacky (!!), adopted from sklearn. This sets a global variable # so pmdarima __init__ can detect if it's being loaded in the setup @@ -239,8 +239,6 @@ def do_setup(): 'Operating System :: Unix', 'Operating System :: MacOS', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11',