U
    d/e                     @   sp   d Z ddlZddlZddlZddlZddlmZ ddlmZ edej	Z
eeZejedf dd	d
ZdS )z2Return the version number from running ``dot -V``.    N   )dot_command)executea  
                             graphviz[ ]
                             version[ ]
                             (\d+)\.(\d+)
                             (?:\.(\d+)
                               (?:
                                 ~dev\.\d{8}\.\d{4}
                                 |
                                 \.(\d+)
                               )?
                             )?
                             [ ]
                             .)returnc                  C   s`   t jdg} tj| tjtjdd}t|j	}|dkrJt
d| d|j	tdd | D S )	a  Return the upstream version number tuple from ``stderr`` of ``dot -V``.

    Returns:
        Two, three, or four ``int`` version ``tuple``.

    Raises:
        graphviz.ExecutableNotFound: If the Graphviz executable is not found.
        graphviz.CalledProcessError: If the exit status is non-zero.
        RuntimeError: If the output cannot be parsed into a version number.

    Example:
        >>> doctest_mark_exe()
        >>> import graphviz
        >>> graphviz.version()  # doctest: +ELLIPSIS
        (...)

    Note:
        Ignores the ``~dev.<YYYYmmdd.HHMM>`` portion of development versions.

    See also:
        Upstream release version entry format:
        https://gitlab.com/graphviz/graphviz/-/blob/f94e91ba819cef51a4b9dcb2d76153684d06a913/gen_version.py#L17-20
    z-Vascii)stdoutstderrencodingNzcannot parse z	 output: c                 s   s   | ]}|d k	rt |V  qd S )N)int).0d r   E/tmp/pip-unpacked-wheel-n8ok7rre/graphviz/backend/upstream_version.py	<genexpr>>   s      zversion.<locals>.<genexpr>)r   Z
DOT_BINARYr   Z	run_check
subprocessPIPESTDOUTVERSION_PATTERNsearchr   RuntimeErrortuplegroups)cmdprocmar   r   r   version   s    
 r   )__doc__loggingrer   typing r   r   compileVERBOSEr   	getLogger__name__logTupler
   r   r   r   r   r   <module>   s   
