U
    8ÄT_­  ã                   @   sf   d Z dZdZdZdZdZed ZG dd„ dƒZeeƒZeeƒZ	eeƒZ
eeƒZeeƒZeed	d
�ZdS )až  
Convert numbers from base 10 integers to base X strings and back again.

Sample usage::

  >>> base20 = BaseConverter('0123456789abcdefghij')
  >>> base20.encode(1234)
  '31e'
  >>> base20.decode('31e')
  1234
  >>> base20.encode(-1234)
  '-31e'
  >>> base20.decode('-31e')
  -1234
  >>> base11 = BaseConverter('0123456789-', sign='$')
  >>> base11.encode('$1234')
  '$-22'
  >>> base11.decode('$-22')
  '$1234'

Z01Z0123456789ABCDEFZ823456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyzZ$0123456789abcdefghijklmnopqrstuvwxyzZ>0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzz-_c                   @   s:   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚBaseConverterÚ
0123456789ú-c                 C   s"   || _ || _|| jkrtdƒ‚d S )Nz.Sign character found in converter base digits.)ÚsignÚdigitsÚ
ValueError)Úselfr   r   © r   ú9/tmp/pip-unpacked-wheel-dv63caxw/django/utils/baseconv.pyÚ__init__3   s    
zBaseConverter.__init__c                 C   s   d| j jt| jƒ| jf S )Nz<%s: base%s (%s)>)Ú	__class__Ú__name__Úlenr   )r   r   r   r	   Ú__repr__9   s    zBaseConverter.__repr__c                 C   s*   |   || j| jd¡\}}|r&| j| S |S ©Nr   )ÚconvertÚdecimal_digitsr   r   )r   ÚiÚnegÚvaluer   r   r	   Úencode<   s    
zBaseConverter.encodec                 C   s.   |   || j| j| j¡\}}|r&d| }t|ƒS r   )r   r   r   r   Úint)r   Úsr   r   r   r   r	   ÚdecodeB   s    zBaseConverter.decodec           	      C   s¢   t |ƒd |kr&t |ƒdd … }d}nd}d}t |ƒD ]}|t|ƒ | |¡ }q6|dkrd|d }n6d}|dkrš|t|ƒ }|| | }t|t|ƒ ƒ}qh||fS )Né    é   Ú )Ústrr   Úindexr   )	r   ÚnumberZfrom_digitsZ	to_digitsr   r   ÚxÚdigitÚresr   r   r	   r   H   s    
zBaseConverter.convertN)r   )	r   Ú
__module__Ú__qualname__r   r
   r   r   r   r   r   r   r   r	   r   0   s   
r   ú$)r   N)Ú__doc__ZBASE2_ALPHABETZBASE16_ALPHABETZBASE56_ALPHABETZBASE36_ALPHABETZBASE62_ALPHABETZBASE64_ALPHABETr   Zbase2Zbase16Zbase36Zbase56Zbase62Úbase64r   r   r   r	   Ú<module>   s   0