o
    jK´c5  ã                   @   sT   d dl Z d dlZG dd„ deƒZG dd„ deƒZG dd„ deƒZeejej ƒZ	dS )é    Nc                   @   ó   e Zd ZdZdS )ÚEncodingErrorz2
    Error in encoding from base 10 to base X
    N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r	   r	   ú:/var/www/html/docker_usevoice/src/apps/shorter/baseconv.pyr      ó    r   c                   @   r   )ÚDecodingErrorz2
    Error in decoding from base X to base 10
    Nr   r	   r	   r	   r
   r      r   r   c                   @   s:   e Zd ZdZejZdd„ Zdd„ Zdd„ Z	e
dd	„ ƒZd
S )ÚBaseConvertera+  
    Convert numbers from base 10 integers to base X strings and back again.
    Original: http://www.djangosnippets.org/snippets/1431/
    Sample usage:
    >>> base20 = BaseConverter('0123456789abcdefghij')
    >>> base20.from_decimal(1234)
    '31e'
    >>> base20.to_decimal('31e')
    1234
    c                 C   s
   || _ d S )N)Údigits)Úselfr   r	   r	   r
   Ú__init__    s   
zBaseConverter.__init__c                 C   s*   t |tjƒstd| ƒ‚|  || j| j¡S )Nz%s is not an int())Ú
isinstanceÚnumbersÚRealr   ÚconvertÚdecimal_digitsr   )r   Úir	   r	   r
   Úfrom_decimal#   s   zBaseConverter.from_decimalc                 C   sd   t |tƒstd| ƒ‚t|ƒD ]\}}|| jvr&|dks&|dks&td| ƒ‚qt|  || j| j¡ƒS )Nz%s is not a strú-r   z"Invalid character for encoding: %s)r   Ústrr   Ú	enumerater   Úintr   r   )r   ÚsÚindexÚcharr	   r	   r
   Ú
to_decimal(   s   
€zBaseConverter.to_decimalc                 C   s²   t | ƒd dkrt | ƒdd … } d}nd}d}t | ƒD ]}|t|ƒ | |¡ }q|dkr3|d }|S d}|dkrQ|t|ƒ }|| | }t|t|ƒ ƒ}|dks9|rWd| }|S )Nr   r   é   Ú )r   Úlenr   r   )ÚnumberÚ
fromdigitsÚtodigitsÚnegÚxÚdigitÚresr	   r	   r
   r   0   s&   	ùýzBaseConverter.convertN)r   r   r   r   Ústringr   r   r   r   r   Ústaticmethodr   r	   r	   r	   r
   r      s    
r   )
r   r*   Ú
ValueErrorr   r   Úobjectr   r   Úascii_lettersÚbase62r	   r	   r	   r
   Ú<module>   s    9