U
    ‰dÜ  ã                   @   s^   d dl Z d dlZd dlZd dlmZ d dlmZmZ dd„ Z	dd„ Z
dd	„ Zed
krZeƒ  dS )é    N)Ú
caffe2_pb2)Ú	workspaceÚmodel_helperc              	   C   s$  t dƒ d}tj| |d}d}|jddÞ}tddƒD ]Ì}|d }d	}d
}tj d||¡}	t 	¡ }
|
j
 ¡ }|j |	j¡ d|_|	 t |	j¡¡}|j |¡ |
j
 ¡ }d|_|j |¡ | d |¡ d¡|
 ¡ ¡ |t |	¡| 7 }|d dkr6t d |¡ƒ q6W 5 Q R X t d t|ƒ¡ƒ |S )Nz>>> Write database...l        )Zmap_sizer   T)Úwriteé€   é
   é@   é    é   é   é   z{}Úasciié   zInserted {} rowszChecksum/write: {})ÚprintÚlmdbÚopenÚbeginÚrangeÚnpÚrandomZrandr   ZTensorProtosÚprotosÚaddZdimsÚextendÚshapeZ	data_typeZreshapeÚprodZ
float_dataZ
int32_dataÚappendÚputÚformatÚencodeZSerializeToStringÚsumÚint)Úoutput_fileZLMDB_MAP_SIZEÚenvÚchecksumZtxnÚjÚlabelÚwidthÚheightZimg_dataZtensor_protosZ
img_tensorZflatten_imgZlabel_tensor© r(   úN/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/examples/lmdb_create_example.pyÚ	create_db   s8    

þr*   c              	   C   sæ   t dƒ tjdd}d}|jg ddg|| dd\}}d	}t |j¡ t |j¡ t	d	d
ƒD ]Z}t 
|j ¡ j¡ t d¡}t d¡}	t	|ƒD ]&}
|t ||
d d …f ¡|	|
  7 }qŒqZt d t|ƒ¡ƒ t || dk ¡sâtdƒ‚d S )Nz>>> Read database...Zlmdbtest)Únamer	   Údatar%   r   )Ú
batch_sizeÚdbZdb_typer   é   zChecksum/read: {}gš™™™™™¹?zRead/write checksums dont match)r   r   ZModelHelperZTensorProtosDBInputr   Z
RunNetOnceZparam_init_netZ	CreateNetÚnetr   ZRunNetZProtor+   Z	FetchBlobr   r   r   r    ÚabsÚAssertionError)Zdb_fileZexpected_checksumÚmodelr-   r,   r%   r#   Ú_Z	img_datasÚlabelsr$   r(   r(   r)   Úread_db_with_caffe2A   s.       þ


&ÿr6   c                  C   sB   t jdd} | jdtd ddd |  ¡ }t|jƒ}t|j|ƒ d S )NzExample LMDB creation)Údescriptionz--output_filezPath to write the database toT)ÚtypeÚdefaultÚhelpÚrequired)ÚargparseÚArgumentParserÚadd_argumentÚstrÚ
parse_argsr*   r!   r6   )ÚparserÚargsr#   r(   r(   r)   Úmain[   s    ÿ
þ
rC   Ú__main__)r<   Znumpyr   r   Zcaffe2.protor   Zcaffe2.pythonr   r   r*   r6   rC   Ú__name__r(   r(   r(   r)   Ú<module>   s   )