a
    –½Dfl  ã                   @   s   d Z ddlZddlmZ ddlmZ ddlmZ ddlZ	ddl
ZddlmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZ dd	lmZmZ dd
l m!Z!m"Z"m#Z#m$Z$ ddl%T G dd„ dƒZ&G dd„ de&ƒZ'G dd„ de'eƒZ(e(ƒ j)Z*dd„ Z+dS )a¾  
Helper classes for comparing the equality of two HoloViews objects.

These classes are designed to integrate with unittest.TestCase (see
the tests directory) while making equality testing easily accessible
to the user.

For instance, to test if two Matrix objects are equal you can use:

Comparison.assertEqual(matrix1, matrix2)

This will raise an AssertionError if the two matrix objects are not
equal, including information regarding what exactly failed to match.

Note that this functionality could not be provided using comparison
methods on all objects as comparison operators only return Booleans and
thus would not supply any information regarding *why* two elements are
considered different.
é    N)Úpartial)ÚTestCase)Ú	safe_repr)Úassert_array_almost_equalÚassert_array_equalé   )ÚAdjointLayoutÚ	DimensionÚDimensionedÚ
DynamicMapÚElementÚEmptyÚ
GridMatrixÚ	GridSpaceÚHoloMapÚLayoutÚNdLayoutÚ	NdOverlayÚOverlay)ÚCycleÚOptions)Úcast_array_to_int64Údatetime_typesÚ	dt_to_intÚis_floaté   )Ú*c                   @   s4   e Zd ZdZi ZeZeddd„ƒZeddd„ƒZ	dS )	ÚComparisonInterfacea¸  
    This class is designed to allow equality testing to work
    seamlessly with unittest.TestCase as a mix-in by implementing a
    compatible interface (namely the assertEqual method).

    The assertEqual class method is to be overridden by an instance
    method of the same name when used as a mix-in with TestCase. The
    contents of the equality_type_funcs dictionary is suitable for use
    with TestCase.addTypeEqualityFunc.
    Nc                 C   sP   ||k}t |tƒs$t|dƒr$| ¡ }|sLt|ƒ› dt|ƒ› }|  |pH|¡‚dS )z[
        Classmethod equivalent to unittest.TestCase method (longMessage = False.)
        Úallú != N)Ú
isinstanceÚboolÚhasattrr   r   ÚfailureException)ÚclsÚfirstÚsecondÚmsgÚcheckZstandardMsg© r)   úi/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/holoviews/element/comparison.pyÚsimple_equality@   s    z#ComparisonInterface.simple_equalityc                 C   s„   d}t |ƒt |ƒu s$t|ƒrPt|ƒrP| j t |ƒ¡}|durPt|tƒrPt| |ƒ}|du r^| j}|du rr|||ƒ n||||d dS )zD
        Classmethod equivalent to unittest.TestCase method
        N©r'   )Útyper   Úequality_type_funcsÚgetr    ÚstrÚgetattrr+   )r$   r%   r&   r'   Zasserterr)   r)   r*   ÚassertEqualM   s     

zComparisonInterface.assertEqual)N)N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r.   ÚAssertionErrorr#   Úclassmethodr+   r2   r)   r)   r)   r*   r   1   s   r   c                   @   sR  e Zd ZdZeeddZedd„ ƒZedÏdd„ƒZ	edÐd
d„ƒZ
edÑdd„ƒZedÒdd„ƒZedÓdd„ƒZedÔdd„ƒZedÕdd„ƒZedÖdd„ƒZed×dd„ƒZedØdd„ƒZedÙdd „ƒZedÚd"d#„ƒZedÛd$d%„ƒZedÜd&d'„ƒZedÝd(d)„ƒZedÞd+d,„ƒZedßd.d/„ƒZedàd1d2„ƒZedád3d4„ƒZedâd5d6„ƒZedãd7d8„ƒZedäd:d;„ƒZedåd=d>„ƒZedæd@dA„ƒZ edçdCdD„ƒZ!edèdFdG„ƒZ"edédIdJ„ƒZ#edêdLdM„ƒZ$edëdOdP„ƒZ%edìdRdS„ƒZ&edídUdV„ƒZ'edîdXdY„ƒZ(edïd[d\„ƒZ)edðd^d_„ƒZ*edñdadb„ƒZ+edòddde„ƒZ,edódgdh„ƒZ-edôdjdk„ƒZ.edõdmdn„ƒZ/edödpdq„ƒZ0ed÷dsdt„ƒZ1edødvdw„ƒZ2edùdydz„ƒZ3edúd|d}„ƒZ4edûdd€„ƒZ5edüd‚dƒ„ƒZ6edýd…d†„ƒZ7edþdˆd‰„ƒZ8edÿd‹dŒ„ƒZ9ed dŽd„ƒZ:edd‘d’„ƒZ;edd”d•„ƒZ<edd—d˜„ƒZ=eddšd›„ƒZ>edddž„ƒZ?eddŸd „ƒZ@edd¢d£„ƒZAedd¥d¦„ƒZBed	d¨d©„ƒZCed
d«d¬„ƒZDedd®d¯„ƒZEedd±d²„ƒZFedd´dµ„ƒZGedd¶d·„ƒZHedd¹dº„ƒZIedd¼d½„ƒZJedd¿dÀ„ƒZKeddÂdÃ„ƒZLeddÅdÆ„ƒZMedÇdÈ„ ƒZNeddÉdÊ„ƒZOeddËdÌ„ƒZPeddÍdÎ„ƒZQd	S (  Ú
Comparisonaa  
    Class used for comparing two HoloViews objects, including complex
    composite objects. Comparisons are available as classmethods, the
    most general being the assertEqual method that is intended to work
    with any input.

    For instance, to test if two Image objects are equal you can use:

    Comparison.assertEqual(matrix1, matrix2)
    é   )Údecimalc                 C   sZ  | j | jt< | j | jtj< | j | jtj< | j| jt< | j| jt	< | j
| jt< | j| jtj< | j| jtjj< | j| jtj< | j| jt< | j| jt< | j| jt< | j| jt< | j| jt< | j| jt< | j| jt < | j!| jt"< | j#| jt$< | j%| jt&< | j'| jt(< | j)| jt*< | j+| jt,< | j-| jt.< | j/| jt0< | j1| jt2< | j3| jt4< | j5| jt6< | j7| jt8< | j9| jt:< | j;| jt<< | j=| jt>< | j?| jt@< | jA| jtB< | jC| jtD< | jE| jtF< | jG| jtH< | jI| jtJ< | jK| jtL< | jG| jtM< | jN| jtO< | jP| jtQ< | jR| jtS< | jT| jtU< | jV| jtW< | jX| jtY< | jZ| jt[< | j\| jt]< | j^| jt_< | j`| jta< | jb| jtc< | jd| jte< | jf| jtg< | jh| jti< | jj| jtk< | jl| jtm< | jn| jto< | jp| jtq< | jr| jts< | jt| jtu< | jv| jtw< | jx| jty< | jz| jt{< | j|| jt}< | j~| jt< | j€| jt< | j€| jt‚< | jƒ| jt„< | j…| jt†< | j‡| jtˆ< | j‰| jtŠ< | jS ©N)‹Úcompare_floatsr.   ÚfloatÚnpÚfloat32Úfloat64Úcompare_listsÚlistÚcompare_tuplesÚtupleÚcompare_dictionariesÚdictÚcompare_arraysZndarrayÚmaZmasked_arrayÚcompare_dataframeÚpdZ	DataFrameÚcompare_dimensionsr	   Úcompare_dimensionedr
   Úcompare_elementsr   Úcompare_overlaysr   Úcompare_layouttreesr   Úcompare_emptiesr   Úcompare_vlineÚVLineÚcompare_hlineÚHLineÚcompare_vspanÚVSpanÚcompare_hspanÚHSpanÚcompare_splineÚSplineÚcompare_arrowÚArrowÚcompare_textÚTextÚcompare_divÚDivÚcompare_pathsÚPathÚcompare_contoursÚContoursÚcompare_polygonsÚPolygonsÚcompare_boxÚBoxÚcompare_ellipseÚEllipseÚcompare_boundsÚBoundsÚcompare_imageÚImageÚcompare_rgbÚRGBÚcompare_hsvÚHSVÚcompare_rasterÚRasterÚcompare_quadmeshÚQuadMeshÚcompare_surfaceÚSurfaceÚcompare_datasetÚHeatMapÚcompare_segmentsÚSegmentsÚcompare_boxesÚ
RectanglesÚDatasetÚcompare_curveÚCurveÚcompare_errorbarsÚ	ErrorBarsÚcompare_spreadÚSpreadÚcompare_areaÚAreaÚcompare_scatterÚScatterÚcompare_scatter3dÚ	Scatter3DÚcompare_trisurfaceÚ
TriSurfaceÚcompare_histogramÚ	HistogramÚcompare_barsÚBarsÚcompare_spikesÚSpikesÚcompare_boxwhiskerÚ
BoxWhiskerÚcompare_vectorfieldÚVectorFieldÚcompare_graphÚGraphÚcompare_nodesÚNodesÚcompare_edgepathsZ	EdgePathsÚcompare_trimeshÚTriMeshÚcompare_itemtablesZ	ItemTableÚcompare_tablesÚTableÚcompare_pointsÚPointsÚcompare_bivariateÚ	BivariateÚcompare_distributionÚDistributionÚcompare_hextilesÚHexTilesÚcompare_gridlayoutr   Úcompare_adjointlayoutsr   Úcompare_ndoverlaysr   Úcompare_gridsr   r   Úcompare_holomapr   Úcompare_dynamicmapr   Úcompare_optionsr   Úcompare_cyclesr   )r$   r)   r)   r*   Úregisterr   sŽ    zComparison.registerÚDictionariesc                 C   sz   t | ¡ ƒ}t | ¡ ƒ}||A }|rXd|›d}|d|› d7 }|d|› 7 }|  |¡‚|D ]}|  || || ¡ q\d S )Nz*Dictionaries have different sets of keys: z

zDictionary 1: Ú
zDictionary 2: )ÚsetÚkeysr#   r2   )r$   Úd1Úd2r'   r·   Úkeys2Zsymmetric_diffÚkr)   r)   r*   rF   à   s    
zComparison.compare_dictionariesNc              
   C   sz   z8|   t|ƒt|ƒ¡ t||ƒD ]\}}|   ||¡ q W n< tyt } z$t|pZ|›d|›ƒ|‚W Y d }~n
d }~0 0 d S ©Nr   ©r2   ÚlenÚzipr7   )r$   Úl1Úl2r'   Úv1Úv2Úer)   r)   r*   rB   î   s    zComparison.compare_listsc              
   C   sz   z8|   t|ƒt|ƒ¡ t||ƒD ]\}}|   ||¡ q W n< tyt } z$t|pZ|›d|›ƒ|‚W Y d }~n
d }~0 0 d S r¼   r½   )r$   Út1Út2r'   Úi1Úi2rÄ   r)   r)   r*   rD   ø   s    zComparison.compare_tuplesÚFloatsc                 C   s   |   |||¡ d S r<   )rH   )r$   Úarr1Úarr2r'   r)   r)   r*   r=     s    zComparison.compare_floatsÚArraysc                 C   s¬   zB|j jdkrt| d¡ƒ}|j jdkr6t| d¡ƒ}t||ƒ W nd ty¦   z|  ||¡ W n@ ty  } z(|  |t	|ƒdd …  ¡|‚W Y d }~n
d }~0 0 Y n0 d S )NÚMzdatetime64[ns]é   )
ÚdtypeÚkindr   Zastyper   Ú	ExceptionÚassert_array_almost_equal_fnr7   r#   r0   )r$   rÊ   rË   r'   rÄ   r)   r)   r*   rH   
  s    zComparison.compare_arraysc           	   
   C   s¬   |j  ¡ }|j  ¡ }zHt||ƒD ]8\}}t|tƒr:t|ƒ}t|tƒrLt|ƒ}|  ||¡ q W nJ ty¦ } z2|  d|j  ¡ › d|j  ¡ › d¡|‚W Y d }~n
d }~0 0 d S )NzBoundingBoxes are mismatched: r   Ú.)	ZboundsZlbrtr¿   r    r   r   rÒ   r7   r#   )	r$   Úel1Úel2r'   Zlbrt1Zlbrt2rÂ   rÃ   rÄ   r)   r)   r*   Úbounds_check  s    



zComparison.bounds_checkc                 C   sF  |j |j kr&|  d|j › d|j › ¡‚|j|jkrL|  d|j› d|j› ¡‚|j ¡ }|j ¡ }t| ¡ ƒt| ¡ ƒkrž|  dt| ¡ ƒ› dt| ¡ ƒ› ¡‚| ¡ D ]š}|j d¡| jj	dkrÜ|j d¡| jj	dkrÜq¦z| j
|| || d d W q¦ ty> } z,d|›d	}|  |› |›¡|‚W Y d }~q¦d }~0 0 q¦d S )
NzDimension names mismatched: r   zDimension labels mismatched: z%Dimension parameter sets mismatched: ÚexistingÚCallabler,   zDimension parameter z mismatched: )Únamer#   ÚlabelÚparamÚvaluesr¶   r·   ZobjectsÚ	__class__r3   r2   r7   )r$   Zdim1Zdim2r'   Zdim1_paramsZdim2_paramsr»   rÄ   r)   r)   r*   rL   ,  s$    

&ÿzComparison.compare_dimensionsc                 C   s(   |   |j|jd¡ |   |j|jd¡ d S )NzGroup labels mismatched.zLabels mismatched.)r2   ÚgrouprÚ   ©r$   Zobj1Úobj2r'   r)   r)   r*   Úcompare_labelled_dataF  s    z Comparison.compare_labelled_dataúDimension listsc                 C   sD   t |ƒt |ƒkr |  |› d¡‚t||ƒD ]\}}|  ||¡ q*d S )Nz mismatched)r¾   r#   r¿   r2   )r$   Zdlist1Zdlist2r'   r¸   r¹   r)   r)   r*   Úcompare_dimension_listsK  s    z"Comparison.compare_dimension_listsc                 C   s4   |   ||¡ |  |j|jd¡ |  |j|jd¡ d S )NzValue dimension listzKey dimension list)rá   rã   ÚvdimsÚkdimsrß   r)   r)   r*   rM   R  s    ÿÿzComparison.compare_dimensionedc                 C   s    |   ||¡ |  |j|j¡ d S r<   )rá   r2   Údatarß   r)   r)   r*   rN   Z  s    zComparison.compare_elementsÚTreesc                 C   st   t | ¡ ƒt | ¡ ƒkr(|  |› d¡‚| ¡ | ¡ krH|  |› d¡‚t| ¡ | ¡ ƒD ]\}}|  ||¡ qZd S )Nz have mismatched path counts.z have mismatched paths.)r¾   r·   r#   r¿   rÜ   r2   ©r$   rÔ   rÕ   r'   Úelement1Úelement2r)   r)   r*   Úcompare_treesd  s    zComparison.compare_treesc                 C   s    |   ||¡ | j||dd d S )NZLayoutsr,   ©rM   rë   ©r$   rÔ   rÕ   r'   r)   r)   r*   rP   m  s    zComparison.compare_layouttreesc                 C   s$   t dd„ ||fD ƒƒs |  d¡‚d S )Nc                 s   s   | ]}t |tƒV  qd S r<   )r    r   ©Ú.0Úelr)   r)   r*   Ú	<genexpr>t  ó    z-Comparison.compare_empties.<locals>.<genexpr>z&Compared elements are not both Empty())r   r#   rí   r)   r)   r*   rQ   r  s    zComparison.compare_emptiesc                 C   s    |   ||¡ | j||dd d S )NZOverlaysr,   rì   rí   r)   r)   r*   rO   w  s    zComparison.compare_overlaysÚ
NdMappingsc                    sÄ   |   ˆ ˆ¡ tˆ  ¡ ƒtˆ ¡ ƒkr4|  |› d¡‚tˆ  ¡ ƒtˆ ¡ ƒkr ‡fdd„ˆ  ¡ D ƒ}‡ fdd„ˆ ¡ D ƒ}|  |› dd|› d d|› d	 ¡‚tˆ ˆƒD ]\}}|  ||¡ qªd S )
Nz  have different numbers of keys.c                    s   g | ]}|ˆ   ¡ vr|‘qS r)   ©r·   rî   )rÕ   r)   r*   Ú
<listcomp>ˆ  rò   z1Comparison.compare_ndmappings.<locals>.<listcomp>c                    s   g | ]}|ˆ   ¡ vr|‘qS r)   rô   rî   )rÔ   r)   r*   rõ   ‰  rò   z have different sets of keys. zIn first, not second z. zIn second, not first: rÓ   )rM   r¾   r·   r#   r¶   r¿   r2   )r$   rÔ   rÕ   r'   Zdiff1Zdiff2ré   rê   r)   )rÔ   rÕ   r*   Úcompare_ndmappings  s    
ÿ
þzComparison.compare_ndmappingsÚHoloMapsc                 C   s   |   ||¡ |  |||¡ d S r<   ©rM   rö   rí   r)   r)   r*   r¯   ‘  s    zComparison.compare_holomapr   c                 C   s   |   ||¡ |  |||¡ d S r<   rø   rí   r)   r)   r*   r°   —  s    zComparison.compare_dynamicmapc                 C   sl   |   ||¡ t|ƒt|ƒkr&|  d¡‚t| ¡ ƒt| ¡ ƒkrH|  d¡‚t||ƒD ]\}}|  ||¡ qRd S )NzLayouts have different sizes.zLayouts have different keys.)rM   r¾   r#   r¶   r·   r¿   r2   rè   r)   r)   r*   r«     s    

zComparison.compare_gridlayoutc                 C   sJ   |   ||¡ t|ƒt|ƒkr&|  d¡‚t||ƒD ]\}}|  ||¡ q0d S )Nz"NdOverlays have different lengths.)rM   r¾   r#   r¿   r2   )r$   rÔ   rÕ   r'   Zlayer1Zlayer2r)   r)   r*   r­   «  s
    
zComparison.compare_ndoverlaysc                 C   s0   |   ||¡ t||ƒD ]\}}|  ||¡ qd S r<   )rM   r¿   r2   rè   r)   r)   r*   r¬   ´  s    z!Comparison.compare_adjointlayoutsÚ
Annotationc                 C   s    |   ||¡ |  |j|j¡ d S r<   )rM   r2   ræ   rí   r)   r)   r*   Úcompare_annotation¿  s    zComparison.compare_annotationrU   c                 C   s   | j |||d d S ©Nr,   ©rú   rí   r)   r)   r*   rT   Ä  s    zComparison.compare_hlinerS   c                 C   s   | j |||d d S rû   rü   rí   r)   r)   r*   rR   È  s    zComparison.compare_vlinerW   c                 C   s   | j |||d d S rû   rü   rí   r)   r)   r*   rV   Ì  s    zComparison.compare_vspanrY   c                 C   s   | j |||d d S rû   rü   rí   r)   r)   r*   rX   Ð  s    zComparison.compare_hspanr[   c                 C   s   | j |||d d S rû   rü   rí   r)   r)   r*   rZ   Ô  s    zComparison.compare_spliner]   c                 C   s   | j |||d d S rû   rü   rí   r)   r)   r*   r\   Ø  s    zComparison.compare_arrowr_   c                 C   s   | j |||d d S rû   rü   rí   r)   r)   r*   r^   Ü  s    zComparison.compare_textra   c                 C   s   | j |||d d S rû   rü   rí   r)   r)   r*   r`   à  s    zComparison.compare_divrc   c                 C   sj   |   |||¡ | ¡ }| ¡ }t|ƒt|ƒkr>|  |› d¡‚t||ƒD ]\}}|   |||› d¡ qHd S )Nz0 objects do not have a matching number of paths.z data)rz   Úsplitr¾   r#   r¿   )r$   rÔ   rÕ   r'   Zpaths1Zpaths2Úp1Úp2r)   r)   r*   rb   è  s    zComparison.compare_pathsre   c                 C   s   | j |||d d S rû   ©rb   rí   r)   r)   r*   rd   ó  s    zComparison.compare_contoursrg   c                 C   s   | j |||d d S rû   r   rí   r)   r)   r*   rf   ÷  s    zComparison.compare_polygonsri   c                 C   s   | j |||d d S rû   r   rí   r)   r)   r*   rh   û  s    zComparison.compare_boxrk   c                 C   s   | j |||d d S rû   r   rí   r)   r)   r*   rj   ÿ  s    zComparison.compare_ellipserm   c                 C   s   | j |||d d S rû   r   rí   r)   r)   r*   rl     s    zComparison.compare_boundsr€   c           	   	      s`  |   ˆ ˆ¡ ˆ jjoˆjj ‰‡ ‡‡fdd„ˆ jD ƒ}|‡ ‡‡fdd„ˆ jD ƒ7 }ˆ jd ˆjd kr„td|ˆ jd ˆjd f ƒ‚|D ]Ò\}}}t t	¡, t
j ||¡ W d   ƒ qˆW d   ƒ n1 sÎ0    Y  |j|jkr|› d|j› d|› d|› d	}|  |¡‚|jjd
v rLt|ƒt|ƒkrZ|› d|j› d}|  |¡‚qˆ|  |||¡ qˆd S )Nc                    s*   g | ]"}|ˆ j |ˆd ˆj |ˆd f‘qS ))Úexpanded©Zdimension_values©rï   Úd©rÔ   rÕ   Ztabularr)   r*   rõ     s   þÿz.Comparison.compare_dataset.<locals>.<listcomp>c                    s*   g | ]"}|ˆ j |ˆd ˆj |ˆd f‘qS ))Zflatr  r  r  r)   r*   rõ     s   þÿr   z%%s not of matching length, %d vs. %d.ú z- columns have different type. First has type z, and second has type rÓ   ZSUOVz along dimension z not equal.)rM   Z	interfaceZgriddedrå   rä   Úshaper7   Ú
contextlibÚsuppressrÑ   r?   ZtestingZassert_equalrÏ   Zpprint_labelr#   rÐ   rC   rH   )	r$   rÔ   rÕ   r'   Zdimension_dataZdimr¸   r¹   Zfailure_msgr)   r  r*   rz     s:    þþÿ,ÿÿÿ
zComparison.compare_datasetr‚   c                 C   s   |   |||¡ d S r<   ©rz   rí   r)   r)   r*   r   ,  s    zComparison.compare_curver„   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   rƒ   0  s    zComparison.compare_errorbarsr†   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r…   4  s    zComparison.compare_spreadrˆ   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r‡   8  s    zComparison.compare_arearŠ   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r‰   <  s    zComparison.compare_scatterrŒ   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r‹   @  s    zComparison.compare_scatter3drŽ   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r   D  s    zComparison.compare_trisurfacer   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r   H  s    zComparison.compare_histogramr¤   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r£   L  s    zComparison.compare_pointsr˜   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r—   Q  s    zComparison.compare_vectorfieldr’   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r‘   U  s    zComparison.compare_barsr”   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r“   Y  s    zComparison.compare_spikesr–   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r•   ]  s    zComparison.compare_boxwhiskerr}   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r|   f  s    zComparison.compare_segmentsr   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r~   j  s    zComparison.compare_boxesrš   c                 C   sB   |   |||¡ |  |j|j|¡ |js,|jr>|  |j|j|¡ d S r<   )rz   r›   ÚnodesZ
_edgepathsr   Z	edgepathsrí   r)   r)   r*   r™   r  s    zComparison.compare_graphrŸ   c                 C   s   |   |||¡ d S r<   )r™   rí   r)   r)   r*   rž   y  s    zComparison.compare_trimeshrœ   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r›   }  s    zComparison.compare_nodesc                 C   s   |   |||¡ d S r<   r   rí   r)   r)   r*   r     s    zComparison.compare_edgepathsru   c                 C   s"   |   ||¡ |  |j|j|¡ d S r<   )rM   rH   ræ   rí   r)   r)   r*   rt   Š  s    zComparison.compare_rasterrw   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   rv     s    zComparison.compare_quadmeshr{   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   Úcompare_heatmap“  s    zComparison.compare_heatmapro   c                 C   s   |   ||¡ |  |||¡ d S r<   ©rÖ   rz   rí   r)   r)   r*   rn   —  s    zComparison.compare_imagerq   c                 C   s   |   ||¡ |  |||¡ d S r<   r  rí   r)   r)   r*   rp   œ  s    zComparison.compare_rgbrs   c                 C   s   |   ||¡ |  |||¡ d S r<   r  rí   r)   r)   r*   rr   ¡  s    zComparison.compare_hsvry   c                 C   s   |   ||¡ |  |||¡ d S r<   r  rí   r)   r)   r*   rx   ¦  s    zComparison.compare_surfacec                 C   sf   |   ||¡ |j|jkr"|  d¡‚|j|jkr8|  d¡‚dd„ |jD ƒdd„ |jD ƒkrb|  d¡‚d S )Nz*ItemTables have different numbers of rows.z-ItemTables have different numbers of columns.c                 S   s   g | ]
}|j ‘qS r)   )rÙ   r  r)   r)   r*   rõ   ¹  rò   z1Comparison.compare_itemtables.<locals>.<listcomp>z%ItemTables have different Dimensions.)rM   Úrowsr#   Úcolsrä   rí   r)   r)   r*   r    °  s    

 zComparison.compare_itemtablesr¢   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r¡   ½  s    zComparison.compare_tablesÚDFramec              
   C   sZ   ddl m} z|||ƒ W n: tyT } z"|  |› d|› ¡|‚W Y d }~n
d }~0 0 d S )Nr   )Úassert_frame_equalz: )Zpandas.testingr  r7   r#   )r$   Zdf1Zdf2r'   r  rÄ   r)   r)   r*   rJ   Å  s
    zComparison.compare_dataframer¨   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r§   Ñ  s    zComparison.compare_distributionr¦   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r¥   Õ  s    zComparison.compare_bivariaterª   c                 C   s   |   |||¡ d S r<   r
  rí   r)   r)   r*   r©   Ù  s    zComparison.compare_hextilesc                 C   s”   t | ¡ ƒt | ¡ ƒkr(|  |› d¡‚t| ¡ ƒt| ¡ ƒkrP|  |› d¡‚t |ƒt |ƒkrp|  |› d¡‚t||ƒD ]\}}|  ||¡ qzd S )Nz"s have different numbers of items.zs have different keys.zs have different depths.)r¾   r·   r#   r¶   r¿   r2   )r$   rÔ   rÕ   rÙ   ré   rê   r)   r)   r*   Ú_compare_gridsá  s    zComparison._compare_gridsc                 C   s   |   ||¡ |  ||d¡ d S )Nr   )rM   r  rí   r)   r)   r*   r®   ð  s    zComparison.compare_gridsc                 C   s   |   |j|j¡ d S r<   )r2   Úkwargs)r$   Zoptions1Zoptions2r'   r)   r)   r*   r±   ù  s    zComparison.compare_optionsc                 C   s   |   |j|j¡ d S r<   )r2   rÜ   )r$   Zcycle1Zcycle2r'   r)   r)   r*   r²   ý  s    zComparison.compare_cycles)r´   )N)N)rÉ   )rÌ   )N)N)N)râ   )N)N)rç   )N)N)N)ró   )r÷   )r   )N)N)N)rù   )rU   )rS   )rW   )rY   )r[   )r]   )r_   )ra   )rc   )re   )rg   )ri   )rk   )rm   )r€   )r‚   )r„   )r†   )rˆ   )rŠ   )rŒ   )rŽ   )r   )r¤   )r˜   )r’   )r”   )r–   )r}   )r   )rš   )rŸ   )rœ   )rœ   )ru   )rw   )r{   )ro   )rq   )rs   )ry   )N)r¢   )r  )r¨   )r¦   )rª   )N)N)N)Rr3   r4   r5   r6   r   r   rÒ   r8   r³   rF   rB   rD   r=   rH   rÖ   rL   rá   rã   rM   rN   rë   rP   rQ   rO   rö   r¯   r°   r«   r­   r¬   rú   rT   rR   rV   rX   rZ   r\   r^   r`   rb   rd   rf   rh   rj   rl   rz   r   rƒ   r…   r‡   r‰   r‹   r   r   r£   r—   r‘   r“   r•   r|   r~   r™   rž   r›   r   rt   rv   r  rn   rp   rr   rx   r    r¡   rJ   r§   r¥   r©   r  r®   r±   r²   r)   r)   r)   r*   r9   c   s,  
m			

	
r9   c                   @   s   e Zd ZdZdd„ ZdS )ÚComparisonTestCasezI
    Class to integrate the Comparison class with unittest.TestCase.
    c                 O   sB   t j| g|¢R i |¤Ž t ¡ }| ¡ D ]\}}|  ||¡ q(d S r<   )r   Ú__init__r9   r³   ÚitemsZaddTypeEqualityFunc)ÚselfÚargsr  Úregistryr»   Úvr)   r)   r*   r    s    zComparisonTestCase.__init__N)r3   r4   r5   r6   r  r)   r)   r)   r*   r    s   r  c                 C   sV   t tf}t| |ƒs(tdt| ƒj›dƒ‚t||ƒsHtdt|ƒj›dƒ‚t| |ƒ d S )Nz,First argument is not an allowed type but a rÓ   z-Second argument is not an allowed type but a )r   r   r    Ú	TypeErrorr-   r3   Ú_assert_element_equal)ré   rê   Zhv_typesr)   r)   r*   Úassert_element_equal  s    

r  ),r6   r  Ú	functoolsr   Zunittestr   Zunittest.utilr   Únumpyr?   ZpandasrK   Znumpy.testingr   r   Úcorer   r	   r
   r   r   r   r   r   r   r   r   r   r   Zcore.optionsr   r   Z	core.utilr   r   r   r   Ú r   r9   r  r2   r  r  r)   r)   r)   r*   Ú<module>   s*   <2     $