Edit File: btm_utils.pyc
� ��7ec�����������@���s����d��Z��d�d�l�m�Z�d�d�l�m�Z�m�Z�d�d�l�m�Z�m�Z�e�Z �e�Z �e�j�Z�e�Z �d�Z�d�Z�d�Z�d�e�f�d �������YZ�d �d ���Z�d����Z�d����Z�d �S(���s0���Utility functions used by the btm_matcher modulei���(���t���pytree(���t���grammart���token(���t���pattern_symbolst���python_symbolsi����i����i����t���MinNodec�����������B���sA���e��Z�d��Z�d�d�d���Z�d����Z�d����Z�d����Z�d����Z�RS(���s����This class serves as an intermediate representation of the pattern tree during the conversion to sets of leaf-to-root subpatternsc���������C���sC���|�|��_��|�|��_�g��|��_�t�|��_�d��|��_�g��|��_�g��|��_�d��S(���N( ���t���typet���namet���childrent���Falset���leaft���Nonet���parentt���alternativest���group(���t���selfR���R���(����(����s)���/usr/lib64/python2.7/lib2to3/btm_utils.pyt���__init__���s���� c���������C���s���t��|��j���d�t��|��j���S(���Nt��� (���t���strR���R���(���R���(����(����s)���/usr/lib64/python2.7/lib2to3/btm_utils.pyt���__repr__���s����c���������C���sU��|��}�g��}�xB|�rP|�j��t�k�r��|�j�j�|���t�|�j���t�|�j���k�r|�t�|�j���g�}�g��|�_�|�j�}�q�q��|�j�}�d�}�Pn��|�j��t �k�r|�j �j�|���t�|�j ���t�|�j���k�r��t�|�j ���}�g��|�_ �|�j�}�q�q|�j�}�d�}�Pn��|�j��t�j �k�r4|�j�r4|�j�|�j���n�|�j�|�j����|�j�}�q�W|�S(���s����Internal method. Returns a characteristic path of the pattern tree. This method must be run for all leaves until the linear subpatterns are merged into a singleN(���R���t���TYPE_ALTERNATIVESR ���t���appendt���lenR���t���tupleR���R���t ���TYPE_GROUPR���t���get_characteristic_subpatternt���token_labelst���NAMER���(���R���t���nodet���subp(����(����s)���/usr/lib64/python2.7/lib2to3/btm_utils.pyt���leaf_to_root!���s8���� c���������C���s1���x*�|��j�����D]�}�|�j����}�|�r �|�Sq �Wd�S(���s���Drives the leaf_to_root method. The reason that leaf_to_root must be run multiple times is because we need to reject 'group' matches; for example the alternative form (a | b c) creates a group [b c] that needs to be matched. Since matching multiple linear patterns overcomes the automaton's capabilities, leaf_to_root merges each group into a single choice based on 'characteristic'ity, i.e. (a|b c) -> (a|b) if b more characteristic than c Returns: The most 'characteristic'(as defined by get_characteristic_subpattern) path for the compiled pattern tree. N(���t���leavesR���(���R���t���lR���(����(����s)���/usr/lib64/python2.7/lib2to3/btm_utils.pyt���get_linear_subpatternK���s����c���������c���sE���x-�|��j��D]"�}�x�|�j����D]�}�|�Vq�Wq �W|��j��sA�|��Vn��d�S(���s-���Generator that returns the leaves of the treeN(���R���R���(���R���t���childt���x(����(����s)���/usr/lib64/python2.7/lib2to3/btm_utils.pyR���`���s ���� N( ���t���__name__t ���__module__t���__doc__R���R���R���R���R!���R���(����(����(����s)���/usr/lib64/python2.7/lib2to3/btm_utils.pyR������s��� * c��� ������C���s��d�}�|��j�t�j�k�r(�|��j�d�}��n��|��j�t�j�k�r��t�|��j���d�k�rh�t�|��j�d�|���}�q�t�d�t ���}�x�|��j�D]P�}�|��j�j �|���d�r��q��n��t�|�|���}�|�d�k �r��|�j�j�|���q��q��Wn$|��j�t�j�k�rxt�|��j���d�k�r_t�d�t ���}�x9�|��j�D].�}�t�|�|���}�|�r|�j�j�|���qqW|�j�sud�}�quq�t�|��j�d�|���}�n�|��j�t�j�k�r�t�|��j�d�t�j���r�|��j�d�j�d�k�r�t�|��j�d�|���St�|��j�d�t�j���r�|��j�d�j�d�k�s=t�|��j���d�k�rAt�|��j�d�d���rA|��j�d�j�d�k�rAd�St�}�d�}�d�}�t�}�d�} �t�} �x��|��j�D]��}�|�j�t�j�k�r�t�}�|�}�n<�|�j�t�j�k�r�t�}�|�} �n�|�j�t�j�k�r�|�}�n��t�|�d���ro|�j�d�k�rot�} �qoqoW| �rA|��j�d�}�t�|�d���rN|�j�d�k�rN|��j�d �}�qNn �|��j�d�}�|�j�t�j�k�r�|�j�d �k�r�t�d�t���}�qTt�t�|�j���r�t�d�t�t�|�j�����}�qTt�d�t�t�|�j�����}�n��|�j�t�j�k�r0|�j�j�d���}�|�t�k�rt�d�t�|���}�qTt�d�t�j�d�|���}�n$�|�j�t�j�k�rTt�|�|���}�n��|�r�| �j�d�j�d �k�ryd�}�q�| �j�d�j�d�k�r�q�t ���n��|�r�|�d�k �r�xI�|�j�d�d�!D]4�}�t�|�|���}�|�d�k �r�|�j�j�|���q�q�Wq�n��|�r|�|�_!�n��|�S(���s���� Internal function. Reduces a compiled pattern tree to an intermediate representation suitable for feeding the automaton. This also trims off any optional pattern elements(like [a], a*). i����i���R���i���t���(t���[t���valuet���=i���t���anyt���'R���t���*t���+i����N("���R���R���t���symst���MatcherR���t���AlternativesR���t���reduce_treeR���R���t���indexR���t���AlternativeR���t���Unitt ���isinstanceR����t���LeafR)���t���hasattrt���TrueR ���t���Detailst���RepeaterR���R���t���TYPE_ANYt���getattrt���pysymst���STRINGt���stript���tokenst���NotImplementedErrorR���( ���R���R���t���new_nodeR"���t���reducedR ���t���details_nodet���alternatives_nodet���has_repeatert ���repeater_nodet���has_variable_namet ���name_leafR���(����(����s)���/usr/lib64/python2.7/lib2to3/btm_utils.pyR2���h���s����� c������������s,��t��|��t���s�|��St�|����d�k�r-�|��d�Sg��}�g��}�d�d�d�d�d�g���g��}�d����x��|��D]��}�t�t�|�d ��������ra�t�t�|����f�d ��������r��|�j�|���q��t�t�|���f�d��������r��|�j�|���q��|�j�|���qa�qa�W|�r��|�}��n�|�r |�}��n�|�r|�}��n��t�|��d�t��S( ���s����Picks the most characteristic from a list of linear patterns Current order used is: names > common_names > common_chars i���i����t���int���fort���ift���notR���s���[]().,:c���������S���s���t��|����t�k�S(���N(���R���R���(���R#���(����(����s)���/usr/lib64/python2.7/lib2to3/btm_utils.pyt���<lambda>����t����c������������s���t��|��t���o�|�����k�S(���N(���R6���R���(���R#���(���t���common_chars(����s)���/usr/lib64/python2.7/lib2to3/btm_utils.pyRO�����RP���c������������s���t��|��t���o�|�����k�S(���N(���R6���R���(���R#���(���t���common_names(����s)���/usr/lib64/python2.7/lib2to3/btm_utils.pyRO�����RP���t���key(���R6���t���listR���R+���t���rec_testR���t���max(���t���subpatternst���subpatterns_with_namest���subpatterns_with_common_namest���subpatterns_with_common_charst ���subpattern(����(���RQ���RR���s)���/usr/lib64/python2.7/lib2to3/btm_utils.pyR�������s2���� c���������c���sW���xP�|��D]H�}�t��|�t�t�f���rD�x*�t�|�|���D]�}�|�Vq2�Wq�|�|���Vq�Wd�S(���sP���Tests test_func on all items of sequence and items of included sub-iterablesN(���R6���RT���R���RU���(���t���sequencet ���test_funcR#���t���y(����(����s)���/usr/lib64/python2.7/lib2to3/btm_utils.pyRU�����s ���� N(���R&���RP���R����t���pgen2R���R���t���pygramR���R���R/���R>���t���opmapRA���R���R<���R���R���t���objectR���R���R2���R���RU���(����(����(����s)���/usr/lib64/python2.7/lib2to3/btm_utils.pyt���<module>���s��� X� %