Public bug reported:

Imported from Debian bug http://bugs.debian.org/1135062:

Source: python-pynndescent
Version: 0.6.0-1
Severity: normal

python-pynndescent debci tests are failing with scipy 1.17,
currently available in experimental

e.g. https://ci.debian.net/packages/p/python-
pynndescent/unstable/amd64/70512939/

365s _______________________ test_binary_check[sokalmichener] 
_______________________
365s 
365s binary_data = array([[False, False, False, False,  True, False, False,  
True, False,
365s         False, False, False, False, False, Fals...se, False, False, False,
365s         False, False, False, False, False, False, False, False, False,
365s         False, False]])
365s metric = 'sokalmichener'
365s 
365s     @pytest.mark.parametrize(
365s         "metric",
365s         [
365s             "jaccard",
365s             "matching",
365s             "dice",
365s             "rogerstanimoto",
365s             "russellrao",
365s             "sokalmichener",
365s             "sokalsneath",
365s             "yule",
365s         ],
365s     )
365s     def test_binary_check(binary_data, metric):
365s >       dist_matrix = pairwise_distances(binary_data, metric=metric)
365s                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
365s 
365s ../build.Ulb/src/pynndescent/tests/test_distances.py:70: 
365s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ 
365s /usr/lib/python3/dist-packages/sklearn/utils/_param_validation.py:208: in 
wrapper
365s     validate_parameter_constraints(
365s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ 
365s 
365s parameter_constraints = {'X': ['array-like', 'sparse matrix'], 'Y': 
['array-like', 'sparse matrix', None], 'ensure_all_finite': ['boolean', <s..., 
'metric': [<sklearn.utils._param_validation.StrOptions object at 
0x7fa6a0b007c0>, <built-in function callable>], ...}
365s params = {'X': array([[False, False, False, False,  True, False, False,  
True, False,
365s         False, False, False, False, False...se, False, False, False,
365s         False, False]]), 'Y': None, 'ensure_all_finite': True, 'metric': 
'sokalmichener', ...}
365s caller_name = 'pairwise_distances'
365s 
365s     def validate_parameter_constraints(parameter_constraints, params, 
caller_name):
365s         """Validate types and values of given parameters.
365s     
365s         Parameters
365s         ----------
365s         parameter_constraints : dict or {"no_validation"}
365s             If "no_validation", validation is skipped for this parameter.
365s     
365s             If a dict, it must be a dictionary `param_name: list of 
constraints`.
365s             A parameter is valid if it satisfies one of the constraints 
from the list.
365s             Constraints can be:
365s             - an Interval object, representing a continuous or discrete 
range of numbers
365s             - the string "array-like"
365s             - the string "sparse matrix"
365s             - the string "random_state"
365s             - callable
365s             - None, meaning that None is a valid value for the parameter
365s             - any type, meaning that any instance of this type is valid
365s             - an Options object, representing a set of elements of a given 
type
365s             - a StrOptions object, representing a set of strings
365s             - the string "boolean"
365s             - the string "verbose"
365s             - the string "cv_object"
365s             - the string "nan"
365s             - a MissingValues object representing markers for missing 
values
365s             - a HasMethods object, representing method(s) an object must 
have
365s             - a Hidden object, representing a constraint not meant to be 
exposed to the user
365s     
365s         params : dict
365s             A dictionary `param_name: param_value`. The parameters to 
validate against the
365s             constraints.
365s     
365s         caller_name : str
365s             The name of the estimator or function or method that called 
this function.
365s         """
365s         for param_name, param_val in params.items():
365s             # We allow parameters to not have a constraint so that third 
party estimators
365s             # can inherit from sklearn estimators without having to 
necessarily use the
365s             # validation tools.
365s             if param_name not in parameter_constraints:
365s                 continue
365s     
365s             constraints = parameter_constraints[param_name]
365s     
365s             if constraints == "no_validation":
365s                 continue
365s     
365s             constraints = [make_constraint(constraint) for constraint in 
constraints]
365s     
365s             for constraint in constraints:
365s                 if constraint.is_satisfied_by(param_val):
365s                     # this constraint is satisfied, no need to check 
further.
365s                     break
365s             else:
365s                 # No constraint is satisfied, raise with an informative 
message.
365s     
365s                 # Ignore constraints that we don't want to expose in the 
error message,
365s                 # i.e. options that are for internal purpose or not 
officially supported.
365s                 constraints = [
365s                     constraint for constraint in constraints if not 
constraint.hidden
365s                 ]
365s     
365s                 if len(constraints) == 1:
365s                     constraints_str = f"{constraints[0]}"
365s                 else:
365s                     constraints_str = (
365s                         f"{', '.join([str(c) for c in constraints[:-1]])} 
or"
365s                         f" {constraints[-1]}"
365s                     )
365s     
365s >               raise InvalidParameterError(
365s                     f"The {param_name!r} parameter of {caller_name} must 
be"
365s                     f" {constraints_str}. Got {param_val!r} instead."
365s                 )
365s E               sklearn.utils._param_validation.InvalidParameterError: The 
'metric' parameter of pairwise_distances must be a str among {'wminkowski', 
'haversine', 'euclidean', 'mahalanobis', 'canberra', 'matching', 'l2', 
'nan_euclidean', 'precomputed', 'cosine', 'jaccard', 'seuclidean', 
'sqeuclidean', 'sokalsneath', 'dice', 'l1', 'braycurtis', 'correlation', 
'manhattan', 'yule', 'minkowski', 'cityblock', 'russellrao', 'hamming', 
'chebyshev', 'rogerstanimoto'} or a callable. Got 'sokalmichener' instead.
365s 
365s /usr/lib/python3/dist-packages/sklearn/utils/_param_validation.py:98: 
InvalidParameterError


This bug will later become RC severity: serious once scipy 1.17 is
uploaded to unstable.

** Affects: python-pynndescent (Ubuntu)
     Importance: Undecided
         Status: New

** Affects: scipy (Ubuntu)
     Importance: Undecided
         Status: New

** Affects: python-pynndescent (Debian)
     Importance: Undecided
         Status: New


** Tags: update-excuse

** Bug watch added: Debian Bug tracker #1135062
   https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135062

** Changed in: python-pynndescent (Debian)
 Remote watch: None => Debian Bug tracker #1135062

** Also affects: scipy (Ubuntu)
   Importance: Undecided
       Status: New

** Tags added: update-excuse

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2163627

Title:
  python-pynndescent: tests fail with scipy 1.17: sklearn:
  InvalidParameterError

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/python-pynndescent/+bug/2163627/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to