B
    [                 @   sL   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d Z
dd	 ZdS )
z[For reading in DIMACS file format

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

    )print_functiondivision)Symbol)AndOrNc             C   s   g }|  d}td}td}xt|dkr|d}||s$||}|s$|d d}g }xn|D ]f}	|	dkrlt|	dkrqltt|	}
d}t|	dk rd}|r|	t
d	|
  ql|	t
d	|
   qlW t|dkr$|	t|  q$W t| S )
a   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)
    
zc.*zp\s*cnf\s*(\d*)\s*(\d*)r     TFzcnf_%s)splitrecompilelenpopmatchrstripintabsappendr   r   r   )sZclauseslinesZpCommentZpStatslinemZnumslistZlitZnumZsign r   ;lib/python3.7/site-packages/sympy/logic/utilities/dimacs.pyload   s2    






r   c          	   C   s$   t | }| }W dQ R X t|S )z'Loads a boolean expression from a file.N)openreadr   )locationfr   r   r   r   	load_fileC   s    
r    )__doc__Z
__future__r   r   Z
sympy.corer   Zsympy.logic.boolalgr   r   r   r   r    r   r   r   r   <module>   s   5