File: //opt/alt/python37/lib64/python3.7/site-packages/guppy/etc/__pycache__/KanExtension.cpython-37.pyc
B
    �]�R  �               @   sX   G d d� d�Z G dd� d�ZG dd� d�ZG dd� d�ZG dd	� d	�ZG d
d� d�ZdS )
c               @   s|   e Zd Zdd� Zdd� Zdd� Zdd� Zd	d
� Zdd� Zd
d� Z	dd� Z
dd� Zdd� Zdd� Z
dd� Zdd� Zdd� ZdS )�LeftKanExtensionc             C   sh   || _ |j| _| j�|� | j�|� | j�||� || _|| _dd� |D �| _|| _|| _| �	�  d S )Nc             S   s    g | ]\}}t |�t |�f�qS � )�tuple)�.0�g�hr   r   �I/opt/alt/python37/lib64/python3.7/site-packages/guppy/etc/KanExtension.py�
<listcomp>   s    z-LeftKanExtension.__init__.<locals>.<listcomp>)
�mod�CatZcheck_graphZcheck_rules�A�B�R�X�F�general_procedure)�selfr	   r   r   r
   r   r   r   r   r   �__init__   s    zLeftKanExtension.__init__c             C   s$   | � �  | ��  | ��  | ��  d S )N)�initialize_tables�make_confluent_system�make_automaton�make_natural_transformation)r   r   r   r   r   $   s    z"LeftKanExtension.general_procedurec             C   s   i | _ i | _| ��  d S )N)�obj_to_str_table�str_to_obj_table�make_initial_rules)r   r   r   r   r   *   s    z"LeftKanExtension.initialize_tablesc                sV  g � � �fdd�}�x�j jD �]}�j �|�}�j �|�}�j�|�}�j�|�}t�j�|��}�j�|�}�j�|�}	|r�|}
x>|D ]6}�j	�|�}||
kr�t
d|||
f ���j	�|�}
q�W |
|	kr�t
d||
|	f ��n||	kr�t
d||	f ��x*|D ]"}
|||
ff| |||
�ff� q�W qW �fdd��jD �}� �_|�_
� | �_d S )Nc                s.   �� | �}�� |�}||kr*� �||f� d S )N)�	make_word�append)�a�bZawZbw)�Rer   r   r   �add_rule5   s    
z5LeftKanExtension.make_initial_rules.<locals>.add_rulez9Arrow [%s] with source %s does not compose with target %sz0Arrow %s with target %s does not compose with %sz"Source %s does not match target %sc                s$   g | ]\}}� � |�� � |�f�qS r   )r   )r   �x�y)r   r   r   r   U   s    z7LeftKanExtension.make_initial_rules.<locals>.<listcomp>)r   �arrows�source�targetr   �fo�far   r   r   �
ValueErrorr
   r   �Rk�Rinit)r   r   r   �srca�tgta�XA�XaZFaZFsrcaZFtgta�tr   �srcbr    r(   r   )r   r   r   r   /   s<