o
    viR!                     @  s  d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZ d dlZerHd d	lmZmZmZ 		
d6d7ddZd8dd Zd9d!d"Zd:d$d%Zd;d'd(Zd<d)d*ZG d+d, d,ejZd=d/d0Z d>d?d3d4Z!e"d5kre!  dS dS )@    )annotationsN)	b64decode)encodebytes)Sequence)Path)default_timer)TYPE_CHECKINGAny)DecodeEncodeEncodeBytesFdurationfloatdatabytesencr   decr
   encbytesr   altcharsbytes | NonevalidateboolreturnNonec                 C  s  | d } |sY|d u rYd}t  }	 ||}	|d7 }t  | | kr nq|}
t  }|
dkr6||}	|
d8 }
|
dks*t  | }td|jd |j d |t| d | t|t|	 d}t  }	 |||d	}	|d7 }t  | | krqnq_|}
t  }|
dkr|||d	}	|
d8 }
|
dks{t  | }td|jd |j d |t| d | t|t|	 d}t  }	 ||	||d
}|d7 }t  | | krnq|}
t  }|
dkr||	||d
}|
d8 }
|
dkst  | }td|jd |j d |t| d | t|	t| ||ksJ d S )Ng       @r   T   z1{:<32s} {:9.3f} MB/s ({:,d} bytes -> {:,d} bytes).:g      0A)r   )r   r   )timerprintformat
__module____name__len)r   r   r   r   r   r   r   numbertimeencodedcontentiterdecodedcontent r(   P/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/pybase64/__main__.py	bench_one   s   	
	
	
r*   filestrc                 C  s    | dkr
t jj S t|  S N-)sysstdinbufferreadr   
read_bytes)r+   r(   r(   r)   readallc   s   r4   c                 C  s,   | dkrt jj| d S t| | d S r-   )r/   stdoutr1   writer   write_bytes)r+   r   r(   r(   r)   writealli   s   r8   inputc              
   C  s|   t td t   t|}dD ]+}dD ]&}t d|dd|d t| |tjtjtj|| t| |t	jt
t|| qqd S )N )N   -_)FTzbench: altchars=sz, validate=)r   __package__pybase64get_versionr4   r*   	b64encoder   r   base64b64decodeValidateb64encodebytes)r   r9   r   r   r   r(   r(   r)   	benchmarkp   s2   	rD   outputc                 C  s"   t | }t||}t|| d S N)r4   r>   r@   r8   )r9   r   rE   r   r(   r(   r)   encode   s   rG   c                 C  s$   t | }t|||}t|| d S rF   )r4   r>   r   r8   )r9   r   r   rE   r   r(   r(   r)   decode   s   rH   c                      s2   e Zd Z		dd fd
dZ	ddddZ  ZS )LicenseActionN!show license information and exitoption_stringsSequence[str]destr,   license
str | Nonehelpc                   s"   t  j||tjd|d || _d S )Nr   )rK   rM   defaultnargsrP   )super__init__argparseSUPPRESSrN   )selfrK   rM   rN   rP   	__class__r(   r)   rT      s   
zLicenseAction.__init__parserargparse.ArgumentParser	namespaceargparse.Namespacevaluesstr | Sequence[Any] | Noneoption_stringr   r   c                 C  s   t | j |  d S rF   )r   rN   exit)rW   rZ   r\   r^   r`   r(   r(   r)   __call__   s   
zLicenseAction.__call__)NrJ   )rK   rL   rM   r,   rN   rO   rP   rO   rF   )
rZ   r[   r\   r]   r^   r_   r`   rO   r   r   )r!   r    __qualname__rT   rb   __classcell__r(   r(   rX   r)   rI      s    rI   valueis_inputc                 C  s@   | dkr| S t | }|rt|jddS t|jjdd|j S )Nr.   T)strict)r   r,   resolveparentname)re   rf   pathr(   r(   r)   
check_file   s   rl   argvSequence[str] | Nonec           	   	   C  s4  t jttd d}|jdddtd t  d |jdtt d	 |jd
d}|j	ddd}|jddddt
ddd |dddd  |jdddd |jtd |j	ddd}|dddd  |ddd d  |jddd!d | }|jd"d#d$d%d&d'd( |jd)d*d&d+d, |jd-d.d/dd0d1d2 |jtd |j	d3dd}|ddd4d  |ddd5d  |jddd6d | }|jd"d#d$d%d&d7d( |jd)d*d&d8d, |jd-d.d/dd0d9d2 |jd:d;d<d=d> |jtd | d u rtjd?d  } t| d@krdAg} t|j| dB}|dC}|dDi | d S )ENz command-line tool.)progdescriptionz-Vz	--versionversionr:   )actionrq   z	--license)rr   rN   z	tool help)rP   rD   z-h for usagez-dz
--durationDr   g      ?z4expected duration for a single encode or decode test)metavarrM   typerQ   rP   ru   z
input filec                 S  
   t | dS NTrl   r<   r(   r(   r)   <lambda>      
 zmain.<locals>.<lambda>r9   z!input file used for the benchmark)ru   rP   )funcrG   c                 S  rv   rw   rx   ry   r(   r(   r)   rz      r{   zoutput filec                 S  rv   NFrx   ry   r(   r(   r)   rz      r{   zinput file to be encodedz-uz--urlstore_constr;   r   zuse URL encoding)rr   constrM   rP   z-az
--altcharsz'use alternative characters for encoding)rM   rP   z-oz--outputrE   r.   z'encoded output file (default to stdout))rM   ru   rQ   rP   rH   c                 S  rv   rw   rx   ry   r(   r(   r)   rz      r{   c                 S  rv   r}   rx   ry   r(   r(   r)   rz      r{   zinput file to be decodedzuse URL decodingz'use alternative characters for decodingz'decoded output file (default to stdout)z--no-validationr   store_falsez$disable validation of the input data)rM   rr   rP   r   r   z-h)argsr|   r(   )rU   ArgumentParserr=   add_argumentr>   r?   rI   get_license_textadd_subparsers
add_parserr   registerset_defaultsrD   add_mutually_exclusive_grouprG   rH   r/   rm   r"   vars
parse_argspop)	rm   rZ   
subparsersbenchmark_parserencode_parsergroupdecode_parserr   r|   r(   r(   r)   main   s   	
r   __main__r}   )r   r   r   r   r   r   r   r
   r   r   r   r   r   r   r   r   )r+   r,   r   r   )r+   r,   r   r   r   r   )r   r   r9   r,   r   r   )r9   r,   r   r   rE   r,   r   r   )
r9   r,   r   r   r   r   rE   r,   r   r   )re   r,   rf   r   r   r,   rF   )rm   rn   r   r   )#
__future__r   rU   rA   r/   r   rB   r   rC   collections.abcr   pathlibr   timeitr   r   typingr   r	   r>   pybase64._typingr
   r   r   r*   r4   r8   rD   rG   rH   ActionrI   rl   r   r!   r(   r(   r(   r)   <module>   s6    	
P




	h
