
    ,jf                        d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
mZmZ d dlmZmZ d dlmZ d dlmZ d dlmZ ddlmZ dd	lmZmZmZmZ dd
lmZ ddlm Z m!Z! ddl"m#Z#m$Z$m%Z&m'Z'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z2m3Z3m4Z4 ddl5m6Z7 ddl8m9Z9m:Z:m;Z; eeedf         Z<ed         Z=ed         Z>dZ?d Z@ e@            ZAd ZB G d deC          ZDdS )    )reduce)
UnionOptionalListDictAnyoverloadTupleIteratorcastget_args)LiteralSelf)uuid1)warn)chain   )	Workplane)ShapeCompound
isSubshapecompound)Location)ColorMaterial)ConstraintKindConstraintSolverConstraintSpecUnaryConstraintKindBinaryConstraintKind)exportAssembly	exportCAFexportVTKJS
exportVRML
exportGLTFSTEPExportModeLiterals)
importStep	importXbf	importXml)_expression_grammar)	deprecateBiDictinstance_ofNSTEPXMLXBF)r/   r0   r1   GLTFVTKJSVRMLSTL/c                  8   ddl m} m}m}m}m}m}  | d                                          } | d                                          } | |||dz             t          d          	                    d          } |||dz             	                    d	          }	t          j	        d
          }
 | d           | d          z   | d          z   | d          z  	                    d          }| |||	z             z    |||z   |z   |
z             z   S )Nr   )r   Wordr   alphas	alphanumsDelimitedList@?_T)combinenametagselectorsolidsfacesedgesverticesselector_kind)	pyparsingr   r8   r   r9   r:   r;   suppress
PATH_DELIMset_results_name_selector_grammar)r   r8   r   r9   r:   r;   	SeparatorTagSeparatorNameTagSelectorSelectorTypes               K/DATA/AppData/hermes/venv/lib/python3.11/site-packages/cadquery/assembly.py_define_grammarrT   5   s                   %%''I73<<((**L=VY_%%z4  v 	 $vy3
'
'
8
8
?
?C 1*==H 	GGG,,,www/?/??''*BUBUU'' 
 	
(<#%
&
&	'
(9|+i7(B
C
C	D    c                 N    t          | t                    rt          |           n| S )z/
    Convert string to Material if needed.
    )
isinstancestrr   )materials    rS   _ensure_materialrZ   W   s&     ",Hc!:!:H8HHrU   c                      e Zd ZU dZeed<   eed<   ee         ed<   ee	         ed<   e
eef         ed<   eed<   ed          ed<   ed          ed	<   e
ed f         ed
<   ee         ed<   eeef         ed<   eeef         ed<   eeef         ed<   ee
eef                  ed<   	 	 	 	 	 	 dHdedee         dee         dee         dee	         dee
eef                  fdZdIdZe	 	 	 	 dJdd dee         dee         dee         deee	ef                  defd            Ze	 	 	 	 	 dKdedee         dee         dee         deee	ef                  dee
eef                  defd            Zd Zdedd fdZdedeeee         f         fdZdedeeef         fdZe	 dLdededededef
d            ZedLdedededefd             Ze	 dLd!ed"ed#ed$edededefd%            Ze	 dLd!ed"edededef
d&            Zdd'd(ZdMd*edefd+Z e            	 	 	 	 dNd.ed/ee          d0e!d1e"d2e"defd3            Z#	 	 	 	 dNd.ed/ee          d0e!d1e"d2e"defd4Z$e%d.edefd5            Z&e%dLd.ed6ee'         defd7            Z(e)dee         fd8            Z*de+eed f                  fd9Z,g fd:Z-	 	 	 dOdee         dee         dee         de+eeeeee         f                  fd;Z.de/fd<Z0d= Z1	 	 	 dOd>edee         dee         d?ee         dd f
d@Z2deded ef         fdAZ3dee         fdBZ4dede5fdCZ6deded ef         fdDZ7dE Z8dF Z9dG Z:dS )PAssemblyzQNested assembly of Workplane and Shape objects defining their relative positions.locr@   colorrY   metadataobjparentchildrenobjectsconstraints_subshape_names_subshape_colors_subshape_layers_solve_resultNc                    || _         |r|nt                      | _        |r|nt          t	                                | _        |r|nd| _        |r|nd| _        |r|ni | _        d| _	        g | _
        g | _        | j        | i| _        d| _        t                      | _        t                      | _        t                      | _        dS )aK  
        construct an assembly

        :param obj: root object of the assembly (default: None)
        :param loc: location of the root object (default: None, interpreted as identity transformation)
        :param name: unique name of the root object (default: None, resulting in an UUID being generated)
        :param color: color of the added object (default: None)
        :param material: material (for visual and/or physical properties) of the added object (default: None)
        :param metadata: a store for user-defined metadata (default: None)
        :return: An Assembly object.


        To create an empty assembly use::

            assy = Assembly(None)

        To create one constraint a root object::

            b = Workplane().box(1, 1, 1)
            assy = Assembly(b, Location(Vector(0, 0, 1)), name="root")

        N)r`   r   r]   rX   uuidr@   r^   rY   r_   ra   rb   rd   rc   rh   r,   re   rf   rg   selfr`   r]   r@   r^   rY   r_   s          rS   __init__zAssembly.__init__u   s    @ -338:: 1DDc$&&kk	#-UU
$,6$$,4"	4(!%xx & &rU   returnc                    |                      | j        | j        | j        | j        | j        | j                  }t          | j                  |_        t          | j	                  |_	        t          | j
                  |_
        | j        D ]e}|                                }||_        |j                            |           ||j        |j        <   |j                            |j                   f|S )z1
        Make a deep copy of an assembly
        )	__class__r`   r]   r@   r^   rY   r_   r,   rf   re   rg   rb   _copyra   appendrc   update)rl   rvchch_copys       rS   rq   zAssembly._copy   s    
 ^^Hdh	4:t}dm
 
 %T%:;;#D$899$T%:;;- 	/ 	/BhhjjGGNKw''''.BJw|$Jgo....	rU   c                     dS )a  
        Add a subassembly to the current assembly.

        :param obj: subassembly to be added
        :param loc: location of the root object (default: None, resulting in the location stored in
          the subassembly being used)
        :param name: unique name of the root object (default: None, resulting in the name stored in
          the subassembly being used)
        :param color: color of the added object (default: None, resulting in the color stored in the
          subassembly being used)
        N )rl   r`   r]   r@   r^   rY   s         rS   addzAssembly.add   s	    ( 	rU   c                     dS )a~  
        Add a subassembly to the current assembly with explicit location and name.

        :param obj: object to be added as a subassembly
        :param loc: location of the root object (default: None, interpreted as identity
          transformation)
        :param name: unique name of the root object (default: None, resulting in an UUID being
          generated)
        :param color: color of the added object (default: None)
        :param material: material (for visual and/or physical properties) of the added object
          (default: None)
        :param metadata: a store for user-defined metadata (default: None)
        Nrx   rk   s          rS   ry   zAssembly.add   s	    . 	rU   c                    t          |t                    r||                    d          r|d         n|j        }|| j        v rt          d| d          |                                }|                    d          r|d         n|j        |_        |                    d          r|d         n|j        |_        |                    d          r|d         n|j        |_        t          |                    d          r|d         n|j
                  |_
        |                    d          r|d         n|j        |_        | |_        | j                            |           | j                            |                                           nFd|v rt          |d                   |d<    | j        |fi |}| |_        |                     |           | S )z<
        Add a subassembly to the current assembly.
        r@   zUnique name is required. z is already in the assemblyr]   r^   rY   r_   )rW   r\   getr@   rc   
ValueErrorrq   r]   r^   rZ   rY   r_   ra   rb   rr   rs   _flattenrp   ry   )rl   argkwargsr@   subassyassys         rS   ry   zAssembly.add   s   
 c8$$ "	 &,ZZ%7%7E6&>>SXDt|## QQQQ   iikkG+1::e+<+<I&--#'GK-3ZZ-?-?M6&>>SXGL/5zz'/B/BQF7OO	GM/&,jj&<&<Nz""#,   G '-jj&<&<Nz""#,  "GNM  )))L 0 0 2 23333 V##%5fZ6H%I%Iz"!4>#0000DDKHHTNNNrU   c                 6   || j         vrt          d| d          | j         |         }|j        r|j        j                            |           | j         |= |                                                                D ]}|| j         v r| j         |= d|_        | S )aQ  
        Remove a part/subassembly from the current assembly.

        :param name: Name of the part/subassembly to be removed
        :return: The modified assembly

        *NOTE* This method can cause problems with deeply nested assemblies and does not remove
        constraints associated with the removed part/subassembly.
        zNo object with name 'z' found in the assemblyN)rc   r}   ra   rb   remover~   keys)rl   r@   	to_removedescendant_names       rS   r   zAssembly.remove  s     t|##RTRRRSSS L&	  	8%,,Y777 L  )113388:: 	2 	2O$,..L1  	rU   qc                 *   t                               |d          }|j        }| j        |         j        }t          |t                    r"|j        r|                    |j                  }nMt          |t          t          f          r"t                      
                    |          }nt          d          |j        r$ t          ||j                  |j                  }n|}|                                }|t          |t                    r|ndfS )a3  
        Execute a selector query on the assembly.
        The query is expected to be in the following format:

            name[?tag][@kind@args]

        valid example include:

            obj_name @ faces @ >Z
            obj_name?tag1@faces@>Z
            obj_name ? tag
            obj_name

        Tz2Workplane or Shape required to define a constraintN)_grammarparse_stringr@   rc   r`   rW   r   rA   
_getTaggedr   ry   r}   rB   getattrrG   val)rl   r   queryr@   r`   tmpresr   s           rS   _queryzAssembly._query;  s    & %%a..Jl4 $c9%% 	S%) 	S..++CCi/00 	S++//#&&CCQRRR> 	3'#u233ENCCCCCggiiJsE22<SS<<rU   c                    t                      }| j        |         }|}|| j        vrd|| ur`g }|j        | urD|                    |j                   t          t          |j                  }|j        }|j        | uDt          d |          }||fS )z
        Calculate relative location of an object in a subassembly.

        Returns the relative positions as well as the name of the top assembly.
        c                     || z  S Nrx   )l1l2s     rS   <lambda>z"Assembly._subloc.<locals>.<lambda>v  s
    rBw rU   )
r   rc   rb   ra   rr   r]   r   r\   r@   r   )rl   r@   rt   r`   name_outlocss         rS   _subloczAssembly._sublocc  s     ZZl4 dm##4DjD((CG$$$8SZ008 jD(( ..55BH~rU   q1q2kindparamc                     d S r   rx   )rl   r   r   r   r   s        rS   	constrainzAssembly.constrainz  	     	rU   c                     d S r   rx   )rl   r   r   r   s       rS   r   zAssembly.constrain  s    rU   id1s1id2s2c                     d S r   rx   )rl   r   r   r   r   r   r   s          rS   r   zAssembly.constrain  s	     	rU   c                     d S r   rx   )rl   r   r   r   r   s        rS   r   zAssembly.constrain  r   rU   )r   c                b   t          |          dk    r|\  }}|                     |          \  }}n-t          |          dk    r:t          |d         t                    r|\  }}}|                     |          \  }}nt          |          dk    r7|\  }}}|                     |          \  }}|                     |          \  }}	nt          |          dk    r8|\  }}}}|                     |          \  }}|                     |          \  }}	nKt          |          dk    r	|\  }}}}	}n/t          |          dk    r
|\  }}}}	}}nt	          d|           t          |t                    r/|                     |          \  }
}t          |f|f|
f||          }nqt          |t                    rJ|                     |          \  }
}|                     |          \  }}t          ||f||	f|
|f||          }nt	          d|           | j        	                    |           | S )	z*
        Define a new constraint.
              r            zIncompatible arguments: zUnknown constraint: )
lenr   r-   r   r}   r   
Constraintr    rd   rr   )rl   r   argsr   r   r   r   r   r   r   loc1id1_topcloc2id2_tops                  rS   r   zAssembly.constrain  s0    t99>>HBkk"ooGCYY!^^DG5H I I^"OBekk"ooGCYY!^^LBDkk"ooGCkk"ooGCYY!^^"&BD%kk"ooGCkk"ooGCYY!^^%)"CS"ddYY!^^,0)CS"dEE>>>??? t011 	< LL--MD'G:utgtUCCAA344 	< LL--MD' LL--MD'GW-Bx$tUSSAA:D::;;;"""rU   r   	verbosityc                 l    i d}g } j         D ]U}|j        D ]K}|vr
||<   |dz  }|j        dk    s| j        k    r%|         |vr|                    |                    LV|sHd  j         D             }d  j         D             }|D ]#}||vr|                    |                     n$|s|                    d            fdD             }	g }
 j         D ]R}t          fd|j        D                       }|                                }|D ]}|
                    ||f           S|
st          d          t                    d	k     rt          d
           	                                
                                j        }t          |	|
||          }|                    |          \  } _        t                      } j        r*t#          |          D ]\  }}| j        k    r	|j        } nt#          |          D ]%\  }}| j        k    r||z   j        |         _        & S )z(
        Solve the constraints.
        r   r   Fixedc                 \    g | ])}t          |j        t                    |j        d          *S r   )r-   r   r   rc   .0r   s     rS   
<listcomp>z"Assembly.solve.<locals>.<listcomp>  sA       qv':;;	!  rU   c                 \    g | ])}t          |j        t                    |j        d          *S r   )r-   r   r    rc   r   s     rS   r   z"Assembly.solve.<locals>.<listcomp>  sA       qv';<<	!  rU   c                 4    g | ]}j         |         j        S rx   )rc   r]   )r   nrl   s     rS   r   z"Assembly.solve.<locals>.<listcomp>  s"    222Q#222rU   c              3   (   K   | ]}|         V  d S r   rx   )r   r`   entss     rS   	<genexpr>z!Assembly.solve.<locals>.<genexpr>  s'      77cS	777777rU   z At least one constraint requiredr   z,At least two entities need to be constrained)lockedscale)rd   rc   r   r@   rr   tupletoPODsr}   r   
toCompoundBoundingBoxDiagonalLengthr   solverh   r   r`   zipinverser]   )rl   r   ir   r   r@   unary_objectsbinary_objectsbr   rd   ixspodspodr   solverlocs_newloc_root_invloc_newr   r   s   `                   @rS   r   zAssembly.solve  s    ! 	. 	.A	 . .t##!"DJFAFg%%):):AA  A  MM$t*---.  	 )  M
 )  N
 $  M))MM$q'***E *
  	MM!2222T222 ! 	/ 	/A7777QY77777C88::D / /""C:..../  	A?@@@ t99q==KLLL !!--//>!$F%PPP (.||I'>'>$$$
  zz8 	!(D11  
	>>#*?LE "
 h-- 	= 	=JGQDI~~&2W&<Q#rU   default皙?path
exportTypemode	toleranceangularTolerancec                 &     | j         |||||fi |S )  
        Save assembly to a file.

        :param path: Path and filename for writing.
        :param exportType: export format (default: None, results in format being inferred form the path)
        :param mode: STEP only - See :meth:`~cadquery.occ_impl.exporters.assembly.exportAssembly`.
        :param tolerance: the deflection tolerance, in model units. Only used for glTF, VRML. Default 0.1.
        :param angularTolerance: the angular tolerance, in radians. Only used for glTF, VRML. Default 0.1.
        :param \**kwargs: Additional keyword arguments.  Only used for STEP, glTF and STL.
            See :meth:`~cadquery.occ_impl.exporters.assembly.exportAssembly`.
        :param ascii: STL only - Sets whether or not STL export should be text or binary
        :type ascii: bool
        )export)rl   r   r   r   r   r   r   s          rS   savezAssembly.save  s3    0 t{*dI/?
 
CI
 
 	
rU   c                 
   |t          t                    vrt          d| d          |V|                    d          d                                         }|dv rt          t          |          }nt          d          |dk    rt          | ||fi | n|d	k    rt          | |           n|d
k    rt          | |d           n|dk    rt          | |||           n|dk    s|dk    rt          | |d||           n|dk    rt          | |           nk|dk    rSd}d|v r"t          |                    d                    }|                                                     ||||           nt          d|           | S )r   zUnknown assembly export mode z	 for STEPN.)r/   r0   r1   r4   r3   r2   GLBr5   1Unknown extension, specify export type explicitlyr/   r0   r1   T)binaryr4   r2   r   r3   r5   FasciizUnknown format: )r   r&   r}   splitupperr   ExportLiteralsr!   r"   r$   r%   r#   boolr|   r   	exportStl)	rl   r   r   r   r   r   r   texport_asciis	            rS   r   zAssembly.export2  s   0 x 67777LTLLLMMM

3#))++AQQQ!.!44

 !TUUU4t66v66665  dD!!!!5  dD.....6!!tT9.>????6!!Z5%8%8tT44DEEEE7""d####5   L&  #FJJw$7$788OO''i9I<XXXX<
<<===rU   c                 0    |                      |d          S )z
        Reads an assembly from a STEP file.

        :param path: Path and filename for reading.
        :return: An Assembly object.
        r/   )
importType)load)clsr   s     rS   r'   zAssembly.importStepl  s     xxx000rU   r   c                 R   |V|                     d          d                                         }|dv rt          t          |          }nt	          d           |             }|dk    rt          ||           n-|dk    rt          ||           n|dk    rt          ||           |S )	z(
        Load step, xbf or xml.
        Nr   r   r.   r   r/   r0   r1   )r   r   r   ImportLiteralsr}   _importStepr)   r(   )r   r   r   r   r   s        rS   r   zAssembly.loadw  s     

3#))++A***!.!44

 !TUUUsuud####5  dD!!!!5  dD!!!rU   c                     g }t          | j        t                    r	| j        g}n=t          | j        t                    r#d | j                                        D             }|S )z9
        List of Shape objects in the .obj field
        c                 <    g | ]}t          |t                    |S rx   rW   r   )r   els     rS   r   z#Assembly.shapes.<locals>.<listcomp>  s'    HHH*R2G2GH"HHHrU   )rW   r`   r   r   vals)rl   rt   s     rS   shapeszAssembly.shapes  s`     dh&& 	I(BB),, 	IHHtx}}HHHB	rU   c              #   j   K   | j         D ]}|                                D ]}|V  | j        | fV  dS )zA
        Yield (name, child) pairs in a bottom-up manner
        N)rb   traverser@   )rl   ru   r   s      rS   r  zAssembly.traverse  s[      
 - 	 	Bkkmm   y$rU   c                     i }| j         D ]4}|                    |                    || j        gz                        5| |t                              || j        gz             <   |S )za
        Generate a dict with all ancestors with keys indicating parent-child relations.
        )parents)rb   rs   r~   r@   rJ   join)rl   r  rt   ru   s       rS   r~   zAssembly._flatten  sl    
 - 	B 	BBIIbkk'TYK*?k@@AAAA59:??7di[0112	rU   c              #     K   |r| d| j          n| j         }|r
|| j        z  n| j        }| j        r| j        n|}| j        r\t	          | j        t
                    r| j        n4t          j        d | j                                        D                       |||fV  | j	        D ]}|
                    |||          E d{V   dS )zQ
        Assembly iterator yielding shapes, names, locations and colors.
        r6   c              3   D   K   | ]}t          |t                    |V  d S r   r   )r   ss     rS   r   z$Assembly.__iter__.<locals>.<genexpr>  sN       U UjE.B.BUU U U U U UrU   N)r@   r]   r^   r`   rW   r   r   makeCompoundr   rb   __iter__)rl   r]   r@   r^   ru   s        rS   r
  zAssembly.__iter__  s      )-;$$$$$$$) #1cDHnn"j3

e8 	 (599 $((x?T U U8==??U U U @ @S%        - 	5 	5B{{3e4444444444	5 	5rU   c                     | j         }|                    d | j        D                        t          j        |                              | j                  S )z
        Returns a Compound made from this Assembly (including all children) with the
        current Locations applied. Usually this method would only be used after solving.
        c              3   >   K   | ]}|                                 V  d S r   )r   )r   childs     rS   r   z&Assembly.toCompound.<locals>.<genexpr>  s.      EEeu''))EEEEEErU   )r   extendrb   r   r	  locater]   )rl   r   s     rS   r   zAssembly.toCompound  sO     EEt}EEEFFF$V,,33DH===rU   c                 H    ddl m}  ||                                           S )z3
        Jupyter 3D representation support
        r   )display)occ_impl.jupyter_toolsr  _repr_javascript_)rl   r  s     rS   r  zAssembly._repr_javascript_  s0    
 	433333wt}}..000rU   r  layerc                 @   t          fd| j        D                       r| }nUt          d           d}| j        D ](}t          fd|j        D                       r|}d} n)|st	           d          |r
||j        <   |r
||j        <   |r
||j        <   | S )aR  
        Handles name, color and layer metadata for subshapes.

        :param s: The subshape to add metadata to.
        :param name: The name to assign to the subshape.
        :param color: The color to assign to the subshape.
        :param layer: The layer to assign to the subshape.
        :return: The modified assembly.
        c              3   8   K   | ]}t          |          V  d S r   r   r   r`   r  s     rS   r   z'Assembly.addSubshape.<locals>.<genexpr>  s-      99cz!S!!999999rU   zlCurrent node does not contain any Shapes, searching in subnodes. In the future this will result in an error.Fc              3   8   K   | ]}t          |          V  d S r   r  r  s     rS   r   z'Assembly.addSubshape.<locals>.<genexpr>  s-      ??cz!S))??????rU   Tz6 is not a subshape of the current node or its children)anyr   r   rb   r}   re   rf   rg   )rl   r  r@   r^   r  r   foundru   s    `      rS   addSubshapezAssembly.addSubshape  s	   $ 9999T[99999 	DD~   Em  ????RY????? D EE
   PPP  
  	+&*D # 	-',D!!$ 	-',D!!$rU   c                     || j         v r| j         |         S || j        j        v r<| j        j        |         }t          |          dk    r|d         nt	          |          S t
          )z/
        [] based access to children.

        r   r   )rc   re   invr   r   KeyErrorrl   r@   rt   s      rS   __getitem__zAssembly.__getitem__  sf     4<<%%T)---%)$/BGGqLL2a55hrll:rU   c                     t          t          | j                                        | j        j                                                            S )z0
        IPython autocompletion helper.
        )listr   rc   r   re   r  rl   s    rS   _ipython_key_completions_z"Assembly._ipython_key_completions_  s<    
 E$,++--t/C/G/L/L/N/NOOPPPrU   c                 0    || j         v p|| j        j        v S r   )rc   re   r  )rl   r@   s     rS   __contains__zAssembly.__contains__%  s    t|#Gtt/C/G'GGrU   c                     || j         v r| j         |         S || j        j        v r<| j        j        |         }t          |          dk    r|d         nt	          |          S t          | d|            )z-
        . based access to children.
        r   r   z is not an attribute of )rc   re   r  r   r   AttributeErrorr   s      rS   __getattr__zAssembly.__getattr__)  s}    
 4<<%%T)---%)$/BGGqLL2a55hrll:DDdDDEEErU   c                     t          | j                  t          d | j        D                       z   t          | j        j                                                  z   S )z6
        Modified __dir__ for autocompletion.
        c              3   $   K   | ]}|j         V  d S r   )r@   )r   ru   s     rS   r   z#Assembly.__dir__.<locals>.<genexpr>=  s$      33r27333333rU   )r#  __dict__rb   re   r  r   r$  s    rS   __dir__zAssembly.__dir__6  sY     33T]3333344'+0022334	
rU   c                     | j         S )z:
        Explicit getstate needed due to getattr.
        r-  r$  s    rS   __getstate__zAssembly.__getstate__A  s    
 }rU   c                     || _         dS )z:
        Explicit setstate needed due to getattr.
        Nr0  )rl   ds     rS   __setstate__zAssembly.__setstate__H  s    
 rU   )NNNNNN)rn   r\   )NNNN)NNNNNr   r   )Nr   r   r   )NNN);__name__
__module____qualname____doc__r   __annotations__rX   r   r   r   r   r   AssemblyObjectsr   r   r,   r   rm   rq   r	   r   r   ry   r   r
   r   r   r   r   intr   r+   r   r&   floatr   r   classmethodr'   r   r   propertyr   r   r  r~   r
  r   r   r  r  r!  r%  r   r'  r*  r.  r1  r4  rx   rU   rS   r\   r\   ^   s        [[	MMM
IIIE?x    38n	Z    :#z/""""j!!!! E3J''''UE\****UCZ((((DcN++++  $"&"!%'+-10) 0)0) h0) sm	0)
 0) 8$0) 4S>*0) 0) 0) 0)d   .  #'"!%37  h sm	
  53/0 
   X*  #'"!%37-1  h sm	
  53/0 4S>* 
   X0) ) )V!3 !: ! ! ! !F&= &=c8E?&: ; &= &= &= &=PC E(C-$8    . CG &4=@	   X
  C ~ c T    X  	 		 	 		
 	 	 	 
	 	 	 X	 FJ !)7@C	   X
 &* ( ( ( ( (TT Ts T4 T T T Tl Y[[ 04'0"%
 

 ^,
 %	

 
  
 

 
 
 [
< 04'0"%8 88 ^,8 %	8
 8  8 
8 8 8 8t 1c 1d 1 1 1 [1   .)A d    [. U    X	 (5j#9: 	  	  	  	   "      #'"!%	5 5h5 sm5 	5
 
%sHhuo=>	?5 5 5 5,	>H 	> 	> 	> 	>1 1 1 #!%#- -- sm- 	-
 }- 
- - - -^ j%.?(@    Q49 Q Q Q QH H H H H HF Fj%.?(@ F F F F	
 	
 	
      rU   r\   )E	functoolsr   typingr   r   r   r   r   r	   r
   r   r   r   typing_extensionsr   r   rj   r   warningsr   	itertoolsr   cqr   occ_impl.shapesr   r   r   r   occ_impl.geomr   occ_impl.assemblyr   r   occ_impl.solverr   r   r   r   r   r    occ_impl.exporters.assemblyr!   r"   r#   r$   r%   r&   occ_impl.importers.assemblyr'   r   r(   r)   	selectorsr*   rL   utilsr+   r,   r-   r:  r   r   rJ   rT   r   rZ   objectr\   rx   rU   rS   <module>rN     s                                , + + + + + + +                         B B B B B B B B B B B B # # # # # # . . . . . . . .                             Y X X X X X X X X X ? ? ? ? ? ? 1 1 1 1 1 1 1 1 1 1 y$./-.MN

  > ?I I Io o o o ov o o o o orU   