File: //opt/alt/python37/lib64/python3.7/site-packages/guppy/etc/__pycache__/RE_Rect.cpython-37.opt-1.pyc
B
    �]�)  �               @   s�   d Z ddlmZmZmZ G dd� de�ZG dd� de�ZG dd� dee�Zd	d
� Z	dd� Z
G d
d� d�ZG dd� dee�ZG dd� dee�Z
dd� Zg dgfdd�Zdgfdd�Zdd� Zdd� ZdS )a�   Support functions for RE simplification.
This module is intended for use by the RE module.
It is in a separate module to keep RE itself cleaner
since the algorithm, 'rectangle selection', is a quite
separate part that depends on some tricky heuristics.
The primary entry function is
chooserects(lines, gauges)
It chooses 'the best' rectangles from lines to base simplification on.
A weight on atoms is given by gauges.
pr() gives some example usages of chooserects.
�    )�	immbitset�	mutbitset�immbitrangec               @   s:   e Zd ZdZdd� Zdd� Zdd� Zdd	d
�Zdd� Zd
S )�Rect)�width�lines�gainmemo�lnos�	all_lines�common_partc             C   s   || _ || _i | _d S )N)r   r   r   )�selfr   r   � r
   �D/opt/alt/python37/lib64/python3.7/site-packages/guppy/etc/RE_Rect.py�__init__   s    z
Rect.__init__c                s.   || _ t� fdd�| jD ��| _| �� | _d S )Nc                s   g | ]}� t |� �qS r
   )�id)�.0�line)�lnobyidr
   r   �
<listcomp>    s    zRect.init2.<locals>.<listcomp>)r
   r   r   r	   �get_common_partr   )r   r   r
   r
   )r   r   �init2   s    z
Rect.init2c                sR   � j }|| @ }||kr2|� _ � fdd�|D �� _t|�dkrNt� jd �� _d S )Nc                s   g | ]}� j | �qS r
   )r
   )r   �lno)r   r
   r   r   +   s    z$Rect.reducelines.<locals>.<listcomp>�   r   )r	   r   �lenr   )r   r	   �olnosr
   )r   r   �reducelines#   s    
zRect.reducelinesr   c             C   s.   g }x$| j | @ D ]}|�| j| � qW |S )N)r	   �appendr
   )r   �	pickednosr   �ir
   r
   r   �	get_lines/   s    zRect.get_linesc             C   s   d| j | jt| j�| jf S )Nz0<
 dir = %d
 width = %d
 lnos = %s
 lines = %s
>)�dirr   �listr	   r   )r   r
   r
   r   �__repr__5   s    z
Rect.__repr__N)r   )	�__name__�
__module__�__qualname__�	__slots__r   r   r   r   r"