ó
‚¾^Yc           @  sâ   d  Z  d d l m Z d d l Z d d l Z d d l Z d „  Z d „  Z	 d g Z
 e d k rŞ e d ƒ d d l Z xW e d	 ƒ D]I Z e j ƒ  \ Z Z e r¦ Pn  e r„ e d
 d k r„ e d e ƒ q„ q„ We d ƒ n  d S(   s„   Functions for parallel computation on multiple cores.

Introduced in Python-RSA 3.1.

.. note::

    Requires Python 2.6 or newer.

iÿÿÿÿ(   t   print_functionNc         C  sF   x? t  rA t j j |  ƒ } t j j | ƒ r | j | ƒ d  Sq Wd  S(   N(   t   Truet   rsat   randnumt   read_random_odd_intt   primet   is_primet   send(   t   nbitst   pipet   integer(    (    s)   /tmp/pip-build-kpPAdC/rsa/rsa/parallel.pyt   _find_prime#   s
    	c         C  s±   t  j d t ƒ \ } } zb g  t | ƒ D]$ } t  j d t d |  | f ƒ ^ q( } x | D] } | j ƒ  qY W| j ƒ  } Wd | j ƒ  | j ƒ  Xx | D] } | j	 ƒ  q™ W| S(   sU  Returns a prime number that can be stored in 'nbits' bits.

    Works in multiple threads at the same time.

    >>> p = getprime(128, 3)
    >>> rsa.prime.is_prime(p-1)
    False
    >>> rsa.prime.is_prime(p)
    True
    >>> rsa.prime.is_prime(p+1)
    False

    >>> from rsa import common
    >>> common.bit_size(p) == 128
    True

    t   duplext   targett   argsN(
   t   mpt   Pipet   Falset   ranget   ProcessR   t   startt   recvt   closet	   terminate(   R   t   poolsizet	   pipe_recvt	   pipe_sendt   _t   procst   pt   result(    (    s)   /tmp/pip-build-kpPAdC/rsa/rsa/parallel.pyt   getprime-   s    4
R   t   __main__s'   Running doctests 1000x or until failureid   i
   i    s   %i timess   Doctests done(   t   __doc__t
   __future__R    t   multiprocessingR   t	   rsa.primeR   t   rsa.randnumR   R   t   __all__t   __name__t   printt   doctestR   t   countt   testmodt   failurest   tests(    (    (    s)   /tmp/pip-build-kpPAdC/rsa/rsa/parallel.pyt   <module>   s"   	
	)	
