ó
    ´OÂfJX  ã                   ó|   • S SK r S SKJrJr  S SKJr  S SKJr   " S S\\S9r " S S	\5      r	 " S
 S\5      r
S	S/rg)é    N)ÚABCMetaÚabstractmethod)ÚTree)Úslice_boundsc                   óà   ^ • \ rS rSrSrSU 4S jjr\SS j5       r\S 5       rU 4S jr	U 4S jr
U 4S jrU 4S	 jrU 4S
 jrSU 4S jjrU 4S jr\" \S5      (       a	  S rS rS rS rSrU =r$ )ÚAbstractParentedTreeé   a{  
An abstract base class for a ``Tree`` that automatically maintains
pointers to parent nodes.  These parent pointers are updated
whenever any change is made to a tree's structure.  Two subclasses
are currently defined:

  - ``ParentedTree`` is used for tree structures where each subtree
    has at most one parent.  This class should be used in cases
    where there is no"sharing" of subtrees.

  - ``MultiParentedTree`` is used for tree structures where a
    subtree may have zero or more parents.  This class should be
    used in cases where subtrees may be shared.

Subclassing
===========
The ``AbstractParentedTree`` class redefines all operations that
modify a tree's structure to call two methods, which are used by
subclasses to update parent information:

  - ``_setparent()`` is called whenever a new child is added.
  - ``_delparent()`` is called whenever a child is removed.
c                 ó  >• [         TU ]  X5        Ubx  [        U 5       H,  u  p4[        U[        5      (       d  M  U R                  XCSS9  M.     [        U 5       H-  u  p4[        U[        5      (       d  M  U R                  XC5        M/     g g )NT©Údry_run)ÚsuperÚ__init__Ú	enumerateÚ
isinstancer   Ú
_setparent©ÚselfÚnodeÚchildrenÚiÚchildÚ	__class__s        €Ú4/usr/lib/python3/dist-packages/nltk/tree/parented.pyr   ÚAbstractParentedTree.__init__.   sw   ø€ Ü‰Ñ˜Ô(ð Ñô & džO‘�Ü˜e¤T×*Ó*Ø—O‘O E°d�OÓ;ñ ,ô & džO‘�Ü˜e¤T×*Ó*Ø—O‘O EÖ-ò ,ð  ó    c                 ó   • g)a  
Update the parent pointer of ``child`` to point to ``self``.  This
method is only called if the type of ``child`` is ``Tree``;
i.e., it is not called when adding a leaf to a tree.  This method
is always called before the child is actually added to the
child list of ``self``.

:type child: Tree
:type index: int
:param index: The index of ``child`` in ``self``.
:raise TypeError: If ``child`` is a tree with an impropriate
    type.  Typically, if ``child`` is a tree, then its type needs
    to match the type of ``self``.  This prevents mixing of
    different tree types (single-parented, multi-parented, and
    non-parented).
:param dry_run: If true, the don't actually set the child's
    parent pointer; just check for any error conditions, and
    raise an exception if one is found.
N© ©r   r   Úindexr   s       r   r   ÚAbstractParentedTree._setparent@   ó   � r   c                 ó   • g)as  
Update the parent pointer of ``child`` to not point to self.  This
method is only called if the type of ``child`` is ``Tree``; i.e., it
is not called when removing a leaf from a tree.  This method
is always called before the child is actually removed from the
child list of ``self``.

:type child: Tree
:type index: int
:param index: The index of ``child`` in ``self``.
Nr   ©r   r   r   s      r   Ú
_delparentÚAbstractParentedTree._delparentV   r!   r   c                 óî  >• [        U[        5      (       a]  [        XSS9u  p#n[        X#U5       H0  n[        X   [        5      (       d  M  U R                  X   U5        M2     [        TU ]  U5        g [        U[        5      (       a`  US:  a  U[        U 5      -  nUS:  a  [        S5      e[        X   [        5      (       a  U R                  X   U5        [        TU ]  U5        g [        U[        [        45      (       a;  [        U5      S:X  a  [        S5      e[        U5      S:X  a  XS   	 g XS      USS  	 g [        [        U 5      R                  < S[        U5      R                  < 35      e)NT©Ú
allow_stepr   úindex out of rangez(The tree position () may not be deleted.é   ú indices must be integers, not )r   Úslicer   Úranger   r$   r   Ú__delitem__ÚintÚlenÚ
IndexErrorÚlistÚtupleÚ	TypeErrorÚtypeÚ__name__)r   r   ÚstartÚstopÚstepr   r   s         €r   r.   Ú AbstractParentedTree.__delitem__j   sB  ø€ ä�eœU×#Ñ#Ü ,¨TÀTÑ JÑˆE˜ä˜5¨Ö-�Ü˜d™g¤t×,Ó,Ø—O‘O D¡G¨QÖ/ñ .ô ‰GÑ Õ&ô ˜œs×#Ñ#Ø�q‹yØœ˜T›Ñ"�Ø�q‹yÜ Ð!5Ó6Ð6ä˜$™+¤t×,Ñ,Ø—‘ ¡¨UÔ3ä‰GÑ Õ&ä˜¤¤e˜}×-Ñ-ä�5‹z˜Q‹Ü Ð!KÓLÐLä�U“˜q“Ø˜q™‘Nð ˜q™‘N 5¨¨ 9Ñ-ô ä˜“:×&Ô&¬¨U«×(<Ó(<ð>óð r   c                 ó¢  >• [        U[        5      (       Ga  [        XSS9u  p4n[        U[        [        45      (       d  [        U5      n[        U5       H1  u  pg[        U[        5      (       d  M  U R                  XsXe-  -   SS9  M3     [        X4U5       H0  n[        X   [        5      (       d  M  U R                  X   U5        M2     [        U5       H2  u  pg[        U[        5      (       d  M  U R                  XsXe-  -   5        M4     [        TU ]-  X5        g [        U[        5      (       aŽ  US:  a  U[        U 5      -  nUS:  a  [        S5      eX U   L a  g [        U[        5      (       a  U R                  X!5        [        X   [        5      (       a  U R                  X   U5        [        TU ]-  X5        g [        U[        [        45      (       a?  [        U5      S:X  a  [        S5      e[        U5      S:X  a  X US   '   g X US      USS  '   g [        [!        U 5      R"                  < S[!        U5      R"                  < 35      e)	NTr'   r   r   r)   z,The tree position () may not be assigned to.r*   r+   )r   r,   r   r2   r3   r   r   r   r-   r$   r   Ú__setitem__r/   r0   r1   r4   r5   r6   )	r   r   Úvaluer7   r8   r9   r   r   r   s	           €r   r<   Ú AbstractParentedTree.__setitem__’   sò  ø€ ä�eœU×#Ò#Ü ,¨TÀTÑ JÑˆE˜ä˜e¤d¬E ]×3Ñ3Ü˜U›�ô & eÖ,‘�Ü˜e¤T×*Ó*Ø—O‘O E°1±8Ñ+;ÀT�OÓJñ -ô ˜5¨Ö-�Ü˜d™g¤t×,Ó,Ø—O‘O D¡G¨QÖ/ñ .ô & eÖ,‘�Ü˜e¤T×*Ó*Ø—O‘O E°1±8Ñ+;Ö<ñ -ô ‰GÑ Õ-ô ˜œs×#Ñ#Ø�q‹yØœ˜T›Ñ"�Ø�q‹yÜ Ð!5Ó6Ð6à˜U™Ò#Øä˜%¤×&Ñ&Ø—‘ Ô-ä˜$™+¤t×,Ñ,Ø—‘ ¡¨UÔ3ä‰GÑ Õ-ä˜¤¤e˜}×-Ñ-ä�5‹z˜Q‹Ü Ð!OÓPÐPä�U“˜q“Ø!&�U˜1‘X’ð -2�U˜1‘X‘˜u Q R˜yÒ)ô ä˜“:×&Ô&¬¨U«×(<Ó(<ð>óð r   c                 ó„   >• [        U[        5      (       a  U R                  U[        U 5      5        [        TU ]  U5        g ©N©r   r   r   r0   r   Úappend)r   r   r   s     €r   rB   ÚAbstractParentedTree.appendÎ   s.   ø€ Ü�eœT×"Ñ"Ø�O‰O˜E¤3 t£9Ô-Ü‰‰�uÕr   c                 ó–   >• U HB  n[        U[        5      (       a  U R                  U[        U 5      5        [        TU ]  U5        MD     g r@   rA   )r   r   r   r   s      €r   ÚextendÚAbstractParentedTree.extendÓ   s8   ø€ ÛˆEÜ˜%¤×&Ñ&Ø—‘ ¤s¨4£yÔ1Ü‰G‰N˜5Ö!ò r   c                 ó¨   >• US:  a  U[        U 5      -  nUS:  a  Sn[        U[        5      (       a  U R                  X!5        [        TU ]  X5        g ©Nr   )r0   r   r   r   r   Úinsert)r   r   r   r   s      €r   rI   ÚAbstractParentedTree.insertÙ   sK   ø€ ð �1‹9Ø”S˜“YÑˆEØ�1‹9ØˆEä�eœT×"Ñ"Ø�O‰O˜EÔ)Ü‰‰�uÕ$r   c                 óÂ   >• US:  a  U[        U 5      -  nUS:  a  [        S5      e[        X   [        5      (       a  U R	                  X   U5        [
        TU ]  U5      $ )Nr   r)   )r0   r1   r   r   r$   r   Úpop)r   r   r   s     €r   rL   ÚAbstractParentedTree.popæ   sY   ø€ Ø�1‹9Ø”S˜“YÑˆEØ�1‹9ÜÐ1Ó2Ð2Ü�d‘k¤4×(Ñ(Ø�O‰O˜D™K¨Ô/Ü‰w‰{˜5Ó!Ð!r   c                 óœ   >• U R                  U5      n[        X   [        5      (       a  U R                  X   U5        [        TU ]  U5        g r@   )r   r   r   r$   r   Úremove)r   r   r   r   s      €r   rO   ÚAbstractParentedTree.removeñ   s<   ø€ Ø—
‘
˜5Ó!ˆÜ�d‘k¤4×(Ñ(Ø�O‰O˜D™K¨Ô/Ü‰‰�uÕr   Ú__getslice__c           	      ó`   • U R                  [        [        SU5      [        SU5      5      5      $ rH   )Ú__getitem__r,   Úmax©r   r7   r8   s      r   rQ   Ú!AbstractParentedTree.__getslice__ÿ   ó&   € Ø×#Ñ#¤E¬#¨a°«-¼¸QÀ»Ó$FÓGÐGr   c           	      ó`   • U R                  [        [        SU5      [        SU5      5      5      $ rH   )r.   r,   rT   rU   s      r   Ú__delslice__Ú!AbstractParentedTree.__delslice__  rW   r   c           	      ób   • U R                  [        [        SU5      [        SU5      5      U5      $ rH   )r<   r,   rT   )r   r7   r8   r=   s       r   Ú__setslice__Ú!AbstractParentedTree.__setslice__  s(   € Ø×#Ñ#¤E¬#¨a°«-¼¸QÀ»Ó$FÈÓNÐNr   c                 ó0   • U R                   [        U 5      4$ )aq  Method used by the pickle module when un-pickling.
This method provides the arguments passed to ``__new__``
upon un-pickling. Without this method, ParentedTree instances
cannot be pickled and unpickled in Python 3.7+ onwards.

:return: Tuple of arguments for ``__new__``, i.e. the label
    and the children of this node.
:rtype: Tuple[Any, List[AbstractParentedTree]]
)Ú_labelr2   ©r   s    r   Ú__getnewargs__Ú#AbstractParentedTree.__getnewargs__  s   € ð —‘œT $›ZÐ(Ð(r   r   r@   ©F)éÿÿÿÿ)r6   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   r$   r.   r<   rB   rE   rI   rL   rO   Úhasattrr2   rQ   rY   r\   ra   Ú__static_attributes__Ú__classcell__©r   s   @r   r   r      s…   ø† ñ÷0.ð$ óó ðð* ñó ðõ&&õP:õxõ
"õ%÷"õñ ˆt�^×$Ñ$ò	Hò	Hò	O÷
)ð 
)r   r   )Ú	metaclassc                   óz   ^ • \ rS rSrSrSU 4S jjrS rSU 4S jjrS rS r	S r
S	 rS
 rS rS rSS jrSrU =r$ )ÚParentedTreei  aØ  
A ``Tree`` that automatically maintains parent pointers for
single-parented trees.  The following are methods for querying
the structure of a parented tree: ``parent``, ``parent_index``,
``left_sibling``, ``right_sibling``, ``root``, ``treeposition``.

Each ``ParentedTree`` may have at most one parent.  In
particular, subtrees may not be shared.  Any attempt to reuse a
single ``ParentedTree`` as a child of more than one parent (or
as multiple children of the same parent) will cause a
``ValueError`` exception to be raised.

``ParentedTrees`` should never be used in the same tree as ``Trees``
or ``MultiParentedTrees``.  Mixing tree implementations may result
in incorrect parent pointers and in ``TypeError`` exceptions.
c                 óÂ   >• S U l          [        TU ]	  X5        UcD  [        U 5       H4  u  p4[	        U[
        5      (       d  M  S Ul         U R                  XC5        M6     g g r@   )Ú_parentr   r   r   r   r   r   r   s        €r   r   ÚParentedTree.__init__'  sW   ø€ ØˆŒØCÜ‰Ñ˜Ô(ØÑô
 & džO‘�Ü˜e¤T×*Ó*Ø$(�E”MØ—O‘O EÖ-ò ,ð r   c                 ó   • SSK Jn  U$ )Nr   )ÚImmutableParentedTree)Únltk.tree.immutablert   )r   rt   s     r   Ú_frozen_classÚParentedTree._frozen_class5  s   € Ý=à$Ð$r   c                 ó†   >• U(       d-  [         R                  " U R                  R                   S35        [        TU ]  SS9$ )NzB objects do not support shallow copies. Defaulting to a deep copy.T)Údeep)ÚwarningsÚwarnr   r6   r   Úcopy)r   ry   r   s     €r   r|   ÚParentedTree.copy:  s;   ø€ ÞÜ�MŠMØ—>‘>×*Ñ*Ð+Ð+mÐnôô ‰w‰| ˆ|Ð&Ð&r   c                 ó   • U R                   $ )z5The parent of this tree, or None if it has no parent.©rq   r`   s    r   ÚparentÚParentedTree.parentE  s   € à�|‰|Ðr   c                 óx   • U R                   c  g[        U R                   5       H  u  pX L d  M  Us  $     S5       e)a  
The index of this tree in its parent.  I.e.,
``ptree.parent()[ptree.parent_index()] is ptree``.  Note that
``ptree.parent_index()`` is not necessarily equal to
``ptree.parent.index(ptree)``, since the ``index()`` method
returns the first child that is equal to its argument.
Nz&expected to find self in self._parent!)rq   r   )r   r   r   s      r   Úparent_indexÚParentedTree.parent_indexI  s=   € ð �<‰<ÑØÜ! $§,¡,Ö/‰HˆAØŒ}Ø’ñ 0ð 	?Ð>Ó>ˆur   c                 óv   • U R                  5       nU R                  (       a  US:”  a  U R                  US-
     $ g)z6The left sibling of this tree, or None if it has none.r   r*   N)rƒ   rq   ©r   rƒ   s     r   Úleft_siblingÚParentedTree.left_siblingX  s5   € à×(Ñ(Ó*ˆØ�<�<˜L¨1Ó,Ø—<‘< ¨qÑ 0Ñ1Ð1Ør   c                 ó¢   • U R                  5       nU R                  (       a.  U[        U R                  5      S-
  :  a  U R                  US-      $ g)z7The right sibling of this tree, or None if it has none.r*   N)rƒ   rq   r0   r†   s     r   Úright_siblingÚParentedTree.right_sibling_  sC   € à×(Ñ(Ó*ˆØ�<�<˜L¬C°·±Ó,=ÀÑ,AÓBØ—<‘< ¨qÑ 0Ñ1Ð1Ør   c                 ór   • U nUR                  5       b#  UR                  5       nUR                  5       b  M#  U$ )z–
The root of this tree.  I.e., the unique ancestor of this tree
whose parent is None.  If ``ptree.parent()`` is None, then
``ptree`` is its own root.
)r€   )r   Úroots     r   r�   ÚParentedTree.rootf  s3   € ð ˆØ�k‰k‹mÑ'Ø—;‘;“=ˆDð �k‰k‹mÓ'àˆr   c                 ó†   • U R                  5       c  gU R                  5       R                  5       U R                  5       4-   $ )zw
The tree position of this tree, relative to the root of the
tree.  I.e., ``ptree.root[ptree.treeposition] is ptree``.
r   )r€   Útreepositionrƒ   r`   s    r   r�   ÚParentedTree.treepositionq  s9   € ð
 �;‰;‹=Ñ Øà—;‘;“=×-Ñ-Ó/°4×3DÑ3DÓ3FÐ2HÑHÐHr   c                 ót   • [        U[        5      (       d   eX   UL d   eUR                  U L d   eS Ul        g r@   )r   ro   rq   r#   s      r   r$   ÚParentedTree._delparent  s@   € ä˜%¤×.Ñ.Ð.Ð.Ø‰{˜eÒ#Ð#Ð#Ø�}‰} Ò$Ð$Ð$ð ˆ�r   c                 ó²   • [        U[        5      (       d  [        S5      e[        US5      (       a  UR                  b  [        S5      eU(       d  Xl        g g )Nz5Can not insert a non-ParentedTree into a ParentedTreerq   z3Can not insert a subtree that already has a parent.)r   ro   r4   ri   rq   Ú
ValueErrorr   s       r   r   ÚParentedTree._setparentˆ  sN   € ä˜%¤×.Ñ.ÜÐSÓTÐTô �5˜)×$Ñ$¨¯©Ñ)BÜÐRÓSÐSö Ø �Mð r   r   r@   rc   )r6   re   rf   rg   rh   r   rv   r|   r€   rƒ   r‡   rŠ   r�   r�   r$   r   rj   rk   rl   s   @r   ro   ro     sE   ø† ñ÷".ò%÷
'òò?òòò	òIò÷!ò !r   ro   c                   óv   ^ • \ rS rSrSrSU 4S jjrS rS rS rS r	S r
S	 rS
 rS rS rS rSS jrSrU =r$ )ÚMultiParentedTreei–  aØ  
A ``Tree`` that automatically maintains parent pointers for
multi-parented trees.  The following are methods for querying the
structure of a multi-parented tree: ``parents()``, ``parent_indices()``,
``left_siblings()``, ``right_siblings()``, ``roots``, ``treepositions``.

Each ``MultiParentedTree`` may have zero or more parents.  In
particular, subtrees may be shared.  If a single
``MultiParentedTree`` is used as multiple children of the same
parent, then that parent will appear multiple times in its
``parents()`` method.

``MultiParentedTrees`` should never be used in the same tree as
``Trees`` or ``ParentedTrees``.  Mixing tree implementations may
result in incorrect parent pointers and in ``TypeError`` exceptions.
c                 óÂ   >• / U l          [        TU ]	  X5        UcD  [        U 5       H4  u  p4[	        U[
        5      (       d  M  / Ul         U R                  XC5        M6     g g r@   )Ú_parentsr   r   r   r   r   r   r   s        €r   r   ÚMultiParentedTree.__init__¨  s[   ø€ ØˆŒð	ô 	‰Ñ˜Ô(ØÑô
 & džO‘�Ü˜e¤T×*Ó*Ø%'�E”NØ—O‘O EÖ-ò ,ð r   c                 ó   • SSK Jn  U$ )Nr   )ÚImmutableMultiParentedTree)ru   r�   )r   r�   s     r   rv   ÚMultiParentedTree._frozen_class¸  s   € ÝBà)Ð)r   c                 ó,   • [        U R                  5      $ )zí
The set of parents of this tree.  If this tree has no parents,
then ``parents`` is the empty set.  To check if a tree is used
as multiple children of the same parent, use the
``parent_indices()`` method.

:type: list(MultiParentedTree)
)r2   rš   r`   s    r   ÚparentsÚMultiParentedTree.parentsÁ  s   € ô �D—M‘MÓ"Ð"r   c                 ór   • U R                  5        VVs/ s H  u  pUS:”  d  M  XS-
     PM     snn$ s  snnf )aE  
A list of all left siblings of this tree, in any of its parent
trees.  A tree may be its own left sibling if it is used as
multiple contiguous children of the same parent.  A tree may
appear multiple times in this list if it is the left sibling
of this tree with respect to multiple parents.

:type: list(MultiParentedTree)
r   r*   )Ú_get_parent_indices©r   r€   r   s      r   Úleft_siblingsÚMultiParentedTree.left_siblingsÌ  sD   € ð $(×#;Ñ#;Ô#=ô
â#=‘�Ø�q‰yó ˆF˜1‘9ÔÙ#=ò
ð 	
ùó 
s   ”3¤3c                 óŠ   • U R                  5        VVs/ s H   u  pU[        U5      S-
  :  d  M  XS-      PM"     snn$ s  snnf )aH  
A list of all right siblings of this tree, in any of its parent
trees.  A tree may be its own right sibling if it is used as
multiple contiguous children of the same parent.  A tree may
appear multiple times in this list if it is the right sibling
of this tree with respect to multiple parents.

:type: list(MultiParentedTree)
r*   )r£   r0   r¤   s      r   Úright_siblingsÚ MultiParentedTree.right_siblingsÜ  sM   € ð $(×#;Ñ#;Ô#=ô
â#=‘�Øœ˜F› a™Ñ(ó ˆF˜1‘9ÔÙ#=ò
ð 	
ùó 
s   ”?°?c                 óŠ   • U R                    VVVs/ s H!  n[        U5        H  u  p#X0L d  M  X4PM     M#     snnn$ s  snnnf r@   ©rš   r   ©r   r€   r   r   s       r   r£   Ú%MultiParentedTree._get_parent_indicesì  sJ   € ð Ÿ-š-õ
â'�Ü )¨&× 1‘�Øˆ}ó ˆV‹Oá 1ñ Ù'ó
ð 	
ùô 
s   ‘>®>c                 óR   • [        U R                  0 5      R                  5       5      $ )z¤
The set of all roots of this tree.  This set is formed by
tracing all possible parent paths until trees with no parents
are found.

:type: list(MultiParentedTree)
)r2   Ú_get_roots_helperÚvaluesr`   s    r   ÚrootsÚMultiParentedTree.rootsô  s#   € ô �D×*Ñ*¨2Ó.×5Ñ5Ó7Ó8Ð8r   c                 óŽ   • U R                   (       a&  U R                    H  nUR                  U5        M     U$ X[        U 5      '   U$ r@   )rš   r¯   Úid)r   Úresultr€   s      r   r¯   Ú#MultiParentedTree._get_roots_helperþ  s?   € Ø�=�=ØŸ-œ-�Ø×(Ñ(¨Ö0ñ (ð ˆð  $”2�d“8ÑØˆr   c                 ó|   • XR                   ;  a  / $ [        U5       VVs/ s H  u  p#X0L d  M  UPM     snn$ s  snnf )a!  
Return a list of the indices where this tree occurs as a child
of ``parent``.  If this child does not occur as a child of
``parent``, then the empty list is returned.  The following is
always true::

  for parent_index in ptree.parent_indices(parent):
      parent[parent_index] is ptree
r«   r¬   s       r   Úparent_indicesÚ MultiParentedTree.parent_indices  s8   € ð Ÿ™Ó&ØˆIä09¸&Ô0AÔSÒ0A™n˜uÀUÀ]—EÑ0AÒSÐSùÓSs    
8®8c           
      óÔ   • XL a  S/$ U R                    VVVVs/ s H<  nUR                  U5        H#  n[        U5        H  u  pEXPL d  M  X44-   PM     M%     M>     snnnn$ s  snnnnf )zà
Return a list of all tree positions that can be used to reach
this multi-parented tree starting from ``root``.  I.e., the
following is always true::

  for treepos in ptree.treepositions(root):
      root[treepos] is ptree
r   )rš   Útreepositionsr   )r   r�   r€   Útreeposr   r   s         r   r»   ÚMultiParentedTree.treepositions  su   € ð Š<Ø�4ˆKð #Ÿmšmöâ+�FØ%×3Ñ3°D×9�GÜ&/°×&7‘N�UØ�=ó	 #�˜(Ô"ñ '8ñ #á9ñ #Ù+ôð ùõ s   ™.A"
ÁA"
c                 ó*  • [        U[        5      (       d   eX   UL d   e[        UR                   Vs/ s H  o3U L d  M	  UPM     sn5      S:X  d   e[	        U 5       H  u  pEXQL d  M  XB:w  d  M    g    UR                  R                  U 5        g s  snf )Nr*   )r   r˜   r0   rš   r   rO   )r   r   r   Úpr   Úcs         r   r$   ÚMultiParentedTree._delparent-  s‡   € ä˜%Ô!2×3Ñ3Ð3Ð3Ø‰{˜eÒ#Ð#Ð#Ü˜uŸ~š~Ó;š~˜!°d°—A™~Ñ;Ó<ÀÓAÐAÐAô ˜d–O‰DˆAØŒz˜a�jÙñ $ð �N‰N×!Ñ! $Õ'ùò <s   ´BÁ Bc                 ó¼   • [        U[        5      (       d  [        S5      eU(       d5  UR                   H	  nX@L d  M	    g    UR                  R	                  U 5        g g )Nz?Can not insert a non-MultiParentedTree into a MultiParentedTree)r   r˜   r4   rš   rB   )r   r   r   r   r€   s        r   r   ÚMultiParentedTree._setparent;  sT   € ä˜%Ô!2×3Ñ3ÜØQóð ö
 ØŸ.œ.�Ø”>Ùñ )ð —‘×%Ñ% dÕ+ð r   )rš   r@   rc   )r6   re   rf   rg   rh   r   rv   r    r¥   r¨   r£   r±   r¯   r¸   r»   r$   r   rj   rk   rl   s   @r   r˜   r˜   –  sJ   ø† ñ÷".ò *ò	#ò
ò 
ò 
ò9òòTòò0(÷,ò ,r   r˜   )rz   Úabcr   r   Únltk.tree.treer   Ú	nltk.utilr   r   ro   r˜   Ú__all__r   r   r   Ú<module>rÈ      sS   ðó ß 'å Ý "ô})˜4¨7ò })ô@~!Ð'ô ~!ôBr,Ð,ô r,ðl Øð�r   