
    v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      ZDy)    )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                     ddl m} m}m}m}m}m}  | d      j                         } | d      j                         } | |||dz         t        d      j                  d      } |||dz         j                  d	      }	t        j                  d
      }
 | d       | d      z   | d      z   | d      z  j                  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               >/DATA/.local/lib/python3.12/site-packages/cadquery/assembly.py_define_grammarrT   5   s      %%'I3<((*LVY_%z4v 	 vy3
'
8
8
?C 11*=H 	GG,,ww/??'*BUU' 
 	
<#%
&	'
9|+i7(B
C	D    c                 <    t        | t              rt        |       S | S )z/
    Convert string to Material if needed.
    )
isinstancestrr   )materials    rS   _ensure_materialrZ   W   s     ",Hc!:8HH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<   	 	 	 	 	 	 dEdedee   dee   dee   dee	   dee
eef      fdZdFdZe	 	 	 	 dGdd dee   dee   dee   deee	ef      defd       Ze	 	 	 	 	 dHd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	 dIdededededef
d       ZedIdedededefd        Ze	 dId!ed"ed#ed$edededefd%       Ze	 dId!ed"edededef
d&       Zdd'd(ZdJd)edefd*Z e       	 	 	 	 dKd+ed,ee    d-e!d.e"d/e"defd0       Z#	 	 	 	 dKd+ed,ee    d-e!d.e"d/e"defd1Z$e%d+edefd2       Z&e%dId+ed3ee'   defd4       Z(e)dee   fd5       Z*de+eed f      fd6Z,g fd7Z-	 	 	 dLdee   dee   dee   de+eeeeee   f      fd8Z.de/fd9Z0d: Z1	 	 	 dLd;edee   dee   d<ee   dd f
d=Z2deded ef   fd>Z3dee   fd?Z4dede5fd@Z6deded ef   fdAZ7dB Z8dC Z9dD Z:y)M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                 j   || _         |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               | _        y)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    @ 38: Dc$&k	#U
$,$$,"		4(!%x & &rU   returnc                 H   | j                  | j                  | j                  | j                  | j                  | j
                  | j                        }t        | j                        |_        t        | j                        |_	        t        | j                        |_
        | j                  D ]r  }|j                         }||_        |j                  j                  |       ||j                  |j                  <   |j                  j!                  |j                         t |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    
 ^^HHdhh		4::t}}dmm
 %T%:%:;#D$8$89$T%:%:;--BhhjGGNKKw''.BJJw||$JJgoo.   	rU   c                      y)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                      y)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                 x   t        |t              rh|j                  d      r|d   n|j                  }|| j                  v rt        d| d      |j                         }|j                  d      r|d   n|j                  |_        |j                  d      r|d   n|j                  |_        |j                  d      r|d   n|j                  |_        t        |j                  d      r|d   n|j                        |_
        |j                  d      r|d   n|j                  |_        | |_        | j                  j                  |       | j                  j                  |j!                                | S d|v rt        |d         |d<    | j"                  |fi |}| |_        | j%                  |       | 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%76&>SXXDt||# /v5PQ  iikG+1::e+<&-#''GK-3ZZ-?6&>SXXGL/5zz'/BF7O		GM/&,jj&<z"#,, G '-jj&<z"#,,  "GNMM  )LL 0 0 23  V#%5fZ6H%Iz"!4>>#00DDKHHTNrU   c                 f   || j                   vrt        d| d      | j                   |   }|j                  r%|j                  j                  j	                  |       | j                   |= |j                         j                         D ]  }|| j                   v s| 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||#4TF:QRSS LL&	 %%,,Y7 LL  )11388:O$,,.LL1  ;
  	rU   qc                    t         j                  |d      }|j                  }| j                  |   j                  }t        |t              r(|j                  r|j                  |j                        }n;t        |t        t        f      rt               j                  |      }nt        d      |j                  r' t        ||j                        |j                        }n|}|j                         }|t        |t              r|fS 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.JJll4 $$c9%%))..+Ci/0+//#&CQRR>>3'#u223ENNCCCggiJsE2S<<<<rU   c                 >   t               }| j                  |   }|}|| j                  vrq|| urmg }|j                  | urP|j	                  |j
                         t        t        |j                        }|j                  }|j                  | urPt        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    rBwrU   )
r   rc   rb   ra   rr   r]   r   r\   r@   r   )rl   r@   rt   r`   name_outlocss         rS   _subloczAssembly._sublocc  s     Zll4 dmm#4DjjD(CGG$8SZZ088 jjD( .5BH~rU   q1q2kindparamc                      y r   rx   )rl   r   r   r   r   s        rS   	constrainzAssembly.constrainz       	rU   c                      y r   rx   )rl   r   r   r   s       rS   r   zAssembly.constrain  s    rU   id1s1id2s2c                      y r   rx   )rl   r   r   r   r   r   r   s          rS   r   zAssembly.constrain  s     	rU   c                      y r   rx   )rl   r   r   r   r   s        rS   r   zAssembly.constrain  r   rU   )r   c                   t        |      dk(  r|\  }}| j                  |      \  }}nt        |      dk(  r.t        |d   t              r|\  }}}| j                  |      \  }}nt        |      dk(  r/|\  }}}| j                  |      \  }}| j                  |      \  }}	n{t        |      dk(  r0|\  }}}}| j                  |      \  }}| j                  |      \  }}	n=t        |      dk(  r	|\  }}}}	}n&t        |      dk(  r
|\  }}}}	}}nt	        d|       t        |t              r'| j                  |      \  }
}t        |f|f|
f||      }n\t        |t              r>| j                  |      \  }
}| j                        \  }}t        ||f|	f|
|f||      }nt	        d|       | j                  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  s    t9>HBkk"oGCY!^DG5H I"OBekk"oGCY!^LBDkk"oGCkk"oGCY!^"&BD%kk"oGCkk"oGCY!^%)"CS"dY!^,0)CS"dE7v>?? t01 LL-MD'G:utgtUCA34 LL-MD' LL-MD'GW-Bx$tUSA3D6:;;"rU   	verbosityc                 f   i d}g }| j                   D ]\  }|j                  D ]K  }|vr
||<   |dz  }|j                  dk(  s|| j                  k(  s0|   |vs8|j	                  |          M ^ |s| j                   D cg c]+  }t        |j                  t              r|j                  d   - }}| j                   D cg c]+  }t        |j                  t              r|j                  d   - }}|D ]  }||vs|j	                  |           n |s|j	                  d       D 	cg c]  }	| j                  |	   j                   }
}	g }| j                   D ]J  }t        fd|j                  D              }|j                         }|D ]  }|j	                  ||f        L |st        d      t              dk  rt        d      | j                         j                         j                  }t!        |
|||      }|j#                  |      \  }| _        t'               }| j(                  r1t+        |      D ]"  \  }}	|	| j                  k(  s|j,                  } n t+        |      D ],  \  }}	|	| j                  k7  s||z  | j                  |	   _        . | S c c}w c c}w c c}	w )	z(
        Solve the constraints.
        r   r   Fixedc              3   (   K   | ]	  }|     y wr   rx   ).0r`   entss     rS   	<genexpr>z!Assembly.solve.<locals>.<genexpr>  s     7YcS	Ys   z At least one constraint requiredr   z,At least two entities need to be constrained)lockedscale)rd   rc   r   r@   rr   r-   r   r    r]   tupletoPODsr}   r   
toCompoundBoundingBoxDiagonalLengthr   solverh   r   r`   zipinverse)rl   r   ir   r   r@   unary_objectsbinary_objectsbnr   rd   ixspodspodr   solverlocs_newloc_root_invloc_newr   s                       @rS   r   zAssembly.solve  s    !!A		t#!"DJFAFFg%):AA  MM$t*- " "  )))Aqvv':; 		!)   )))Aqvv';< 		!)  
 $M)MM$q'* $ MM!-12TQ##T2 !!A7QYY77C88:D""C:. 	 " ?@@ t9q=KLL !--/>>!$F%P (.||I'>$$$
  z88!(D1
		>#*??L 2 h-JGQDII~&2W&<Q# . {
 3s   0J$0J)- J.path
exportTypemode	toleranceangularTolerancec                 0     | 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  s+    0 t{{*dI/?
CI
 	
rU   c                 x   |t        t              vrt        d| d      |B|j                  d      d   j	                         }|dv rt        t        |      }nt        d      |dk(  rt        | ||fi | | S |d	k(  rt        | |       | S |d
k(  rt        | |d       | S |dk(  rt        | |||       | S |dk(  s|dk(  rt        | |d||       | S |dk(  rt        | |       | S |dk(  rDd}d|v rt        |j                  d            }| j                         j                  ||||       | S t        d|       )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<TF)LMM

3#))+AQQ!.!4
 !TUU4t6v6* ) 5 dD!& % 5 dD." ! 6!tT9.>?  6!Z5%8tT44DE  7"d#  5  L& #FJJw$78OO''i9I<X  /
|<==rU   c                 (    | j                  |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0rU   r   c                 
   |B|j                  d      d   j                         }|dv rt        t        |      }nt	        d       |        }|dk(  rt        ||       |S |dk(  rt        ||       |S |dk(  rt        ||       |S )z(
        Load step, xbf or xml.
        r   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
 !TUUud#  5 dD!  5 dD!rU   c                 
   g }t        | j                  t              r| j                  g}|S t        | j                  t              r8| j                  j	                         D cg c]  }t        |t              s| }}|S c c}w )z9
        List of Shape objects in the .obj field
        )rW   r`   r   r   vals)rl   rt   els      rS   shapeszAssembly.shapes  sk     dhh&((B 	 ),#xx}}H*R2G"BH	 Is   "B 8B c              #      K   | j                   D ]  }|j                         D ]  }|   | j                  | f yw)zA
        Yield (name, child) pairs in a bottom-up manner
        N)rb   traverser@   )rl   ru   r   s      rS   r   zAssembly.traverse  s<     
 --Bkkm $   yy$s   <>c                     i }| j                   D ]1  }|j                  |j                  || j                  gz                3 | |t        j                  || 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  s^    
 --BIIbkk'TYYK*?k@A   6::??7dii[0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                  n3t        j                  d | j                  j                         D              |||f | j                  D ]  }|j                  |||      E d{     y7 w)zQ
        Assembly iterator yielding shapes, names, locations and colors.
        r6   c              3   B   K   | ]  }t        |t              s|  y wr   )rW   r   )r   ss     rS   r   z$Assembly.__iter__.<locals>.<genexpr>  s      U*ajE.B?s   N)r@   r]   r^   r`   rW   r   r   makeCompoundr   rb   __iter__)rl   r]   r@   r^   ru   s        rS   r   zAssembly.__iter__  s      )-$q$$)) #cDHHn"jj

e88(59$((x?T?T U88==?U @S%    --B{{3e444  4s   C(C4*C2+C4c                     | j                   }|j                  d | j                  D               t        j                  |      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   | ]  }|j                           y wr   )r   )r   childs     rS   r   z&Assembly.toCompound.<locals>.<genexpr>  s     E}eu'')}s   )r   extendrb   r   r   locater]   )rl   r   s     rS   r   zAssembly.toCompound  sC     Et}}EF$$V,33DHH==rU   c                 :    ddl m}  ||       j                         S )z3
        Jupyter 3D representation support
        r   )display)occ_impl.jupyter_toolsr  _repr_javascript_)rl   r  s     rS   r	  zAssembly._repr_javascript_  s    
 	4t}..00rU   r   layerc                 T   t        fd| j                  D              r| }nRt        d       d}| j                  D ]&  }t        fd|j                  D              s"|}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   6   K   | ]  }t        |        y wr   r   r   r`   r   s     rS   r   z'Assembly.addSubshape.<locals>.<genexpr>  s     9[cz!S![   zlCurrent node does not contain any Shapes, searching in subnodes. In the future this will result in an error.Fc              3   6   K   | ]  }t        |        y wr   r  r  s     rS   r   z'Assembly.addSubshape.<locals>.<genexpr>  s     ?Ycz!S)Yr  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    $ 9T[[99D~ Emm?RYY??D E	 $  cOP 
 &*D  #',D!!!$',D!!!$rU   c                     || j                   v r| j                   |   S || j                  j                  v r7| j                  j                  |   }t        |      dk(  r|d   S t	        |      S t
        )z/
        [] based access to children.

        r   r   )rc   re   invr   r   KeyErrorrl   r@   rt   s      rS   __getitem__zAssembly.__getitem__  sk     4<<<<%%T))---%%))$/BGqL2a5:hrl:rU   c                     t        t        | j                  j                         | j                  j
                  j                                     S )z0
        IPython autocompletion helper.
        )listr   rc   r   re   r  rl   s    rS   _ipython_key_completions_z"Assembly._ipython_key_completions_  s8    
 E$,,++-t/C/C/G/G/L/L/NOPPrU   c                 R    || j                   v xs || j                  j                  v S r   )rc   re   r  )rl   r@   s     rS   __contains__zAssembly.__contains__%  s'    t||#Gtt/C/C/G/G'GGrU   c                     || j                   v r| j                   |   S || j                  j                  v r7| j                  j                  |   }t        |      dk(  r|d   S 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GqL2a5:hrl:v%=dVDEErU   c                     t        | j                        t        d | j                  D              z   t        | j                  j                  j                               z   S )z6
        Modified __dir__ for autocompletion.
        c              3   4   K   | ]  }|j                     y wr   )r@   )r   ru   s     rS   r   z#Assembly.__dir__.<locals>.<genexpr>=  s     3]r277]s   )r  __dict__rb   re   r  r   r  s    rS   __dir__zAssembly.__dir__6  sN     3T]]3344''++002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                     || _         y)z:
        Explicit setstate needed due to getattr.
        Nr'  )rl   ds     rS   __setstate__zAssembly.__setstate__H  s    
 rU   )NNNNNN)rn   r\   )NNNN)NNNNNr   )r   )Ndefault皙?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%  r(  r+  rx   rU   rS   r\   r\   ^   s$   [	M
IE?x  38n	Z  :#z/""j!! E3J''UE\**UCZ((DcN++  $"&"!%'+-10)0) h0) sm	0)
 0) 8$0) 4S>*0)d.  #'"!%37 h sm	
  53/0 
 *  #'"!%37-1 h sm	
  53/0 4S>* 
 0)V!3 !: !F&= &=c8E?&: ; &=PC E(C-$8 . CG&4=@	 
 C ~ c T    		 	 		
 	 	 	 
	 	 FJ!)7@C	 
 &* (TTs T4 Tl [ 04'0"%

 ^,
 %	

 
  
 

 
< 04'0"%88 ^,8 %	8
 8  8 
8t 1c 1d 1 1  .)A d  . U  	 (5j#9: 	   "   #'"!%	5h5 sm5 	5
 
%sHhuo=>	?5,	>H 	>1 #!%#-- sm- 	-
 }- 
-^ j%.?(@ Q49 QH H HF Fj%.?(@ 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-   r3  r   r   rJ   rT   r   rZ   objectr\   rx   rU   rS   <module>rG     s       ,     B B # .   Y X ? 1 1 y$./-.MN

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