+
    <=iI                     x    R t ^ RIHt ]R,          R	8  d   ^ RIHt M^ RIHt  ! R R]4      t ! R R]4      tR# )
zI
This module contains helper classes for alignment arithmetic and checks
)version_info:N   N)gcdc                   X   a  ] tR t^t o R
R ltR tR t]R 4       tR t	R t
R tRtV tR	# )	Alignmentc                ,    Wn         W!,          V n        R # Nalignoffset)selfr
   r   s   &&&1/usr/lib/python3.14/site-packages/xcbgen/align.py__init__Alignment.__init__   s    
n    c                v    V P                   VP                   8H  ;'       d    V P                  VP                  8H  # r   r	   r   others   &&r   __eq__Alignment.__eq__   s*    zzU[[(HHT[[ELL-HHr   c                @    R V P                   V P                  3,          # )z(align=%d, offset=%d)r	   r   s   &r   __str__Alignment.__str__   s    &$**dkk)BBBr   c                    V ^,          ^ 8X  d   \        ^^ 4      # V ^,          ^ 8X  d   \        ^^ 4      # V ^,          ^ 8X  d   \        ^^ 4      # \        ^^ 4      # )   )r   )sizes   &r   for_primitive_typeAlignment.for_primitive_type   sU     !8q=Qq>!AX]Qq>!AX]Qq>!Qq>!r   c                v    V P                   V,           V P                  ,          p\        V P                  V4      # r   )r   r
   r   )r   r   
new_offsets   && r   align_after_fixed_size Alignment.align_after_fixed_size(   s*    kkD(DJJ6
Z00r   c                8   V P                   ^8X  d   V P                  ^ 8X  d   R# Vf   R# VP                   V P                   8  d   R# VP                   V P                   ,          ^ 8w  d   R# VP                  V P                   ,          V P                  8w  d   R# R# )zz
Assuming the given external_align, checks whether
self is fulfilled for all cases.
Returns True if yes, False otherwise.
TFr	   )r   external_aligns   &&r   is_guaranteed_atAlignment.is_guaranteed_at-   sx     ::?t{{a/!$**,$**,1   4::-<r   c                >   \        V P                  VP                  4      pV P                  V,          pVP                  V,          pW48X  d   TpMD\        WC,
          4      p\        W&4      pV P                  V,          pVP                  V,          pTp\	        W%4      # r   )r   r
   r   absr   )r   r   	new_alignnew_offset_candidate1new_offset_candidate2r    offset_diffs   &&     r   combine_withAlignment.combine_withN   s     

EKK0	 $i 7 %y 8 9.J3KLKI3I$(KK)$;!$)LL9$<!.J//r   r	   N)       )__name__
__module____qualname____firstlineno__r   r   r   staticmethodr   r!   r%   r-   __static_attributes____classdictcell____classdict__s   @r   r   r      s?     %IC 
" 
"1
B0 0r   r   c                   P   a  ] tR t^at o R tR tR tR tR tR t	R t
R tR	tV tR
# )AlignmentLogc                0    . V n         . V n        ^V n        R# )   N)ok_list	fail_list	verbosityr   s   &r   r   AlignmentLog.__init__c   s    r   c                   R pV P                    F  w  r#rEp\        V4      pRV,          pV P                  V4      '       g   K4  Ve   VR 8X  d;   VRV: R\        V4      : RV: R\        V4      : R\        V4      : R2,          pMFVRV: R\        V4      : R	\        V4      : RV: R\        V4      : R\        V4      : R2,          pV P                  ^8  g   K  WP                  W4      ,          pK  	  V P                   F  w  r#rEp	\        V4      pRV,          pVe   VR 8X  d5   VRV: R
\        V4      : RV: \        V4      : RV: RV	: R2,          pMAVRV: R
\        V4      : RV: R\        V4      : R	\        V4      : RV: RV	: R2,          pV P                  ^8  g   K  WP                  W4      ,          pK  	  V# ) z  z    zok: z:
	zbefore: z	, after: 
zok: field "z" in zfail: align z is incompatible with
	z
	zReason: zfield ")r>   lenok_callstack_is_relevantstrr@   callstack_to_strr?   )
r   resultalign_before
field_nametype_obj	callstackalign_after	stacksizeindentreasons
   &         r   r   AlignmentLog.__str__h   s    MQLLH\xKIII%F,,Y77%r)9!3x=&#l:KSQ\M] _ `F !3z?CM!3|#4c+6F H IF >>Q&33FFFF MY HL~~C\xFIII%F!Z2%5s<0&#h-QWY Z s<0&#j/3x=Z`bhj k ~~"//BB HV r   c                ~    R V,          pV F  pVRV: \        V4      : R2,          pK  	  VRV,          ,          pV# )z	%scallstack: [
z	  rD   z	%s]
)rG   )r   rP   rM   rI   
stack_elems   &&&  r   rH   AlignmentLog.callstack_to_str   s=    %.#Jfc*o>>F $)f$$r   c           	     F   V P                   ^8  d   R# \        V4      ^ 8X  d   R# V P                   Fe  w  r#rEp\        V4      \        V4      8:  g   K"  \        WR\        V4       4      p\	        V UU	u. uF	  w  rW8H  NK  	  up	p4      p
V
'       g   Kd   R# 	  R# u up	pi )r   TNF)r@   rE   r?   zipall)r   ok_callstackrJ   rK   rL   fail_callstackrQ   zippedij	is_subsets   &&         r   rF   %AlignmentLog.ok_callstack_is_relevant   s    >>Q |! MQNNH\x< C$77\:L3|;L+MNF ;FDAF ;<	9 M[ 	 !<s   5Bc                B    V P                   P                  WW4V34       R # r   )r>   append)r   rJ   rK   rL   rM   rN   s   &&&&&&r   okAlignmentLog.ok   s    \xKXYr   c                B    V P                   P                  WW4V34       R # r   )r?   ra   )r   rJ   rK   rL   rM   rQ   s   &&&&&&r   failAlignmentLog.fail   s    |fUVr   c                    V P                   P                  VP                   4       V P                  P                  VP                  4       R # r   )r>   extendr?   r   s   &&r   ra   AlignmentLog.append   s.    EMM*eoo.r   c                ,    \        V P                  4      # r   )rE   r>   r   s   &r   ok_countAlignmentLog.ok_count   s    4<<  r   )r?   r>   r@   N)r1   r2   r3   r4   r   r   rH   rF   rb   re   ra   rk   r6   r7   r8   s   @r   r;   r;   a   s5     
!H(ZW/! !r   r;   N)      )	__doc__sysr   mathr   	fractionsobjectr   r;    r   r   <module>ru      s?    vR0 R0jR!6 R!r   