
    2~h                     B    d Z ddlmZmZ  G d d      Z G d de      Zy)zW
This module is responsible for generating the check digit and formatting
SBN numbers.
    )AnyOptionalc                   6    e Zd ZdZ	 	 ddee   dee   ddfdZy)SBN	   N
registrantpublicationreturnc                      || _         || _        y N)r   r	   )selfr   r	   s      `/var/www/peopleoo.sandbox-dev.co.uk/venv/lib/python3.12/site-packages/faker/providers/sbn/sbn.py__init__zSBN.__init__   s    
 %&    )NN)__name__
__module____qualname__
MAX_LENGTHr   strr    r   r   r   r   	   s8    J %)%)'SM' c]' 
	'r   r   c                   J     e Zd Zdededdf fdZdefdZd	dedefdZ xZS )
SBN9argskwargsr
   Nc                 N    t        |   |i | | j                         | _        y r   )superr   _check_digitcheck_digit)r   r   r   	__class__s      r   r   zSBN9.__init__   s&    $)&),,.r   c                    t        dd      }dj                  | j                  | j                  fD cg c]  }||	 c}      }t	        d t        ||      D              dz  }|dk(  rdn
t        |      }t        |      S c c}w )a)  Calculate the check digit for SBN-9.
        SBNs use the same check digit calculation as ISBN. See
        https://en.wikipedia.org/wiki/International_Standard_Book_Number
                for calculation. Only modification is weights range from 1 to 9
                instead of 1 to 10.
           r    c              3   >   K   | ]  \  }}t        |      |z    y wr   )int).0bws      r   	<genexpr>z$SBN9._check_digit.<locals>.<genexpr>#   s     Btq!A
Bs      
   X)rangejoinr   r	   sumzipr   )r   weightspartbody	remainderr   s         r   r   zSBN9._check_digit   s{     1+ww$//4;K;K)LaPTP`abBs4/ABBRG	&"_c#i.; bs
   BB	separatorc                     |j                  | j                  | j                  | j                  fD cg c]  }|| c}      S c c}w r   )r-   r   r	   r   )r   r4   r1   s      r   formatzSBN9.format'   sS    ~~ OO$$$$
 # 

 
	
s   A)r"   )	r   r   r   r   r   r   r   r6   __classcell__)r   s   @r   r   r      s<    /c /S /T / c  
 
S 
r   r   N)__doc__typingr   r   r   r   r   r   r   <module>r:      s%   
 !	' 	'
3 
r   