+
    ZiH6                    T   ^ RI Ht ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
HtHtHtHtHtHtHtHtHtHtHtHt ^ RIt^ RIHtHt ^ RIHt ^ R	IHt ^ R
IHtH t  ^ RI!H"t"H#t# ^ RI$H%t% ^ RI&H't'H(t(H)t) ]
'       d   ^ RI*H+t+ ^ RI,H-t-  ! R R]4      t.R R lt/R R lt0R R lt1R R lt2R R lt3]4Pj                  t6R R lt7R R lt8R  R! lt9 ! R" R#]:4      t;];! R$4      t<]! R%R&R'7      t=] ! R( R&]]>]:3,          4      4       t?]! R)R*R'7      t@ ! R+ R*]]>]3,          4      tAR, R- ltBR# ).    )annotationsN)abstractmethod)deepcopy)	lru_cache)TYPE_CHECKINGAnyDictIteratorMappingMutableMapping
NamedTupleOptionalSequenceSetTypeTypeVarcast)definefield)	unionRect)	Transform)	BoundsPenControlBoundsPen)	UFOReader	UFOWriter)OBJECT_LIBS_KEY)DrawableGlyphSetHasIdentifier)AttrsInstance)	Converterc                  D    ] tR t^)t$ RtR]R&   R]R&   R]R&   R]R&   RtR# )	BoundingBoxzARepresents a bounding box as a tuple of (xMin, yMin, xMax, yMax).floatxMinyMinxMaxyMax N)__name__
__module____qualname____firstlineno____doc____annotations____static_attributes__r)       6/usr/lib/python3/dist-packages/ufoLib2/objects/misc.pyr#   r#   )   s    K
K
K
K
Kr1   r#   c               $    V ^8  d   QhRRRRRR/#    drawabler   layerzGlyphSet | NonereturnBoundingBox | Noner)   )formats   "r2   __annotate__r;   2   s'     D D D D=O Dr1   c                    \        V4      pR Vn        V P                  V4       VP                  f   R# \	        VP                  !  # FN)r   skipMissingComponentsdrawboundsr#   r6   r7   pens   && r2   	getBoundsrC   2   s=    
E
C %CMM#::%4C;

+CCr1   c               $    V ^8  d   QhRRRRRR/# r4   r)   )r:   s   "r2   r;   r;   :   s'     D Dx D DDV Dr1   c                    \        V4      pR Vn        V P                  V4       VP                  f   R# \	        VP                  !  # r=   )r   r>   r?   r@   r#   rA   s   && r2   getControlBoundsrF   :   s=    
5
!C %CMM#::%4C;

+CCr1   c               $    V ^8  d   QhRRRRRR/# )r5   bounds1r9   bounds2r8   r)   )r:   s   "r2   r;   r;   B   s$     5 55*<55r1   c                >    V f   V# Vf   V # \        \        W4      !  # N)r#   r   )rH   rI   s   &&r2   unionBoundsrL   B   s(     	'344r1   c               $    V ^8  d   QhRRRRRR/# )r5   selfr   memor8   r)   )r:   s   "r2   r;   r;   L   s!      3 c c r1   c                   V P                   '       d   V P                  4        V P                  ! R/ \        P                  ! V P                  4       Uu/ uFl  pVP
                  '       g   K  VP                  ^ ,          R8w  d   VP                  MVP                  R,          \        \        WP                  4      V4      bKn  	  upB # u upi )r   _:   NNr)   )	_lazyunlazify	__class__attrsfieldsinitnamer   getattr)rN   rO   as   && r2   _deepcopy_unlazify_attrsr\   L   s    zzz>> 
 \\$..1	
 2vv	qvvayC'QVVQVVBZ(ff%t;  2	
 
s   C
,AC
c                    V ^8  d   QhRRRR/# )r5   rN   r   r8   Dict[str, Any]r)   )r:   s   "r2   r;   r;   Z   s      3 > r1   c                (   V P                   '       d   V P                  4        \        P                  ! V P                  4       Uu/ uFA  pVP
                  VP                  '       d   \        WP
                  4      MVP                  bKC  	  up# u upi rK   )	rS   rT   rV   rW   rU   rY   rX   rZ   default)rN   r[   s   & r2   _getstate_unlazify_attrsra   Z   sh    zzz dnn--A 	
ff%QYY>-  s   !B'%Bc               $    V ^8  d   QhRRRRRR/# )r5   rN   r   stater^   r8   Noner)   )r:   s   "r2   r;   r;   i   s!     2 2# 2n 2 2r1   c                   \         P                  V \        P                  4      p\        P                  ! V P
                  4       F9  pVP                  V9   g   K  V! VP                  WP                  ,          4       K;  	  R # rK   )_obj_setattr__get__rV   	AttributerW   rU   rY   )rN   rc   _bound_setattrr[   s   &&  r2   _setstate_attrsrj   i   sN    !))$@N\\$..)66U?1665=1 *r1   c               $    V ^8  d   QhRRRRRR/# )r5   
parent_libdict[str, Any]objr   r8   r)   )r:   s   "r2   r;   r;   p   s!      N  > r1   c                0   VP                   f$   \        \        P                  ! 4       4      Vn         RV 9  d   / ;q R&   M!V R,          p\	        V\
        4      '       g   Q hVP                   V9   d   W!P                   ,          pV# / pWBVP                   &   V# )Nzpublic.objectLibs)
identifierstruuiduuid4
isinstancer   )rl   rn   object_libs
object_liblibs   &&   r2   _object_librx   p   s    
~~ TZZ\* *,8::!45 !45+~6666
~~$%0%@
C"%Jr1   c               $    V ^8  d   QhRRRRRR/# )r5   rl   rm   identifierszset[str]r8   rd   r)   )r:   s   "r2   r;   r;      s!      >  T r1   c                    \         V 9  d   R# V \         ,          pVP                  4        UUu/ uF  w  r4W19   g   K  V'       g   K  W4bK  	  uppV \         &   R# u uppi )zPrune non-existing objects and empty libs from a lib's
public.objectLibs.

Empty object libs are pruned, but object identifiers stay.
N)r   items)rl   rz   ru   kvs   &&   r2   _prune_object_libsr      sU     j(_-K$**,#,0@Q,#J #s   
AAAc                      ] tR t^tRtRtR# )DataPlaceholderzSRepresents a sentinel value to signal a "lazy" DataSet item hasn't been loaded yet.r)   N)r*   r+   r,   r-   r.   r0   r)   r1   r2   r   r      s    ]r1   r   s   __UFOLIB2_DATA_NOT_LOADED__Tds	DataStore)boundc                     ] tR t^t$ Rt]! ]R7      tR]R&   ]! RRRRR7      t	R]R	&   ]! R
RRRR7      t
R]R&   ]! ]RRRR7      tR]R&   R R ltR R lt]R6R R ll4       t]]R R l4       4       t]]R R l4       4       t]]R R l4       4       t]]R R l4       4       tR R  lt]t]t]tR! R" ltR# R$ ltR% R& lt R' R( lt!R) R* lt"R+ R, lt#R7R- R. llt$]%R/ R0 l4       t&R1 R2 lt']R3 R4 l4       t(R5t)R
# )8r   zRepresents the base class for ImageSet and DataSet.

Both behave like a dictionary that loads its "values" lazily by default and only
differ in which reader and writer methods they call.
)factoryzDict[str, bytes]_dataFT)r`   kw_onlyeqrX   zOptional[bool]rS   N)r`   rX   reprr   zOptional[UFOReader]_reader)r   rX   r   r   zSet[str]_scheduledForDeletionc                    V ^8  d   QhRRRR/# r5   otherobjectr8   boolr)   )r:   s   "r2   r;   DataStore.__annotate__   s     ) )F )t )r1   c                	    VP                   V P                   Jd   \        # \        \        V4      pW3 F'  pVP                  '       g   K  VP                  4        K)  	  V P                  VP                  8H  # rK   )rU   NotImplementedr   r   rS   rT   r   )rN   r   
data_stores   && r2   __eq__DataStore.__eq__   s_    
 ??$..0!!Y&-J##% ( zzU[[((r1   c                    V ^8  d   QhRRRR/# r   r)   )r:   s   "r2   r;   r      s      F t r1   c                	R    V P                  V4      pV\        J d   \        # V'       * # rK   )r   r   )rN   r   results   && r2   __ne__DataStore.__ne__   s&    U#^#!!zr1   c               (    V ^8  d   QhRRRRRRRR/# )	r5   clsz	type[Tds]readerr   lazyr   r8   r   r)   )r:   s   "r2   r;   r      s(      ) Y d c r1   c                    V ! 4       pV P                  V4       F>  pV'       d   \        VP                  V&   K   V P                  W4      VP                  V&   K@  	  W#n        V'       d   Wn        V# )zFInstantiate the data store from a :class:`fontTools.ufoLib.UFOReader`.)list_contents_DATA_NOT_LOADEDr   	read_datarS   r   )r   r   r   rN   fileNames   &&&  r2   readDataStore.read   s\     u))&1H'7

8$'*}}V'F

8$	 2
 
!Lr1   c                    V ^8  d   QhRRRR/# )r5   r   r   r8   	list[str]r)   )r:   s   "r2   r;   r      s      i I r1   c                    R# )z;Returns a list of POSIX filename strings in the data store.Nr)   )r   s   &r2   r   DataStore.list_contents        	r1   c               $    V ^8  d   QhRRRRRR/# )r5   r   r   filenamerq   r8   bytesr)   )r:   s   "r2   r;   r      s!      ) s u r1   c                    R# )z.Returns the data at filename within the store.Nr)   )r   r   s   &&r2   r   DataStore.read_data   r   r1   c               (    V ^8  d   QhRRRRRRRR/# )	r5   writerr   r   rq   datar   r8   rd   r)   )r:   s   "r2   r;   r      s(      9  5 T r1   c                    R# )z-Writes the data to filename within the store.Nr)   )r   r   r   s   &&&r2   
write_dataDataStore.write_data   r   r1   c               $    V ^8  d   QhRRRRRR/# )r5   r   r   r   rq   r8   rd   r)   )r:   s   "r2   r;   r      s!      I   r1   c                    R# )z-Remove the data at filename within the store.Nr)   )r   r   s   &&r2   remove_dataDataStore.remove_data   r   r1   c                   V ^8  d   QhRR/# )r5   r8   rd   r)   )r:   s   "r2   r;   r      s      $ r1   c                    V P                   '       d&   V P                  e   V P                  4        F  pK  	  RV n         R# )zLoad all data into memory.NF)rS   r   r|   )rN   rQ   s   & r2   rT   DataStore.unlazify   s.    :::$,,2ZZ\ "
r1   c                   V ^8  d   QhRR/# r5   r8   intr)   )r:   s   "r2   r;   r      s       r1   c                	,    \        V P                  4      # rK   )lenr   rN   s   &r2   __len__DataStore.__len__   s    4::r1   c                   V ^8  d   QhRR/# r5   r8   zIterator[str]r)   )r:   s   "r2   r;   r      s        -  r1   c                	,    \        V P                  4      # rK   )iterr   r   s   &r2   __iter__DataStore.__iter__   s    DJJr1   c                    V ^8  d   QhRRRR/# )r5   r   rq   r8   r   r)   )r:   s   "r2   r;   r      s      C E r1   c                	    V P                   V,          pV\        J d+   V P                  V P                  V4      ;q P                   V&   V# rK   )r   r   r   r   )rN   r   data_objects   && r2   __getitem__DataStore.__getitem__   s?    jj***15h1WWK**X.r1   c               $    V ^8  d   QhRRRRRR/# )r5   r   rq   r   r   r8   rd   r)   )r:   s   "r2   r;   r     s!     8 8C 8u 8 8r1   c                	|    W P                   V&   WP                  9   d   V P                  P                  V4       R # R # rK   )r   r   remove)rN   r   r   s   &&&r2   __setitem__DataStore.__setitem__  s3    #

8111&&--h7 2r1   c                    V ^8  d   QhRRRR/# )r5   r   rq   r8   rd   r)   )r:   s   "r2   r;   r     s     1 1C 1D 1r1   c                	V    V P                   V V P                  P                  V4       R # rK   )r   r   add)rN   r   s   &&r2   __delitem__DataStore.__delitem__  s"    JJx ""&&x0r1   c                   V ^8  d   QhRR/# )r5   r8   rq   r)   )r:   s   "r2   r;   r     s     
 
# 
r1   c           
     	
   \        V P                  4      pR P                  V P                  P                  V P                  P
                  V^ 8X  d   RMRP                  Y^8  d   RMR4      \        \        V 4      4      4      # )z<{}.{} ({}) at {}>emptyz	{} file{}s )r   r   r:   rU   r+   r*   hexid)rN   ns   & r2   __repr__DataStore.__repr__  se    

O#**NN%%NN##AvG;#5#5aA2#N4M	
 	
r1   c               $    V ^8  d   QhRRRRRR/# )r5   r   r   saveAszbool | Noner8   rd   r)   )r:   s   "r2   r;   r     s!        I  {  d  r1   c                   Vf   V P                   VJpV'       g%   V P                   F  pV P                  W4       K  	  V P                  P	                  4        FV  w  r4V\
        J d6   V'       d,   V P                  V P                   V4      pW@P                  V&   MKD  V P                  WV4       KX  	  \        4       V n        V'       d
   RV n         R# R# )z>Write the data store to a :class:`fontTools.ufoLib.UFOWriter`.N)	r   r   r   r   r|   r   r   r   set)rN   r   r   r   r   s   &&&  r2   writeDataStore.write  s    >\\/F 66  2 7 #jj..0NH ''>>$,,AD+/JJx(OOFd3 1 &)U"DL r1   c                   V ^8  d   QhRR/# )r5   r8   r   r)   )r:   s   "r2   r;   r   5  s     ' '9 'r1   c                H    \        V P                  P                  4       4      # )z.Returns a list of filenames in the data store.)listr   keysr   s   &r2   	fileNamesDataStore.fileNames4  s     DJJOO%&&r1   c                    V ^8  d   QhRRRR/# )r5   	converterr!   r8   dict[str, str]r)   )r:   s   "r2   r;   r   9  s      i N r1   c                	`   VP                  R 4      p\        V\        4      '       d   \        V 4      # \        V\        4      '       g   \        \        V4      4      hV P                  4        UUu/ uF  w  r4W1P                  V4      bK  	  pppV P                  '       d   RV n        V# u uppi )    F)	unstructurert   r   dictrq   NotImplementedErrortyper|   rS   )rN   r   testr}   r~   r   s   &&    r2   _unstructureDataStore._unstructure9  s    $$U+dE"" :D#&&%d4j11HL

U#8#8#; ;U:::DJ	  Vs   0B*c               (    V ^8  d   QhRRRRRRRR/# )	r5   r   zMapping[str, Any]r   zType[DataStore]r   r!   r8   r   r)   )r:   s   "r2   r;   r   K  s0        
	r1   c                	   V! 4       pV P                  4        Fq  w  rE\        V\        4      '       d   VP                  V\        4      W4&   K5  \        V\        4      '       d   WSV&   KQ  \        R \        V4      P                  : 24      h	  V# )z'Expected (base64) str or bytes, found: )r|   rt   rq   	structurer   	TypeErrorr   r*   )r   r   r   rN   r}   r~   s   &&&   r2   
_structureDataStore._structureJ  s{     uJJLDA!S!!#--a7Au%%Q=d1g>N>N=QR  ! r1   )rS   r   r   )TrK   )*r*   r+   r,   r-   r.   r   r   r   r/   rS   r   r   r   r   r   classmethodr   staticmethodr   r   r   r   r   rT   r\   __deepcopy__ra   __getstate__rj   __setstate__r   r   r   r   r   r   r   propertyr   r   r  r0   r)   r1   r2   r   r      sT    $D1E1!%%eTE>T#(ERW#XG X&+%e'8 )               ,L+L"L 81
 6 ' '"  r1   _TAttrDictMixinc                      ] tR tRtRt]]! RR7      RR R ll4       4       tR R ltR	 R
 lt	R R lt
]R R l4       t]R R l4       tRtR# )r  i`  zRead attribute values using mapping interface.

For use with Anchors, Guidelines and WoffMetadata classes, where client code
expects them to behave as dict.
N)maxsizec               $    V ^8  d   QhRRRRRR/# )r5   r   Type[AttrsInstance]reverser   r8   r   r)   )r:   s   "r2   r;   AttrDictMixin.__annotate__k  s$       +/	r1   c                	    / p\         P                  ! V 4       FG  pVP                  pTpR VP                  9   d   VP                  R ,          pV'       d   WRV&   KC  WBV&   KI  	  V# )rename_attr)rV   rW   rY   metadata)r   r  r   r[   	attr_namekeys   &&    r2   _key_to_attr_mapAttrDictMixin._key_to_attr_mapi  s]    
 c"AIC

*jj/$'y!'s # r1   c                    V ^8  d   QhRRRR/# )r5   r  rq   r8   r   r)   )r:   s   "r2   r;   r  z  s      s s r1   c                	    V P                  4       V,          p \        W4      pTf   \        T4      hT#   \         d   p\        T4      ThR p?ii ; irK   )r  rZ   AttributeErrorKeyError)rN   r  r  valuees   &&   r2   r   AttrDictMixin.__getitem__z  sX    ))+C0		'D,E =3-	  	'3-Q&	's   5 A AAc                   V ^8  d   QhRR/# r   r)   )r:   s   "r2   r;   r    s     ) )- )r1   c              #  	   "   V P                  R R7      p\        RV P                  4      p\        P                  ! V4       F  p\        W4      f   K  W,          x  K  	  R# 5i)T)r  r  N)r  r   rU   rV   fields_dictrZ   )rN   key_mapr   r  s   &   r2   r   AttrDictMixin.__iter__  sR     '''5($..9**3/It'3(( 0s   AA#A#c                   V ^8  d   QhRR/# r   r)   )r:   s   "r2   r;   r    s     $ $ $r1   c                	&    \        R  V  4       4      # )c              3  &   "   T F  p^x  K	  	  R# 5i)rR   Nr)   ).0rQ   s   & r2   	<genexpr>(AttrDictMixin.__len__.<locals>.<genexpr>  s     #d1ds   )sumr   s   &r2   r   AttrDictMixin.__len__  s    #d###r1   c               $    V ^8  d   QhRRRRRR/# )r5   r   Type[_T]r  z_T | Mapping[str, Any]r8   r
  r)   )r:   s   "r2   r;   r    s"     
 
h 
/E 
" 
r1   c           
     	>   \        W4      '       d   V# \        V\        4      '       dB   V P                  4       pT ! R/ VP                  4        UUu/ uF  w  r4W#,          VbK  	  uppB # \	        R V P
                   R\        V4      P
                   24      hu uppi )z	Expected z or mapping, found: r)   )rt   r   r  r|   r  r*   r   )r   r  attr_mapr}   r~   s   &&   r2   coerce_from_dictAttrDictMixin.coerce_from_dict  s    e!!Lw''++-HDU[[]C]TQ(+q.]CDD~%9$u+:N:N9OP
 	
 Ds   Bc               $    V ^8  d   QhRRRRRR/# )r5   r   r.  r  z_T | Mapping[str, Any] | Noner8   z	_T | Noner)   )r:   s   "r2   r;   r    s$     + ++;+	+r1   c                	0    Vf   R # V P                  V4      # rK   )r1  )r   r  s   &&r2   coerce_from_optional_dict'AttrDictMixin.coerce_from_optional_dict  s     =##E**r1   r)   )F)r*   r+   r,   r-   r.   r  r   r  r   r   r   r1  r5  r0   r)   r1   r2   r  r  `  s_     t  )$ 
 
 + +r1   c                    V ^8  d   QhRRRR/# )r5   tzTransform | Sequence[float]r8   r   r)   )r:   s   "r2   r;   r;     s     < <5 <) <r1   c                D    \        V \        4      '       d   V # \        V !  # )zfReturn a passed-in Transform as is, otherwise convert a sequence of
numbers to a Transform if need be.)rt   r   )r8  s   &r2   _convert_transformr:    s     1i((1;im;r1   )C
__future__r   rr   abcr   copyr   	functoolsr   typingr   r   r	   r
   r   r   r   r   r   r   r   r   r   rV   r   r   fontTools.misc.arrayToolsr   fontTools.misc.transformr   fontTools.pens.boundsPenr   r   fontTools.ufoLibr   r   ufoLib2.constantsr   ufoLib2.typingr   r   r   attrr    cattrsr!   r#   rC   rF   rL   r\   ra   r   __setattr__rf   rj   rx   r   r   r   r   r   rq   r   r
  r  r:  r)   r1   r2   <module>rI     s   "           / . @ 1 - < < # * DD5 !!2, ^e ^ ##AB  e;' xsEz* x xv T)?+GCH% ?+D<r1   