Repository: sdv-dev/RDT (language: python)

Issue:
Add dependency checker
### Problem Description

_As a developer, I'd like to know if a new version of a library we depend on is incompatible or not so that we can make changes to support it._

We want to add an automated dependency checker that will install the latest versions of each dependency, run the tests against our library and then update the latest supported dependencies in a file. The bot can open a pull request to do this.

### Expected behavior

- Add a workflow that
   1. Installs RDT with the latest version of every dependency
   2. If any of the dependencies have a new version, update a file to track this
   3. Make a Pull Request to update the dependency list

To support this, the following changes need to be made:
1. We have to uncap our dependencies

### Additional context

- See [this ](https://github.com/sdv-dev/CTGAN/blob/main/.github/workflows/dependency_checker.yml)for inspiration



Discussion / hints:

Fix patch:
diff --git a/.github/workflows/dependency_checker.yml b/.github/workflows/dependency_checker.yml
new file mode 100644
index 00000000..7dbe8703
--- /dev/null
+++ b/.github/workflows/dependency_checker.yml
@@ -0,0 +1,29 @@
+name: Dependency Checker
+on:
+  workflow_dispatch:
+  schedule:
+    - cron: '0 0 * * 1-5'
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v4
+    - name: Set up Python 3.9
+      uses: actions/setup-python@v5
+      with:
+        python-version: 3.9
+    - name: Install dependencies
+      run: |
+        python -m pip install .[dev]
+        make check-deps OUTPUT_FILEPATH=latest_requirements.txt
+    - name: Create pull request
+      id: cpr
+      uses: peter-evans/create-pull-request@v4
+      with:
+        token: ${{ secrets.GH_ACCESS_TOKEN }}
+        commit-message: Update latest dependencies
+        title: Automated Latest Dependency Updates
+        body: "This is an auto-generated PR with **latest** dependency updates."
+        branch: latest-dependency-update
+        branch-suffix: short-commit-hash
+        base: main
diff --git a/Makefile b/Makefile
index 56901406..7fa06f5b 100644
--- a/Makefile
+++ b/Makefile
@@ -221,6 +221,11 @@ ifeq ($(CHANGELOG_LINES),0)
 	$(error Please insert the release notes in HISTORY.md before releasing)
 endif
 
+.PHONY: check-deps
+check-deps: # Dependency targets
+	$(eval allow_list='numpy=|pandas=|scikit-learn=|scipy=|Faker=|copulas=')
+	pip freeze | grep -v "RDT.git" | grep -E $(allow_list) | sort > $(OUTPUT_FILEPATH)
+
 .PHONY: check-release
 check-release: check-clean check-candidate check-main check-history ## Check if the release can be made
 	@echo "A new release can be made"
diff --git a/pyproject.toml b/pyproject.toml
index 1fd56f8a..36859937 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -20,17 +20,17 @@ license = { text = 'BSL-1.1' }
 requires-python = '>=3.8,<3.12'
 readme = 'README.md'
 dependencies = [
-    "numpy>=1.20.0,<2;python_version<'3.10'",
-    "numpy>=1.23.3,<2;python_version>='3.10'",
+    "numpy>=1.20.0;python_version<'3.10'",
+    "numpy>=1.23.3;python_version>='3.10'",
     "pandas>=1.1.3;python_version<'3.10'",
     "pandas>=1.3.4;python_version>='3.10' and python_version<'3.11'",
     "pandas>=1.5.0;python_version>='3.11'",
-    "scipy>=1.5.4,<2;python_version<'3.10'",
-    "scipy>=1.9.2,<2;python_version>='3.10'",
-    "scikit-learn>=0.24,<2;python_version<'3.10'",
+    "scipy>=1.5.4;python_version<'3.10'",
+    "scipy>=1.9.2;python_version>='3.10'",
+    "scikit-learn>=0.24;python_version<'3.10'",
     "scikit-learn>=1.1.0;python_version>='3.10' and python_version<'3.11'",
-    "scikit-learn>=1.1.3,<2;python_version>='3.11'",
-    'Faker>=17,<20',
+    "scikit-learn>=1.1.3;python_version>='3.11'",
+    'Faker>=17',
 ]
 
 [project.urls]
@@ -44,7 +44,7 @@ dependencies = [
 rdt = { main = 'rdt.cli.__main__:main' }
 
 [project.optional-dependencies]
-copulas = ['copulas>=0.10.0,<0.11',]
+copulas = ['copulas>=0.10.0',]
 test = [
     'rdt[copulas]',
 


Test patch:
diff --git a/latest_requirements.txt b/latest_requirements.txt
new file mode 100644
index 00000000..cc67644e
--- /dev/null
+++ b/latest_requirements.txt
@@ -0,0 +1,6 @@
+Faker==24.4.0
+copulas==0.10.1
+numpy==1.26.4
+pandas==2.2.1
+scikit-learn==1.4.1.post1
+scipy==1.13.0