From 0cf9d98c899dccb93d951053fc98ea19a79af4a5 Mon Sep 17 00:00:00 2001 From: Justin Mahlik Date: Tue, 22 Jul 2025 12:08:52 -0500 Subject: [PATCH 1/6] chore(deps): remove requirements file Dependencies are listed in the setup.py, they only need to be updated in one place now --- .github/workflows/python-package.yml | 1 - requirements.txt | 7 ------- 2 files changed, 8 deletions(-) delete mode 100644 requirements.txt diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 1d38526..cbe45c9 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -29,7 +29,6 @@ jobs: run: | python -m pip install --upgrade pip pip install -r test_requirements.txt - pip install -r requirements.txt - name: Install package run: | pip install -e .[distributed,test,ecos] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index b5f5897..0000000 --- a/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -matplotlib -numpy>=1.16.1 -ortools>=9.4,<9.12 -pandas -ropwr>=1.0.0 -scikit-learn>=1.6.0 -scipy>=1.6.0 From 27bb4433cb5785203cb09ff6c619af53b098a7e2 Mon Sep 17 00:00:00 2001 From: Justin Mahlik Date: Tue, 22 Jul 2025 12:09:09 -0500 Subject: [PATCH 2/6] feat(python): add python 3.13 support * Allow ortools <9.15 (9.14 is the current version) * Requires updates to transitive dependencies i.e. cvxpy and potentially ropwr Closes https://github.com/guillermo-navas-palencia/optbinning/issues/364 --- .github/workflows/python-package.yml | 2 +- setup.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index cbe45c9..fa76252 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -16,7 +16,7 @@ jobs: strategy: matrix: - python-version: ['3.9', '3.10', "3.11", "3.12"] + python-version: ['3.9', '3.10', "3.11", "3.12", "3.13"] os: [ubuntu-latest, windows-latest, macos-latest] steps: diff --git a/setup.py b/setup.py index f7f2ce5..b6eaf18 100644 --- a/setup.py +++ b/setup.py @@ -35,7 +35,7 @@ def run(self): install_requires = [ 'matplotlib', 'numpy>=1.16.1', - 'ortools>=9.4,<9.12', + 'ortools>=9.4,<9.15', 'pandas', 'ropwr>=1.0.0', 'scikit-learn>=1.6.0', @@ -93,5 +93,6 @@ def run(self): 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', + 'Programming Language :: Python :: 3.13', ] ) From 32445ee97f1099b91375bfdcc3f5eb7c3aaaf17b Mon Sep 17 00:00:00 2001 From: Reuven Birnbaum Date: Tue, 4 Nov 2025 16:22:16 -0500 Subject: [PATCH 3/6] fix(cp): update maximize in build_model --- optbinning/binning/cp.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/optbinning/binning/cp.py b/optbinning/binning/cp.py index 74e369d..0fd8327 100644 --- a/optbinning/binning/cp.py +++ b/optbinning/binning/cp.py @@ -77,9 +77,11 @@ def build_model(self, divergence, n_nonevent, n_event, trend_change): for j in range(i)]) for i in range(n)]) - regularization * (pmax - pmin)) else: - model.Maximize(sum([(V[i][i] * x[i, i]) + - sum([(V[i][j] - V[i][j+1]) * x[i, j] - for j in range(i)]) for i in range(n)])) + sum_diagonal = sum([V[i][i] * x[i, i] for i in range(n)]) + model.Maximize(sum_diagonal + + sum([ + sum([(V[i][j] - V[i][j+1]) * x[i, j] + for j in range(i)]) for i in range(n)])) # Constraint: unique assignment self.add_constraint_unique_assignment(model, n, x) From a272ad06157cb0a547af96e5bbcc698c57e4fa28 Mon Sep 17 00:00:00 2001 From: Justin Mahlik Date: Fri, 14 Nov 2025 14:31:04 -0600 Subject: [PATCH 4/6] ci(setup-python): bump setup-python to v6 v2 was pretty old related https://github.com/guillermo-navas-palencia/optbinning/issues/364 --- .github/workflows/python-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index fa76252..c65fce5 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -22,7 +22,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Install dependencies From f9b319f9db60083ac3f1433f7effde9572fca28c Mon Sep 17 00:00:00 2001 From: Justin Mahlik Date: Fri, 14 Nov 2025 14:36:12 -0600 Subject: [PATCH 5/6] ci(workflow): run the workflow for the branch related https://github.com/guillermo-navas-palencia/optbinning/issues/364 --- .github/workflows/python-package.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index c65fce5..bb923ec 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -7,7 +7,8 @@ on: push: branches: [master, develop] pull_request: - branches: [master, develop] + # TODO: Rebase this out once it works + branches: [master, develop, py313-support] jobs: build: From 16ca6fefdbd9569658d5e64d5dd781ed2ca139d4 Mon Sep 17 00:00:00 2001 From: Justin Mahlik Date: Fri, 14 Nov 2025 15:12:43 -0600 Subject: [PATCH 6/6] ci(matplotlib): set the backend to non-interactive It's running in ci, so no need for interaction. See https://github.com/actions/setup-python/issues/1102 --- .github/workflows/python-package.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index bb923ec..7db6ff2 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -19,6 +19,9 @@ jobs: python-version: ['3.9', '3.10', "3.11", "3.12", "3.13"] os: [ubuntu-latest, windows-latest, macos-latest] + env: + # We're running in ci, no need for interaction https://matplotlib.org/stable/users/explain/figure/backends.html#static-backends + MPLBACKEND: Agg steps: - uses: actions/checkout@v2