Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: uber/causalml
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.15.5
Choose a base ref
...
head repository: uber/causalml
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v0.16.0
Choose a head ref
  • 11 commits
  • 55 files changed
  • 6 contributors

Commits on Jul 16, 2025

  1. Configuration menu
    Copy the full SHA
    1a96e01 View commit details
    Browse the repository at this point in the history

Commits on Sep 12, 2025

  1. add ability to benchmark via synth validation (#847)

    * added notebook to the link of examples
    IyarLin authored Sep 12, 2025
    Configuration menu
    Copy the full SHA
    de4dcfc View commit details
    Browse the repository at this point in the history

Commits on Sep 17, 2025

  1. Bug Fix: Update uplift.pyx with isinstance(v, Numbers.number)) (#849)

    * Update uplift.pyx with isinstance(v, numbers.Number):
    00helloworld authored Sep 17, 2025
    Configuration menu
    Copy the full SHA
    75bd079 View commit details
    Browse the repository at this point in the history

Commits on Sep 26, 2025

  1. Fix #848: Pass estimation_sample_size parameter to individual trees i…

    …n UpliftRandomForestClassifier (#850)
    mohsinm-dev authored Sep 26, 2025
    Configuration menu
    Copy the full SHA
    6f4ec71 View commit details
    Browse the repository at this point in the history

Commits on Nov 7, 2025

  1. #775: Support multiple treatments in CausalTreeRegressor and CausalRa…

    …ndomForestRegressor (#852)
    
    * Add outcome vector y preparation for multiple treatment groups
    * Update CausalTreeRegressor class
    * Add multiple groups support in cython part of causal trees building
    * Add min_group_size parameter to control tree building
    * Update python part of causal trees, keep consistent namings for tree builder
    * Add an option to pass custom matplotlib axes in charts
    * Update Jupyter notebooks with causal trees and forests
    
    * Keep consistent codestyle with black
    
    * Update validate_data arguments support for sklearn <1.6 & >=1.6
    
    * Extend causal tree and forest tests for multiple treatment groups
    
    * Keep consistent codestyle with black
    
    * Fix description in causal trees notebok
    
    * Keep consistent codestyle in tests
    
    * Remove unused cython var in criterion header
    
    * Add separate function for check_y_params
    alexander-pv authored Nov 7, 2025
    Configuration menu
    Copy the full SHA
    50c640d View commit details
    Browse the repository at this point in the history

Commits on Feb 1, 2026

  1. fix: support scipy>=1.16.0 by removing sklearn internal dependency (#861

    )
    
    * fix: remove sklearn.utils._random import to avoid DEFAULT_SEED signature mismatch
    
    - Copy our_rand_r and RAND_R_MAX implementations locally
    - Avoids sklearn 1.6+ DEFAULT_SEED const qualifier change
    - Maintains BSD-3-Clause license compatibility
    
    Co-Authored-By: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
    
    * fix: support scipy>=1.16.0 by removing sklearn internal dependency
    
    Resolves #859
    
    - Remove sklearn.utils._random import from causalml/inference/tree/_tree/_utils.pyx
    - Copy our_rand_r and RAND_R_MAX implementations locally with BSD-3-Clause attribution
    - Support scipy>=1.16.0, numpy>=1.25.2, statsmodels>=0.14.5
    - Requires Python>=3.11
    - Fixes TypeError with sklearn.utils._random.DEFAULT_SEED signature mismatch
    
    The root cause was that Cython auto-imports ALL symbols when using cimport,
    including DEFAULT_SEED which had a signature change in sklearn 1.6+. By
    copying the needed functions locally, we eliminate this dependency and
    ensure compatibility with current sklearn versions.
    
    Tested with: Python 3.11.9, sklearn 1.7.0, scipy 1.17.0, numpy 2.1.3
    All 109 tests passing.
    
    Co-Authored-By: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
    
    * ci: update Python test matrix to 3.11+ only
    
    Remove Python 3.9 and 3.10 from test matrix to match updated
    requires-python>=3.11 requirement.
    
    * docs: add Python 3.11 ReadTheDocs environment file
    
    Add environment-py311-rtd.yml for building docs with Python 3.11
    and updated dependency versions:
    - scipy>=1.16.0
    - numpy>=1.25.2
    - scikit-learn>=1.6.0
    - statsmodels>=0.14.5
    - cython==3.0.11
    
    * docs: update ReadTheDocs config to use Python 3.11 environment
    
    Switch from environment-py39-rtd.yml to environment-py311-rtd.yml
    to match updated Python 3.11+ requirement.
    
    * style: apply black 26.1.0 formatting
    
    - Upgrade black from >=25.1.0 to >=26.1.0 in pyproject.toml
    - Apply black 26.1.0 formatting to 13 files
    - Fixes CI lint errors
    
    * docs: fix copyright year to range 2019-2026
    * fix: replace force_all_finite with ensure_all_finite for sklearn 1.6+
    
    sklearn 1.6+ renamed the parameter from force_all_finite to ensure_all_finite.
    Update _classes.py to use the new parameter name.
    
    * Fix pandas 2.x + numpy 2.x string dtype compatibility
    
    Replace dtype == "object" checks with is_numeric_dtype() checks to handle
    both legacy object dtype and new str dtype introduced in pandas 2.x with
    numpy 2.x.
    
    This fixes test failures in CI where pd.options.future.infer_string=True
    causes string columns to have dtype 'str' instead of 'object', making
    the previous dtype checks fail to detect categorical columns.
    
    Co-Authored-By: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
    
    * Fix LabelEncoder to work with pandas 2.x string dtype
    
    When pandas uses the new string dtype (instead of object), we cannot
    assign numeric values to string-typed columns. LabelEncoder converts
    categorical strings to numeric labels, so we need to:
    
    1. Copy the input DataFrame to avoid modifying the input
    2. Explicitly convert encoded values to float dtype with .astype(float)
    
    This fixes the test_LabelEncoder failure in CI where pandas 2.x with
    numpy 2.x uses dtype 'str' instead of 'object' for string columns.
    
    Co-Authored-By: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
    
    * update the readthedocs config to use the latest Ubuntu and miniforge to fix the build timeout
    * update the docs config, and dependencies
    * update readthedocs conda env file
    * fix lint errors
    
    ---------
    
    Co-authored-by: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
    jeongyoonlee and claude authored Feb 1, 2026
    Configuration menu
    Copy the full SHA
    342a91c View commit details
    Browse the repository at this point in the history

Commits on Feb 2, 2026

  1. 0.15.6 release (#862)

    jeongyoonlee authored Feb 2, 2026
    Configuration menu
    Copy the full SHA
    4145b2f View commit details
    Browse the repository at this point in the history

Commits on Feb 4, 2026

  1. Fix Ubuntu packaging failure by aligning cibuildwheel config with Pyt…

    …hon version requirement (#864)
    
    The cibuildwheel configuration was attempting to build wheels for Python 3.9 and 3.10,
    but the package requires Python >=3.11 (as specified in requires-python). This mismatch
    caused the Ubuntu packaging workflow to fail during validation.
    
    Changes:
    - Updated [tool.cibuildwheel] build list to only include cp311-* and cp312-*
    - Removed cp39-* and cp310-* from the build list
    
    Fixes #863
    
    Co-authored-by: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
    jeongyoonlee and claude authored Feb 4, 2026
    Configuration menu
    Copy the full SHA
    c1362c5 View commit details
    Browse the repository at this point in the history

Commits on Feb 5, 2026

  1. Fix Ubuntu packaging failure - scipy manylinux compatibility (#865)

    * Fix Ubuntu packaging failure by aligning cibuildwheel config with Python version requirement
    
    The cibuildwheel configuration was attempting to build wheels for Python 3.9 and 3.10,
    but the package requires Python >=3.11 (as specified in requires-python). This mismatch
    caused the Ubuntu packaging workflow to fail during validation.
    
    Changes:
    - Updated [tool.cibuildwheel] build list to only include cp311-* and cp312-*
    - Removed cp39-* and cp310-* from the build list
    
    Fixes #863
    
    Co-Authored-By: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
    
    * Pin scipy to <1.17.0 to fix Ubuntu packaging failure
    
    The Ubuntu packaging build was failing because scipy 1.17.0 (released
    January 2026) only provides manylinux_2_27/manylinux_2_28 wheels, which
    are incompatible with the manylinux2014 (manylinux_2_17) containers used
    by cibuildwheel. This caused pip to fall back to building scipy from
    source, which failed due to missing OpenBLAS dependency.
    
    By pinning scipy to <1.17.0, we ensure pip only selects versions that
    have compatible manylinux2014 wheels (like scipy 1.16.3), preventing the
    source build fallback and resolving the build failure.
    
    Fixes #863
    
    Co-Authored-By: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
    
    * Address CoPilot review comments - ensure consistency across config files
    
    1. Update scipy constraint in RTD environment file
       - Pin scipy to <1.17.0 in docs/environment-py311-rtd.yml
       - Prevents manylinux2014 compatibility issues during doc builds
    
    2. Update GitHub Actions workflows for Python 3.11+ requirement
       - Remove Python 3.9 and 3.10 from test-build-from-source.yml
       - Remove Python 3.9 and 3.10 from test-pypi-install.yml
       - Aligns with requires-python = ">=3.11" in pyproject.toml
    
    3. Explicitly set manylinux image in cibuildwheel config
       - Add manylinux-x86_64-image = "manylinux2014"
       - Add manylinux-aarch64-image = "manylinux2014"
       - Ensures consistent manylinux level across all Python versions
    
    Co-Authored-By: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
    
    ---------
    
    Co-authored-by: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
    jeongyoonlee and claude authored Feb 5, 2026
    Configuration menu
    Copy the full SHA
    87dd7f1 View commit details
    Browse the repository at this point in the history

Commits on Feb 6, 2026

  1. Remove deprecated macos-13 and upgrade cibuildwheel to v3.3.1 (#867)

    Changes:
    - Removed macos-13 from build matrix (GitHub has deprecated this runner)
    - Upgraded cibuildwheel from v2.22 to v3.3.1 (latest as of Jan 2026)
    
    cibuildwheel v3.0+ changes:
    - Requires Python 3.11+ to run (compatible with CausalML's requirements)
    - Dropped support for building Python 3.6/3.7 wheels (not needed)
    - Added CPython 3.14 support
    
    Co-authored-by: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
    jeongyoonlee and claude authored Feb 6, 2026
    Configuration menu
    Copy the full SHA
    9b6f20a View commit details
    Browse the repository at this point in the history
  2. Release v0.16.0: Upgrade to manylinux_2_28 and remove scipy version c…

    …onstraints (#869)
    
    * Upgrade to manylinux_2_28 and remove scipy version constraints
    
    This PR modernizes CausalML's wheel distribution by upgrading from
    manylinux2014 to manylinux_2_28, enabling compatibility with both
    scipy 1.16.x and 1.17.x without version pinning.
    
    ## Changes
    
    ### 1. Upgrade manylinux platform tag (pyproject.toml)
    - **Before:** manylinux2014 (glibc 2.17, CentOS 7 base - EOL June 2024)
    - **After:** manylinux_2_28 (glibc 2.28, modern standard)
    
    ### 2. Remove scipy version constraints
    - **pyproject.toml:** `scipy>=1.16.0,<1.17.0` → `scipy>=1.16.0`
    - **docs/environment-py311-rtd.yml:** Removed upper bound constraint
    - **Benefit:** Support both scipy 1.16.x and 1.17.x automatically
    
    ### 3. Document system requirements (docs/installation.rst)
    Added new "System Requirements" section documenting:
    - Python 3.11+ requirement
    - Minimum Linux distributions (Ubuntu 18.04+, RHEL 8+, Debian 10+)
    - Build-from-source instructions for older systems
    
    ## Why This Change?
    
    ### Problems with manylinux2014:
    - Based on CentOS 7 (EOL June 2024)
    - Required version pinning to avoid scipy 1.17.0
    - Prevented access to newer dependency features
    - Maintenance burden with explicit constraints
    
    ### Benefits of manylinux_2_28:
    - Modern, actively maintained standard
    - Compatible with scipy 1.16.x AND 1.17.x
    - No version pinning needed - pip selects the best version
    - Future-proof for upcoming dependencies
    - Cleaner dependency declarations
    
    ## Compatibility Impact
    
    ### Systems That Work:
    - Ubuntu 18.04 LTS+ (glibc 2.27+)
    - RHEL/CentOS 8+ (glibc 2.28+)
    - Debian 10+ (glibc 2.28+)
    - All recent macOS and Windows versions
    
    ### Systems Requiring Source Build:
    - RHEL/CentOS 7 (glibc 2.17)
    - Ubuntu 16.04 and earlier
    - Debian 9 and earlier
    
    **Note:** CentOS 7 reached EOL in June 2024, and Ubuntu 16.04 EOL
    was April 2021, making this upgrade aligned with industry standards.
    
    ## scipy Compatibility
    
    CausalML uses these scipy modules:
    - scipy.sparse, scipy.stats
    - scipy.optimize (fsolve, minimize)
    - scipy.special (expit, logit)
    - scipy.interpolate (UnivariateSpline)
    
    **None of these are affected by scipy 1.17.0 breaking changes**, which
    only impact scipy.spatial.transform. Both scipy 1.16.x and 1.17.x work
    correctly with CausalML.
    
    ## Testing
    
    Pre-built wheels will now use manylinux_2_28. Users can install with
    either scipy version:
    - scipy 1.16.3 (stable, has manylinux2014 wheels)
    - scipy 1.17.0+ (latest, has manylinux_2_28 wheels)
    
    pip will automatically select the appropriate version based on the
    user's system capabilities.
    
    Supersedes: #868 (build-system fix no longer needed with manylinux_2_28)
    Closes: #863
    
    Co-Authored-By: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
    
    * Fix glibc version requirement: manylinux_2_28 requires glibc 2.28, not 2.27
    
    Copilot correctly identified that Ubuntu 18.04 is NOT compatible with
    manylinux_2_28 wheels. Ubuntu 18.04 has glibc 2.27, but manylinux_2_28
    requires glibc 2.28 or later.
    
    Changes:
    - Updated glibc requirement from 2.27 to 2.28
    - Changed minimum Ubuntu version from 18.04 to 20.04 LTS (has glibc 2.31)
    - Added Ubuntu 18.04 to the list of distributions requiring source build
    
    This ensures users have accurate information about system requirements.
    
    Co-Authored-By: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
    
    * Bump version to 0.16.0 and update changelog for breaking changes
    
    This release introduces breaking changes in Linux wheel compatibility
    due to the manylinux_2_28 upgrade, warranting a minor version bump
    from 0.15.6 to 0.16.0.
    
    Changes:
    - Updated version in pyproject.toml: 0.15.6 → 0.16.0
    - Added comprehensive 0.16.0 changelog entry documenting:
      - Breaking change: manylinux_2_28 requirement (glibc 2.28+)
      - Affected systems and migration path
      - scipy version pin removal
      - Related PRs (#869, #867, #865, #864)
    
    Breaking Changes:
    - Pre-built wheels require Ubuntu 20.04+, RHEL 8+, Debian 10+ (glibc 2.28+)
    - Users on Ubuntu 18.04, RHEL 7, etc. must build from source
    - Python 3.11+ required (already enforced in previous release)
    
    This follows semantic versioning: minor version bump for backward-
    incompatible changes to wheel distribution.
    
    Co-Authored-By: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
    
    ---------
    
    Co-authored-by: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
    jeongyoonlee and claude authored Feb 6, 2026
    Configuration menu
    Copy the full SHA
    db11de2 View commit details
    Browse the repository at this point in the history
Loading