Skip to content

BUG: fix date_range inclusive filtering with periods #33344

BUG: fix date_range inclusive filtering with periods

BUG: fix date_range inclusive filtering with periods #33344

Workflow file for this run

name: Unit Tests
on:
push:
branches:
- main
- 3.0.x
pull_request:
branches:
- main
- 3.0.x
paths-ignore:
- "doc/**"
- "web/**"
permissions: {}
defaults:
run:
shell: bash -el {0}
jobs:
ubuntu:
runs-on: ${{ matrix.platform }}
permissions:
contents: read
timeout-minutes: 90
strategy:
matrix:
platform: [ubuntu-24.04, ubuntu-24.04-arm]
environment: [py311, py312, py313, py314]
# Prevent the include jobs from overriding other jobs
pytest_marker_expression: [""]
pandas_future_infer_string: ["1"]
pandas_future_python_scalars: ["0"]
include:
- name: "Downstream Compat"
environment: downstream
pytest_marker_expression: "not slow and not network and not single_cpu"
pytest_target: "pandas/tests/test_downstream.py"
platform: ubuntu-24.04
- name: "Minimum Versions"
environment: minimum-versions
pytest_marker_expression: "not slow and not network and not single_cpu"
platform: ubuntu-24.04
- name: "Freethreading"
environment: py313-freethreading
pytest_marker_expression: "not slow and not network and not single_cpu"
platform: ubuntu-24.04
- name: "Without PyArrow"
environment: no-pyarrow
pytest_marker_expression: "not slow and not network and not single_cpu"
platform: ubuntu-24.04
- name: "Locale: it_IT"
environment: py313
pytest_marker_expression: "not slow and not network and not single_cpu"
extra_apt: "language-pack-it"
# Use the utf8 version as the default, it has no bad side-effect.
lang: "it_IT.utf8"
lc_all: "it_IT.utf8"
# Also install it_IT (its encoding is ISO8859-1) but do not activate it.
# It will be temporarily activated during tests with locale.setlocale
extra_loc: "it_IT"
platform: ubuntu-24.04
- name: "Locale: zh_CN"
environment: py313
pytest_marker_expression: "not slow and not network and not single_cpu"
extra_apt: "language-pack-zh-hans"
# Use the utf8 version as the default, it has no bad side-effect.
lang: "zh_CN.utf8"
lc_all: "zh_CN.utf8"
# Also install zh_CN (its encoding is gb2312) but do not activate it.
# It will be temporarily activated during tests with locale.setlocale
extra_loc: "zh_CN"
platform: ubuntu-24.04
- name: "PANDAS_FUTURE_INFER_STRING=0"
environment: py313
pandas_future_infer_string: "0"
platform: ubuntu-24.04
- name: "PANDAS_FUTURE_PYTHON_SCALARS=1"
environment: py313
pandas_future_python_scalars: "1"
platform: ubuntu-24.04
- name: "Numpy Nightly"
environment: numpy-nightly
pytest_marker_expression: "not slow and not network and not single_cpu"
platform: ubuntu-24.04
- name: "Pyarrow Nightly"
environment: pyarrow-nightly
pytest_marker_expression: "not slow and not network and not single_cpu"
platform: ubuntu-24.04
fail-fast: false
name: ${{ matrix.name || format('{0} {1}', matrix.platform, matrix.environment) }}
env:
LANG: ${{ matrix.lang || 'C.UTF-8' }}
LC_ALL: ${{ matrix.lc_all || '' }}
concurrency:
# https://github.community/t/concurrecy-not-work-for-push/183068/7
group: ${{ github.event_name == 'push' && github.run_number || github.ref }}-${{ matrix.environment }}-${{ matrix.pytest_marker_expression }}-${{ matrix.extra_apt || '' }}-${{ matrix.pandas_future_infer_string }}-${{ matrix.platform }}
cancel-in-progress: true
services:
mysql:
image: mysql:9
env:
MYSQL_ALLOW_EMPTY_PASSWORD: yes
MYSQL_DATABASE: pandas
options: >-
--health-cmd "mysqladmin ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 3306:3306
postgres:
image: postgres:18
env:
PGUSER: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: pandas
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
moto:
image: motoserver/moto:5.1.18
ports:
- 5000:5000
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
- name: Extra installs
# https://pytest-qt.readthedocs.io/en/latest/troubleshooting.html#github-actions-azure-pipelines-travis-ci-and-gitlab-ci-cd
run: sudo apt-get update && sudo apt-get install -y libegl1 libopengl0 ${{ matrix.extra_apt || ''}}
- name: Generate extra locales
# These extra locales will be available for locale.setlocale() calls in tests
run: sudo locale-gen ${{ matrix.extra_loc }}
if: ${{ matrix.extra_loc }}
- name: Create virtual environment with Pixi
uses: ./.github/actions/setup-pixi
with:
environment: ${{ matrix.environment }}
- name: Build pandas
id: build
# matrix.name == 'Minimum Versions' can be removed once Cython >=3.2
# python3.14t/cpython/pyatomic_gcc.h:63:10:
# error: ‘__atomic_fetch_add_8’
# writing 8 bytes into a region of size 0 overflows the destination [-Werror=stringop-overflow=]
run: |
pixi run \
--environment ${{ matrix.environment }} \
build-pandas \
--editable \
${{ ! (matrix.name == 'Freethreading' || matrix.name == 'Minimum Versions') && '-Csetup-args="--werror"' || '' }}
shell: bash -euox pipefail {0}
- name: Test (not single_cpu)
uses: ./.github/actions/run-tests
id: test-not-single-cpu
env:
# Ensure port matches moto service
PANDAS_MOTO_URL: "http://localhost:5000"
with:
environment: ${{ matrix.environment }}
numprocesses: 'auto'
pytest_marker_expression: ${{ matrix.pytest_marker_expression == '' && 'not single_cpu' || matrix.pytest_marker_expression }}
pytest_target: ${{ matrix.pytest_target || 'pandas' }}
pandas_future_infer_string: ${{ matrix.pandas_future_infer_string || '1' }}
pandas_future_python_scalars: ${{ matrix.pandas_future_python_scalars || '0' }}
- name: Test (single_cpu)
id: test-single-cpu
uses: ./.github/actions/run-tests
env:
# Ensure port matches moto service
PANDAS_MOTO_URL: "http://localhost:5000"
with:
environment: ${{ matrix.environment }}
numprocesses: 0
pytest_marker_expression: 'single_cpu'
pytest_target: ${{ matrix.pytest_target || 'pandas' }}
pandas_future_infer_string: ${{ matrix.pandas_future_infer_string || '1' }}
pandas_future_python_scalars: ${{ matrix.pandas_future_python_scalars || '0' }}
if: ${{ matrix.pytest_marker_expression == '' && (always() && steps.build.outcome == 'success')}}
- name: Upload test coverage to Codecov
uses: codecov/codecov-action@1af58845a975a7985b0beb0cbe6fbbb71a41dbad # v5
with:
flags: unittests
name: codecov-pandas-${{ matrix.name || format('{0}-{1}', matrix.platform, matrix.environment) }}
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
disable_telem: true
# coverage report appended for single_cpu + not single_cpu steps
# provide most hollistic coverage report
if: ${{ steps.test-not-single-cpu.outcome == 'success' && steps.test-single-cpu.outcome == 'success' }}
macos-windows:
permissions:
contents: read
timeout-minutes: 90
strategy:
matrix:
os: [macos-15-intel, macos-15, windows-2025]
environment: [py311, py312, py313, py314]
fail-fast: false
runs-on: ${{ matrix.os }}
name: ${{ format('{0} {1}', matrix.os, matrix.environment) }}
concurrency:
# https://github.community/t/concurrecy-not-work-for-push/183068/7
group: ${{ github.event_name == 'push' && github.run_number || github.ref }}-${{ matrix.environment }}-${{ matrix.os }}
cancel-in-progress: true
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
- name: Create virtual environment with Pixi
uses: ./.github/actions/setup-pixi
with:
environment: ${{ matrix.environment }}
- name: Remove link.EXE for Windows
# https://github.com/Quansight-Labs/uarray/pull/310#issuecomment-3872989816
run: rm /c/Program\ Files/Git/usr/bin/link.EXE
if: ${{ matrix.os == 'windows-2025' }}
- name: Build pandas
id: build
run: |
pixi run \
--environment ${{ matrix.environment }} \
build-pandas \
--editable
shell: bash -euox pipefail {0}
- name: Test
uses: ./.github/actions/run-tests
with:
environment: ${{ matrix.environment }}
numprocesses: 'auto'
pytest_marker_expression: 'not slow and not db and not network and not single_cpu'
pytest_target: 'pandas'
Linux-32-bit:
runs-on: ubuntu-24.04
permissions:
contents: read
container:
image: quay.io/pypa/manylinux_2_28_i686
options: --platform linux/386
steps:
- name: Checkout pandas Repo
# actions/checkout does not work since it requires node
run: |
git config --global --add safe.directory $PWD
if [ $GITHUB_EVENT_NAME != pull_request ]; then
git clone --recursive --branch=$GITHUB_REF_NAME https://github.com/${GITHUB_REPOSITORY}.git $GITHUB_WORKSPACE
git reset --hard $GITHUB_SHA
else
git clone --recursive https://github.com/${GITHUB_REPOSITORY}.git $GITHUB_WORKSPACE
git fetch origin $GITHUB_REF:my_ref_name
git checkout $GITHUB_BASE_REF
git -c user.email="you@example.com" merge --no-commit my_ref_name
fi
- name: Build environment and Run Tests
# https://github.com/numpy/numpy/issues/24703#issuecomment-1722379388
run: |
/opt/python/cp313-cp313/bin/python -m venv ~/virtualenvs/pandas-dev
. ~/virtualenvs/pandas-dev/bin/activate
python -m pip install --no-cache-dir -U pip wheel meson[ninja]==1.2.3 meson-python==0.18.0
python -m pip install numpy -Csetup-args="-Dallow-noblas=true"
python -m pip install --no-cache-dir versioneer[toml] cython python-dateutil pytest>=8.3.4 pytest-xdist>=3.6.1 hypothesis>=6.116.0 pytest-cov
python -m pip install --no-cache-dir --no-build-isolation -e . -Csetup-args="--werror"
python -m pip list --no-cache-dir
python -m pytest -m 'not slow and not network and not clipboard and not single_cpu' pandas
concurrency:
# https://github.community/t/concurrecy-not-work-for-push/183068/7
group: ${{ github.event_name == 'push' && github.run_number || github.ref }}-32bit
cancel-in-progress: true
Linux-Musl:
runs-on: ubuntu-24.04
permissions:
contents: read
container:
image: quay.io/pypa/musllinux_1_2_x86_64
steps:
- name: Checkout pandas Repo
# actions/checkout does not work since it requires node
run: |
git config --global --add safe.directory $PWD
if [ $GITHUB_EVENT_NAME != pull_request ]; then
git clone --recursive --branch=$GITHUB_REF_NAME https://github.com/${GITHUB_REPOSITORY}.git $GITHUB_WORKSPACE
git reset --hard $GITHUB_SHA
else
git clone --recursive https://github.com/${GITHUB_REPOSITORY}.git $GITHUB_WORKSPACE
git fetch origin $GITHUB_REF:my_ref_name
git checkout $GITHUB_BASE_REF
git -c user.email="you@example.com" merge --no-commit my_ref_name
fi
- name: Configure System Packages
run: |
apk update
apk add musl-locales
- name: Build environment
run: |
/opt/python/cp313-cp313/bin/python -m venv ~/virtualenvs/pandas-dev
. ~/virtualenvs/pandas-dev/bin/activate
python -m pip install --no-cache-dir -U pip wheel meson-python==0.18.0 meson[ninja]==1.2.3
python -m pip install --no-cache-dir versioneer[toml] cython numpy python-dateutil pytest>=8.3.4 pytest-xdist>=3.6.1 hypothesis>=6.116.0 pytest-cov
python -m pip install --no-cache-dir --no-build-isolation -e . -Csetup-args="--werror"
python -m pip list --no-cache-dir
- name: Run Tests
run: |
. ~/virtualenvs/pandas-dev/bin/activate
python -m pytest -m 'not slow and not network and not clipboard and not single_cpu' pandas
concurrency:
# https://github.community/t/concurrecy-not-work-for-push/183068/7
group: ${{ github.event_name == 'push' && github.run_number || github.ref }}-musl
cancel-in-progress: true
python-dev:
# This job may or may not run depending on the state of the next
# unreleased Python version. DO NOT DELETE IT.
#
# In general, this will remain frozen(present, but not running) until:
# - The next unreleased Python version has released beta 1
# - This version should be available on GitHub Actions.
# - Our required build/runtime dependencies(numpy, Cython, python-dateutil)
# support that unreleased Python version.
# To unfreeze, comment out the ``if: false`` condition, and make sure you update
# the name of the workflow and Python version in actions/setup-python ``python-version:``
#
# After it has been unfrozen, this file should remain unfrozen(present, and running) until:
# - The next Python version has been officially released.
# OR
# - Most/All of our optional dependencies support the next Python version AND
# - The next Python version has released a rc(we are guaranteed a stable ABI).
# To freeze this file, uncomment out the ``if: false`` condition, and migrate the jobs
# to the corresponding posix/windows-macos/sdist etc. workflows.
# Feel free to modify this comment as necessary.
if: false
permissions:
contents: read
defaults:
run:
shell: bash -eou pipefail {0}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04, macos-15-intel, macos-15, windows-2025]
timeout-minutes: 90
concurrency:
# https://github.community/t/concurrecy-not-work-for-push/183068/7
group: ${{ github.event_name == 'push' && github.run_number || github.ref }}-${{ matrix.os }}-python-dev
cancel-in-progress: true
env:
PYTEST_WORKERS: "auto"
PATTERN: "not slow and not network and not clipboard and not single_cpu"
PYTEST_TARGET: pandas
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
- name: Set up Python Dev Version
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: '3.15-dev'
- name: Build Environment
run: |
python --version
python -m pip install --upgrade pip wheel meson[ninja]==1.2.3 meson-python==0.18.0
python -m pip install --pre --extra-index-url https://pypi.anaconda.org/scientific-python-nightly-wheels/simple numpy
python -m pip install versioneer[toml] python-dateutil tzdata cython hypothesis>=6.116.0 pytest>=8.3.4 pytest-xdist>=3.6.1 pytest-cov
python -m pip install -ve . --no-build-isolation --no-index --no-deps -Csetup-args="--werror"
python -m pip list
- name: Run Tests
run: ci/run_tests.sh
# NOTE: this job must be kept in sync with the Pyodide build job in wheels.yml
emscripten:
# Note: the Python version, Emscripten toolchain version are determined
# by the Pyodide version. The appropriate versions can be found in the
# Pyodide repodata.json "info" field, or in the Makefile.envs file:
# https://github.com/pyodide/pyodide/blob/stable/Makefile.envs#L2
# The Node.js version can be determined via Pyodide:
# https://pyodide.org/en/stable/usage/index.html#node-js
name: Pyodide build
runs-on: ubuntu-24.04
permissions:
contents: read
concurrency:
# https://github.community/t/concurrecy-not-work-for-push/183068/7
group: ${{ github.event_name == 'push' && github.run_number || github.ref }}-wasm
cancel-in-progress: true
steps:
- name: Checkout pandas Repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
- name: Set up Python for pyodide-build
id: setup-python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: '3.12'
- name: Set up Emscripten toolchain
uses: mymindstorm/setup-emsdk@6ab9eb1bda2574c4ddb79809fc9247783eaf9021 # v14
with:
version: '3.1.58'
actions-cache-folder: emsdk-cache
- name: Install pyodide-build
run: pip install "pyodide-build>=0.29.2"
- name: Build pandas for Pyodide
run: |
pyodide build
- name: Set up Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
with:
node-version: '20'
- name: Set up Pyodide virtual environment
env:
pyodide-version: '0.27.1'
run: |
pyodide xbuildenv install ${{ env.pyodide-version }}
pyodide venv .venv-pyodide
source .venv-pyodide/bin/activate
pip install dist/*.whl
- name: Test pandas for Pyodide
run: |
source .venv-pyodide/bin/activate
pip install pytest hypothesis pytest-cov
# do not import pandas from the checked out repo
cd ..
python -c 'import pandas as pd; pd.test(extra_args=["-m not clipboard and not single_cpu and not slow and not network and not db"])'