ó
¡¼™\c           @  sd   d  Z  d d l m Z m Z d d l m Z d d l m Z m Z d d l	 Z	 d „  Z
 d „  Z d S(   s[   For reading in DIMACS file format

www.cs.ubc.ca/~hoos/SATLIB/Benchmarks/SAT/satformat.ps

iÿÿÿÿ(   t   print_functiont   division(   t   Symbol(   t   Andt   OrNc         C  sx  g  } |  j  d ƒ } t j d ƒ } t j d ƒ } x8t | ƒ d k rm| j d ƒ } | j | ƒ s6 | j | ƒ } | sj| j d ƒ j  d ƒ } g  } x  | D]˜ }	 |	 d k r  t |	 ƒ d k rÊ q  n  t t |	 ƒ ƒ }
 t	 } t |	 ƒ d k  rý t
 } n  | r| j t d |
 ƒ ƒ q8| j t d |
 ƒ ƒ q  q  Wt | ƒ d k rg| j t | Œ  ƒ qgqjq6 q6 Wt | Œ  S(   s   Loads a boolean expression from a string.

    Examples
    ========

    >>> from sympy.logic.utilities.dimacs import load
    >>> load('1')
    cnf_1
    >>> load('1 2')
    cnf_1 | cnf_2
    >>> load('1 \n 2')
    cnf_1 & cnf_2
    >>> load('1 2 \n 3')
    cnf_3 & (cnf_1 | cnf_2)
    s   
s   c.*s   p\s*cnf\s*(\d*)\s*(\d*)i    t    t    s   cnf_%s(   t   splitt   ret   compilet   lent   popt   matcht   rstript   intt   abst   Truet   Falset   appendR   R   R   (   t   st   clausest   linest   pCommentt   pStatst   linet   mt   numst   listt   litt   numt   sign(    (    s;   lib/python2.7/site-packages/sympy/logic/utilities/dimacs.pyt   load   s2    	 c         C  s+   t  |  ƒ  } | j ƒ  } Wd QXt | ƒ S(   s'   Loads a boolean expression from a file.N(   t   opent   readR   (   t   locationt   fR   (    (    s;   lib/python2.7/site-packages/sympy/logic/utilities/dimacs.pyt	   load_fileC   s    (   t   __doc__t
   __future__R    R   t
   sympy.coreR   t   sympy.logic.boolalgR   R   R   R   R$   (    (    (    s;   lib/python2.7/site-packages/sympy/logic/utilities/dimacs.pyt   <module>   s   	5