Ë
    :vžjÂL  ã                   ó  — d dl Z d dlZd dlZd dlmZ d dlZddlmZm	Z	 ddl
mZ ddl	mZ d„ Zdd„Zd	ej                  d
fd„Zd„ Z	 d dlZd dlmZ ddlmZ deiZdeiZy# e$ r$ZddlmZ d ee«      iZd ee«      iZY dZ[ydZ[ww xY w)é    N)Údefaultdicté   )ÚgraphÚutil)Úlog)Úunique_namec                 óª  — | j                  d«      }| j                  d«      }dj                  |j                  d«      D �cg c]3  }|j                  d   › d|j                  d   › d|j                  d   › �‘Œ5 c}«      }t	        j
                  |t        j                  d¬«      j                  d	«      }dj                  |j                  d
«      D �cg c]3  }|j                  d   › d|j                  d   › d|j                  d   › �‘Œ5 c}«      }t	        j
                  |t        j                  d¬«      j                  d	«      }||fS c c}w c c}w )aã  
    Read a `<mesh ` XML element into Numpy vertices and faces.

    This is generally the most expensive operation in the load as it
    has to operate in Python-space on every single vertex and face.

    Parameters
    ----------
    mesh : lxml.etree.Element
      Input mesh element with `vertex` and `triangle` children.

    Returns
    ----------
    vertex_array : (n, 3) float64
      Vertices
    face_array : (n, 3) int64
      Indexes of vertices forming triangles.
    z{*}verticesz{*}trianglesÚ z	{*}vertexÚxÚyÚz)ÚdtypeÚsep)éÿÿÿÿé   z{*}triangleÚv1Úv2Úv3)	ÚfindÚjoinÚiterÚattribÚnpÚ
fromstringÚfloat64ÚreshapeÚint64)ÚmeshÚverticesÚfacesÚiÚvsÚv_arrayÚfsÚf_arrays           úi/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/trimesh/exchange/threemf.pyÚ
_read_meshr'      s<  € ð( �y‰y˜Ó'€HØ�I‰I�nÓ%€Eð 
�‰ð —]‘] ;Ô/ó	
á/�ð �x‰x˜‰}ˆo˜Q˜qŸx™x¨™}˜o¨Q¨q¯x©x¸©}¨oÒ>Ø/ñ	
ó
€Bô �m‰m˜B¤b§j¡j°cÔ:×BÑBÀ7ÓK€Gð 
�‰ð —Z‘Z Ô.ó	
á.�ð �x‰x˜‰~Ð˜a §¡¨¡Ð/¨q°·±¸$±Ð0@ÒAØ.ñ	
ó
€Bô �m‰m˜B¤b§h¡h°CÔ8×@Ñ@ÀÓI€Gà�GÐÐùò#	
ùò	
s   Á8EÃ8Ec           
      ó  — t        j                  | d¬«      }t        t        d„ |j	                  «       D «       «      «      }t        t        j                  |fdddœt        ¤Ž«      \  }}d|j                  v rd|j                  d   i}ndd	i}i }t        t        «      }	t        t        «      }
t        t        «      }g }i }t        «       }|j                  d
«       t        j                  |fdddœt        ¤ŽD �]k  \  }}d|j                  v �rÞ|j                  d   }t        |j                  j                  dt!        |«      «      ||«      }|j#                  |«       |||<   |j                  d«      D ]8  }t%        |«      \  }}|	|   j'                  |«       |
|   j'                  |«       Œ: |j                  d«      D �](  }|j                  d   }t)        |j                  «      }||   j'                  ||f«       t        d„ |j                  j	                  «       D «       d«      }|€Œl||v sŒq||   j                  d
«       t        |j                  j                  dt!        |«      «      ||«      }|j#                  |«       |||<   t        j                  ||   fdddœt        ¤ŽD ];  \  }}t%        |«      \  }}|	|   j'                  |«       |
|   j'                  |«       Œ= �Œ+ d|j                  v s�Œ|j                  d«      D ]T  }t)        |j                  «      }|j                  j                  dd«      }|j'                  |j                  d   ||f«       ŒV �Œn i }|	j+                  «       D ]v  }t        j,                  |	|   |
|   «      \  }}||   }|||j/                  «       dœ||<   ||   j1                  |j	                  «       D ��ci c]  \  }}|€Œ	||“Œ c}}«       Œx t3        j4                  «       } |D ]  \  }}!}| j7                  d|||!¬«       Œ |j	                  «       D ]#  \  }"}#|#D ]  \  }}!| j7                  |"||!¬«       Œ Œ% g }$t        t        «      }%t        «       }&t9        j:                  | d¬«      D �]  }t9        j<                  | |d¬«      }'t?        |'«      dk(  r|'d
   }nt        j@                  |'«      }|d    d
   }(|(|vrtC        jD                  d!|(› d"�«       Œkt?        |d    «      dkD  rtG        |d    d   t         «      r	|d    d   }n||(   }t        ||&«      }|&j#                  |«       ||(   })t?        |«      d#kD  r|d$   d
   }*|%|*   j#                  |(«       |$j'                  d|||)d%œ«       �Œ |rÑtI        d&„ |j+                  «       D «       «      r±|j+                  «       D �ci c]  }||“Œ }+}|%j	                  «       D ]C  \  }*},t?        |,«      dk7  rŒ||*   jK                  d'«      d
   |+|t        t        |,«      «         <   ŒE |j	                  «       D ��ci c]  \  }}|+|   |“Œ }}}|$D ]  }-d(|-v sŒ|+|-d(      |-d(<   Œ d|$||d)œ}|S c c}}w c c}w c c}}w )*zõ
    Load a 3MF formatted file into a Trimesh scene.

    Parameters
    ------------
    file_obj : file-like
      Contains 3MF formatted data

    Returns
    ------------
    kwargs : dict
      Constructor arguments for `trimesh.Scene`
    Úzip)Ú	file_typec              3   óL   K  — | ]  \  }}d |j                  «       v sŒ|–— Œ y­w)z3d/3dmodel.modelN©Úlower©Ú.0ÚkÚvs      r&   Ú	<genexpr>zload_3MF.<locals>.<genexpr>O   s#   è ø€ ÐW¡O™D˜A˜qÐ7IÈQÏWÉWËYÒ7V”a¡Oùs   ‚$�$z{*}model)Ústart)ÚtagÚeventsÚunitÚunitsÚmillimetersr   )z	{*}objectz{*}build)ÚendÚobjectÚidÚnamez{*}meshz{*}componentÚobjectidc              3   óh   K  — | ]*  \  }}|j                  d «      sŒ|j                  d«      –— Œ, y­w)ÚpathÚ/N)ÚendswithÚstripr.   s      r&   r2   zload_3MF.<locals>.<genexpr>�   s*   è ø€ ÐUÑ.>¡d a¨À!Ç*Á*ÈVÕBT�Q—W‘W˜S—\Ñ.>ùs   ‚2œ2NÚbuildz{*}itemÚ
partnumber)r   r    ÚmetadataÚworld)ÚkeyÚmatrix)rH   )ÚGÚsourcerH   )rI   Ú	traversalr   é   r   zid z included but not defined!r   éþÿÿÿ)Ú
frame_fromÚframe_torH   Úgeometryc              3   ó@   K  — | ]  }d |j                  «       v –— Œ y­w)ÚbodyNr,   ©r/   r!   s     r&   r2   zload_3MF.<locals>.<genexpr>  s   è ø€ ÐF¹°1˜6 Q§W¡W£YÔ.¹ùs   ‚Ú(rP   )Ú
base_framer   rP   rE   )&r   Ú
decompressÚnextr   ÚitemsÚetreeÚ	iterparseÚXML_PARSER_OPTIONSr   r   ÚlistÚsetÚseekr4   r   ÚgetÚstrÚaddr'   ÚappendÚ_attrib_to_transformÚkeysÚappend_facesÚcopyÚupdateÚnxÚMultiDiGraphÚadd_edger   Úmultigraph_pathsÚmultigraph_collectÚlenÚ	multi_dotr   ÚwarningÚ
isinstanceÚallÚsplit).Úfile_objÚpostprocessÚkwargsÚarchiveÚmodelÚ_eventÚrootrE   Úid_nameÚv_seqÚf_seqÚ
componentsÚbuild_itemsÚconsumed_countsÚconsumed_namesÚ_ÚobjÚindexr<   r   r1   ÚfÚcÚ
mesh_indexÚ	transformr?   ÚmÚitemrD   ÚmeshesÚgidr0   ÚgÚtfr3   ÚgroupÚ
graph_argsÚparentsÚ
used_namesÚ
transformsÚlastÚgeomÚparentÚrenameÚ	mesh_nameÚargs.                                                 r&   Úload_3MFr™   =   su  € ô  �o‰o˜h°%Ô8€Gä”ÑW G§M¡M¤OÓWÓWÓX€Eô Ü�‰˜ÐY J¸
ÑYÔFXÑYó�L€FˆDð �—‘ÑØ˜TŸ[™[¨Ñ0Ð1‰ð ˜]Ð+ˆð €GäœÓ€EäœÓ€Eô œTÓ"€Jð €Kð €OÜ“U€Nð 
‡J�Jˆq„MÜ—/‘/ØðØ,°XñÜASõ‰ˆˆ3ð �s—w‘wÒà—J‘J˜tÑ$ˆEô
 Ø—
‘
—‘˜v¤s¨5£zÓ2°NÀOóˆDð ×Ñ˜tÔ$à!ˆG�E‰Nð Ÿ™ Ö+�Ü! $Ó'‘��1Ø�e‘×#Ñ# AÔ&Ø�e‘×#Ñ# AÕ&ð ,ð —X‘X˜n×-�ØŸX™X jÑ1�
Ü0°·±Ó:�	Ø˜5Ñ!×(Ñ(¨*°iÐ)@ÔAô ÙU¨a¯h©h¯n©nÔ.>ÓUØó�ð Ñ#¨°ªØ˜D‘M×&Ñ& qÔ)Ü&ØŸ
™
Ÿ™ v¬s°:«Ó?Ø&Ø'ó�Dð
 #×&Ñ& tÔ,à*.�G˜JÑ'ä %§¡Ø ™ð!à&Ø'ñ!ô -ô	!™˜˜1ô  *¨!›}™˜˜1Ø˜jÑ)×0Ñ0°Ô3Ø˜jÑ)×0Ñ0°Õ3ò!ð+ .ð@ �c—g‘gÓàŸ™ Ö+�ä0°·±Ó=�	Ø!Ÿ[™[Ÿ_™_¨\¸4Ó@�
à×"Ñ" D§K¡K°
Ñ$;¸YÈ
Ð#SÕTò ,ðwðH €FØ�z‰zŽ|ˆÜ× Ñ   s¡¨U°3©ZÓ8‰ˆˆ1Ø�s‰|ˆàØØ Ÿ™›ñ
ˆˆt‰ð 	ˆt‰×Ñ¨f¯l©l¬nÔN©n¡d a¨ÀÁ˜Q ™T¨nÒNÕOð ô 	�‰Ó€Aó  +ÑˆˆR�Ø	�
‰
�7˜C Z¸ˆ
Õ;ð  +ð #×(Ñ(Ö*‰ˆˆuÛ‰GˆC�Ø�J‰J�u˜c¨"ˆJÕ-ñ ð +ð €JÜœ#Ó€GÜ“€JÜ×&Ñ&¨°7×;Ð;ˆä×-Ñ-°¸TÈ(ÔSˆ
äˆz‹?˜aÒØ" 1™‰IäŸ™ zÓ2ˆIð �B‰x˜‰{ˆà�wÑÜ�K‰K˜#˜d˜VÐ#=Ð>Ô?Øäˆt�B‰x‹=˜1Ò¤¨D°©H°Q©K¼Ô!=à˜‘8˜A‘;‰Dð ˜4‘=ˆDô ˜4 Ó,ˆØ�‰�tÔð �t‰}ˆô ˆt‹9�qŠ=Ø˜"‘X˜a‘[ˆFØ�F‰O×Ñ Ô%à×Ñà%Ø Ø#Ø ñ	ö	
ðG <ñ\ ”sÑF¸¿¹¼ÓFÔFà &§¡¤Ó.¡˜1�!�Q‘$ ˆÐ.Ø!(§¡¦ÑˆF�Iô �9‹~ Ò"Øà5<¸V±_×5JÑ5JÈ3Ó5OÐPQÑ5RˆF�7œ4¤ Y£Ó0Ñ1Ò2ð "1ð ,2¯<©<¬>Ô:©>¡4 1 a�&˜‘)˜Q‘,¨>ˆÑ:ãˆCØ˜SÒ Ø"(¨¨Z©Ñ"9��J’ð ð ØØØñ	€Fð €Mùó} OùòL /ùó ;s   Ï
Y0Ï$Y0×
Y6Ø=Y;i   é   c                 óL  ‡ — ddl m} t        | |«      s || «      } | j                  }| j                  j                  «       }| j                  j                  }ddddddd	œ}d
di}	g Š ˆ fd„}
t        j                  «       }||dœ}t        j                  |fddi|¤Ž5 }|j                  dd¬«      5 }t        j                  |d¬«      5 }|j                  «        |j                  dddi|¬«      5  |j                  d«      5  t!        |j#                  «       «      D �]¼  \  }\  }} |
|«      |dt%        t'        j(                  «       «      dœ} |j                  d@i |¤Ž5  |j                  d«      5  |j                  d«      5  |j+                  «        t-        dt/        |j0                  «      |«      D ]]  }|j0                  |||z    }dt/        |«      z  }|j3                   |j4                  |j7                  «       Ž j9                  d«      «       Œ_ 	 d
d
d
«       |j                  d«      5  |j+                  «        t-        dt/        |j:                  «      |«      D ]]  }|j:                  |||z    }dt/        |«      z  }|j3                   |j4                  |j7                  «       Ž j9                  d«      «       Œ_ 	 d
d
d
«       d
d
d
«       d
d
d
«       �Œ¿ |j<                  D �]1  }||k(  s|j?                  d «      rŒt/        ||   «      dk(  rŒ- |
|«      |dt%        t'        j(                  «       «      dœ} |j                  d@i |¤Ž5  |j                  d!«      5  ||   j#                  «       D ]‘  \  }}d"jA                  d#„ tC        jD                  |d$   «      d
d%…d
d&…f   jF                  j7                  «       D «       «      }|j3                  t        jH                  d'd(|v r |
|d(   «      n |
|«      |d)œ«      «       Œ“ 	 d
d
d
«       d
d
d
«       �Œ4 	 d
d
d
«       |j                  d*d+t%        t'        j(                  «       «      i«      5  ||   j#                  «       D ]Ú  \  }}|j?                  d «      rŒd"jA                  d,„ tC        jD                  |d$   «      d
d%…d
d&…f   jF                  j7                  «       D «       «      }d-j5                  |d.   «      }|j3                  t        jH                  d/d0 |
|jK                  d(|«      «      d1||t%        t'        j(                  «       «      d2|i|¬«      «       ŒÜ 	 d
d
d
«       d
d
d
«       d
d
d
«       d
d
d
«       |j                  d3d«      5 }t        j                  |d¬«      5 }|j                  «        |j                  d4|	¬«      5  d5}|j3                  t        jH                  d6|d7d8¬9«      «       d
d
d
«       d
d
d
«       d
d
d
«       |j                  d:d«      5 }t        j                  |d¬«      5 }|j                  «        d
d;i}g d<¢}|j                  d=|¬«      5  |D ],  \  }}|j3                  t        jH                  d>||¬?«      «       Œ. 	 d
d
d
«       d
d
d
«       d
d
d
«       d
d
d
«       |jM                  «       S # 1 sw Y   �Œ�xY w# 1 sw Y   �ŒÿxY w# 1 sw Y   �ŒxY w# 1 sw Y   �ŒÆxY w# 1 sw Y   �ŒÝxY w# 1 sw Y   �ŒxY w# 1 sw Y   �ŒãxY w# 1 sw Y   �ŒÇxY w# 1 sw Y   �ŒÌxY w# 1 sw Y   �ŒÑxY w# 1 sw Y   �ŒÖxY w# 1 sw Y   �ŒbxY w# 1 sw Y   �ŒgxY w# 1 sw Y   �ŒlxY w# 1 sw Y   ŒçxY w# 1 sw Y   ŒëxY w# 1 sw Y   ŒïxY w# 1 sw Y   |jM                  «       S xY w)Aa¶  
    Converts a Trimesh object into a 3MF file.

    Parameters
    ---------
    mesh trimesh.trimesh
      Mesh or Scene to export.
    batch_size : int
      Number of nodes to write per batch.
    compression : zipfile.ZIP_*
      Type of zip compression to use in this export.
    compresslevel : int
      Specify the 0-9 compression level.

    Returns
    ---------
    export : bytes
      Represents geometry as a 3MF file.
    r   )ÚScenez9http://schemas.microsoft.com/3dmanufacturing/core/2015/02z=http://schemas.microsoft.com/3dmanufacturing/material/2015/02z?http://schemas.microsoft.com/3dmanufacturing/production/2015/06z@http://schemas.microsoft.com/3dmanufacturing/beamlattice/2017/02z:http://schemas.microsoft.com/3dmanufacturing/slice/2015/07zBhttp://schemas.microsoft.com/3dmanufacturing/securecontent/2019/04)Nrˆ   ÚpÚbÚsÚscNz<http://schemas.openxmlformats.org/package/2006/relationshipsc                 óh   •— | ‰vr‰j                  | «       t        ‰j                  | «      dz   «      S )NrL   )rb   r`   rƒ   )r   Úmodelss    €r&   Úmodel_idzexport_3MF.<locals>.model_idL  s.   ø€ Ø�F‰?Ø�M‰M˜!ÔÜ�6—<‘< “? QÑ&Ó'Ð'ó    )ÚcompressionÚcompresslevelÚmodeÚwz3D/3dmodel.model)r§   zutf-8)Úencodingrw   r6   Ú
millimeter)ÚnsmapÚ	resources)r;   r<   Útypeúp:UUIDr   r   r   z<vertex x="{}" y="{}" z="{}" />Ú	trianglesz$<triangle v1="{}" v2="{}" v3="{}" />Úcamerar}   r
   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N©r`   rS   s     r&   r2   zexport_3MF.<locals>.<genexpr>š  s    è ø€ ð 9&ñ26¨Aô ),¨A¯ñ26ùó   ‚rH   r   é   Ú	componentrP   )r=   r‡   rC   r®   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr²   r³   rS   s     r&   r2   zexport_3MF.<locals>.<genexpr>±  s   è ø€ ð -Ù,X qœC ŸFÑ,Xùr´   z
{{{}}}UUIDr�   r‰   r=   r‡   rD   z_rels/.relsÚRelationshipsz<http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodelÚRelationshipz/3D/3dmodel.modelÚrel0)ÚTypeÚTargetÚIdz[Content_Types].xmlz<http://schemas.openxmlformats.org/package/2006/content-types))Újpegú
image/jpeg)Újpgr¿   )rw   z6application/vnd.ms-package.3dmanufacturing-3dmodel+xml)Úpngz	image/png)Úrelsz8application/vnd.openxmlformats-package.relationships+xml)Útexturez9application/vnd.ms-package.3dmanufacturing-3dmodeltextureÚTypesÚDefault)Ú	ExtensionÚContentType)r:   )'Úscene.scenerœ   rp   rP   r   Úto_networkxrU   ÚioÚBytesIOÚzipfileÚZipFileÚopenrY   ÚxmlfileÚwrite_declarationÚelementÚ	enumeraterX   r`   ÚuuidÚuuid4ÚflushÚrangerm   r   ÚwriteÚformatÚflattenÚencoder    ÚnodesÚ
startswithr   r   ÚarrayÚTÚElementr_   Úgetvalue)!r   Ú
batch_sizer¥   r¦   rœ   rP   r   rU   Úmodel_nsmapÚ
rels_nsmapr£   rs   Ú
zip_kwargsr   r„   Úxfr!   r<   rˆ   ÚattribsÚbatchÚfragmentÚnoderW   Údatar‡   Úuuid_tagÚrtr«   ÚtypesÚextÚctyper¢   s!                                   @r&   Ú
export_3MFrð     s¸  ø€ õ* $ä�d˜EÔ"Ù�T‹{ˆà�}‰}€HØ�J‰J×"Ñ"Ó$€EØ—‘×&Ñ&€Jð JØLØNØOØIØRñ€Kð ÐVÐW€Jð €Fô(ô �z‰z‹|€Hð "-¸}ÑM€Jä	�‰˜Ñ	:¨Ð	:¨zÒ	:¸að �F‰FÐ%¨CˆFÔ0°AÜ�M‰M˜! gÕ.°"à× Ñ Ô"ð —‘˜G f¨lÐ%;À;�ÕOà—Z‘Z Õ,ä(1°(·.±.Ó2B×(C™˜™9˜D !ñ #+¨4£.Ø$(Ø$+Ü&)¬$¯*©*«,Ó&7ñ	#˜ð (˜RŸZ™ZÑ<°GÓ<Ø!#§¡¨FÕ!3Ø%'§Z¡Z°
Õ%;ð %'§H¡H¤JÜ-2°1´c¸!¿*¹*³oÀzÖ-R¨Ø01·
±
¸1¸qÀ:¹~Ð0N¨à,MÔPSÐTYÓPZÑ,Zð )1ð )*¯©Ø,;¨H¯O©O¸U¿]¹]»_Ð,M×,TÑ,TØ07ó-.õ)*ñ .S÷	 &<ð &(§Z¡Z°Õ%<Ø$&§H¡H¤JÜ-2°1´c¸!¿'¹'³lÀJÖ-O¨Ø01·±¸¸AÀ
¹NÐ0K¨à,RÜ.1°%«jñ-9ð )1ð )*¯©Ø,;¨H¯O©O¸U¿]¹]»_Ð,M×,TÑ,TØ07ó-.õ)*ñ .P÷ &=÷ "4÷ =Ñ<ð )DðN !&§¥˜Ø :Ò-°·±ÀÔ1JØ$Ü˜u T™{Ó+¨qÒ0Ø$ñ #+¨4£.Ø$(Ø$+Ü&)¬$¯*©*«,Ó&7ñ	#˜ð (˜RŸZ™ZÑ<°GÓ<Ø!#§¡¨LÕ!9Ø27¸±+×2CÑ2CÖ2E¡J D¨$Ø03·±ñ 9&ä13·±¸$¸x¹.Ó1IØ,.¨Q¨B°°°¨Fñ2*ç*+©!¯G©G«Ið26ó9&ó 1& Ið %'§H¡HÜ(-¯©Ø,7ð 4>ÀÑ3Eñ =EÀTÈ*ÑEUÔ<Vá5=¸d³^Ø=Fñ	-.ó)*õ
%&ñ 3F÷ ":÷ =Ñ<ñ !,÷S -ðV —Z‘Z ¨(´C¼¿
¹
»Ó4EÐ)FÕGØ&+¨JÑ&7×&=Ñ&=Ö&?™
˜˜dØŸ?™?¨8Ô4Ø$Ø$'§H¡Hñ -Ü,.¯H©H°T¸(±^Ó,DÀRÀaÀRÈÈ!ÈÀVÑ,L×,NÑ,N×,VÑ,VÔ,Xó-ó %˜	ð $0×#6Ñ#6°{À3Ñ7GÓ#H˜ØŸ™Ü!ŸM™MØ &à$.±¸¿¹À*ÈdÓ9SÓ0TØ$/°Ø$,¬c´$·*±*³,Ó.?Ø$0°$ð	!"ð '2ô	õñ '@÷ H÷[ P÷ /÷ 1ðR �V‰V�M 3Ô'¨1¬e¯m©m¸AÈÕ.PÐTVØ× Ñ Ô"à—‘˜O°:�Õ>ØS�Ø—‘Ü—M‘MØ&ØØ2Ø!ô	ô÷ ?÷ /Q×'ð  �F‰FÐ(¨#Ô.°!Ü�M‰M˜! gÕ.°"à× Ñ Ô"àÐYÐZˆEò
ˆEð —‘˜G¨5�Õ1Û"'‘J�C˜Ø—H‘HœUŸ]™]¨9ÀÐQVÔWÕXñ #(÷ 2÷% /÷ /÷y 
;ðf ×ÑÓÐ÷y &<Ñ%;ú÷ &=Ñ%<ú÷ "4Ñ!3ú÷ =Ñ<ú÷X ":Ñ!9ú÷ =Ñ<ú÷k -Ñ,ú÷V HÑGú÷[ PÑOú÷ /Ñ.ú÷ 1Ñ0ú÷X ?Ñ>ú÷ /QÑ.Pú×'Ñ'ú÷F 2Ð1ú÷% /Ð.ú÷ /Ð.ú÷y 
;ðf ×ÑÓÐúsª  Â^Â1\3Ã	'\&Ã0\	ÄA[?Å [Å2[ÆBZ1È[È/BZ>Ë[Ë	[ËA>[?Í[2Í!B([%Ð
[2Ð[?Ð7\	ÑC1\Õ\	Õ\&Õ\3Õ^Õ9]Ö$]Ö5+] 	× ]×(]×0^Ø
]?Ø",]3Ù2]'	Ú]3Ú	]?Ú^Ú1Z;Ú6[Ú>[Û[Û[Û[Û["Û[?Û%[/Û*[2Û2[<Û7[?Û?\	Ü\	Ü\Ü\	Ü\#Ü\&Ü&\0Ü+\3Ü3\=	Ü8^Ý ]
Ý]Ý]Ý]Ý]$	Ý^Ý']0Ý,]3Ý3]<Ý8]?Ý?^	Þ^Þ^#c                 ó  — t        j                  dt         j                  ¬«      }d| v rZt        j                  | d   j	                  «       t         j                  ¬«      j                  d«      j                  }||dd…dd…f<   |S )zç
    Extract a homogeneous transform from a dictionary.

    Parameters
    ------------
    attrib: dict, optionally containing 'transform'

    Returns
    ------------
    transform: (4, 4) float, homogeonous transformation
    rµ   )r   r‡   )rµ   r   Nr   )r   Úeyer   rÝ   rr   r   rÞ   )r   r‡   Úvaluess      r&   rc   rc   í  sp   € ô —‘�q¤§
¡
Ô+€IØ�fÑä—‘˜& Ñ-×3Ñ3Ó5¼R¿Z¹ZÔH×PÑPÐQWÓX×ZÑZˆØ"ˆ	�"�1�"�b�q�b�&ÑØÐr¤   )rY   rL   )r[   Ú3mf)ÚExceptionWrapper)T)rÊ   rÓ   rÌ   Úcollectionsr   Únumpyr   Ú r   r   Ú	constantsr   r   r'   r™   ÚZIP_DEFLATEDrð   rc   Únetworkxrh   ÚlxmlrY   Úcommonr[   Ú_three_loadersÚ_3mf_exportersÚBaseExceptionÚEÚ
exceptionsrõ   © r¤   r&   Ú<module>r     s›   ðÛ 	Û Û Ý #ã ç Ý Ý ò-ó`_ðD !%°'×2FÑ2FÐVWó Kò\ð,2ÛÝå*à˜XÐ&€NØ˜ZÐ(�NøØò 2Ý-àÑ-¨aÓ0Ð1€NØÑ-¨aÓ0Ð1…Nûð	2ús   ÁA  Á B	Á%BÂB	