ó
Sù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   cgpalg_tc           B   st   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 RS(   c         C   s   t  j | ƒ |  _ d  S(   N(   t   copyt   deepcopyt   pairs(   t   selft   pairs_array(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   __init__&   s    c         C   sN   xA t  d t |  j ƒ ƒ D]' } | |  j | d k r d | g Sq Wd d g S(   Ni    i   (   t   ranget   lenR   (   R   t   gt   k(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   index_of)   s    c         C   s\   |  j  } g  |  _  xC | rW | d } | d } | d d k r |  j  | g 7_  q q Wd  S(   Ni    i   (   R   (   R   t   untestedt   x(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt
   zero_strip/   s    			

c         C   s]   g  } xP | D]H } d } |  j  | ƒ \ } } | rH |  j | d } n  | | g 7} q W| S(   Ni    (   R   R   (   R   t   group_elementst   coefsR	   t   coeft   foundR
   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   to_coef_array>   s    c         C   s™   t  g  ƒ } t j |  j | j ƒ } xm | r” | d } | j | d ƒ \ } } | ru | j | d c | d 7<n | j | g 7_ | d } q( W| S(   Ni    i   (   R    R   R   R   R   (   t   at   bt   ct   unmerged_pairst   current_pairR   R
   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   __add__H   s    	
c         C   sS   t  |  j ƒ } x= t d t | j ƒ ƒ D]# } | j | d | j | d <q( W| S(   Ni    (   R    R   R   R   (   R   t   negbR
   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   __neg__Y   s    !c         C   s	   |  | S(   N(    (   R   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   __sub___   s    c   	      C   s³   t  g  ƒ } x– |  j D]‹ } x‚ | j D]w } | d | d } | d | d } | j | ƒ \ } } | r… | j | d c | 7<q& | j | | g g 7_ q& Wq W| j ƒ  | S(   Ni    i   (   R    R   R   R   (	   R   R   R   t   apt   bpt   ccoeft   cgpeltR   R
   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   __mul__b   s     
c         C   sˆ   t  g  ƒ } t |  j ƒ } | d k r< d GHt j d ƒ n  d | } x; |  j D]0 } | j | | d | d j ƒ  g g 7_ qP W| S(   Ni    s    cgpalg_t.inv:  division by zero.i   g      ð?(   R    R   R   t   syst   exitt   inv(   R   t   bit   nt   recip_nt   pair(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyR$   t   s    
.c         C   s   |  | j  ƒ  S(   N(   R$   (   R   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   __div__   s    c         C   s¸   d } t  |  j ƒ d k r$ d } n  x t d t  |  j ƒ ƒ D]s } | d k r\ | d 7} n  | d 7} | t |  j | d ƒ 7} | d 7} | t |  j | d ƒ 7} | d 7} q= W| S(	   Nt    i    t   0t    t   [s   ]*[i   t   ](   R   R   R   t   str(   R   t   stringt   i(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   __str__˜   s    	

c         C   s
   |  j  ƒ  S(   N(   R2   (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   __repr__¦   s    (   t   __name__t
   __module__R   R   R   R   R   R   R   R!   R$   R)   R2   R3   (    (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyR    $   s   				
							c         C   s4   g  } x! |  D] } | d | g g 7} q Wt  | ƒ S(   Ni   (   R    (   t
   pmtn_arrayR   t   pmtn(    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt
   from_pmtns«   s    c         C   s:   g  } x' |  D] } | | j  ƒ  | g g 7} q Wt | ƒ S(   N(   t   sgnR    (   R6   R   R7   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   from_pmtns_with_parity´   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 RS(   c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   test___init__Ñ   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   test_index_ofÔ   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   test_zero_strip×   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   test_to_coef_arrayÚ   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   test___add__Ý   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   test___neg__à   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   test___sub__ã   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   test___mul__æ   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   test_invé   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   test___div__ì   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   test___str__ï   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   test___repr__ò   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   test_from_pmtnsõ   s    c         C   s   d  S(   N(    (   R   (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   test_from_pmtns_with_parityø   s    (   R4   R5   R=   R>   R?   R@   RA   RB   RC   RD   RE   RF   RG   RH   RI   RJ   (    (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyR<   Ð   s   													(    (   R"   t   reR   R    R8   R:   t   unittestR4   t   TestCaseR<   t   main(    (    (    sG   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/cgpalg_tm.pyt   <module>   s   ‡			,