
    _-Ph#                         d Z ddlZddlmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZ ddlmZmZmZ ddlmZ  G d	 d
e          Z G d de          Zd Zd Zd ZdS )zTest aggregation methods.    N)TestCaseassert_equal)sparse)poissonload_example) symmetric_strength_of_connection classical_strength_of_connection)standard_aggregationnaive_aggregationpairwise_aggregationOrderedDictc                   &    e Zd Zd Zd Zd Zd ZdS )TestAggregatec           	      :   g | _         t          j                            d           dD ]L}| j                             t          j        t          j                            ||                               MdD ],}| j                             t          |fd                     -dD ]-}| j                             t          ||fd                     .dD ]C}t          |          }| j                             |d         
                                           Dd S )	Nihw)         )r   r   r      
         csrformatr   r   r   r      )knotairfoilbarA)casesnprandomseedappendr   
csr_matrixrandr   r   tocsr)selfNnameexs       f/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyamg/aggregation/tests/test_aggregate.pysetUpzTestAggregate.setUp   s!   
 		z""" 	G 	GAJf/	q!0D0DEEFFFF * 	; 	;AJgqd5999::::  	= 	=AJgq!fU;;;<<<<. 	/ 	/Dd##BJbgmmoo....	/ 	/    c                 h   | j         D ]}t          |          }t          |          \  }}t          |          \  }}t	          ||z
  j        d           t	          |j        d         |j        d                    t	          t          j        ||          j        d         d           t          j
        g dgdgddd          }t          |          \  }}t          j        dgdgdgdgg          }t	          |                                |           t	          |j        d         d           d S Nr   )   r3   r3   r3      r   r   )r"   r   reference_standard_aggregationr
   r   nnzshaper#   	setdiff1dr   spdiagsarraytoarrayr*   r!   Sexpectedexpected_CptsresultCptss          r.   test_standard_aggregationz'TestAggregate.test_standard_aggregation"   s-    	H 	HA033A(Fq(I(I%X}1!44NVT&8+0!444A(;A(>???dM::@CQGGGG NLLL>A31UCCC-a008aS1#sQC011V^^%%x000TZ]A&&&&&r0   c                 X   | j         D ]}t          |          }t          |          \  }}t          |          \  }}t	          ||z
  j        d           t	          |j        d         |j        d                    t	          t          j        ||          j        d         d           t          j
        g dgdgddd          }t          |          \  }}t          j        d          }t	          |                                |           t	          |j        d         d           d S r2   )r"   r   reference_naive_aggregationr   r   r6   r7   r#   r8   r   r9   eyer;   r<   s          r.   test_naive_aggregationz$TestAggregate.test_naive_aggregation4   s    	H 	HA033A(CA(F(F%X}.q11NVT&8+0!444A(;A(>???dM::@CQGGGG NLLL>A31UCCC*1--6!99V^^%%x000TZ]A&&&&&r0   c                 n   | j         D ]}t          |dd          }t          |          \  }}t          |ddd          \  }}t	          ||z
  j        d           t	          |j        d         |j        d                    t	          t          j        ||          j        d         d           t          j
        g dgdgddd	
          }t          |ddd          \  }}t          j        d          }t	          |                                |           t	          |j        d         d           d S )Ng      ?min)thetanormr3   )	matchingsrI   rJ   r   )      ?rL   rL   rL   r4   r   r   )r"   r	   reference_pairwise_aggregationr   r   r6   r7   r#   r8   r   r9   rE   todenser<   s          r.   test_pairwise_aggregationz'TestAggregate.test_pairwise_aggregationF   s8    	H 	HA0$UKKKA(Fq(I(I%X}1!qSXYYYNVT&8+0!444A(;A(>???dM::@CQGGGG N0001A31UKKK-a1DuUUU6!99V^^%%x000TZ]A&&&&&r0   N)__name__
__module____qualname__r/   rB   rF   rO    r0   r.   r   r      sP        / / /$' ' '$' ' '$' ' ' ' 'r0   r   c                        e Zd Zd Zd Zd ZdS )TestComplexAggregatec                     g | _         dD ]c}t          ||fd          }|j        dt          j                            |j                  z  z   |_        | j                             |           dd S )Nr   r   r   y        MbP?)r"   r   datar#   r$   r(   r6   r&   )r*   r+   r!   s      r.   r/   zTestComplexAggregate.setUpY   sv    
 ! 	! 	!AAu---AVfRY^^AE%:%:::AFJa    	! 	!r0   c                 X   | j         D ]}t          |          }t          |          \  }}t          |          \  }}t	          ||z
  j        d           t	          |j        d         |j        d                    t	          t          j        ||          j        d         d           d S Nr   )	r"   r   r5   r
   r   r6   r7   r#   r8   r<   s          r.   rB   z.TestComplexAggregate.test_standard_aggregationb   s     	H 	HA033A(Fq(I(I%X}1!44NVT&8+0!444A(;A(>???dM::@CQGGGG	H 	Hr0   c                 X   | j         D ]}t          |          }t          |          \  }}t          |          \  }}t	          ||z
  j        d           t	          |j        d         |j        d                    t	          t          j        ||          j        d         d           d S rY   )	r"   r   rD   r   r   r6   r7   r#   r8   r<   s          r.   rF   z+TestComplexAggregate.test_naive_aggregationm   s     	H 	HA033A(CA(F(F%X}.q11NVT&8+0!444A(;A(>???dM::@CQGGGG	H 	Hr0   N)rP   rQ   rR   r/   rB   rF   rS   r0   r.   rU   rU   X   sI        ! ! !	H 	H 	H	H 	H 	H 	H 	Hr0   rU   c                    t          j        | j        | j        dd                   }| j        d         }t          t          |                    }d}g }t          j        || j        j                  }d|d d <   t          |          D ]V\  }}t          |          |hz  }	|	
                    |          r)|                    |           ||	z  }|	D ]}
|||
<   |dz  }W|                                }t          |          D ]5\  }}||vr
|D ](}
|
|vr"||
         ||<   |                    |            n)6t          |          D ]E\  }}||vr
t          |          |hz  }	|                    |           |	D ]}
|
|v r|||
<   |dz  }Ft          |          dk    sJ |}t          j        |dz             }t          j        |          }t#          j        |||f          t          j        |          fS )Nr3   r   dtype)r#   array_splitindicesindptrr7   setrangeemptyr^   	enumerateissubsetr&   copyremovelenarangeonesr   r'   r:   )Cr=   nRjrA   
aggregatesirowNixOld_RPjPpPxs                  r.   r5   r5   |   s+   
qy!(1R4.11A	
AE!HHA	AD!19?333JJqqqM A,,  3XX^;;q>> 	KKNNNGA " " !
1FA FFHHEA,,  3A:: 	 	A~~ *1
1  A,, 	 	3A::XX^A 	 	AAvv !
1FAA	
 q66Q;;;;	B	1Q3B	Bb"b\**BHTNN::r0   c                    t          j        | j        | j        dd                   }| j        d         }t          j        || j        j                  }d|d d <   t          j        d          }d}g }t          |          D ]\  }}||         dk    rwt          j	        ||          }	|||	<   |||<   |dz  }t          j
        ||	          }t          j
        |t          j        |g                    }|                    |           t          j        |          j        d         |k    sJ |}
t          j        |dz             }t          j        |          }t!          j        ||
|f          t          j        |          fS )Nr3   r\   r   r]   r   )r#   r_   r`   ra   r7   rd   r^   zerosre   r8   union1dr:   r&   uniquerj   rk   r   r'   )rl   r=   rm   rp   rn   ro   rA   rq   rr   unaggregated_neighborsrv   rw   rx   s                r.   rD   rD      sj   
qy!(1R4.11A	
A!19?333JJqqqM
A	AD A,,  3 a=B%'\#q%9%9"12J-.JqMFA
1455A
1bhsmm,,AKKNNNN9Q<<a A%%%%	B	1Q3B	Bb"b\**BHTNN::r0   c                    t          j        | j        | j        dd                   }t          j        | j        | j        dd                   }| j        d         }t          j        || j        j                  }d|d d <   t          j        d          }d}g }t          j        || j        j                  }|D ]}	||	         dz   ||	<   t          |          }
d t          d|
dz             D             }t          |          D ]}d|||                  |<   d}d}||k     rt          d|
dz             D ]9}||         r/t          ||                                                   d         } n:||         }	t          j        |t          j        |g                    }|g}|||<   t           j         }d}t!          |	          D ]+\  }}||vr"||         |         |k    r||         |         }|},|dk    rD|}|                    |           t          j        |t          j        |g                    }|||<   |                    |           |D ]}|||                  |= |D ]R}||         }	t          j        |	|          }|D ]0}|||                  |= ||         dz
  ||<   d|||                  |<   1S|t'          |          z  }|dz  }||k     t          j        |          j        d         |k    sJ |}t          j        |dz             }t          j        |          }t/          j        |||f          t          j        |          fS )Nr3   r\   r   r]   rz   c                 *    g | ]}t                      S rS   r   ).0_s     r.   
<listcomp>z2reference_pairwise_aggregation.<locals>.<listcomp>   s    555aKMM555r0   T)r#   r_   r`   ra   rW   r7   rd   r^   r{   maxrc   listkeysr|   r:   infre   r&   r8   ri   r}   rj   rk   r   r'   )rl   r=   rW   rm   rp   rn   aggregate_countrA   mrr   max_mmmaprq   countkaggregate_setmax_aijmax_aij_indexro   r~   	neighbourrv   rw   rx   s                           r.   rM   rM      s   
qy!(1R4.11A>!&!(1R4.11D	
A!19?333JJqqqM
AOD
!)/***A  3!#FFE 655E!G#4#4555D1XX  QqT
1EO199q%'"" 	 	AAw a((+ dJq"(A3--(('
16'cNN 	" 	"DAqzzd1gajG33q'!* !BA  ###
1bhsmm,,A+JqMA  	 	AQqT
1  	5 	5AA$C%'\#q%9%9"3 5 5	9&y1 |a/)04Qy\"9--5
 	]###1Q 199T IaLLq!Q&&&&	B	1Q3B	Bb"b\**BHTNN::r0   )__doc__numpyr#   numpy.testingr   r   scipyr   pyamg.galleryr   r   pyamg.strengthr   r	   pyamg.aggregation.aggregater
   r   r   collectionsr   r   rU   r5   rD   rM   rS   r0   r.   <module>r      sk         0 0 0 0 0 0 0 0       / / / / / / / /> > > > > > > >? ? ? ? ? ? ? ? ? ? $ # # # # #F' F' F' F' F'H F' F' F'RH H H H H8 H H HH5; 5; 5;p; ; ;BG; G; G; G; G;r0   