ó
    ‰*£hà  ã                  ó†   • S r SSKJr  SSKJrJrJrJr  SSKJ	r	  \(       a  SSK
Jr   " S S\\S4   5      r " S	 S5      rg
)zRelationship-related objects.é    )Úannotations)ÚTYPE_CHECKINGÚAnyÚDictÚcast)ÚCT_Relationships)ÚPartc                  óÐ   ^ • \ rS rSrSrSU 4S jjr S         SS jjrSS jrSS jrSS jr	\
S 5       r\
SS	 j5       r S       SS
 jjrSS jr\
SS j5       rSrU =r$ )ÚRelationshipsé   zGCollection object for |_Relationship| instances, having list semantics.c                óD   >• [         [        U ]  5         Xl        0 U l        g ©N)Úsuperr   Ú__init__Ú_baseURIÚ_target_parts_by_rId)ÚselfÚbaseURIÚ	__class__s     €ÚI/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docx/opc/rel.pyr   ÚRelationships.__init__   s   ø€ ÜŒm˜TÑ+Ô-ØŒØ46ˆÕ!ó    c                óf   • [        X1X R                  U5      nXPU'   U(       d  X R                  U'   U$ )z.Return a newly added |_Relationship| instance.)Ú_Relationshipr   r   )r   ÚreltypeÚtargetÚrIdÚis_externalÚrels         r   Úadd_relationshipÚRelationships.add_relationship   s3   € ô ˜C¨&·-±-ÀÓMˆØˆS‰	ÞØ-3×%Ñ% cÑ*Øˆ
r   c                ój   • U R                  X5      nUc  U R                  nU R                  XU5      nU$ )zdReturn relationship of `reltype` to `target_part`, newly added if not already
present in collection.)Ú_get_matchingÚ	_next_rIdr    )r   r   Útarget_partr   r   s        r   Ú
get_or_addÚRelationships.get_or_add   s9   € ð × Ñ  Ó6ˆØ‰;Ø—.‘.ˆCØ×'Ñ'¨¸cÓBˆCØˆ
r   c                óz   • U R                  XSS9nUc  U R                  nU R                  XUSS9nUR                  $ )zsReturn rId of external relationship of `reltype` to `target_ref`, newly added
if not already present in collection.T)r   )r#   r$   r    r   )r   r   Ú
target_refr   r   s        r   Úget_or_add_ext_relÚ Relationships.get_or_add_ext_rel(   sG   € ð × Ñ  À$Ð ÐGˆØ‰;Ø—.‘.ˆCØ×'Ñ'¨¸SÈdÐ'ÐSˆCØ�w‰wˆr   c                ó<   • U R                  U5      nUR                  $ )z”Return target part of rel with matching `reltype`, raising |KeyError| if not
found and |ValueError| if more than one matching relationship is found.)Ú_get_rel_of_typer%   )r   r   r   s      r   Úpart_with_reltypeÚRelationships.part_with_reltype1   s   € ð ×#Ñ# GÓ,ˆØ�‰Ðr   c                ó   • U R                   $ )zWDict mapping rIds to target parts for all the internal relationships in the
collection.)r   ©r   s    r   Úrelated_partsÚRelationships.related_parts7   s   € ð ×(Ñ(Ð(r   c                óê   • [         R                  " 5       nU R                  5        H?  nUR                  UR                  UR
                  UR                  UR                  5        MA     UR                  $ )zgSerialize this relationship collection into XML suitable for storage as a
.rels file in an OPC package.)	r   ÚnewÚvaluesÚadd_relr   r   r)   r   Úxml)r   Úrels_elmr   s      r   r8   ÚRelationships.xml=   sP   € ô $×'Ò'Ó)ˆØ—;‘;–=ˆCØ×Ñ˜SŸW™W c§k¡k°3·>±>À3Ç?Á?ÖSñ !à�|‰|Ðr   c                ó`   • SS jnU R                  5        H  nU" XQX#5      (       d  M  Us  $    g)zmReturn relationship of matching `reltype`, `target`, and `is_external` from
collection, or None if not found.c                ó    • U R                   U:w  a  gU R                  U:w  a  gU R                  (       a  U R                  OU R                  nXB:H  $ )NF)r   r   r)   r%   )r   r   r   r   Ú
rel_targets        r   ÚmatchesÚ,Relationships._get_matching.<locals>.matchesL   s>   € Ø�{‰{˜gÓ%ØØ�‰ +Ó-ØØ+.¯?¯?˜ŸšÀÇÁˆJØÑ'Ð'r   N)r   r   r   Ústrr   ú
Part | strr   Úbool)r6   )r   r   r   r   r>   r   s         r   r#   ÚRelationships._get_matchingF   s0   € ô	(ð —;‘;–=ˆCÙ�s V×9Ó9Ø’
ñ !ð r   c                óð   • U R                  5        Vs/ s H  o"R                  U:X  d  M  UPM     nn[        U5      S:X  a  Sn[        XA-  5      e[        U5      S:”  a  Sn[	        XA-  5      eUS   $ s  snf )zÀReturn single relationship of type `reltype` from the collection.

Raises |KeyError| if no matching relationship is found. Raises |ValueError| if
more than one matching relationship is found.
r   z*no relationship of type '%s' in collectioné   z1multiple relationships of type '%s' in collection)r6   r   ÚlenÚKeyErrorÚ
ValueError)r   r   r   ÚmatchingÚtmpls        r   r-   ÚRelationships._get_rel_of_typeY   ss   € ð $(§;¡;¤=ÓK¢=˜C·K±KÀ7Ñ4J—C¡=ˆÐKÜˆx‹=˜AÓØ?ˆDÜ˜4™>Ó*Ð*Üˆx‹=˜1ÓØFˆDÜ˜T™^Ó,Ð,Ø˜‰{Ðùò Ls
   “A3ªA3c                ó^   • [        S[        U 5      S-   5       H  nSU-  nX ;  d  M  Us  $    g)z†Next available rId in collection, starting from 'rId1' and making use of any
gaps in numbering, e.g. 'rId2' for rIds ['rId1', 'rId3'].rE   é   zrId%dN)ÚrangerF   )r   ÚnÚrId_candidates      r   r$   ÚRelationships._next_rIdh   s2   € ô �qœ#˜d›) a™-Ö(ˆAØ# a™KˆMØÕ(Ø$Ò$ò )r   )r   r   )r   r@   ©F)
r   r@   r   rA   r   r@   r   rB   Úreturnz'_Relationship')r   r@   r%   r	   rS   r   )r   r@   r)   r@   rS   r@   )r   r@   rS   r	   ©rS   r@   )r   r@   r   rA   r   rB   rS   z_Relationship | None)r   r@   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r    r&   r*   r.   Úpropertyr2   r8   r#   r-   r$   Ú__static_attributes__Ú__classcell__©r   s   @r   r   r      s»   ø† ÙQ÷7ð OTðØðØ$.ðØ58ðØGKðà	õôôôð ñ)ó ð)ð
 óó ðð EJðØðØ$.ðØ=Aðà	õô&ð ó%ó ö%r   r   r   c                  ó¬   ^ • \ rS rSrSr S
         SU 4S jjjr\SS j5       r\SS j5       r\SS j5       r	\SS j5       r
\SS j5       rS	rU =r$ )r   ér   z&Value object for relationship to part.c                óz   >• [         [        U ]  5         Xl        X l        X0l        X@l        [        U5      U l        g r   )	r   r   r   Ú_rIdÚ_reltypeÚ_targetr   rB   Ú_is_external)r   r   r   r   r   Úexternalr   s         €r   r   Ú_Relationship.__init__u   s2   ø€ ô 	Œm˜TÑ+Ô-ØŒ	ØŒØŒØŒÜ  ›NˆÕr   c                ó   • U R                   $ r   )rd   r1   s    r   r   Ú_Relationship.is_external   s   € à× Ñ Ð r   c                ó   • U R                   $ r   )rb   r1   s    r   r   Ú_Relationship.reltypeƒ   s   € à�}‰}Ðr   c                ó   • U R                   $ r   )ra   r1   s    r   r   Ú_Relationship.rId‡   s   € à�y‰yÐr   c                óf   • U R                   (       a  [        S5      e[        SU R                  5      $ )NzOtarget_part property on _Relationship is undefined when target mode is Externalr	   )rd   rH   r   rc   r1   s    r   r%   Ú_Relationship.target_part‹   s.   € à××ÜØaóð ô �F˜DŸL™LÓ)Ð)r   c                óÎ   • U R                   (       a  [        [        U R                  5      $ [        SU R                  5      nUR                  R                  U R                  5      $ )Nr	   )rd   r   r@   rc   ÚpartnameÚrelative_refr   )r   r   s     r   r)   Ú_Relationship.target_ref“   sE   € à××Üœ˜TŸ\™\Ó*Ð*ä˜& $§,¡,Ó/ˆFØ—?‘?×/Ñ/°·±Ó>Ð>r   )r   rd   ra   rb   rc   rR   )
r   r@   r   r@   r   rA   r   r@   re   rB   )rS   rB   rT   )rS   r	   )rU   rV   rW   rX   rY   r   rZ   r   r   r   r%   r)   r[   r\   r]   s   @r   r   r   r   s£   ø† Ù0ð Z_ð+Øð+Ø!$ð+Ø.8ð+ØCFð+ØRV÷+ð +ð ó!ó ð!ð óó ðð óó ðð ó*ó ð*ð ó?ó ö?r   N)rY   Ú
__future__r   Útypingr   r   r   r   Údocx.opc.oxmlr   Údocx.opc.partr	   r@   r   r   © r   r   Ú<module>rx      s=   ðÙ #å "ç 1Ó 1å *æÝ"ôb%�D˜˜oÐ-Ñ.ô b%÷J'?ò '?r   