o
    Ďi(                     @   sf   d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ eee	Z
G dd dejZdd ZdS )    N)abspathdirname)folderparserc                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )TestFolderParserc                 C   s(   t  d}t|}t|t  d d S )Nz/../datasets/chessz/../output/parse-chess.json)thisdirr   parsefolder_assertJsonMatchesFile)selfchessfolderparsed r   X/home/jeff/fluffinator/venv/lib/python3.10/site-packages/tests/util/test_folderparser.pytest_parse_chess   s   

z!TestFolderParser.test_parse_chessc                    sX   t  d}t|}d  fdd|d D d }tt|d d d	 d
ks*J d S )Nz/../datasets/sharks-tiny-cocoz@/train/sharks_mp4-20_jpg.rf.90ba2e8e9ca0613f71359efb7ed48b26.jpgc                       g | ]
}|d   kr|qS filer   .0itestImagePathr   r   
<listcomp>       z;TestFolderParser.test_parse_sharks_coco.<locals>.<listcomp>imagesr   annotationfilerawTextannotations   )r   r   r   lenjsonloads)r	   sharksfolderr   	testImager   r   r   test_parse_sharks_coco   s
   

&z'TestFolderParser.test_parse_sharks_cococ                    st   t  d}t|}d  fdd|d D d }t|d d }t|d	ks*J |d }t|d
 dks8J d S )Nz!/../datasets/sharks-tiny-createmlz@/train/sharks_mp4-20_jpg.rf.5359121123e86e016401ea2731e47949.jpgc                    r   r   r   r   r   r   r   r      r   z?TestFolderParser.test_parse_sharks_createml.<locals>.<listcomp>r   r   r   r      r   r   )r   r   r   r   r    r   )r	   r!   r   r"   imgParsedAnnotationsimgReferencer   r   r   test_parse_sharks_createml   s   

z+TestFolderParser.test_parse_sharks_createmlc                 C   s(   dd }|t  d |t  d d S )Nc                    s`   t | }d  fdd|d D d }d}|d d |ks J |d d	 d
dddks.J d S )NzG/train/images/sharks_mp4-20_jpg.rf.5359121123e86e016401ea2731e47949.jpgc                    r   r   r   r   r   r   r   r   '   r   zKTestFolderParser.test_parse_sharks_yolov9.<locals>.test.<locals>.<listcomp>r   r   zG/train/labels/sharks_mp4-20_jpg.rf.5359121123e86e016401ea2731e47949.txtr   r   labelmapfishprimaryshark)r   r$      )r   r   )r!   r   r"   expectAnnotationFiler   r   r   test$   s   
 z7TestFolderParser.test_parse_sharks_yolov9.<locals>.testz/../datasets/sharks-tiny-yolov9z /../datasets/sharks-tiny-yolov9/)r   )r	   r.   r   r   r   test_parse_sharks_yolov9#   s   z)TestFolderParser.test_parse_sharks_yolov9c                    sj   t  d}t|}d  fdd|d D d }|d d d	ks#J d
}|d7 }|d d |ks3J d S )Nz/../datasets/mosquitosz/train_10308.jpegc                    r   r   r   r   r   r   r   r   3   r   z=TestFolderParser.test_parse_mosquitos_csv.<locals>.<listcomp>r   r   r   namezannotation.csvzBimg_fName,img_w,img_h,class_label,bbx_xtl,bbx_ytl,bbx_xbr,bbx_ybr
z<train_10308.jpeg,1058,943,japonicus/koreicus,28,187,908,815
r   r   r   r   r	   folderr   r"   expectedr   r   r   test_parse_mosquitos_csv/   s   

z)TestFolderParser.test_parse_mosquitos_csvc                    sb   t  d}t|}d  fdd|d D d }|d d d	ks#J d
}|d d |ks/J d S )Nz/../datasets/paligemmazU/dataset/de48275e1ff70fab78bee31e09fc896d_png.rf.01a97b1ad053aa1e6525ac0451cee8b7.jpgc                    r   r   r   r   r   r   r   r   =   r   z:TestFolderParser.test_paligemma_format.<locals>.<listcomp>r   r   r   r0   zannotation.jsonlaN  {"image": "de48275e1ff70fab78bee31e09fc896d_png.rf.01a97b1ad053aa1e6525ac0451cee8b7.jpg", "prefix": "Which sector had the highest ROI in 2013?", "suffix": "Retail"}
{"image": "de48275e1ff70fab78bee31e09fc896d_png.rf.01a97b1ad053aa1e6525ac0451cee8b7.jpg", "prefix": "Which sector had the highest ROI in 2014?", "suffix": "Electronics"}r   r1   r2   r   r   r   test_paligemma_format9   s   

z&TestFolderParser.test_paligemma_formatc                 C   s  t  d}tj|dd}|d D ]
}| |d qtj|dd}dd |d D }| t|d	k |D ]}| |d | |d d
 d | |d d d q6dd |d D }| t|d	k |D ]}| |d | |d d
 d | |d d d qid S )Nz1/../datasets/corrosion-singlelabel-classificationFis_classificationr   r   Tc                 S      g | ]
}d |d v r|qS )	Corrosionr   r   r   r   r   r   r   N   r   zOTestFolderParser.test_parse_classification_folder_structure.<locals>.<listcomp>r   typeclassification_folderclassification_labelr:   c                 S   r9   )no-corrosionr   r   r   r   r   r   r   T   r   r>   )	r   r   r   assertIsNoneget
assertTruer   assertIsNotNoneassertEqual)r	   r<   r   imgparsed_classificationcorrosion_imagesno_corrosion_imagesr   r   r   *test_parse_classification_folder_structureG   s$   
z;TestFolderParser.test_parse_classification_folder_structurec                 C   sp   t  d}tj|dd}dd |d D }|d}| | | |d d	 d
 | t|d d dh d S )Nz2/../datasets/skinproblem-multilabel-classificationTr7   c                 S   s   i | ]}|d  |qS )r0   r   )r   rD   r   r   r   
<dictcomp>^   s    zMTestFolderParser.test_parse_multilabel_classification_csv.<locals>.<dictcomp>r   z/101_jpg.rf.ffb91e580c891eb04b715545274b2469.jpgr   r;   classification_multilabellabels
Blackheads)r   r   r   r@   rB   rC   set)r	   r3   r   r   img1r   r   r   (test_parse_multilabel_classification_csv[   s   


z9TestFolderParser.test_parse_multilabel_classification_csvc                    s:  t  }d}tjdd|}tj||}t|d  i g dddgd|tjd	d
ddgdddg ddg ddgd}tj|d}t|d}t	
|| W d    n1 s\w   Y  t|}d	|   fdd|d D }	| t|	dk |	d }
| |
d W d    d S 1 sw   Y  d S )Nz.example_2_100002_02f2f7c6e15f09b401575ae6.jpeg2100002wbr$   thingidr0   逖 /   i  rU   	file_namewidthheight)
   r]   d   2   i  r   rU   image_idcategory_idbboxareasegmentationiscrowdinfolicenses
categoriesr   r   _annotations.coco.jsonwc                    r   r   r   r   expected_file_keyr   r   r      r   z]TestFolderParser.test_coco_with_subdir_file_name_should_match_annotations.<locals>.<listcomp>r   r   )tempfileTemporaryDirectoryospathjoinopenclosereplacesepr   dumpr   r   rA   r   rB   r@   )r	   tmpdir
image_nameimage_relpath
image_pathcoco	coco_pathfr   img_entries	img_entryr   rm   r   8test_coco_with_subdir_file_name_should_match_annotationsd   sF   




"zITestFolderParser.test_coco_with_subdir_file_name_should_match_annotationsc                    s  t  }tj|dd}tj|dd d tj| }t|d  i g ddd	gd
ddddgdd
dg ddg dgddgd}tj|d}t|d}t	|| W d   n1 saw   Y  t
|} fdd|d D }| t|dd |d }	| |	dd t|	d d }
| t|
d dd | t|
d  dd! | |
d  d d" g d W d   dS 1 sw   Y  dS )#zTest that COCO annotation at root can match images in subdirectories.

        This tests the fix for the bug where annotation file dirname (/) didn't match
        image dirname (/1/100001), causing annotations to not be found.
        1100001T)exist_okz
image.jpegrR   r$   objectrT   rV   z1/100001/image.jpegrX   iX  rY   )r]      r^      i N  )r]   r   n   r   r      r]   r   r   r`   rg   rk   rl   Nc                    s   g | ]
} |d  v r|qS r   r   r   rz   r   r   r      r   zXTestFolderParser.test_coco_root_annotation_matches_images_in_subdirs.<locals>.<listcomp>r   zShould find exactly one imager   zImage should have annotationr   zShould have one image referencer   zShould have one annotationrc   )ro   rp   rq   rr   rs   makedirsrt   ru   r   rx   r   r   rC   r   rB   r@   r    )r	   ry   subdirr|   r}   r~   r   r   r   r   ann_datar   r   r   3test_coco_root_annotation_matches_images_in_subdirs   sN   



"zDTestFolderParser.test_coco_root_annotation_matches_images_in_subdirsN)__name__
__module____qualname__r   r#   r'   r/   r5   r6   rH   rO   r   r   r   r   r   r   r      s    

	1r   c                 C   s>   t |}t|}| |kW  d    S 1 sw   Y  d S )N)rt   r   load)actualfilenamer   r4   r   r   r   r      s   

$r   )r   rq   ro   unittestos.pathr   r   roboflow.utilr   __file__r   TestCaser   r   r   r   r   r   <module>   s     F