From f03e0bdcf0837e7fceb3e9a6b61a95964a5103c9 Mon Sep 17 00:00:00 2001 From: Ricardo Vieira Date: Tue, 15 Nov 2022 08:52:48 +0100 Subject: [PATCH 1/8] Make xhistogram dependency optional --- pymc_experimental/distributions/histogram_utils.py | 12 +++++++++++- requirements.txt | 1 - 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/pymc_experimental/distributions/histogram_utils.py b/pymc_experimental/distributions/histogram_utils.py index 1829e9f9..608615ae 100644 --- a/pymc_experimental/distributions/histogram_utils.py +++ b/pymc_experimental/distributions/histogram_utils.py @@ -17,7 +17,6 @@ import numpy as np import pymc as pm -import xhistogram.core from numpy.typing import ArrayLike try: @@ -26,6 +25,11 @@ except ImportError: dask = None +try: + import xhistogram.core +except ImportError: + xhistogram = None + __all__ = ["quantile_histogram", "discrete_histogram", "histogram_approximation"] @@ -33,6 +37,9 @@ def quantile_histogram( data: ArrayLike, n_quantiles=1000, zero_inflation=False ) -> Dict[str, ArrayLike]: + if xhistogram is None: + raise RuntimeError("quantile_histogram requires xhistogram package") + if dask and isinstance(data, (dask.dataframe.Series, dask.dataframe.DataFrame)): data = data.to_dask_array(lengths=True) if zero_inflation: @@ -67,6 +74,9 @@ def quantile_histogram( def discrete_histogram(data: ArrayLike, min_count=None) -> Dict[str, ArrayLike]: + if xhistogram is None: + raise RuntimeError("discrete_histogram requires xhistogram package") + if dask and isinstance(data, (dask.dataframe.Series, dask.dataframe.DataFrame)): data = data.to_dask_array(lengths=True) mid, count_uniq = np.unique(data, return_counts=True) diff --git a/requirements.txt b/requirements.txt index e820d8cb..48d2355a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1 @@ pymc>=4.3.0 -xhistogram From 9ec4c8a215192aa815510053c387bef72cfe0527 Mon Sep 17 00:00:00 2001 From: Maxim Kochurov Date: Wed, 16 Nov 2022 18:11:23 +0300 Subject: [PATCH 2/8] Update setup.py --- setup.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a8902966..1a1f59f0 100644 --- a/setup.py +++ b/setup.py @@ -81,5 +81,9 @@ def get_version(): classifiers=classifiers, python_requires=">=3.8", install_requires=install_reqs, - extras_requires=dict(dask=["dask[all]"]), + extras_requires=dict( + dask=["dask[all]"], + histogram=["xhistogram"], + complete=["dask[all]", "xhistogram"] + ), ) From 1eaf6611fda9f57b277ac4926dcf3a2ea0ae880a Mon Sep 17 00:00:00 2001 From: Maxim Kochurov Date: Thu, 17 Nov 2022 09:10:39 +0300 Subject: [PATCH 3/8] Update setup.py Co-authored-by: Ricardo Vieira <28983449+ricardoV94@users.noreply.github.com> --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 1a1f59f0..3ae48e8c 100644 --- a/setup.py +++ b/setup.py @@ -84,6 +84,6 @@ def get_version(): extras_requires=dict( dask=["dask[all]"], histogram=["xhistogram"], - complete=["dask[all]", "xhistogram"] + all=["dask[all]", "xhistogram"] ), ) From b827fc2629c8b84eb1ff1c26cbb0e8bdbd7d4825 Mon Sep 17 00:00:00 2001 From: Maxim Kochurov Date: Thu, 17 Nov 2022 09:12:33 +0300 Subject: [PATCH 4/8] Update setup.py --- setup.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 3ae48e8c..3d545988 100644 --- a/setup.py +++ b/setup.py @@ -82,8 +82,6 @@ def get_version(): python_requires=">=3.8", install_requires=install_reqs, extras_requires=dict( - dask=["dask[all]"], - histogram=["xhistogram"], - all=["dask[all]", "xhistogram"] + dask=["dask[all]"], histogram=["xhistogram"], all=["dask[all]", "xhistogram"] ), ) From 8ce3301b6b035b78488b96a1bc5ac4df8f52f9c1 Mon Sep 17 00:00:00 2001 From: Maxim Kochurov Date: Fri, 18 Nov 2022 15:36:19 +0300 Subject: [PATCH 5/8] Update setup.py --- setup.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 3d545988..47e4c472 100644 --- a/setup.py +++ b/setup.py @@ -82,6 +82,8 @@ def get_version(): python_requires=">=3.8", install_requires=install_reqs, extras_requires=dict( - dask=["dask[all]"], histogram=["xhistogram"], all=["dask[all]", "xhistogram"] + dask_histogram=["dask[all]", "xhistogram"], + histogram=["xhistogram"], + all=["dask[all]", "xhistogram"], ), ) From eb73ae03a51717926535e93eacea10d1c8c33418 Mon Sep 17 00:00:00 2001 From: Maxim Kochurov Date: Fri, 18 Nov 2022 15:45:41 +0300 Subject: [PATCH 6/8] pretty extras require --- setup.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/setup.py b/setup.py index 47e4c472..574c1c4d 100644 --- a/setup.py +++ b/setup.py @@ -15,7 +15,7 @@ import re from codecs import open from os.path import dirname, join, realpath - +import itertools from setuptools import find_packages, setup DISTNAME = "pymc_experimental" @@ -46,10 +46,14 @@ LONG_DESCRIPTION = buff.read() REQUIREMENTS_FILE = join(PROJECT_ROOT, "requirements.txt") +DEV_REQUIREMENTS_FILE = join(PROJECT_ROOT, "requirements-dev.txt") with open(REQUIREMENTS_FILE) as f: install_reqs = f.read().splitlines() +with open(DEV_REQUIREMENTS_FILE) as f: + dev_install_reqs = f.read().splitlines() + def get_version(): VERSIONFILE = join("pymc_experimental", "__init__.py") @@ -62,6 +66,14 @@ def get_version(): raise RuntimeError(f"Unable to find version in {VERSIONFILE}.") +extras_require = dict( + dask_histogram=["dask[complete]", "xhistogram"], + histogram=["xhistogram"], +) +extras_require["all"] = sorted(set(itertools.chain.from_iterable(extras_require.values()))) +extras_require["dev"] = dev_install_reqs + + if __name__ == "__main__": setup( name=DISTNAME, @@ -81,9 +93,5 @@ def get_version(): classifiers=classifiers, python_requires=">=3.8", install_requires=install_reqs, - extras_requires=dict( - dask_histogram=["dask[all]", "xhistogram"], - histogram=["xhistogram"], - all=["dask[all]", "xhistogram"], - ), + extras_require=extras_require, ) From cb6daca14df3e8ce7c9eade5ec6cc7d8bd2a1936 Mon Sep 17 00:00:00 2001 From: Maxim Kochurov Date: Sat, 19 Nov 2022 09:55:21 +0300 Subject: [PATCH 7/8] Update setup.py Co-authored-by: Ricardo Vieira <28983449+ricardoV94@users.noreply.github.com> --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 574c1c4d..da085320 100644 --- a/setup.py +++ b/setup.py @@ -70,7 +70,7 @@ def get_version(): dask_histogram=["dask[complete]", "xhistogram"], histogram=["xhistogram"], ) -extras_require["all"] = sorted(set(itertools.chain.from_iterable(extras_require.values()))) +extras_require["complete"] = sorted(set(itertools.chain.from_iterable(extras_require.values()))) extras_require["dev"] = dev_install_reqs From 0cad3aecd312ed5bb31267fee91439ec0be401f3 Mon Sep 17 00:00:00 2001 From: Maxim Kochurov Date: Mon, 21 Nov 2022 20:46:13 +0300 Subject: [PATCH 8/8] fix black --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 574c1c4d..ca709190 100644 --- a/setup.py +++ b/setup.py @@ -12,10 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. +import itertools import re from codecs import open from os.path import dirname, join, realpath -import itertools + from setuptools import find_packages, setup DISTNAME = "pymc_experimental"