ó
ûhPc           @   s‹   d  d l  Z  d  d l Z d  d l Z d d	 d „  ƒ  YZ d „  Z d „  Z d  d l Z e d k r‡ d e j f d „  ƒ  YZ	 e j
 ƒ  n  d S(
   iÿÿÿÿNt   modmul_tc           B   s   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s‘   |  j  t | ƒ t | ƒ d d ƒ |  j | ƒ t j | ƒ |  _ t j | ƒ |  _ x7 t d t | ƒ ƒ D]  } |  j | c |  j | ;<qi Wd  S(   Nt   residuest   modulii    (   t   check_lengthst   lent   check_modulit   copyR   R   t   range(   t   selft   resarrayt   modarrayt   i(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   __init__   s    "c         C   sm   t  |  j ƒ t  | j ƒ k r" d St  |  j ƒ } x5 t d | ƒ D]$ } |  j | | j | k rA d SqA Wd S(   Ni    i   (   R   R   R   (   t   at   bt   nR   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   __eq__   s    c         C   s   |  | k S(   N(    (   R   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   __ne__&   s    c         C   s¤   |  j  t |  j ƒ t | j ƒ d d ƒ |  j |  j | j ƒ t |  j |  j ƒ } xJ t d t |  j ƒ ƒ D]0 } |  j | | j | | j | | j | <ql W| S(   NR   i    (   R   R   R   t   check_moduli_pairR    R   R   (   R   R   t   cR   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   __mul__)   s    (.c         C   sc   t  |  j |  j ƒ } xG t d t |  j ƒ ƒ D]- } t j |  j | |  j | ƒ | j | <q. W| S(   Ni    (   R    R   R   R   R   t   sackintt   intmodrecip(   R   R   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   inv1   s    +c         C   s¤   |  j  t |  j ƒ t | j ƒ d d ƒ |  j |  j | j ƒ t |  j |  j ƒ } xJ t d t |  j ƒ ƒ D]0 } |  j | | j | | j | | j | <ql W| S(   NR   i    (   R   R   R   R   R    R   R   (   R   R   R   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   __add__7   s    (.c         C   s¤   |  j  t |  j ƒ t | j ƒ d d ƒ |  j |  j | j ƒ t |  j |  j ƒ } xJ t d t |  j ƒ ƒ D]0 } |  j | | j | | j | | j | <ql W| S(   NR   i    (   R   R   R   R   R    R   R   (   R   R   R   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   __sub__?   s    (.c         C   s\   t  |  j |  j ƒ } x@ t d t |  j ƒ ƒ D]& } |  j | |  j | | j | <q. W| S(   Ni    (   R    R   R   R   R   (   R   R   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   negG   s    $c   	      C   sÆ   t  j d | ƒ } t  j d | ƒ } |  j t | ƒ t | ƒ | | ƒ t | ƒ } t d | ƒ } t d | ƒ } x? t d | ƒ D]. } t | | ƒ | | <t | | ƒ | | <q€ W|  j | | ƒ d  S(   Nt   ,i    (   t   ret   splitR   R   R   t   intR   (	   R   t
   res_stringt
   mod_stringt   res_stringst   mod_stringsR   R	   R
   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   scanM   s    c         C   sU   t  |  j d ƒ } x; t d t |  j ƒ ƒ D]! } | d t  |  j | ƒ 7} q, W| S(   Ni    i   R   (   t   strR   R   R   (   R   t   stringR   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   __str__Z   s    c         C   s
   |  j  ƒ  S(   N(   R&   (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   __repr__`   s    c         C   s0   | d k  r, | Gd Gt  | ƒ Gd GHt ‚ n  d  S(   Ni   t   lengths   < 1(   R$   t   RuntimeError(   R   R(   t   desc(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   check_lengthc   s    c         C   s\   |  j  | | ƒ |  j  | | ƒ | | k rX | Gd Gt | ƒ Gd G| Gd G| GHt ‚ n  d  S(   NR(   s   !=(   R+   R$   R)   (   R   t   len1t   len2t   desc1t   desc2(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyR   h   s
    #c         C   sR   xK t  d t | ƒ ƒ D]4 } | | d k  r d G| | Gd G| GHt ‚ q q Wd  S(   Ni    i   t   Moduluss   < 1 in(   R   R   R)   (   R   t   modsR   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyR   o   s    c         C   s*   | | k r& d G| Gd G| GHt  ‚ n  d  S(   Ns   Mismatched modulis   , (   R)   (   R   t   mods1t   mods2(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyR   u   s    (   t   __name__t
   __module__R   R   R   R   R   R   R   R   R#   R&   R'   R+   R   R   R   (    (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyR       s   															c         C   s†   t  |  ƒ d k r' d GHt j d ƒ n  t j d |  ƒ } t  | ƒ } t d | ƒ } x+ t d | ƒ D] } t | | ƒ | | <qd W| S(   Ni    s*   Modadd requires non-empty parameter stringi   R   (   R   t   syst   exitR   R   R   R   (   t   params_stringR"   R   t	   mod_arrayR   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   params_from_stringz   s    c         C   s)   t  d g d g ƒ } | j |  | ƒ | S(   Ni   (   R    R#   (   t   value_stringR8   t   obj(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   from_string…   s    t   __main__t
   test_casesc           B   s¡   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test___init__   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test___eq__“   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test___ne__–   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test___mul__™   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test_invœ   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test___add__Ÿ   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test___sub__¢   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test_neg¥   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt	   test_scan¨   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test___str__«   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test___repr__®   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test_check_length±   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test_check_lengths´   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test_check_moduli·   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test_check_moduli_pairº   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test_params_from_string½   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   test_from_stringÀ   s    (   R4   R5   R@   RA   RB   RC   RD   RE   RF   RG   RH   RI   RJ   RK   RL   RM   RN   RO   RP   (    (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyR?      s"   																(    (   R   R   R   R    R:   R=   t   unittestR4   t   TestCaseR?   t   main(    (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/modmul_tm.pyt   <module>   s   g		5