§
    €¤âj¥(  ã                   ó  — d Z ddlZddlZddlZddlZddlmZ ddlZddl	Z	ddl
Z
ddlmZ ddlmZ ddlmZ ddlmZ ej                             d e ee¦  «        j        ¦  «        ¦  «         ddlmZmZmZmZmZ ddlZdd	lm Z  dd
l!m"Z"m#Z#m$Z$ ddl%m&Z&m'Z' ddl(m)Z) d\  Z*Z+Z,Z-d\  Z.Z/Z0d\  Z1Z2g d¢Z3eej4         5                    dd¦  «        z  Z6g d¢Z7e j8        Z9i Z:d„ Z;d„ Z<d„ Z=d„ Z>d„ Z?dd„Z@d„ ZAeBdk    r eA¦   «          dS dS )a  Momentum: a long track keeps going through a disturbance that only adds something to one side, and what it adds goes to
the track it touches. After tracking, before the cut rule (swapped in at split_by_fit; tracking, Fourier and the cut rule
unchanged; no package change):

1. Each solid track of at least MIN_TRACK layers is fitted along the height with a low-degree polynomial (DEG, on its
   rings' coefficients, start points by continuity), and refitted on the layers it follows (shape miss under TAU layer
   heights), ITER times. The layers it does not follow are disturbed; the clean body there is interpolated (PCHIP per
   coefficient) from the undisturbed layers on either side (the momentum from below and above).
2. At a disturbed layer, if the ring is the clean ring plus an outward lobe (the clean ring lies inside the ring but for
   OUT_FRAC of its area, and the ring's largest piece outside the clean ring holds LOBE_FRAC of its area), the track's ring
   becomes ring AND clean ring, and the lobe (that piece, widened by OVERLAP layer heights into the body, within the ring)
   is peeled off; a lobe reaches MIN_DEPTH layer heights out and meets the clean ring along at most MAX_CONTACT of its
   perimeter (a band all around is not one). The decoder takes the union of overlapping solid parts.
3. A run of peeled layers is attached to the track it touches: one that starts on the layer after the run (or ends on the
   layer before it) with a ring there that meets the run's last (first) lobe; with none, the lobes are a part of their own.
Meshes only, default N, M, KAPPA. Writes ../report/momentum.csv and renders ../report/img/momentum_<object>_<config>_a<atoms>.png.

    env -u PYTHONPATH PYTHONWARNINGS=ignore .venv/bin/python ~/code/data/meshes/fcp_2810_partition/scripts/momentum.py [objects...]
é    N)ÚPath)Ú	chebyshev)ÚPchipInterpolator©ÚPolygon)Úorient)ÚDEVICEÚOBJÚREPORTÚUPÚRef)Ú_parts)ÚLHÚ
miss_batchÚ
worst_miss)ÚIMGÚrender)Úrings)é   é
   g      à?é   )g¸…ëQ¸ž?g{®Gázt?g      ø?)g       @gš™™™™™Ù?)é   é   é   ÚFCP_OUTzmomentum.csv)ÚobjectÚconfigÚatomsÚpartsÚpeeledÚworst_lhÚover_025ÚchamferÚp95Ún_meanÚn_over30Úsecondsc                 ó\   — t          | ¦  «        }|j        r|n|                     d¦  «        S )Nr   )r   Úis_validÚbuffer)ÚPÚgs     úB/home/joao/code/data/meshes/fcp_2810_partition/scripts/momentum.pyÚpolyr.   4   s(   € Ý�‰
Œ
€AØ”
Ð+ˆ1ˆ1 §¢¨¡¤Ð+ó    c                 ó¦   — | j         rd S t          | d¦  «        rt          | j        ¦  «        n| g}d„ |D ¦   «         }|rt	          |d„ ¬¦  «        nd S )NÚgeomsc                 ó(   — g | ]}|j         d k    ¯|‘ŒS r   )Ú	geom_type©Ú.0Úps     r-   ú
<listcomp>zlargest.<locals>.<listcomp>=   s$   € Ð:Ð:Ð:�1 ¤°	Ò!9Ð!9ˆQÐ!9Ð!9Ð!9r/   c                 ó   — | j         S ©N©Úarea)r6   s    r-   ú<lambda>zlargest.<locals>.<lambda>>   s   €  A¤F€ r/   )Úkey)Úis_emptyÚhasattrÚlistr1   Úmax)r,   r   s     r-   ÚlargestrB   9   sg   € Ø„zð ØˆtÝ$ Q¨Ñ0Ô0Ð9�D�”‰MŒMˆM°q°c€EØ:Ð:˜Ð:Ñ:Ô:€EØ/4Ð>�3ˆuÐ*Ð*Ð+Ñ+Ô+Ð+¸$Ð>r/   c                 ó2  — g }| D ]U}t          ||rdnd¦  «        }|                     t          j        |j        j        t          ¦  «        dd…         ¦  «         ŒVt          j        |t          j	        |dz
  dz  ¦  «         
                    t          ¦  «        S )zTFourier coefficients (R, 2, K) of shapely polygons, oriented like the track's rings.g      ð?g      ð¿Néÿÿÿÿé   é   )r   ÚappendÚnpÚasarrayÚexteriorÚcoordsÚfloatr   Ú_ring_coeffsÚ	N_SAMPLESÚastype)ÚpolysÚKÚccwÚarrsr6   s        r-   Ú	coeffs_ofrT   A   s‹   € à€DØð ?ð ?ˆÝ�1˜SÐ*�c�c dÑ+Ô+ˆØ�Š•B”J˜qœzÔ0µ%Ñ8Ô8¸¸"¸Ô=Ñ>Ô>Ð>Ð>ÝÔ˜t¥VÔ%5¸¸A¹À!±|ÑDÔD×KÒKÍEÑRÔRÐRr/   c                 óN  ‡— t          ˆfd„t          j        | j        j        ¦  «        ddd…         D ¦   «         ¦  «        }|                      dt          z  ¦  «                             ‰j        ¦  «        j        }|t          t          z  k    o|t          ‰j        j        z  k    S )zÁSomething sticking out locally, not a band around the ring: it reaches MIN_DEPTH layer heights beyond the clean
    ring, and it meets the clean ring along at most MAX_CONTACT of its perimeter.c              3   óp   •K  — | ]0}‰j                              t          j        |¦  «        ¦  «        V — Œ1d S r9   )rJ   ÚdistanceÚshapelyÚPoint)r5   ÚcÚcleans     €r-   ú	<genexpr>zis_lobe.<locals>.<genexpr>M   s=   øè è € ÐgÐg¸a�”×'Ò'­¬°aÑ(8Ô(8Ñ9Ô9ÐgÐgÐgÐgÐgÐgr/   Nr   ç      Ð?)rA   rH   rI   rJ   rK   r*   r   ÚintersectionÚlengthÚ	MIN_DEPTHÚMAX_CONTACT)Úlbr[   ÚdepthÚcontacts    `  r-   Úis_lobere   J   s�   ø€ õ ÐgÐgÐgÐgÅ2Ä:ÈbÌkÔN`ÑCaÔCaÐbeÐbeÐdeÐbeÔCfÐgÑgÔgÑgÔg€EØ�iŠi˜�r™	Ñ"Ô"×/Ò/°´Ñ?Ô?ÔF€GØ•I¥‘NÒ"ÐU wµ+ÀÄÔ@UÑ2UÒ'UÐUr/   c                 ó  — | j         \  }}}t          j        | |¦  «        }|                     |d¦  «        }t          j        |¦  «        }t          j        |t          t          |dz
  ¦  «        ¦  «        }t          j
        |t          ¦  «        }	t          | ¦  «        }
t          t          ¦  «        D ]µ}t          j                             ||	         ||	         d¬¦  «        ^}}||z                       |d|¦  «        }t#          |
t          |¦  «        ¦  «        t$          z  }|t&          k    }|                     ¦   «         t          dz   k     st          j        ||	¦  «        r n|}	Œ¶t          j        |¦  «        }|	                     ¦   «         dk    rs|	                      ¦   «         r^|                     ¦   «         } t3          ||	         ||	         dd¬¦  «        ||	          ¦  «        ||	 <   |                     |d|¦  «        }||	 fS )	zfThe track's clean body: its rings' coefficients fitted along the height on the layers the fit follows.rD   rE   N)ÚrcondrF   r   T)ÚaxisÚextrapolate)Úshaper   Úcontinuous_startÚreshapeÚcell_uÚnpchebÚ
chebvanderÚminÚDEGrH   ÚonesÚboolr   ÚrangeÚITERÚlinalgÚlstsqr   r   ÚTAUÚsumÚarray_equalÚarangeÚanyÚcopyr   )ÚCÚAÚnÚ_rQ   ÚCnÚXÚuÚVÚokÚRÚcoefÚFÚmissÚnewÚidxÚFxs                    r-   Ú	clean_fitrŽ   R   s»  € àŒg�G€A€qˆ!Ý	Ô	   AÑ	&Ô	&€BØ
�
Š
�1�bÑÔ€AÝŒ�aÑÔ€AÝÔ˜!�S¥ a¨!¡e™_œ_Ñ-Ô-€AÝ	Œ�•DÑ	Ô	€BÝˆa‰Œ€AÝ•4‰[Œ[ð ð ˆÝ”9—?’? 1 R¤5¨!¨B¬%°t�?Ñ<Ô<ˆˆˆqØ�‰X×Ò˜q ! QÑ'Ô'ˆÝ˜!�U 1™XœXÑ&Ô&­Ñ+ˆØ•cŠkˆØ�7Š7‰9Œ9•s˜Q‘wÒÐ¥"¤.°°bÑ"9Ô"9ÐØˆEØˆˆõ Œ)�A‰,Œ,€CØ	‡v‚v�x„x�1‚}€}˜2˜#Ÿš™œ€}Ø�VŠV‰XŒXˆØMÕ# C¨¤G¨Q¨r¬U¸ÈÐMÑMÔMÈcÐSUÐRUÌhÑWÔWˆˆBˆ3‰Ø�JŠJ�q˜!˜QÑÔˆØˆrˆcˆ6€Mr/   c           
      óB  ‡$— d„ | D ¦   «         } d„ |D ¦   «         }d„ |D ¦   «         }|r|d         j         d         nd}d}g }t          t          t          | ¦  «        t          |¦  «        t          |¦  «        ¦  «        ¦  «        D �]é\  }	\  }
}}|
d         dk     st	          |¦  «        t
          k     rŒ/t          |t          j        |¦  «        ¦  «        \  }}t          |¦  «        t          |¦  «        }}t          j
        |dd d …df         t          j        |dd d …df         d¦  «        z  t          j        |dd d …df         d¦  «        |dd d …df         z  z
  ¦  «        dk    }d }i Š$t          t	          |¦  «        ¦  «        D �]g}d }||         �rt          ||         ¦  «        t          ||         ¦  «        }}|                     |¦  «        j        t           |j        z  k    r¼t#          |                     |¦  «        ¦  «        }|�˜|j        t$          |j        z  k    r€t'          ||¦  «        rpt#          |                     |¦  «        ¦  «        }t#          |                     t,          t.          z  ¦  «                             |¦  «        ¦  «        }|�|€d }n|‰$|<   |�-|€|	|
d	         |z   g f}|d                              |¦  «         �ŒN|�|                     |¦  «         d }�Œi|�|                     |¦  «         ‰$rbt3          ‰$¦  «        }t5          ˆ$fd
„|D ¦   «         ||¦  «        ||	         |<   |D ]}‰$|         j        ||	         |<   Œ|t	          |¦  «        z  }�Œë|D �]p\  }	}}|t	          |¦  «        z   dz
  }t          ||	         d d…         ¦  «        d         }t          j
        |d d …df         t          j        |d d …df         d¦  «        z  t          j        |d d …df         d¦  «        |d d …df         z  z
  ¦  «        dk    }t5          |||¦  «        }d„ |D ¦   «         }d} t          t          | |¦  «        ¦  «        D �],\  }!\  }"}#|!|	k    s|"d         dk     rŒ|"d	         |dz   k    ryt          t          |#d d…         ¦  «        d         ¦  «                             |d         ¦  «        r6t          j        |||!         g¦  «        ||!<   |||!         z   ||!<   ||"d	<   d}  nŠ|"d         |dz
  k    ryt          t          |#dd …         ¦  «        d         ¦  «                             |d         ¦  «        r6t          j        ||!         |g¦  «        ||!<   ||!         |z   ||!<   ||"d<   d}  n�Œ.| sVt	          |¦  «        dk    rC|                      d||dœ¦  «         |                     |¦  «         |                     |¦  «         �Œr|t:          d<   d„ |D ¦   «         t:          d<   t=          | d„ |D ¦   «         ||||¦  «        S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS © )Údictr4   s     r-   r7   z"momentum_split.<locals>.<listcomp>n   ó   € Ð$Ð$Ð$˜�T�!‰WŒWÐ$Ð$Ð$r/   c                 óf   — g | ].}t          j        |t          ¦  «                             ¦   «         ‘Œ/S r‘   )rH   rI   rL   r}   )r5   r~   s     r-   r7   z"momentum_split.<locals>.<listcomp>o   s0   € Ð:Ð:Ð:¨a�bŒj˜�EÑ"Ô"×'Ò'Ñ)Ô)Ð:Ð:Ð:r/   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r‘   )r@   )r5   Úas     r-   r7   z"momentum_split.<locals>.<listcomp>p   r“   r/   r   rF   rE   ÚsignrD   Úh0c                 ó    •— g | ]
}‰|         ‘ŒS r‘   r‘   )r5   ÚjÚnew_bodys     €r-   r7   z"momentum_split.<locals>.<listcomp>”   s   ø€ Ð&?Ð&?Ð&?°q x°¤{Ð&?Ð&?Ð&?r/   c                 ó   — g | ]	}|j         ‘Œ
S r‘   r:   )r5   rb   s     r-   r7   z"momentum_split.<locals>.<listcomp>ž   s   € Ð&Ð&Ð&˜"ˆbŒgÐ&Ð&Ð&r/   FTÚh1)r—   r˜   r�   r    c                 óD   — g | ]\  }}}||t          |¦  «        z   d z
  f‘ŒS )rE   )Úlen)r5   r�   r˜   rb   s       r-   r7   z"momentum_split.<locals>.<listcomp>´   s2   € Ð@Ð@Ð@©i¨a°°R�B˜�S ™WœW™ qÑ(Ð)Ð@Ð@Ð@r/   Úrunsc                 óL   — g | ]!}|                      t          j        ¦  «        ‘Œ"S r‘   )rO   r   r‰   )r5   rZ   s     r-   r7   z"momentum_split.<locals>.<listcomp>µ   s&   € Ð=Ð=Ð=°˜!Ÿ(š(¥6¤8Ñ,Ô,Ð=Ð=Ð=r/   )rj   Ú	enumerateÚzipr@   rŸ   Ú	MIN_TRACKrŽ   rH   rI   r   ry   Úrollrt   r.   Ú
differencer;   ÚOUT_FRACrB   Ú	LOBE_FRACre   r^   r*   ÚOVERLAPr   rG   ÚsortedrT   Ú
intersectsÚconcatenateÚLOGÚ_split)%r   ÚcoeffsÚareasÚMÚtolÚfollowsrQ   Úpeeled_totalr    Útr6   r~   r   r‰   Úbadr‡   ÚRfrR   Úrunrš   ÚlobeÚringr[   rb   ÚbodyÚjsr˜   Úlobesr�   ÚR0ÚLÚLaÚdoneÚqÚpqÚCqr›   s%                                       @r-   Úmomentum_splitrÅ   m   s3  ø€ Ø$Ð$˜eÐ$Ñ$Ô$€EØ:Ð:°6Ð:Ñ:Ô:€FØ$Ð$˜eÐ$Ñ$Ô$€EØ$Ð+ˆˆqŒ	Œ˜ÔÐ¨!€AØ€LØ€DÝ!¥#¥d¨5¡k¤kµ4¸±<´<ÅÀeÁÄÑ"MÔ"MÑNÔNð #$ñ #$‰ˆ‰9ˆAˆq�!ØˆVŒ9�qŠ=ˆ=�C ™FœF¥YÒ.Ð.ØÝ˜1�bœj¨™mœmÑ,Ô,‰ˆˆ3Ý�a‘”�% ™(œ(ˆ2ˆÝŒf�Q�q˜!˜!˜!˜Q�w”Z¥"¤'¨!¨A¨q¨q¨q°!¨G¬*°bÑ"9Ô"9Ñ9½B¼GÀAÀaÈÈÈÈAÀgÄJÐPRÑ<SÔ<SÐVWÐXYÐ[\Ð[\Ð[\Ð^_ÐX_ÔV`Ñ<`Ñ`ÑaÔaÐdeÒeˆØˆØˆÝ•s˜1‘v”v‘”ð 	ñ 	ˆAØˆDØ�1Œvñ 
/Ý" 1 Q¤4™jœj­$¨r°!¬u©+¬+�e�Ø×#Ò# DÑ)Ô)Ô.µ(¸U¼ZÑ2GÒGÐGÝ  §¢°Ñ!7Ô!7Ñ8Ô8�BØ�~¨"¬'µYÀÄÑ5JÒ*JÐ*JÍwÐWYÐ[`ÑOaÔOaÐ*JÝ& t×'8Ò'8¸Ñ'?Ô'?Ñ@Ô@˜Ý& r§y¢yµ½2±Ñ'>Ô'>×'KÒ'KÈDÑ'QÔ'QÑRÔR˜Ø˜<¨4¨<Ø#'˜D˜Dà*.˜H Q™KØÐØ�;Ø˜a œg¨™k¨2Ð.�CØ�A”—’˜dÑ#Ô#Ð#Ñ#Ø�Ø—’˜CÑ Ô Ð Ø�ùØˆ?Ø�KŠK˜ÑÔÐØð 	$Ý˜Ñ!Ô!ˆBÝ%Ð&?Ð&?Ð&?Ð&?¸BÐ&?Ñ&?Ô&?ÀÀCÑHÔHˆF�1ŒI�b‰MØð /ð /�Ø& qœkÔ.��a”˜‘�Ø�C ™GœGÑ#ˆLùàð ñ ‰ˆˆ2ˆuØ•#�e‘*”*‰_˜qÑ ˆÝ�6˜!”9˜R˜a˜R”=Ñ!Ô! !Ô$ˆÝŒf�R˜˜˜˜1˜”X¥¤¨¨1¨1¨1¨a¨4¬°"Ñ 5Ô 5Ñ5½¼ÀÀ1À1À1ÀaÀ4ÄÈ"Ñ8MÔ8MÐPRÐSTÐSTÐSTÐVWÐSWÔPXÑ8XÑXÑYÔYÐ\]Ò]ˆÝ�e˜Q Ñ$Ô$ˆØ&Ð& Ð&Ñ&Ô&ˆØˆÝ$¥S¨°Ñ%7Ô%7Ñ8Ô8ð 	ñ 	‰KˆA‰x��BØ�AŠvˆv˜˜Fœ aš˜ØØ�$Œx˜2 ™6Ò!Ð!¥d­5°°B°Q°B´©=¬=¸Ô+;Ñ&<Ô&<×&GÒ&GÈÈbÌ	Ñ&RÔ&RÐ!ÝœN¨A¨v°a¬y¨>Ñ:Ô:��q‘	Ø  a¤™=��a‘Ø��4‘Ø�Ø�Ø�$Œx˜2 ™6Ò!Ð!¥d­5°°B°C°C´©>¬>¸!Ô+<Ñ&=Ô&=×&HÒ&HÈÈqÌÑ&RÔ&RÐ!ÝœN¨F°1¬I°q¨>Ñ:Ô:��q‘	Ø  œ8 b™=��a‘Ø��4‘Ø�Ø�ùØð 	�˜E™
œ
 aš˜Ø�LŠL !¨2°RÐ8Ð8Ñ9Ô9Ð9Ø�MŠM˜!ÑÔÐØ�LŠL˜ÑÔÐùØ …Cˆ�MØ@Ð@¸4Ð@Ñ@Ô@…Cˆ�KÝ�%Ð=Ð=°fÐ=Ñ=Ô=¸uÀaÈÈgÑVÔVÐVr/   c                  óh  ‡— t           j        dd …         pdgŠt          j        dd¬¦  «         t                               ¦   «         r5d„ t          j        t                               ¦   «         ¦  «        D ¦   «         ng } ˆfd„| D ¦   «         }t                               dd¬	¦  «        5 }t          j	        |t          ¦  «        }|                     ¦   «          |                     |¦  «         ‰D �](}t          j        t          |         d
¬¦  «        }t!          |¦  «        }dt"          fdt$          ffD �]á\  }}t&                               ¦   «          |t*          _        t/          j        ¦   «         }		 t3          j        |dt6          t8          ¬¦  «        }
t"          t*          _        n# t"          t*          _        w xY wt/          j        ¦   «         |	z
  }t;          ||
|¦  «        }t<          D �]…}|
                     |¦  «        }t3          j         |t8          ¬¦  «        }| !                    tE          d/|||tG          |
j$        ¦  «        t&           %                    dd¦  «        tM          tO          | (                    ¦   «         ¦  «        d¦  «        tS          |dk     *                    ¦   «         ¦  «        tM          |d¦  «        dœtE          tW          g d¢d„ | ,                    |¦  «        D ¦   «         ¦  «        ¦  «        ¤Ž¦  «         |dv rct[          ||t          dt\          j/         %                    dd¦  «        › d|› d|› d|› d�	z  |› d|› d|› d tG          |
j$        ¦  «        › d!�¦  «         �Œ‡| 0                    ¦   «          tc          |d"›d#|d$›d%tG          |
j$        ¦  «        d&›d't&           %                    dd¦  «        d&›d(t&           %                    d)g ¦  «        › d*| (                    ¦   «         d+›d,d-„ |
j$        D ¦   «         › �d¬.¦  «         �Œã�Œ*	 d d d ¦  «         d S # 1 swxY w Y   d S )0NrE   ÚmugT)ÚparentsÚexist_okc                 ó   — g | ]}|‘ŒS r‘   r‘   )r5   Úrs     r-   r7   zmain.<locals>.<listcomp>»   s   € Ð
1Ð
1Ð
1�ˆ1Ð
1Ð
1Ð
1r/   c                 ó(   •— g | ]}|d          ‰v¯|‘ŒS )r   r‘   )r5   rË   Únamess     €r-   r7   zmain.<locals>.<listcomp>¼   s'   ø€ Ð7Ð7Ð7�!˜a œk°Ð6Ð6ˆAÐ6Ð6Ð6r/   ÚwÚ )ÚnewlineÚmesh)ÚforceÚpackageÚmomentumr   )r   ÚupÚdevice)rÖ   r    r   é   r]   rF   )r   r   r   r   r    r!   r"   r'   )r#   r$   r%   r&   c                 óH   — g | ]}t          t          |¦  «        d ¦  «        ‘Œ S )é   )ÚroundrL   )r5   Úvs     r-   r7   zmain.<locals>.<listcomp>Ó   sG   € ð  ZFð  ZFð  ZFÐqrÕZ_Õ`eÐfgÑ`hÔ`hÐjkÑZlÔZlð  ZFð  ZFð  ZFr/   )r   r   ÚFCP_TAGr�   Ú_az.pngz: z, z atoms, z partsÚ16sú Ú9sz parts=Ú3dz peeled=z runs=r    z worst=z.2fz lh  parts: c                 ó    — g | ]\  }}}|||f‘ŒS r‘   r‘   )r5   Úsr–   Úbs       r-   r7   zmain.<locals>.<listcomp>Ø   s$   € Ð9[Ð9[Ð9[ÉÈÈ1Èa¸1¸aÀ¸)Ð9[Ð9[Ð9[r/   )Úflushr‘   )2ÚsysÚargvr   ÚmkdirÚOUTÚexistsÚcsvÚ
DictReaderÚopenÚ
DictWriterÚFIELDSÚwriteheaderÚ	writerowsÚtrimeshÚloadr
   r   r®   rÅ   r­   Úclearr   Úsplit_by_fitÚtimeÚperf_counterÚfcpÚencoder   r	   r   ÚBUDGETSÚprefixÚdecodeÚwriterowr’   rŸ   r   ÚgetrÚ   rL   rA   Úintry   r£   Úmeasurer   ÚosÚenvironrå   Úprint)ÚoldÚkeepÚfrÎ   Únamer,   ÚrefÚcfgÚsplitrµ   ÚdÚsecÚwmÚTÚdtÚmrÍ   s                   @r-   Úmainr  ¸   s5  ø€ ÝŒH�Q�R�RŒLÐ#˜U˜G€EÝ„I�d TÐ*Ñ*Ô*Ð*Ý58·Z²Z±\´\Ð
IÐ
1Ð
1•c”n¥S§X¢X¡Z¤ZÑ0Ô0Ð
1Ñ
1Ô
1Ð
1Àr€CØ7Ð7Ð7Ð7�sÐ7Ñ7Ô7€DÝ	�Š�#˜rˆÑ	"Ô	"ð k aÝŒN˜1�fÑ%Ô%ˆØ	�Š‰ŒˆØ	�Š�DÑÔÐØð 	kñ 	kˆDÝ”�S œY¨fÐ5Ñ5Ô5ˆAÝ�a‘&”&ˆCØ )­6Ð2°ZÅÐ4PÐQð kñ k‘
��UÝ—	’	‘”�Ø&+•Ô#ÝÔ%Ñ'Ô'�ð1Ýœ
 1¨DµRÅÐGÑGÔG�Aå*0•FÔ'Ð'ø­&•FÔ'Ð0Ð0Ð0Ð0ÝÔ'Ñ)Ô)¨AÑ-�Ý  1 eÑ,Ô,�Ý ð añ a�AØŸš !™œ�BÝœ
 2­fÐ5Ñ5Ô5�AØ—J’J�tð  I¨4¸À1ÍCÐPQÔPWÉLÌLÕad×ahÒahÐiqÐstÑauÔauÝ-2µ5¸¿º¹¼±?´?ÀAÑ-FÔ-FÕQTÐVXÐ[_ÒV_×UdÒUdÑUfÔUfÑQgÔQgÕqvÐwzÐ|}Ñq~Ôq~ð Ið  Iå&*­3Ð/WÐ/WÐ/Wð  ZFð  ZFÐvy÷  wBò  wBð  CDñ  wEô  wEð  ZFñ  ZFô  ZFñ  ,Gô  ,Gñ  'Hô  'Hð Ið  Iñ Jô Jð Jð ˜LÐ(Ð(Ý˜r 1¥cÐ,lµr´z·~²~ÀiÐQSÑ7TÔ7TÐ,lÐ,lÐW[Ð,lÐ,lÐ^aÐ,lÐ,lÐefÐ,lÐ,lÐ,lÑ&lÐquð  o`ð  o`Ðy|ð  o`ð  o`ð  ABð  o`ð  o`õ  LOð  PQô  PWñ  LXô  LXð  o`ð  o`ð  o`ñ  aô  að  aùØ—’‘	”	�	Ý˜ð  Bð ^ð ^ Cð  Bð ^ð ^µ3°q´w±<´<ð  Bð ^ð ^ÍCÏGÊGÐT\Ð^_ÑL`ÔL`ð  Bð ^ð ^Õkn×krÒkrÐsyÐ{}Ñk~Ôk~ð ^ð ^Ø!Ÿvšv™xœxÐ]ð^ð ^Ø9[Ð9[ÐSTÔSZÐ9[Ñ9[Ô9[ð^ð ^Øeiðkñ kô kð kñ kñ'kð	kð	kð kð kñ kô kð kð kð kð kð kð kð køøøð kð kð kð kð kð ks,   Â)C	P'Å3"F'ÆP'Æ'F:	Æ:IP'Ð'P+Ð.P+Ú__main__)NN)CÚ__doc__rë   r  ræ   rö   Úpathlibr   ÚnumpyrH   rX   rò   Únumpy.polynomialr   rn   Úscipy.interpolater   Úshapely.geometryr   Úshapely.geometry.polygonr   ÚpathÚinsertÚstrÚ__file__ÚparentÚdegree_sweepr	   r
   r   r   r   rø   r   Údp_splitr   r   r   Úrendersr   r   Ú
shape_testr   r¤   rq   rx   ru   r§   r¨   r©   r`   ra   rú   r  rþ   ré   rï   rõ   r®   r­   r.   rB   rT   re   rŽ   rÅ   r  Ú__name__r‘   r/   r-   ú<module>r$     st  ððð ð& €
€
€
Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€Ø €€€Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø /Ð /Ð /Ð /Ð /Ð /Ø $Ð $Ð $Ð $Ð $Ð $Ø +Ð +Ð +Ð +Ð +Ð +à „‡‚��3�3�t�t˜H‘~”~Ô,Ñ-Ô-Ñ .Ô .Ð .Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à*Ñ €	ˆ3��TØ/Ñ €ˆ)�WØ!Ñ €	ˆ;Ø
Ð
Ð
€ØˆrŒz�~Š~˜i¨Ñ8Ô8Ñ8€ð 
Eð  
Eð  
E€Ø	Ô	€Ø€ð,ð ,ð ,ð
?ð ?ð ?ðSð Sð SðVð Vð Vðð ð ð6HWð HWð HWð HWðV kð  kð  kðF ˆzÒÐØ€D�F„F€F€F€Fð Ðr/   