o
    \h!                     @  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mZmZmZ d dlZerFd dlmZmZmZ 			d1d2ddZd3ddZd4d d!Zd5d#d$Zd6d&d'Zd7d(d)ZG d*d+ d+ejZd8d9d.d/Z e!d0kre   dS dS ):    )annotationsN)	b64decode)encodebytes)Sequence)default_timer)TYPE_CHECKINGAnyBinaryIOcast)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)   T/home/air/segue/gemini/backup/venv/lib/python3.10/site-packages/pybase64/__main__.py	bench_one   s   	
	
	
r+   filer	   c                 C  sf   t jd d dkr"| ttt jkr"t| drtt| j S |  S z|  }W |   |S |   w )N   )      buffer)	sysversion_infor
   r	   stdinhasattrr0   readcloser,   r   r)   r)   r*   readallb   s   "


r8   c                 C  s\   | t ttjkrt| dr| j| d S | | d S z| | W |   d S |   w )Nr0   )r
   r	   r1   stdoutr4   r0   writer6   r7   r)   r)   r*   writeallq   s   
r;   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_versionr8   r+   	b64encoder   r   base64b64decodeValidateb64encodebytes)r   r<   r   r   r   r)   r)   r*   	benchmark   s2   	rG   outputc                 C  s"   t | }t||}t|| d S N)r8   rA   rC   r;   )r<   r   rH   r   r)   r)   r*   encode   s   rJ   c                 C  s$   t | }t|||}t|| d S rI   )r8   rA   r   r;   )r<   r   r   rH   r   r)   r)   r*   decode   s   rK   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]deststrlicense
str | Nonehelpc                   s"   t  j||tjd|d || _d S )Nr   )rN   rP   defaultnargsrT   )super__init__argparseSUPPRESSrR   )selfrN   rP   rR   rT   	__class__r)   r*   rX      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 rI   )r   rR   exit)r[   r^   r`   rb   rd   r)   r)   r*   __call__   s   
zLicenseAction.__call__)NrM   )rN   rO   rP   rQ   rR   rS   rT   rS   rI   )
r^   r_   r`   ra   rb   rc   rd   rS   r   r   )r"   r!   __qualname__rX   rf   __classcell__r)   r)   r\   r*   rL      s    rL   argvSequence[str] | Nonec           	   	   C  s  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 |jdt ddd |jtd |j	ddd}|jdt ddd | }|jddddd d!d" |jd#d$d d%d& |jd'd(d)t d*tjd+d, |jtd |j	d-dd}|jdt dd.d | }|jddddd d/d" |jd#d$d d0d& |jd'd(d)t d*tjd1d, |jd2d3d4d5d6 |jtd | d u rtjd7d  } t| d8krd9g} t|j| d:}|d;}|d<i | d S )=Nz command-line tool.)progdescriptionz-Vz	--versionversionr=   )actionrm   z	--license)rn   rR   z	tool help)rT   rG   z-h for usagez-dz
--durationDr   g      ?z4expected duration for a single encode or decode test)metavarrP   typerU   rT   r<   rbz!input file used for the benchmark)rq   rT   )funcrJ   zinput file to be encodedz-uz--urlstore_constr>   r   zuse URL encoding)rn   constrP   rT   z-az
--altcharsz'use alternative characters for encoding)rP   rT   z-oz--outputrH   wbz'encoded output file (default to stdout))rP   rq   rU   rT   rK   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)rP   rn   rT   r   r   z-h)argsrs   r)   )rY   ArgumentParserr@   add_argumentrA   rB   rL   get_license_textadd_subparsers
add_parserr   FileTypeset_defaultsrG   add_mutually_exclusive_groupr1   r9   rJ   rK   ri   r#   vars
parse_argspop)	ri   r^   
subparsersbenchmark_parserencode_parsergroupdecode_parserrx   rs   r)   r)   r*   main   s   	
r   __main__)NF)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<   r	   r   r   )r<   r	   r   r   rH   r	   r   r   )
r<   r	   r   r   r   r   rH   r	   r   r   rI   )ri   rj   r   r   )"
__future__r   rY   rD   r1   r   rE   r   rF   collections.abcr   timeitr   r   typingr   r   r	   r
   rA   pybase64._typingr   r   r   r+   r8   r;   rG   rJ   rK   ActionrL   r   r"   r)   r)   r)   r*   <module>   s2    	
P



g
