ó
ÒûhPc           @   sô   d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d f  d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z 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   pmti_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 d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sA   t  | ƒ | k r t ‚ n  | |  _ d g t j | ƒ |  _ d  S(   Ni    (   t   lent   RuntimeErrort   nt   copyt   zimages(   t   selft   imagesR   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   __init__   s    		c         C   s   |  j  | j  k S(   N(   R   (   t   at   b(    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   __eq__%   s    c         C   s   |  j  | j  k S(   N(   R   (   R	   R
   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   __ne__(   s    c   	      C   sÓ   |  j  ƒ  } | j  ƒ  } t | ƒ } xG t d | ƒ D]6 } | | | | k  rR d S| | | | k r4 d Sq4 W|  j } xU t d | d ƒ D]@ } |  j | } | j | } | | k  r» d S| | k r‹ d Sq‹ Wd S(   Ni    iÿÿÿÿi   (   t
   cycle_typeR   t   rangeR   R   (	   R	   R
   t   ctat   ctbt   mt   iR   t   azit   bzi(    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   __cmp__1   s"    	c         C   s}   |  j  | j  k r t ‚ n  t t d |  j  d ƒ |  j  ƒ } x9 t d |  j  d ƒ D]! } |  j | j | | j | <qT W| S(   Ni   (   R   R   R    R   R   (   R	   R
   t   cR   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   __mul__D   s    	"c         C   so   t  j  |  j ƒ } | j ƒ  xL t d |  j d ƒ D]4 } | | | k r3 d G|  j GHd G| GHt ‚ q3 q3 Wd  S(   Ni   s   Not a permutation:s   Test:(   R   R   t   sortR   R   R   (   R   t   testR   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   check_permutationL   s    
	c         C   s[   t  t d |  j d ƒ |  j ƒ } x2 t d | j d ƒ D] } | | j |  j | <q9 W| S(   Ni   (   R    R   R   R   (   R	   R   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   invU   s    "c         C   sy   t  j d | ƒ } t | ƒ } t d | ƒ } x+ t d | ƒ D] } t | | ƒ | | <q= W|  j | | ƒ |  j ƒ  d  S(   Nt   ,i    (   t   ret   splitR   R   t   intR   R   (   R   t   images_stringR   t   image_stringsR   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   scan[   s    c         C   sÝ   t  d | d ƒ } t | ƒ } | d } x‰ | d k r´ | | } t | ƒ } | d } xL | d k r¦ | | d }	 | | | | | d <|	 | | | <| d 8} q[ W| d 8} q, W| d }
 |  j |
 | ƒ |  j ƒ  d  S(   Ni    i   (   R   R   R   R   (   R   t   cyclesR   R   t
   num_cyclest   cidxt   cyclet   num_indicest   kt   tempR   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt
   cycle_fillf   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   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   __str__   s    c         C   s
   |  j  ƒ  S(   N(   R-   (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   __repr__…   s    c         C   s%   | d k r d GHt  ‚ n  |  j | S(   Ni    s   pmti: zimage[0] is protected.(   R   R   (   R   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   __getitem__ˆ   s    	c         C   sS   t  j  | ƒ } x= t d t |  j ƒ ƒ D]# } | |  j | d | | d <q( W| S(   Ni   (   R   R   R   R   (   R   t   inputt   outputR   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   of   s    !c         C   s|   x5 t  d |  j d ƒ D] } |  j | | k r | Sq Wt j d IJt j d I| IJt j d I|  IJt j d ƒ d  S(   Ni   s    pmti.inv_img: inverse not found.s   input       = s   permutation = (   R   R   R   t   syst   stderrt   exit(   R   t   dstt   src(    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   inv_img›   s    c   
      C   sŸ   d } d } |  j  } x t d | d ƒ D]j } |  j | } xT t | d | d ƒ D]; } |  j | } | | } | | }	 | | 9} | |	 9} qT Wq) W| | S(   Ni   (   R   R   R   (
   R   t   numerst   denomsR   R   t   sit   jt   sjt   numert   denom(    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   sgn¥   s    	


c         C   s   |  j  ƒ  d k r d Sd Sd  S(   Ni   i    (   R@   (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   parity³   s    c         C   s¿   d } t  |  j ƒ d } t j |  j ƒ } | } xƒ | d k r¶ xf t d | ƒ D]U } | | | | d k rP | | } | | d | | <| | | d <| d 7} qP qP W| d 8} q4 W| d @S(   Ni    i   (   R   R   R   R   (   R   t   nswapR   t   imsortt   topR   R)   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt	   oldparity»   s    
c         C   s   |  j  ƒ  d k r d Sd Sd  S(   Ni    i   iÿÿÿÿ(   RA   (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   oldsgnÊ   s    c         C   s¯   |  j  } g  } d g | d } xˆ t d | d ƒ D]s } | | rJ q4 n  g  } | } d | | <x7 | | g } |  j | } | | k r Pn  d | | <qc | | g } q4 W| S(   Ni    i   (   R   R   R   (   R   R   t   cdt   marksR   R&   t   next(    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   cycle_decompositionØ   s"    	

c         C   sI   |  j  ƒ  } g  } x0 | D]( } t | ƒ d k r | j | ƒ q q W| S(   Ni   (   RJ   R   t   append(   R   RG   t   rvR&   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   cycle_decomposition_non_trivì   s    c         C   s/   |  j  ƒ  } t t | ƒ } | j d t ƒ | S(   Nt   reverse(   RJ   t   mapR   R   t   True(   R   RG   t   ct(    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyR   ô   s    c         C   sº   |  j  } d g | d } d g | d } xˆ t d | d ƒ D]s } | | rU q? n  d } | } d | | <x4 | d 7} |  j | } | | k r• Pn  d | | <qn | | c d 7<q? W| S(   Ni    i   (   R   R   R   (   R   R   t   countsRH   R   t   cycle_lengthRI   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   cycle_counts  s"    	


c   
      C   só   g  } |  j  } t d | d ƒ } t |  j d | ƒ } t } x® | sî d } x8 t d | d ƒ D]# } | j | | k ra | } Pqa qa W| d k rž t } Pn  t | | ƒ } | j | }	 |	 | j | <| | j |	 <| j | ƒ | | } qA W| S(   Ni   iÿÿÿÿ(   R   R   R    R   t   FalseRP   RK   (
   R   t   tausR   t   id_imgst   sigmat   doneR   R(   t   tauR<   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   transposition_decomposition*  s*    		(   t   __name__t
   __module__R   R   R   R   R   R   R   R"   R*   R-   R.   R/   R2   R8   R@   RA   RE   RF   RJ   RM   R   RT   R[   (    (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyR       s.   																
								"c         C   s0   t  t d | d ƒ | ƒ } | j |  | ƒ | S(   Ni   (   R    R   R*   (   R#   R   t   obj(    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   from_cyclesF  s    c         C   s3   t  t d | d ƒ | ƒ } | j |  g | ƒ | S(   Ni   (   R    R   R*   (   R&   R   R^   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt
   from_cycleK  s    c         C   sd   d } d } g  } xB |  D]: } t  | | | ƒ } | j | ƒ | | 7} | | 7} q Wt | | ƒ S(   Ni    i   (   R   RK   R_   (   RQ   R   R(   R#   t   eltR&   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   from_cycle_typeQ  s    
c         C   s=   t  j |  ƒ } g  } x! | D] } | j t | ƒ ƒ q W| S(   N(   t   sackintt   ptnsRK   Rb   (   R   Rd   t   repst   ptn(    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   cycle_type_reps]  s
    c         C   s   t  |  ƒ } | S(   N(   R   (   t   params_stringR   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   params_from_stringd  s    c         C   s<   t  | ƒ } t t d | d ƒ | ƒ } | j |  | ƒ | S(   Ni   (   Ri   R    R   R"   (   t   value_stringRh   R   R^   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   from_stringh  s    c         C   s   t  t d |  d ƒ |  ƒ S(   Ni   (   R    R   (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   identity_pmtin  s    c         C   sÁ   | } t  d | ƒ } t  d | d ƒ } | } xƒ t  d | ƒ D]r } | | :} |  | } |  | }	 | }  | |	 d | | <x) t  |	 | ƒ D] }
 | |
 d | |
 <qŠ W| d 8} q> Wt | | ƒ S(   Ni    i   (   R   R    (   R(   R   t   nfactt   nifactR   R)   t   nit   post   rt   qR   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   kth_pmtiq  s    


c         C   sž   t  d |  d ƒ } d } |  } xk t  d |  d ƒ D]V } t j | | | d ƒ } | | } | | | | <| | | <| d 7} | d 8} q3 Wt | d |  ƒ S(   Ni    i   (   R   t   randomt   randintR    (   t   NR   t   unused_startt
   num_unusedR(   t   uR)   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt	   rand_pmti»  s    


c         C   s  |  d } | d } | | k  r$ d S| | k r4 d S|  d } | d } xG t  d | ƒ D]6 } | | | | k  rv d S| | | | k rX d SqX W|  d } | d } | j }	 xU t  d |	 d ƒ D]@ } | j | }
 | j | } |
 | k  ró d S|
 | k rÃ d SqÃ Wd S(   Ni   i   iÿÿÿÿi    (   R   R   R   (   t   tat   tbt   ncat   ncbR   R   R   t   pmtat   pmtbR   R   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   pmti_cmpå  s0    





	c         C   sˆ   t  |  ƒ } g  } x6 |  D]. } | j ƒ  } | j | | t  | ƒ g ƒ q W| j t ƒ x) t d | ƒ D] } | | d |  | <qh Wd  S(   Ni    (   R   R   RK   R   R   R   (   t   listR   t   pairst   pmtRQ   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt
   sort_pmtis  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 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   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test___init__  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test___eq__!  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test___ne__$  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test___cmp__'  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test___mul__*  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_check_permutation-  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_inv0  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt	   test_scan3  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_cycle_fill6  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test___str__9  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test___repr__<  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test___getitem__?  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_ofB  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_inv_imgE  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_sgnH  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_parityK  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_oldparityN  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_oldsgnQ  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_cycle_decompositionT  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt!   test_cycle_decomposition_non_trivW  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_cycle_typeZ  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_cycle_counts]  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt    test_transposition_decomposition`  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_from_cyclesc  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_from_cyclef  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_from_cycle_typei  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_cycle_type_repsl  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_params_from_stringo  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_from_stringr  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_identity_pmtiu  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_kth_pmtix  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_rand_pmti{  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_pmti_cmp~  s    c         C   s   d  S(   N(    (   R   (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   test_sort_pmtis  s    ($   R\   R]   Rˆ   R‰   RŠ   R‹   RŒ   R   RŽ   R   R   R‘   R’   R“   R”   R•   R–   R—   R˜   R™   Rš   R›   Rœ   R   Rž   RŸ   R    R¡   R¢   R£   R¤   R¥   R¦   R§   R¨   R©   (    (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyR‡     sD   																																	(   R   R   Rt   Rc   t   uniqc_mR    R_   R`   Rb   Rg   Ri   Rk   Rl   Rs   Rz   R   R…   t   unittestR\   t   TestCaseR‡   t   main(    (    (    sE   /homepages/25/d321765456/htdocs/pub_http_internet/src/sack/pmti_tm.pyt   <module>   s*   ÿ 4								J	*	'	h