Skip to content

Commit

Permalink
Merge branch 'release/0.5.7'
Browse files Browse the repository at this point in the history
  • Loading branch information
vnmabus committed Sep 2, 2022
2 parents de542ad + dde4b2b commit 48e1271
Show file tree
Hide file tree
Showing 7 changed files with 66 additions and 33 deletions.
2 changes: 1 addition & 1 deletion dcor/VERSION
@@ -1 +1 @@
0.5.6
0.5.7
59 changes: 31 additions & 28 deletions dcor/__init__.py
Expand Up @@ -10,36 +10,39 @@
import os as _os
import pathlib as _pathlib

from . import distances # noqa
from . import homogeneity # noqa
from . import independence # noqa
from ._dcor import ( # noqa
CompileMode,
DistanceCovarianceMethod,
distance_correlation,
distance_correlation_af_inv,
distance_correlation_af_inv_sqr,
distance_correlation_sqr,
distance_covariance,
distance_covariance_sqr,
distance_stats,
distance_stats_sqr,
u_distance_correlation_sqr,
u_distance_covariance_sqr,
u_distance_stats_sqr,
from . import distances, homogeneity, independence
from ._dcor import (
DistanceCovarianceMethod as DistanceCovarianceMethod,
distance_correlation as distance_correlation,
distance_correlation_af_inv as distance_correlation_af_inv,
distance_correlation_af_inv_sqr as distance_correlation_af_inv_sqr,
distance_correlation_sqr as distance_correlation_sqr,
distance_covariance as distance_covariance,
distance_covariance_sqr as distance_covariance_sqr,
distance_stats as distance_stats,
distance_stats_sqr as distance_stats_sqr,
u_distance_correlation_sqr as u_distance_correlation_sqr,
u_distance_covariance_sqr as u_distance_covariance_sqr,
u_distance_stats_sqr as u_distance_stats_sqr,
)
from ._dcor_internals import ( # noqa
double_centered,
mean_product,
u_centered,
u_complementary_projection,
u_product,
u_projection,
from ._dcor_internals import (
double_centered as double_centered,
mean_product as mean_product,
u_centered as u_centered,
u_complementary_projection as u_complementary_projection,
u_product as u_product,
u_projection as u_projection,
)
from ._energy import EstimationStatistic, energy_distance # noqa
from ._partial_dcor import partial_distance_covariance # noqa
from ._partial_dcor import partial_distance_correlation
from ._rowwise import RowwiseMode, rowwise
from ._energy import (
EstimationStatistic as EstimationStatistic,
energy_distance as energy_distance,
)
from ._partial_dcor import (
partial_distance_correlation,
partial_distance_covariance as partial_distance_covariance,
)
from ._rowwise import RowwiseMode as RowwiseMode, rowwise as rowwise
from ._utils import CompileMode as CompileMode

try:
__version__ = (
Expand Down
6 changes: 3 additions & 3 deletions dcor/_dcor.py
Expand Up @@ -288,7 +288,7 @@ def _distance_sqr_stats_naive_generic(
# Comparisons using a tolerance can change results if the
# covariance has a similar order of magnitude
if denominator == 0.0:
correlation_xy_sqr = xp.asarray(0, dtype=covariance_xy_sqr.dtype)
correlation_xy_sqr = xp.zeros_like(covariance_xy_sqr)
else:
correlation_xy_sqr = covariance_xy_sqr / denominator

Expand Down Expand Up @@ -388,7 +388,7 @@ def _distance_stats_sqr_generic(
# Comparisons using a tolerance can change results if the
# covariance has a similar order of magnitude
if denominator == 0.0:
correlation_xy_sqr = xp.asarray(0, dtype=covariance_xy_sqr.dtype)
correlation_xy_sqr = xp.zeros_like(covariance_xy_sqr)
else:
correlation_xy_sqr = covariance_xy_sqr / denominator

Expand Down Expand Up @@ -1120,7 +1120,7 @@ def distance_correlation_af_inv_sqr(
xp = get_namespace(x, y)

return (
xp.asarray(0, dtype=correlation.dtype)
xp.zeros_like(correlation)
if xp.isnan(correlation)
else correlation
)
Expand Down
2 changes: 1 addition & 1 deletion dcor/_rowwise.py
Expand Up @@ -6,7 +6,7 @@

from . import _dcor
from ._fast_dcov_avl import _rowwise_distance_covariance_sqr_avl_generic
from ._utils import _sqrt, RowwiseMode
from ._utils import RowwiseMode as RowwiseMode, _sqrt


def _generate_rowwise_distance_covariance_sqr(unbiased):
Expand Down
Empty file added dcor/py.typed
Empty file.
29 changes: 29 additions & 0 deletions dcor/tests/test_dcor.py
Expand Up @@ -498,6 +498,19 @@ def test_u_statistic(self) -> None:
"""Test that the fast and naive algorithms for unbiased dcor match."""
self._test_fast_naive_generic(dcor.u_distance_correlation_sqr)

def test_dcor_constant(self) -> None:
"""Test that it works with constant random variables."""
a = np.ones(100)

cov = dcor.distance_covariance(a, a)
self.assertAlmostEqual(cov, 0)

corr = dcor.distance_correlation(a, a)
self.assertAlmostEqual(corr, 0)

corr_af_inv = dcor.distance_correlation_af_inv(a, a)
self.assertAlmostEqual(corr_af_inv, 0)


class TestDcorArrayAPI(unittest.TestCase):
"""Check that the energy distance works with the Array API standard."""
Expand Down Expand Up @@ -583,6 +596,22 @@ def test_distance_correlation(self) -> None:
(1.0, 0.526640387, 1.0),
)

def test_dcor_constant(self) -> None:
"""Test that it works with constant random variables."""
a = np.array_api.ones(100)

cov = dcor.distance_covariance(a, a)
self.assertIsInstance(cov, type(self.a))
self.assertAlmostEqual(cov, 0)

corr = dcor.distance_correlation(a, a)
self.assertIsInstance(corr, type(self.a))
self.assertAlmostEqual(corr, 0)

corr_af_inv = dcor.distance_correlation_af_inv(a, a)
self.assertIsInstance(corr_af_inv, type(self.a))
self.assertAlmostEqual(corr_af_inv, 0)


if __name__ == "__main__":
unittest.main() # pragma: no cover
1 change: 1 addition & 0 deletions setup.py
Expand Up @@ -52,6 +52,7 @@
).read_text().strip()

setup(
name="dcor",
version=version,
include_package_data=True,
packages=find_packages(),
Expand Down

0 comments on commit 48e1271

Please sign in to comment.