From 6a96d8e8ae4dfa370ca590797bc1eaa895de2777 Mon Sep 17 00:00:00 2001 From: Andrew Montanez Date: Thu, 10 Aug 2023 16:03:37 -0500 Subject: [PATCH 1/6] =?UTF-8?q?Bump=20version:=200.9.1=20=E2=86=92=200.9.2?= =?UTF-8?q?.dev0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- copulas/__init__.py | 2 +- setup.cfg | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/copulas/__init__.py b/copulas/__init__.py index 807cae35..00ae675c 100644 --- a/copulas/__init__.py +++ b/copulas/__init__.py @@ -4,7 +4,7 @@ __author__ = 'DataCebo, Inc.' __email__ = 'info@sdv.dev' -__version__ = '0.9.1' +__version__ = '0.9.2.dev0' import contextlib import importlib diff --git a/setup.cfg b/setup.cfg index 184ba5cb..1626f339 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.9.1 +current_version = 0.9.2.dev0 commit = True tag = True parse = (?P\d+)\.(?P\d+)\.(?P\d+)(\.(?P[a-z]+)(?P\d+))? diff --git a/setup.py b/setup.py index a6b0dec0..1a757695 100644 --- a/setup.py +++ b/setup.py @@ -136,6 +136,6 @@ test_suite='tests', tests_require=tests_require, url='https://github.com/sdv-dev/Copulas', - version='0.9.1', + version='0.9.2.dev0', zip_safe=False, ) From bdd45c394c6be55fd94a58190409e8c77a9461c5 Mon Sep 17 00:00:00 2001 From: Andrew Montanez Date: Wed, 13 Sep 2023 10:34:51 -0500 Subject: [PATCH 2/6] Switch default branch from master to main (#361) --- CONTRIBUTING.rst | 6 +++--- INSTALL.md | 4 ++-- Makefile | 34 +++++++++++++++++----------------- README.md | 6 +++--- RELEASE.md | 4 ++-- docs/conf.py | 2 +- 6 files changed, 28 insertions(+), 28 deletions(-) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index ad324f47..e94f60dc 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -166,16 +166,16 @@ Release Workflow The process of releasing a new version involves several steps combining both ``git`` and ``bumpversion`` which, briefly: -1. Merge what is in ``master`` branch into ``stable`` branch. +1. Merge what is in ``main`` branch into ``stable`` branch. 2. Update the version in ``setup.cfg``, ``copulas/__init__.py`` and ``HISTORY.md`` files. 3. Create a new TAG pointing at the correspoding commit in ``stable`` branch. -4. Merge the new commit from ``stable`` into ``master``. +4. Merge the new commit from ``stable`` into ``main``. 5. Update the version in ``setup.cfg`` and ``copulas/__init__.py`` to open the next development interation. **Note:** Before starting the process, make sure that ``HISTORY.md`` has a section titled **Unreleased** with the list of changes that will be included in the new version, and that -these changes are committed and available in ``master`` branch. +these changes are committed and available in ``main`` branch. Normally this is just a list of the Pull Requests that have been merged since the latest version. Once this is done, run of the following commands: diff --git a/INSTALL.md b/INSTALL.md index 531634bb..9aad1ac6 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -47,12 +47,12 @@ make install If you intend to modify the source code or contribute to the project you will need to install it from the source using the `make install-develop` command. In this case, we -recommend you to branch from `master` first: +recommend you to branch from `main` first: ```bash git clone git@github.com:sdv-dev/Copulas cd Copulas -git checkout master +git checkout main git checkout -b make install-develp ``` diff --git a/Makefile b/Makefile index a61c117a..7df83ac8 100644 --- a/Makefile +++ b/Makefile @@ -177,14 +177,14 @@ publish-test: dist publish-confirm ## package and upload a release on TestPyPI publish: dist publish-confirm ## package and upload a release twine upload dist/* -.PHONY: git-merge-master-stable -git-merge-master-stable: ## Merge master into stable +.PHONY: git-merge-main-stable +git-merge-main-stable: ## Merge main into stable git checkout stable || git checkout -b stable - git merge --no-ff master -m"make release-tag: Merge branch 'master' into stable" + git merge --no-ff main -m"make release-tag: Merge branch 'main' into stable" -.PHONY: git-merge-stable-master -git-merge-stable-master: ## Merge stable into master - git checkout master +.PHONY: git-merge-stable-main +git-merge-stable-main: ## Merge stable into main + git checkout main git merge stable .PHONY: git-push @@ -218,7 +218,7 @@ bumpversion-major: ## Bump the version the next major skipping the release .PHONY: bumpversion-revert bumpversion-revert: ## Undo a previous bumpversion-release git tag --delete $(shell git tag --points-at HEAD) - git checkout master + git checkout main git branch -D stable CLEAN_DIR := $(shell git status --short | grep -v ??) @@ -232,10 +232,10 @@ ifneq ($(CLEAN_DIR),) $(error There are uncommitted changes) endif -.PHONY: check-master -check-master: ## Check if we are in master branch -ifneq ($(CURRENT_BRANCH),master) - $(error Please make the release from master branch\n) +.PHONY: check-main +check-main: ## Check if we are in main branch +ifneq ($(CURRENT_BRANCH),main) + $(error Please make the release from main branch\n) endif .PHONY: check-candidate @@ -251,18 +251,18 @@ ifeq ($(CHANGELOG_LINES),0) endif .PHONY: check-release -check-release: check-clean check-candidate check-master check-history ## Check if the release can be made +check-release: check-clean check-candidate check-main check-history ## Check if the release can be made @echo "A new release can be made" .PHONY: release -release: check-release git-merge-master-stable bumpversion-release git-push-tags-stable \ - publish git-merge-stable-master bumpversion-patch git-push +release: check-release git-merge-main-stable bumpversion-release git-push-tags-stable \ + publish git-merge-stable-main bumpversion-patch git-push .PHONY: release-test -release-test: check-release git-merge-master-stable bumpversion-release bumpversion-revert +release-test: check-release git-merge-main-stable bumpversion-release bumpversion-revert .PHONY: release-candidate -release-candidate: check-master publish bumpversion-candidate git-push +release-candidate: check-main publish bumpversion-candidate git-push .PHONY: release-candidate-test -release-candidate-test: check-clean check-master publish-test +release-candidate-test: check-clean check-main publish-test diff --git a/README.md b/README.md index 246218b3..6e53ea35 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,13 @@ [![PyPi Shield](https://img.shields.io/pypi/v/copulas.svg)](https://pypi.python.org/pypi/copulas) [![Downloads](https://pepy.tech/badge/copulas)](https://pepy.tech/project/copulas) [![Unit Tests](https://github.com/sdv-dev/Copulas/actions/workflows/unit.yml/badge.svg)](https://github.com/sdv-dev/Copulas/actions/workflows/unit.yml) -[![Coverage Status](https://codecov.io/gh/sdv-dev/Copulas/branch/master/graph/badge.svg)](https://codecov.io/gh/sdv-dev/Copulas) +[![Coverage Status](https://codecov.io/gh/sdv-dev/Copulas/branch/main/graph/badge.svg)](https://codecov.io/gh/sdv-dev/Copulas) [![Slack](https://img.shields.io/badge/Community-Slack-blue?style=plastic&logo=slack)](https://bit.ly/sdv-slack-invite)

- +

@@ -110,7 +110,7 @@ Thank you to our team of contributors who have built and maintained the library
- +


diff --git a/RELEASE.md b/RELEASE.md index dac22c1a..60284854 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -36,7 +36,7 @@ Clone the project and install the development requirements before start the rele ```bash git clone https://github.com/sdv-dev/Copulas.git cd Copulas -git checkout master +git checkout main make install-develop ``` @@ -183,7 +183,7 @@ Clone the project and install the development requirements. Alternatively, with ```bash git clone https://github.com/sdv-dev/SDV cd SDV -git checkout master +git checkout main make install-develop ``` diff --git a/docs/conf.py b/docs/conf.py index c189c9c6..2e7bb8ef 100755 --- a/docs/conf.py +++ b/docs/conf.py @@ -104,7 +104,7 @@ 'display_github': True, 'github_user': user, 'github_repo': project, - 'github_version': 'master', + 'github_version': 'main', 'conf_py_path': '/docs/', } From 56a76c01d1976e9daffd409370e187b530b08971 Mon Sep 17 00:00:00 2001 From: Plamen Valentinov Kolev <41479552+pvk-developer@users.noreply.github.com> Date: Wed, 20 Sep 2023 18:29:45 +0200 Subject: [PATCH 3/6] Update code for addon detection (#363) --- copulas/__init__.py | 76 +++++++++++++++++- copulas/_addons.py | 26 ------ tests/unit/test___init__.py | 154 +++++++++++++++++++++++++++++++++++- tests/unit/test__addons.py | 45 ----------- 4 files changed, 225 insertions(+), 76 deletions(-) delete mode 100644 copulas/_addons.py delete mode 100644 tests/unit/test__addons.py diff --git a/copulas/__init__.py b/copulas/__init__.py index 00ae675c..8a2f9c94 100644 --- a/copulas/__init__.py +++ b/copulas/__init__.py @@ -8,14 +8,14 @@ import contextlib import importlib +import sys +import warnings from copy import deepcopy +from operator import attrgetter import numpy as np import pandas as pd - -from copulas._addons import _find_addons - -_find_addons(group='copulas_modules', parent_globals=globals()) +from pkg_resources import iter_entry_points EPSILON = np.finfo(np.float32).eps @@ -262,3 +262,71 @@ def decorated(self, X, *args, **kwargs): return function(self, X, *args, **kwargs) return decorated + + +def _get_addon_target(addon_path_name): + """Find the target object for the add-on. + + Args: + addon_path_name (str): + The add-on's name. The add-on's name should be the full path of valid Python + identifiers (i.e. importable.module:object.attr). + + Returns: + tuple: + * object: + The base module or object the add-on should be added to. + * str: + The name the add-on should be added to under the module or object. + """ + module_path, _, object_path = addon_path_name.partition(':') + module_path = module_path.split('.') + + if module_path[0] != __name__: + msg = f"expected base module to be '{__name__}', found '{module_path[0]}'" + raise AttributeError(msg) + + target_base = sys.modules[__name__] + for submodule in module_path[1:-1]: + target_base = getattr(target_base, submodule) + + addon_name = module_path[-1] + if object_path: + if len(module_path) > 1 and not hasattr(target_base, module_path[-1]): + msg = f"cannot add '{object_path}' to unknown submodule '{'.'.join(module_path)}'" + raise AttributeError(msg) + + if len(module_path) > 1: + target_base = getattr(target_base, module_path[-1]) + + split_object = object_path.split('.') + addon_name = split_object[-1] + + if len(split_object) > 1: + target_base = attrgetter('.'.join(split_object[:-1]))(target_base) + + return target_base, addon_name + + +def _find_addons(): + """Find and load all copulas add-ons.""" + group = 'copulas_modules' + for entry_point in iter_entry_points(group=group): + try: + addon = entry_point.load() + except Exception: # pylint: disable=broad-exception-caught + msg = f'Failed to load "{entry_point.name}" from "{entry_point.module_name}".' + warnings.warn(msg) + continue + + try: + addon_target, addon_name = _get_addon_target(entry_point.name) + except AttributeError as error: + msg = f"Failed to set '{entry_point.name}': {error}." + warnings.warn(msg) + continue + + setattr(addon_target, addon_name, addon) + + +_find_addons() diff --git a/copulas/_addons.py b/copulas/_addons.py deleted file mode 100644 index 3f2f1761..00000000 --- a/copulas/_addons.py +++ /dev/null @@ -1,26 +0,0 @@ -"""Copulas add-ons functionality.""" -import warnings - -from pkg_resources import iter_entry_points - - -def _find_addons(group, parent_globals): - """Find and load add-ons based on the given group. - - Args: - group (str): - The name of the entry points group to load. - parent_globals (dict): - The caller's global scope. Modules will be added - to the parent's global scope through their name. - """ - for entry_point in iter_entry_points(group=group): - try: - module = entry_point.load() - except Exception: - msg = f'Failed to load "{entry_point.name}" from "{entry_point.module}".' - warnings.warn(msg) - continue - - if entry_point.name not in parent_globals: - parent_globals[entry_point.name] = module diff --git a/tests/unit/test___init__.py b/tests/unit/test___init__.py index 761e35cf..4d88f5f0 100644 --- a/tests/unit/test___init__.py +++ b/tests/unit/test___init__.py @@ -1,3 +1,4 @@ +import sys from unittest import TestCase from unittest.mock import MagicMock, call, patch @@ -6,8 +7,10 @@ import pytest from numpy.testing import assert_array_equal +import copulas from copulas import ( - check_valid_values, get_instance, random_state, scalarize, validate_random_state, vectorize) + _find_addons, check_valid_values, get_instance, random_state, scalarize, validate_random_state, + vectorize) from copulas.multivariate import GaussianMultivariate @@ -421,3 +424,152 @@ def test_get_instance_with_kwargs(self): assert not instance.fitted assert isinstance(instance, GaussianMultivariate) assert instance.distribution == 'copulas.univariate.truncnorm.TruncNorm' + + +@pytest.fixture() +def mock_copulas(): + copulas_module = sys.modules['copulas'] + copulas_mock = MagicMock() + sys.modules['copulas'] = copulas_mock + yield copulas_mock + sys.modules['copulas'] = copulas_module + + +@patch.object(copulas, 'iter_entry_points') +def test__find_addons_module(entry_points_mock, mock_copulas): + """Test loading an add-on.""" + # Setup + entry_point = MagicMock() + entry_point.name = 'copulas.submodule.entry_name' + entry_point.load.return_value = 'entry_point' + entry_points_mock.return_value = [entry_point] + + # Run + _find_addons() + + # Assert + entry_points_mock.assert_called_once_with(group='copulas_modules') + assert mock_copulas.submodule.entry_name == 'entry_point' + + +@patch.object(copulas, 'iter_entry_points') +def test__find_addons_object(entry_points_mock, mock_copulas): + """Test loading an add-on.""" + # Setup + entry_point = MagicMock() + entry_point.name = 'copulas.submodule:entry_object.entry_method' + entry_point.load.return_value = 'new_method' + entry_points_mock.return_value = [entry_point] + + # Run + _find_addons() + + # Assert + entry_points_mock.assert_called_once_with(group='copulas_modules') + assert mock_copulas.submodule.entry_object.entry_method == 'new_method' + + +@patch('warnings.warn') +@patch('copulas.iter_entry_points') +def test__find_addons_bad_addon(entry_points_mock, warning_mock): + """Test failing to load an add-on generates a warning.""" + # Setup + def entry_point_error(): + raise ValueError() + + bad_entry_point = MagicMock() + bad_entry_point.name = 'bad_entry_point' + bad_entry_point.module_name = 'bad_module' + bad_entry_point.load.side_effect = entry_point_error + entry_points_mock.return_value = [bad_entry_point] + msg = 'Failed to load "bad_entry_point" from "bad_module".' + + # Run + _find_addons() + + # Assert + entry_points_mock.assert_called_once_with(group='copulas_modules') + warning_mock.assert_called_once_with(msg) + + +@patch('warnings.warn') +@patch('copulas.iter_entry_points') +def test__find_addons_wrong_base(entry_points_mock, warning_mock): + """Test incorrect add-on name generates a warning.""" + # Setup + bad_entry_point = MagicMock() + bad_entry_point.name = 'bad_base.bad_entry_point' + entry_points_mock.return_value = [bad_entry_point] + msg = ( + "Failed to set 'bad_base.bad_entry_point': expected base module to be 'copulas', found " + "'bad_base'." + ) + + # Run + _find_addons() + + # Assert + entry_points_mock.assert_called_once_with(group='copulas_modules') + warning_mock.assert_called_once_with(msg) + + +@patch('warnings.warn') +@patch('copulas.iter_entry_points') +def test__find_addons_missing_submodule(entry_points_mock, warning_mock): + """Test incorrect add-on name generates a warning.""" + # Setup + bad_entry_point = MagicMock() + bad_entry_point.name = 'copulas.missing_submodule.new_submodule' + entry_points_mock.return_value = [bad_entry_point] + msg = ( + "Failed to set 'copulas.missing_submodule.new_submodule': module 'copulas' has no " + "attribute 'missing_submodule'." + ) + + # Run + _find_addons() + + # Assert + entry_points_mock.assert_called_once_with(group='copulas_modules') + warning_mock.assert_called_once_with(msg) + + +@patch('warnings.warn') +@patch('copulas.iter_entry_points') +def test__find_addons_module_and_object(entry_points_mock, warning_mock): + """Test incorrect add-on name generates a warning.""" + # Setup + bad_entry_point = MagicMock() + bad_entry_point.name = 'copulas.missing_submodule:new_object' + entry_points_mock.return_value = [bad_entry_point] + msg = ( + "Failed to set 'copulas.missing_submodule:new_object': cannot add 'new_object' to unknown " + "submodule 'copulas.missing_submodule'." + ) + + # Run + _find_addons() + + # Assert + entry_points_mock.assert_called_once_with(group='copulas_modules') + warning_mock.assert_called_once_with(msg) + + +@patch('warnings.warn') +@patch.object(copulas, 'iter_entry_points') +def test__find_addons_missing_object(entry_points_mock, warning_mock, mock_copulas): + """Test incorrect add-on name generates a warning.""" + # Setup + bad_entry_point = MagicMock() + bad_entry_point.name = 'copulas.submodule:missing_object.new_method' + entry_points_mock.return_value = [bad_entry_point] + msg = ("Failed to set 'copulas.submodule:missing_object.new_method': missing_object.") + + del mock_copulas.submodule.missing_object + + # Run + _find_addons() + + # Assert + entry_points_mock.assert_called_once_with(group='copulas_modules') + warning_mock.assert_called_once_with(msg) diff --git a/tests/unit/test__addons.py b/tests/unit/test__addons.py deleted file mode 100644 index b02a5104..00000000 --- a/tests/unit/test__addons.py +++ /dev/null @@ -1,45 +0,0 @@ -from unittest.mock import Mock, patch - -from copulas._addons import _find_addons - - -@patch('copulas._addons.iter_entry_points') -def test__find_versions(entry_points_mock): - """Test loading an add-on.""" - # Setup - entry_point = Mock() - entry_point.name = 'entry_name' - entry_point.load.return_value = 'entry_point' - entry_points_mock.return_value = [entry_point] - test_dict = {} - - # Run - _find_addons(group='group', parent_globals=test_dict) - - # Assert - entry_points_mock.assert_called_once_with(group='group') - assert test_dict['entry_name'] == 'entry_point' - - -@patch('copulas._addons.warnings.warn') -@patch('copulas._addons.iter_entry_points') -def test__find_versions_bad_addon(entry_points_mock, warning_mock): - """Test failing to load an add-on generates a warning.""" - # Setup - def entry_point_error(): - raise ValueError() - - bad_entry_point = Mock() - bad_entry_point.name = 'bad_entry_point' - bad_entry_point.module = 'bad_module' - bad_entry_point.load.side_effect = entry_point_error - entry_points_mock.return_value = [bad_entry_point] - test_dict = {} - msg = 'Failed to load "bad_entry_point" from "bad_module".' - - # Run - _find_addons(group='group', parent_globals=test_dict) - - # Assert - entry_points_mock.assert_called_once_with(group='group') - warning_mock.assert_called_once_with(msg) From 2ea321333f1238c00d89ea4b8bd0dd4d69f34a16 Mon Sep 17 00:00:00 2001 From: R-Palazzo <116157184+R-Palazzo@users.noreply.github.com> Date: Wed, 4 Oct 2023 14:52:04 +0200 Subject: [PATCH 4/6] When Copulas univariate fit fails, produce a log instead of a warning (#365) --- copulas/multivariate/gaussian.py | 5 ++--- tests/end-to-end/multivariate/test_gaussian.py | 11 +++++++---- tests/unit/multivariate/test_gaussian.py | 11 +++++++---- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/copulas/multivariate/gaussian.py b/copulas/multivariate/gaussian.py index 03de10b9..0e6ebbc9 100644 --- a/copulas/multivariate/gaussian.py +++ b/copulas/multivariate/gaussian.py @@ -2,7 +2,6 @@ import logging import sys -import warnings import numpy as np import pandas as pd @@ -112,11 +111,11 @@ def fit(self, X): try: univariate.fit(column) except BaseException: - warning_message = ( + log_message = ( f'Unable to fit to a {distribution} distribution for column {column_name}. ' 'Using a Gaussian distribution instead.' ) - warnings.warn(warning_message) + LOGGER.info(log_message) univariate = GaussianUnivariate() univariate.fit(column) diff --git a/tests/end-to-end/multivariate/test_gaussian.py b/tests/end-to-end/multivariate/test_gaussian.py index 6c29c4e1..996f4779 100644 --- a/tests/end-to-end/multivariate/test_gaussian.py +++ b/tests/end-to-end/multivariate/test_gaussian.py @@ -179,8 +179,8 @@ def test_save_load(self): @patch('copulas.univariate.truncated_gaussian.TruncatedGaussian._fit') -@patch('copulas.multivariate.gaussian.warnings') -def test_broken_distribution(warnings_mock, truncated_mock): +@patch('copulas.multivariate.gaussian.LOGGER') +def test_broken_distribution(logger_mock, truncated_mock): """Fit should use a gaussian if the passed distribution crashes.""" # Setup truncated_mock.side_effect = ValueError() @@ -194,11 +194,14 @@ def test_broken_distribution(warnings_mock, truncated_mock): samples = model.sample() # Asserts - expected_warnings_msg = ( + expected_logging_msg = ( 'Unable to fit to a copulas.univariate.truncated_gaussian.TruncatedGaussian ' 'distribution for column y. Using a Gaussian distribution instead.' ) - warnings_mock.warn.assert_called_once_with(expected_warnings_msg) + calls = logger_mock.info.call_args_list + assert calls[0].args[0] == 'Fitting %s' + assert calls[1].args[0] == expected_logging_msg + assert len(calls) == 2 expected_model = GaussianMultivariate( distribution={'y': 'copulas.univariate.truncated_gaussian.TruncatedGaussian'} diff --git a/tests/unit/multivariate/test_gaussian.py b/tests/unit/multivariate/test_gaussian.py index 05b95bb6..2e7060b5 100644 --- a/tests/unit/multivariate/test_gaussian.py +++ b/tests/unit/multivariate/test_gaussian.py @@ -273,8 +273,8 @@ def test_fit_numpy_array(self): assert (copula.correlation == expected_correlation).all().all() @patch('copulas.univariate.truncated_gaussian.TruncatedGaussian._fit') - @patch('copulas.multivariate.gaussian.warnings') - def test_fit_broken_distribution(self, warnings_mock, truncated_mock): + @patch('copulas.multivariate.gaussian.LOGGER') + def test_fit_broken_distribution(self, logger_mock, truncated_mock): """Fit should use a gaussian if the passed distribution crashes.""" # Setup truncated_mock.side_effect = ValueError() @@ -287,11 +287,14 @@ def test_fit_broken_distribution(self, warnings_mock, truncated_mock): copula.fit(data) # Check - expected_warnings_msg = ( + expected_logging_msg = ( 'Unable to fit to a copulas.univariate.truncated_gaussian.TruncatedGaussian ' 'distribution for column column1. Using a Gaussian distribution instead.' ) - warnings_mock.warn.assert_called_once_with(expected_warnings_msg) + calls = logger_mock.info.call_args_list + assert calls[0].args[0] == 'Fitting %s' + assert calls[1].args[0] == expected_logging_msg + assert len(calls) == 2 assert len(copula.univariates) == 1 assert isinstance(copula.univariates[0], GaussianUnivariate) From e68118c51af8ef95b2c561f75101219d9da9d465 Mon Sep 17 00:00:00 2001 From: Andrew Montanez Date: Wed, 11 Oct 2023 19:26:58 -0500 Subject: [PATCH 5/6] =?UTF-8?q?Bump=20version:=200.9.2.dev0=20=E2=86=92=20?= =?UTF-8?q?0.9.2.dev1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- copulas/__init__.py | 2 +- setup.cfg | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/copulas/__init__.py b/copulas/__init__.py index 8a2f9c94..2a1ec8f9 100644 --- a/copulas/__init__.py +++ b/copulas/__init__.py @@ -4,7 +4,7 @@ __author__ = 'DataCebo, Inc.' __email__ = 'info@sdv.dev' -__version__ = '0.9.2.dev0' +__version__ = '0.9.2.dev1' import contextlib import importlib diff --git a/setup.cfg b/setup.cfg index 1626f339..526e495c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.9.2.dev0 +current_version = 0.9.2.dev1 commit = True tag = True parse = (?P\d+)\.(?P\d+)\.(?P\d+)(\.(?P[a-z]+)(?P\d+))? diff --git a/setup.py b/setup.py index 1a757695..43fcea74 100644 --- a/setup.py +++ b/setup.py @@ -136,6 +136,6 @@ test_suite='tests', tests_require=tests_require, url='https://github.com/sdv-dev/Copulas', - version='0.9.2.dev0', + version='0.9.2.dev1', zip_safe=False, ) From c93e46400e3094274199dc2f76d6dc115e8f428e Mon Sep 17 00:00:00 2001 From: Andrew Montanez Date: Thu, 12 Oct 2023 11:15:18 -0500 Subject: [PATCH 6/6] 0.9.2 Release Notes (#366) --- HISTORY.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/HISTORY.md b/HISTORY.md index 457c2af7..2ded6906 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,18 @@ # History +## v0.9.2 - 2023-10-12 + +This release removes a warning that was being raised when univariate distributions failed to fit and logs the message instead. + +### New Features + +* When Copulas univariate fit fails, produce a log instead of a warning - Issue [#359](https://github.com/sdv-dev/Copulas/issues/359) by @R-Palazzo + +### Maintenance + +* Switch default branch from master to main - Issue [#360](https://github.com/sdv-dev/Copulas/issues/360) by @amontanez24 +* Update add-on detection for Copulas - Issue [#362](https://github.com/sdv-dev/Copulas/issues/362) by @pvk-developer + ## v0.9.1 - 2023-08-10 This release fixes problems with the documentation site and drops support for Python 3.7.