`L i` ddlZddlZddlZddlmZmZddlmZm Z ddl m Z ddl m Z ddlmZmZddlmZddlmZdd lmZdd lmZmZdd lmZej8j;dZd Zd dgdejAedzzZ!ddgdejAedzzZ"ddgdejAedzzZ#ddgdejAedzzZ$ddgdejAedzzZ%ddgdejAedzzZ&ejNe!e"e#e$e%e&fZ(ejRjUdgddggddgd ddd d!dejVgdgd ddd d!dejVgdggd"Z,ejRjUdddd#d$dd%d%ejVgdgddd#d$d&dd%d%ejVg dgddd#dejVgdgddd#ejVgdggd'Z-ejRjUd(gd)ddgddgggd*ggd)ddgddgggd+ggd)ddgddgddgggd+ggd,ddgddgddgggd-ggd.Z.d/Z/d0Z0ejRjUd1d2geDcgc]}|d3fc}zd4Z1d5Z2d6Z3d7Z4d8Z5d9Z6d:Z7d;Z8ejRjUdgd?ejRjUd1d2d@geDcgc]}|d3fc}zdAZ9dBZ:ejRjUdCe;de(jxdd zdDdEZ=ejRjUdFedGZ>dHZ?dIZ@dJZAejRjUdFdgezdKZBejRjUdFedLZCdMZDycc}wcc}w)NN)DBSCANOPTICS)_extend_region_extract_xi_labels)generate_clustered_data) make_blobs)DataConversionWarningEfficiencyWarning)contingency_matrix)pairwise_distances)shuffle)assert_allcloseassert_array_equal)CSR_CONTAINERS 皙?皙?皙?333333?g?)r_plotend)r!@皙!@ffffff!@r)rr!r"r#g333333!@r$rr!r"r#r$ctj|}|dd|ddz }|dk\}|dk}t||dd}||k(sJy)Nrrgrq?rrnparrayr)rr ratiosteep_downwardupwardes g/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sklearn/cluster/tests/test_optics.pytest_extend_downwardr.sVXXf F 3BK&* $Eg%N QYF~vq!4A 8O8g@g@gffffff@ctj|}|dd|ddz }|dk}|dkD}t||dd}||k(sJy)Nrrg?rrr&)rr r) steep_upwarddownwardr,s r-test_extend_upwardr42sUXXf F 3BK&* $ECrrFr?2rArCr)rFrD)rrrsr) r'rPrQrRrTrSr rrVcluster_hierarchy_shapediff)rYglobal_random_seedrZr[r\r]rbr6s r-test_cluster_hierarchyrns- ))   2 3C Q!cii 4a8??5@ B Q"syy!5q9@@5A B 2r(A$A"-11!4GGH >>V ## # "''(1+&* 1c 11 11 1 778B< 1 $ ++ +r/zcsr_container, metric)N minkowski euclideancd}t|}tddd|}|j|||n|tt |j t d|j vz }||k(sJ|j jt|fk(sJ|j jjdk(sJ|jjt|fk(sJ|jjjd k(sJ|jjt|fk(sJ|jjjd k(sJ|jjt|fk(sJ|jjjdk(sJt |jt tt|k(sJy) Nr) n_clustersg>@rr)rHrFrDmetricrif)rrrVlensetrWintrkdtypekind reachability_core_distances_ ordering_range)rs csr_containerrrrbrd n_clusters_1s r-test_correct_number_of_clustersrsJ:6A 9!F KE II-";mACs5==)*Su}}1D-EEL : %% % ==  3q6) ++ + ==   # #s ** *    $ $Q 11 1    $ $ ) )S 00 0  & &3q6) 33 3  & & + +s 22 2 ?? SVI -- - ?? % % ,, , u 3uSV}#5 55 5r/cd}ddgg}tddd}tjt|5|j |dddy#1swYyxYw)Nz#min_samples must be no greater thanrg?r?)rHrFrGmatch)rpytestraises ValueErrorrV)msgrbrds r-#test_minimum_number_of_sample_checkrsR /C QA 9"s KE z - ! s A  Acd}ddgddgddgg}td|dd\}}tdd d d }tjt| 5|j |dddy#1swYyxYw)Nz.Specify an epsilon smaller than 0.15. Got 0.3.rrrEr n_samplescenters cluster_stdrBg333333?dbscanrrrHrIepsrFr)rrrrrrVrrrb labels_truerds r-test_bad_extractrsw :C1vBx!R)GwCaNA{ :hCUW XE z - ! s A%%A.cd}ddgddgddgg}td|dd\}}tjt|5t d d d }|j |dddy#1swYyxYw) Nz6All reachability values are inf. Set a larger max_eps.rrrrErrrgQ?r)rHrFr)rrwarns UserWarningrrVrs r-test_bad_reachabilityrst BC1vBx!R)GwCaNA{ k -{F ! s A$$A-cd}tjjddt}t j 5t j dtt|j|dddy#1swYyxYw)Nrogerstanimotorrrsizeryerrorrs) r'rPrandintboolwarningscatch_warnings simplefilterr rrV)pairwise_metricrbs r-$test_nowarn_if_metric_bool_data_boolrsi 'O !&5A  ".g'<=o&**1-...s 6A<<Bcbd}tjjddtj}d|}t j t |5}tjddt t| j|t|d k(sJ dddy#1swYyxYw) Nrrrrz-Data will be converted to boolean for metric rignorez+'asyncio.iscoroutinefunction' is deprecated)messagecategoryrr) r'rPrint32rrr rfilterwarningsDeprecationWarningrrVrv)rrbr warn_records r-%test_warn_if_metric_bool_data_no_boolrs 'O !&9A 9/9J KC +3 7%; A' o&**1-;1$$$%%%s AB%%B.cd}tjjddt}tjjddtj}t j 5t jdtt|j|t|j|dddy#1swYyxYw)Nrorrrrr) r'rPrrrrrrr rrV)rX_boolX_nums r-test_nowarn_if_metric_no_boolrs"O YY  qvT  :F II  afBHH  =E  "2g'<= o&**62o&**51 222s -ACCcddgddgddgg}td|dd\}}tddd d j|}t|jd k(sJy) NrrrrErrrrrrrr)rrrVmaxrW)rrbrrds r-test_close_extractrsh1vBx!R)GwCaNA{ 3xSb Q U UVW XE u}}  "" "r/r)rr?rF)rrrC)Nrpc lddgddgddgg}td|dd\}}|||n|}|j|d}t|d || j|}t || j|} t | j |j } ttjtj| d tjtj| d } |jd| z } tj| dz |jdz d } | dksJy)NrrrErrFr?r)rFrIrrs)rrF)axisrg?) rrTrrVrr rWminr'sumrrkround)rrFrsrYrrrbropdb contingencyagreedisagreepercent_mismatchs r-test_dbscan_optics_parityr-s#1vBx!R)GwCaNA{*5 a1A E*A c&  c!f C[ 1 5 5a 8B$RZZ`jFr?rrrr$rDrO)rFrHrIrDrzAll reachability valuesrr) r'rSrTrUrrVrrWrrr)rYr\r]r^rbrcrds r-test_min_samples_edge_caserSso a&1c(QI &B r(RGb"X &B *sBi#s ,B 2r2,&&|%&@AeeQC!GaS1WqcAg56O q!DT J N Nq QEu}}o6eeQC!GaS1WrdQh67O q!DT J N Nq QEu}}o6eeRD1HoO k)B C;1aNRRSTU5==/:;;;s )5E''E0rGctdddj|d}td|j|}t j |j |j dk7}|jrt||k\sJtd||jdz }|j|t|j |j y)NrFr?rK)rFrGrr) rbrTrrVr'bincountrWrrrkr)rGrYredXrd cluster_sizes clust_fracs r-test_min_cluster_sizerhs SqS6==E= 2D q3C D H H NEKK emmr.A BCM=!%5555)DJJqM9JNN4u}}j&8&89r/rctttdz}tjt d5|j tdddtttdzd}tjt d5|j |tdddy#1swYfxYw#1swYyxYw)Nr)rGzmust be no greater than the rrp)rGrs)rrvrbrrrrV)rrds r-test_min_cluster_size_invalid2rxs CFQJ /E z)G H !  CFQJ{ CE z)G H$ -"#$$ $$sB3B?3B<?Cc<dgdgdgdgg}tddj|}t|jtj dddgt|j ddtj tj gt|jgdy) NrrirrFrHr8)rrVrr{r'rXr|r})Yrds r-test_processing_orderrs} rdSEB4 A q" - 1 1! 4Eu**RVVRR,@Au,,r2rvvrvv.FGu 5r/cx gtjdddddddddddd d d d d d d d d d ddddddddddddddddddddddddd dd!d"d#d$d%d%d%d%d&d&d&d'}gd(}gd)}td*+jt}t |j tj|t |j|j tj|t|j|j tj||j d,dD]0}|j||j|j|k\r0Jgtjtjtjtjtjtjtjtjtjtjtjddddddddddd-tjd.ddddd/dddtjd d d d d d d d d0tjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtj}gd1}gd2}td*d34jt}t |j tj|t |j|j tj|t|j|j tj|tj|jd3kd5} t|j| |j| y)6Ng@z?gN H?gއ~NT?gu ?g浔E?g#r?gܞ2 @g` z?gP{ V?g:ד?g}~a?g$@gа{n?g?guL?g*?g$&?g{P?gx?g\x*x?g~)N{?geE,?go F?g>Ek?gPR?gBQ?gW?g@*?gr2\k?gh G?g[؜]N?g!L?g@gwc?@g;éfh @gK!Q@g,@M@gZv@gr/%A@) ?= @ A= B C= D E= F G= H I= J K= L M= N O= P Q= R S= T U= V W= X Y= Z [= \ ]= ^ _= ` a= b c= d e= f g= h i= j k= l m= n o= p q= r s= t u= v w= x y= B|= B|= BD " & &q )Fv''"6v**6+;+; ?= @ A= B C= D E= F G= H I= J K= L M= N O= P Q= R S= T U= V W= X Y= Z [= \ ]= ^ _= ` a= b c= d e= f g= h i= j k= l m= n o= p q= r s= t u= v w= x y= B|= B|= B|3 / 3 3A 6Fv''"6v**6+;+;tjj|}d}ddgd|j|dzz}ddgd|j|dzz}ddgd|j|dzz}dd gd|j|dzz}tj||||fj |d }t d d j|} ttjtj| j| jdk7gdy)NrCrrrrrrrrFr?rr)rIrr8) r'rPrQrRrSrTrrVrsortuniquerW) rYrmrZr[r\r]r^r_rbrds r-test_extract_dbscanr s  ))   2 3C bC#))$8!<< r/ctdddj|d}t|d}|||n|}tj5tj dt tddd j|}dddtddd j|}tj|jt|j|jy#1swYgxYw) NrFr?rprrrbrute precomputed)rF algorithmrs) rbrTr rrrr rrVrr{rrW)rYrrdistsr rs r-test_precomputed_distsr1s SqS6==E= 2D tK 8E$1$=M% 5E  " h(9:B'-PTT   gk J N Nt TFF((&*>*>?v~~v~~6  s 8C))C2ctjj|jdd}tj|d||}t dt |jDsJ|j}tdj||j|jk(sJt|j|jy)zCheck that we don't modify in-place the pre-computed sparse matrix. Non-regression test for: https://github.com/scikit-learn/scikit-learn/issues/27508 rrc3,K|] \}}||k7ywr:).0rowcols r- zKtest_optics_input_not_modified_precomputed_sparse_nodiag..Osrr)rrrrrrr$rrrp)rFrsN)r'r(reshaperrVrrW)X_1reorderX_2optics_1optics_2s r-+test_optics_predecessor_correction_orderingr3Xsw ((- . 6 6r1 =C&G g,C!K8<rBs~ *F@'G67!F.iiA"Xcii 4a888WsSYY3Q777WsSYY3Q777!WsSYY3Q777WsSYY3Q777Va#))0!444 BIIr2r2r2&' #Q' (!, c3Q266 *A. c3Q266 *A.  QS!Q266 *A. QS#q!Q /3 QQ # QRVV a ( AA'6 AA'7 AAA/? AAA/? )) 87v,,~V)i5VV6 68    .%* 2 #0 4-.1?@I ;@A $ 51$>;*+U1aggajB6F-KL :M :.9$:$6ORd "4&>*AB 7C 7.96:6,DcWVAs ( O . O