
hPc           @   s   d  d l  Z  d  d l Z d  d l Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d	   Z
 d
 d d     YZ d  d l Z e d k r d e j f d     YZ e j   n  d S(   iNc         C   s   t  t |  d   S(   Ni   (   t   f2poly_tt   int(   t   string(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   f2poly_from_string   s    c         C   s;   |  d k r d Sd } x |  r6 | d 7} |  d L}  q W| S(   Ni    ii   (    (   t   bitst   rv(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   idegree   s    	
c         C   sL   d } d } x9 | rG | d @r0 | |  | >N} n  | d L} | d 7} q W| S(   Ni    i   (    (   t   abitst   bbitst   cbitst   shift(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   imul   s    	

c   
      C   s   | d k r) t  j d IJt  j d  n  t |  } |  d k rK d d g St |   } | | } | d k  rw d |  g S| | >} d } |  } | } | }	 xW | | k r | d | >@r | | N} | d |	 >O} n  | d L} | d 8} |	 d 8}	 q W| | g S(   Ni    s(   f2poly_tm.iquot_and_rem: Divide by zero.i   (   t   syst   stderrt   exitR   (
   R   R   t   divisor_l1_post   dividend_l1_post   l1_difft   shift_divisort   quotbitst   rembitst	   check_post   quot_pos(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   iquot_and_rem=   s.    






c   	      C   s   | d k r) t  j d IJt  j d  n  t |  } |  d k rE d St |   } | | } | d k  rk |  S| | >} |  } | } | } xI | | k r | d | >@r | | N} n  | d L} | d 8} | d 8} q W| S(   Ni    s(   f2poly_tm.iquot_and_rem: Divide by zero.i   (   R   R   R   R   (	   R   R   R   R   R   R   R   R   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   imod`   s*    



c         C   s   t  |   } |  } d } |  d k r} | d k rM t j d IJt j d  q | d k  rv t j d IJt j d  q d Sn{ | d k r d S| d k  r t j d IJt j d  nB x; | d k r | d @r | | 9} n  | d ?} | | 9} q W| Sd  S(   Ni   i    s    f2poly_t.iexp:  0 ^ 0 undefined.s!   f2poly_t.iexp:  division by zero.s%   f2poly_t.iexp:  division by non-unit.(   R   R   R   R   (   R   t   et   degt   apR   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   iexp}   s,    

c         C   sn   |  d k r | S| d k r  |  S|  } | } x; t  ri t | |  \ } } | d k rZ Pn  | } | } q/ W| S(   Ni    (   t   TrueR   (   R   R   R	   t   dbitst   qbitst   rbits(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   igcd   s      	
c         C   s   |  d k r | d d g S| d k r2 |  d d g Sd } d } d } d } |  } | } x~ t  | |  \ } } | d k r~ Pn  | } | } | }	 | } t | |  }
 |	 |
 A} | }	 | } t | |  } |	 | A} qY | | | g S(   Ni    i   (   R   R   (   R   R   t   rprimet   st   rt   sprimet   ct   dt   qt   tt   qrt   qs(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   iext_gcd   s2    
R    c           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   (   t   selfR   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   __init__   s    c         C   s   t  |  j | j A } | S(   N(   R    R   (   t   at   bR&   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   __add__   s    c         C   s   t  |  j | j A } | S(   N(   R    R   (   R/   R0   R&   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   __sub__   s    c         C   s:   |  j  d k  r3 t j d |  j  IJt j d  n  |  j  S(   Ni    s$   f2poly_t:  signed input %d detected.i   (   R   R   R   R   (   R-   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   check_unsigned_bits   s
    c         C   s   t  |  j    S(   N(   R   R3   (   R-   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   degree   s    c         C   s"   | j    } t t |  j |   S(   N(   R3   R    R   R   (   R/   R0   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   __mul__   s    c         C   s%   t  |  j | j  \ } } t |  S(   N(   R   R   R    (   R/   R0   R   R    (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   __div__   s    c         C   s%   t  |  j | j  \ } } t |  S(   N(   R   R   R    (   R/   R0   R   R    (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   __mod__   s    c         C   s   t  t |  j |   S(   N(   R    R   R   (   R/   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   __pow__   s    c         C   s   t  t |  j | j   S(   N(   R    R!   R   (   R/   R0   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   gcd   s    c         C   s=   t  |  j | j  \ } } } t |  t |  t |  g S(   N(   R,   R   R    (   R/   R0   t   gbitsR    t   sbits(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   ext_gcd   s    c         C   s   |  j  | j  k S(   N(   R   (   R/   R0   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   __eq__   s    c         C   s   |  | k S(   N(    (   R/   R0   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   __ne__  s    c         C   s   |  S(   N(    (   R/   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   __neg__  s    c         C   s   t  | d  |  _ d  S(   Ni   (   R   R   (   R-   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   scan  s    c         C   s   d |  j  S(   Ns   0x%x(   R   (   R-   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   __str__	  s    c         C   s
   |  j    S(   N(   RA   (   R-   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   __repr__  s    (   t   __name__t
   __module__R.   R1   R2   R3   R4   R5   R6   R7   R8   R9   R<   R=   R>   R?   R@   RA   RB   (    (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyR       s"   																t   __main__t
   test_casesc           B   sP   e  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/f2poly_tm.pyt   test_f2poly_from_string  s    c         C   s   d  S(   N(    (   R-   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   test_idegree  s    c         C   s   d  S(   N(    (   R-   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt	   test_imul  s    c         C   s   d  S(   N(    (   R-   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   test_iquot_and_rem  s    c         C   s   d  S(   N(    (   R-   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt	   test_imod  s    c         C   s   d  S(   N(    (   R-   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt	   test_iexp  s    c         C   s   d  S(   N(    (   R-   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt	   test_igcd  s    c         C   s   d  S(   N(    (   R-   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   test_iext_gcd  s    (
   RC   RD   RG   RH   RI   RJ   RK   RL   RM   RN   (    (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyRF     s   							(    (   R   t   ret   copyR   R   R   R   R   R   R!   R,   R    t   unittestRC   t   TestCaseRF   t   main(    (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/f2poly_tm.pyt   <module>   s   					#				"