1- from collections .abc import Callable , Sequence
1+ from collections .abc import Callable
22from types import ModuleType
33from typing import Any , Literal , TypeAlias , TypedDict , overload
44from typing_extensions import TypeVar , override
55
66import numpy as np
7- import numpy .typing as npt
87import optype .numpy as onp
98from scipy ._lib ._disjoint_set import DisjointSet
109from scipy .spatial .distance import _MetricCallback , _MetricKind
@@ -47,7 +46,7 @@ __all__ = [
4746_T = TypeVar ("_T" )
4847_SCT = TypeVar ("_SCT" , bound = np .number [Any ], default = np .float64 )
4948_LinkageMethod : TypeAlias = Literal ["single" , "complete" , "average" , "weighted" , "centroid" , "median" , "ward" ]
50- _LinkageArray : TypeAlias = onp .Array [ tuple [ int , int ], _SCT ]
49+ _LinkageArray : TypeAlias = onp .Array2D [ _SCT ]
5150_ClusterCriterion : TypeAlias = Literal ["inconsistent" , "distance" , "maxclust" , "monocrit" , "maxclust_monocrit" ]
5251_SortOrder : TypeAlias = Literal ["ascending" , "descending" ]
5352
@@ -64,16 +63,16 @@ class _DendrogramResult(TypedDict):
6463
6564class ClusterWarning (UserWarning ): ...
6665
67- def int_floor (arr : onp .AnyArray , xp : ModuleType ) -> int : ...
68- def single (y : onp .AnyArray ) -> _LinkageArray : ...
69- def complete (y : onp .AnyArray ) -> _LinkageArray : ...
70- def average (y : onp .AnyArray ) -> _LinkageArray : ...
71- def weighted (y : onp .AnyArray ) -> _LinkageArray : ...
72- def centroid (y : onp .AnyArray ) -> _LinkageArray : ...
73- def median (y : onp .AnyArray ) -> _LinkageArray : ...
74- def ward (y : onp .AnyArray ) -> _LinkageArray : ...
66+ def int_floor (arr : onp .ToArrayND , xp : ModuleType ) -> int : ...
67+ def single (y : onp .ToArrayND ) -> _LinkageArray : ...
68+ def complete (y : onp .ToArrayND ) -> _LinkageArray : ...
69+ def average (y : onp .ToArrayND ) -> _LinkageArray : ...
70+ def weighted (y : onp .ToArrayND ) -> _LinkageArray : ...
71+ def centroid (y : onp .ToArrayND ) -> _LinkageArray : ...
72+ def median (y : onp .ToArrayND ) -> _LinkageArray : ...
73+ def ward (y : onp .ToArrayND ) -> _LinkageArray : ...
7574def linkage (
76- y : onp .AnyArray ,
75+ y : onp .ToArrayND ,
7776 method : _LinkageMethod = "single" ,
7877 metric : _MetricKind | _MetricCallback = "euclidean" ,
7978 optimal_ordering : bool = False ,
@@ -109,61 +108,58 @@ class ClusterNode:
109108 def pre_order (self , / , func : Callable [[ClusterNode ], _T ]) -> list [_T ]: ...
110109
111110def cut_tree (
112- Z : onp .AnyArray ,
113- n_clusters : Sequence [ int ] | npt . NDArray [ np . integer [ Any ]] | None = None ,
114- height : Sequence [ float ] | npt . NDArray [ np . integer [ Any ] | np . floating [ Any ]] | None = None ,
115- ) -> onp .Array [ tuple [ int , int ], np .int64 ]: ...
111+ Z : onp .ToArray2D ,
112+ n_clusters : onp . ToInt1D | None = None ,
113+ height : onp . ToFloat1D | None = None ,
114+ ) -> onp .Array2D [ np .int64 ]: ...
116115@overload
117- def to_tree (Z : onp .AnyArray , rd : Literal [False ] = False ) -> ClusterNode : ...
116+ def to_tree (Z : onp .ToArray2D , rd : Literal [False ] = False ) -> ClusterNode : ...
118117@overload
119- def to_tree (Z : onp .AnyArray , rd : Literal [True ]) -> tuple [ClusterNode , list [ClusterNode ]]: ...
118+ def to_tree (Z : onp .ToArray2D , rd : Literal [True ]) -> tuple [ClusterNode , list [ClusterNode ]]: ...
120119def optimal_leaf_ordering (
121- Z : onp .AnyArray ,
122- y : onp .AnyArray ,
120+ Z : onp .ToArray2D ,
121+ y : onp .ToArrayND ,
123122 metric : _MetricKind | _MetricCallback = "euclidean" ,
124123) -> _LinkageArray : ...
125124@overload
126- def cophenet (Z : onp .AnyArray , Y : None = None ) -> onp .Array [ tuple [ int ], np .float64 ]: ...
125+ def cophenet (Z : onp .ToArray2D , Y : None = None ) -> onp .Array1D [ np .float64 ]: ...
127126@overload
128- def cophenet (
129- Z : onp .AnyArray ,
130- Y : onp .AnyArray ,
131- ) -> tuple [onp .Array [tuple [int ], np .float64 ], onp .Array [tuple [int ], np .float64 ]]: ...
132- def inconsistent (Z : onp .AnyArray , d : int = 2 ) -> _LinkageArray : ...
133- def from_mlab_linkage (Z : onp .AnyArray ) -> _LinkageArray : ...
134- def to_mlab_linkage (Z : onp .AnyArray ) -> _LinkageArray : ...
135- def is_monotonic (Z : onp .AnyArray ) -> bool : ...
136- def is_valid_im (R : onp .AnyArray , warning : bool = False , throw : bool = False , name : str | None = None ) -> bool : ...
137- def is_valid_linkage (Z : onp .AnyArray , warning : bool = False , throw : bool = False , name : str | None = None ) -> bool : ...
138- def num_obs_linkage (Z : onp .AnyArray ) -> int : ...
139- def correspond (Z : onp .AnyArray , Y : onp .AnyArray ) -> bool : ...
127+ def cophenet (Z : onp .ToArray2D , Y : onp .ToArrayND ) -> tuple [onp .Array1D [np .float64 ], onp .Array1D [np .float64 ]]: ...
128+ def inconsistent (Z : onp .ToArray2D , d : int = 2 ) -> _LinkageArray : ...
129+ def from_mlab_linkage (Z : onp .ToArray2D ) -> _LinkageArray : ...
130+ def to_mlab_linkage (Z : onp .ToArray2D ) -> _LinkageArray : ...
131+ def is_monotonic (Z : onp .ToArray2D ) -> bool : ...
132+ def is_valid_im (R : onp .ToArrayND , warning : bool = False , throw : bool = False , name : str | None = None ) -> bool : ...
133+ def is_valid_linkage (Z : onp .ToArray2D , warning : bool = False , throw : bool = False , name : str | None = None ) -> bool : ...
134+ def num_obs_linkage (Z : onp .ToArray2D ) -> int : ...
135+ def correspond (Z : onp .ToArray2D , Y : onp .ToArrayND ) -> bool : ...
140136def fcluster (
141- Z : onp .AnyArray ,
137+ Z : onp .ToArray2D ,
142138 t : float | np .floating [Any ] | np .integer [Any ],
143139 criterion : _ClusterCriterion = "inconsistent" ,
144140 depth : int = 2 ,
145- R : onp .AnyArray | None = None ,
146- monocrit : onp .AnyArray | None = None ,
147- ) -> onp .Array [ tuple [ int ], np .int32 ]: ...
141+ R : onp .ToArrayND | None = None ,
142+ monocrit : onp .ToArrayND | None = None ,
143+ ) -> onp .Array1D [ np .int32 ]: ...
148144def fclusterdata (
149- X : onp .AnyArray ,
145+ X : onp .ToArrayND ,
150146 t : float | np .floating [Any ] | np .integer [Any ],
151147 criterion : _ClusterCriterion = "inconsistent" ,
152148 metric : _MetricKind | _MetricCallback = "euclidean" ,
153149 depth : int = 2 ,
154150 method : _LinkageMethod = "single" ,
155- R : onp .AnyArray | None = None ,
156- ) -> onp .Array [ tuple [ int ], np .int32 ]: ...
157- def leaves_list (Z : onp .AnyArray ) -> onp .Array [ tuple [ int ], np .int32 ]: ...
151+ R : onp .ToArrayND | None = None ,
152+ ) -> onp .Array1D [ np .int32 ]: ...
153+ def leaves_list (Z : onp .ToArray2D ) -> onp .Array1D [ np .int32 ]: ...
158154def set_link_color_palette (palette : list [str ] | tuple [str , ...] | None ) -> None : ...
159155def dendrogram (
160- Z : onp .AnyArray ,
156+ Z : onp .ToArray2D ,
161157 p : int = 30 ,
162158 truncate_mode : Literal ["lastp" , "level" ] | None = None ,
163159 color_threshold : float | np .floating [Any ] | None = None ,
164160 get_leaves : bool = True ,
165161 orientation : Literal ["top" , "bottom" , "left" , "right" ] = "top" ,
166- labels : onp .AnyArray | None = None ,
162+ labels : onp .ToArrayND | None = None ,
167163 count_sort : _SortOrder | bool = False ,
168164 distance_sort : _SortOrder | bool = False ,
169165 show_leaf_counts : bool = True ,
@@ -177,8 +173,8 @@ def dendrogram(
177173 ax : _MatplotlibAxes | None = None ,
178174 above_threshold_color : str = "C0" ,
179175) -> _DendrogramResult : ...
180- def is_isomorphic (T1 : onp .AnyArray , T2 : onp .AnyArray ) -> bool : ...
181- def maxdists (Z : onp .AnyArray ) -> onp .Array [ tuple [ int ], np .float64 ]: ...
182- def maxinconsts (Z : onp .AnyArray , R : onp .AnyArray ) -> onp .Array [ tuple [ int ], np .float64 ]: ...
183- def maxRstat (Z : onp .AnyArray , R : onp .AnyArray , i : int ) -> onp .Array [ tuple [ int ], np .float64 ]: ...
184- def leaders (Z : onp .AnyArray , T : onp .AnyArray ) -> tuple [onp .Array [ tuple [ int ], np .int32 ], onp .Array [ tuple [ int ], np .int32 ]]: ...
176+ def is_isomorphic (T1 : onp .ToArrayND , T2 : onp .ToArrayND ) -> bool : ...
177+ def maxdists (Z : onp .ToArray2D ) -> onp .Array1D [ np .float64 ]: ...
178+ def maxinconsts (Z : onp .ToArray2D , R : onp .ToArrayND ) -> onp .Array1D [ np .float64 ]: ...
179+ def maxRstat (Z : onp .ToArray2D , R : onp .ToArrayND , i : int ) -> onp .Array1D [ np .float64 ]: ...
180+ def leaders (Z : onp .ToArray2D , T : onp .ToArrayND ) -> tuple [onp .Array1D [ np .int32 ], onp .Array1D [ np .int32 ]]: ...
0 commit comments