HEX
Server: LiteSpeed
System: Linux standart9.isimtescil.net 3.10.0-962.3.2.lve1.5.26.7.el7.x86_64 #1 SMP Wed Oct 2 07:53:12 EDT 2019 x86_64
User: karalev (5310)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: //opt/alt/python37/lib64/python3.7/site-packages/guppy/etc/__pycache__/RE_Rect.cpython-37.pyc
B

�]�)�@s�dZddlmZmZmZGdd�de�ZGdd�de�ZGdd�dee�Zd	d
�Z	dd�Z
Gd
d�d�ZGdd�dee�ZGdd�dee�Z
dd�Zgdgfdd�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:eZdZdZdd�Zdd�Zdd�Zdd	d
�Zdd�Zd
S)�Rect)�width�lines�gainmemo�lnos�	all_lines�common_partcCs*||_||_|r t|�dkr t�i|_dS)N�)rr�len�AssertionErrorr)�selfrr�r�D/opt/alt/python37/lib64/python3.7/site-packages/guppy/etc/RE_Rect.py�__init__sz
Rect.__init__cs.||_t�fdd�|jD��|_|��|_dS)Ncsg|]}�t|��qSr)�id)�.0�line)�lnobyidrr�
<listcomp> szRect.init2.<locals>.<listcomp>)r
rrr	�get_common_partr)rrr
r)rr�init2sz
Rect.init2csR�j}||@}||kr2|�_�fdd�|D��_t|�dkrNt�jd��_dS)Ncsg|]}�j|�qSr)r
)r�lno)rrrr+sz$Rect.reducelines.<locals>.<listcomp>rr)r	rr
r)rr	�olnosr)rr�reducelines#s
zRect.reducelinesrcCs.g}x$|j|@D]}|�|j|�qW|S)N)r	�appendr
)r�	pickednosr�irrr�	get_lines/szRect.get_linescCsd|j|jt|j�|jfS)Nz0<
 dir = %d
 width = %d
 lnos = %s
 lines = %s
>)�dirr�listr	r)rrrr�__repr__5sz
Rect.__repr__N)r)	�__name__�
__module__�__qualname__�	__slots__rrrr r#rrrrrs
rc@s&eZdZdZdZdd�Zddd�ZdS)	�LeftRectrrcCs|jdd|j�S)Nr)rr)rrrrr>szLeftRect.get_common_partcCs0g}x&|�|�D]}|�||jd��qW|S)N)r rr)rr�ucrrrr�
get_uncommonsAszLeftRect.get_uncommonsN)r)r$r%r&r'r!rr*rrrrr(:sr(c@s&eZdZdZdZdd�Zd	dd�ZdS)
�	RightRectr���cCs&|j}|dkrgS|jd|d�S)Nr)rr)r�lorrrrLszRightRect.get_common_partrcCsBg}|j}|dkrd}x$|�|�D]}|�|d|��q$W|S)Nr)rr r)rrr)�hirrrrr*RszRightRect.get_uncommonsN)r)r$r%r&r'r!rr*rrrrr+Hsr+cCs2|dkrt|�Sd}x|D]}|||�7}qW|S)Nr)r
)�gaugeZlstZgain�xrrr�	sum_gauge\s
r1cCs8x2|D]*}t||�}t||�}t||�}|r|SqWdS)Nr)r1Zcmp)ZxsZys�gaugesr/ZgxZgy�crrr�
cmp_gaugedgs



r4c@seZdZdd�ZdS)�InducedRectcCs&||_|j|_|j|_||_||_dS)N)�srr
rr	)rr6rr	rrrrrs
zInducedRect.__init__N)r$r%r&rrrrrr5qsr5c@seZdZdS)�InducedRightRectN)r$r%r&rrrrr7zsr7c@seZdZdS)�InducedLeftRectN)r$r%r&rrrrr8~sr8c
Cst|�dkrtd|�gStd|�td|�g}g}x�|�r|}g}x�|D]�}|j}xnd}i}||jA}x6|jD],}	|t|	�kr�|�|	|g��|	�qld}qlW|s�t|�dkr�P|d|_}qRW|�|�|d7}x:t|�	��D]*\}
}t|�dkr�|�
||�}|�|�q�WqFWq2W|S)Nrr)r
r(r+rr!r�
setdefaultrr"�items�	__class__)
rZnewrectsZ	donerectsZoldrects�rrZis_done�d�posr�k�vZnew_rrrr�brect�s6


rANcs�����fdd�}����fdd�}����fdd�}dd�}�d	dkrV�d
d��tdd�t��D��}�}t|��x�D]}	|	�|��q~W�j|d
d�tt���}
t��g}g�x6�|
kr�|�}	�|	jO�|�	|	�||	�||	�q�W|S)Ncs�|��}t|�dkrdSg}xƈD]�}|j|jkr4q"g}|���}|j�@}t|�t|�ksbt�x(t||�D]\}}||krn|�|�qnWt|�t|�kr"t|�}	�fdd�|D�}|jdkr�t}
nt	}
|
|||	�}|�|�q"W|r��
|�dS)N�csg|]}�|�qSrr)rr)rrrr�sz*choose.<locals>.induce.<locals>.<listcomp>r,)r*r
r!r	r�ziprrr7r8�extend)r<Z	uncommonsZirsr6ZpssZuncsr	ZuncrZpslnosr3Zir)r�newsr�rectsrr�induce�s0


zchoose.<locals>.inducecs�|j}g}x܈D]�}||krq|j|jkr,q|j}||@s<q|�M}|sLq|j}|sXqx��D]n}||krlq^|j|jkrzq^|j�@}||@r�q^||@}|s�q^||kr�q^|j}	|	s�q^t||	��}
|
dkr�q^Pq^W|�|���|�qW��|�dS)Nr)r	r!rr4r�removerD)r<�rlnosZtonewsr6�slnosZscom�tZtlnosrZtcomr3)r2rErrFrr�overlap�sN



zchoose.<locals>.overlapc
s��x��r�d}�d=�nLd}�x0t��D�]"}|j�}|sJ��|�q*t|�d}|j}|dk	�r.|slP|srq*|�r.|j}|j}d}x��D]�}	y||	}
Wn(tk
r�t|	|j�}
|
||	<YnX|
|9}
y||	}Wn*tk
�rt|	|j�}|||	<YnX||9}|
|}|r�Pq�W|dk�r.q*|}|}
|�s>P|}|}||}q*W|dk	�rf��|�|dk	r|�	��|jr|SqWdS)Nrr)
r"r	rHr
rr�KeyErrorr1rr)r<r6rJZsn�swZrwnZrmemoZsmemor3r/ZgrZrnZgsrIZrw)r2rErrFrr�picknext�sh








zchoose.<locals>.picknextcSs|j|j|jdfS)Nr)rr!r	)r0rrr�cmpinit$szchoose.<locals>.cmpinitrrcSsg|]\}}t|�|f�qSr)r)rrrrrrr*szchoose.<locals>.<listcomp>T)�key�reverse)
�dict�	enumerater"r�sortrr
rr	r)rFrr2rGrLrOrPrZorectsr<ZallnosZpickedrectsr)r2rrErrFr�choose�s..7



rVcCst|�}t|||�}|S)N)rArV)rr2rFZchoosenrrr�chooserectsDsrWcCs�tddg�}tddddg�}t|�tdddd	g�}t|�td
ddd
g�}t|�tddddg�}td|�dddg}tt|��ttddg��ttddg��ttddddg��ttddddg��ttddddg��ttdddd d!g��dS)"N�abcZade�abe�ace�xbyZab1Zab2Zac3Zac4Z1bfZ2bfZ3cfZ4cfZabdZbcxZbdyZTW�eZaxc�a�ZabcdZabce�fr=ZauvwZbuvw�bZaxuvwZbxuvwZaxyZbxyZcy)rW�print)r0rrr�prJsB
rbcCs&x td�D]}tddddg�}q
WdS)N�drXrYrZr[)�rangerW)rr0rrr�tmany�s
re)�__doc__Z
guppy.setsrrr�objectrr(r+r1r4r5r7r8rArVrWrbrerrrr�<module>s%
	 #F