R
    ¿³×j$'  ã                  ó  €   ] QH Gs ] PHs] QHGsGs Qs  Q Q2      s\Q6X  cã   P
s	\	%       f×   \
 Q2      s\ \2      s\
 Q2      s\ \2      s\
 Q	2      s\9Q
6X  c     \ Q\\*           O                   02       JW  9Q6X  c     \ Q\\*
          O                   02       J}  9Q6X  c     \ Q\\*          O                   02       J£  9Q6X  c     \ Q\\*          O                   02       JÉ  Q6X  c   P	s	JÓ   \ Q2       JÞ  P! P! )é    )Úannotations)ÚROUND_HALF_UPÚDecimalz [+-]?\d+(?:\.\d+)?(?:e[+-]?\d+)?c                  óÎ   €   \ sQ s]
s" Q\Q$    Q\Q$    Q\Q$    Q\Q$    Q Q	 ksQ
 sQ sQ Q ksQ Q ks	Q Q ks
Q Q ksQ sQ sQ sQ sQ sQ Q ksQ sQ Q ksQsP! )Ú	SigFigNumÚstrÚnum_strÚintÚsigfigsÚdecimalsr   Úvaluec               ó   €   U ]6„  c   PgQQ-! )é   Únumr   © )Úformats   "Ú9C:\Users\brusi\Desktop\python\one_offs\sigfigs\sigfigs.pyÚ__annotate__ÚSigFigNum.__init__.__annotate__   s   � ÷ 	 ñ 	 ˜Cñ 	 ó    c                	ó²   €   UO                  2       U m        U O                  2        U O                  2        U O	                  2        U O                  2        P! ©N)Úlowerr	   Ú_validate_numÚ_calculate_sigfigÚ_calculate_decimalsÚ_calculate_value)Úselfr   s   &&r   Ú__init__ÚSigFigNum.__init__   s?   � à—y‘y“{ˆŒà×ÑÔà×ÑÔ Ø× Ñ Ô"à×ÑÖr   c                	óP   €   [        U 2      O                   Q U O                  8 Q0! )z(num=Ú))ÚtypeÚ__name__r	   ©r   s   &r   Ú__repr__ÚSigFigNum.__repr__    s%   � Ü�t“*×%Ñ%Ð& e¨D¯L©LÑ+;¸1Ð=Ð=r   c           	     	óš   €   [        U 2      O                   Q U O                   QU O                   QU O                   QU O
                   0	! )z:
	num_str: z
	sigfigs: z        
	decimals: z	
	value: )r#   r$   r	   r   r   r   r%   s   &r   Ú__str__ÚSigFigNum.__str__#   sL   � Ü�t“*×%Ñ%Ð& n°T·\±\°NÀ-ÐPT×P\ÑP\È~ð ^Ø—}‘}�o [°·±°ð>ð 	>r   c               ó"   €   U ]6„  c   PgQQQQ-! ©r   r   r   Úreturnr   )r   s   "r   r   ÚSigFigNum.__add__.__annotate__(   ó   � ÷ %ñ %˜Yð %¨9ñ %r   c                óè   €   U O                  U2      oUd   U! U O                  UO                  *           o[        U O                  UO                  2      oU O	                  V4QQ5      o[        U2      ! )z6Add two SigFigNum objects and return another SigFigNumr   ©r#   ©Ú_validate_sigfignumr   Úminr   Ú_round_num_stringr   ©r   r   ÚvalidÚ	num_valueÚrounded_decimalsÚ
num_strings   &&    r   Ú__add__ÚSigFigNum.__add__(   óm   � ð ×(Ñ(¨Ó/ˆØÒØˆLà—J‘J §¡Õ,ˆ	ä˜tŸ}™}¨e¯n©nÓ=Ðà×+Ñ+Ø¨jð ,ó 
ˆ
ô ˜Ó$Ð$r   c               ó"   €   U ]6„  c   PgQQQQ-! r,   r   )r   s   "r   r   ÚSigFigNum.__sub__.__annotate__9   r/   r   c                óè   €   U O                  U2      oUd   U! U O                  UO                  *
          o[        U O                  UO                  2      oU O	                  V4QQ5      o[        U2      ! )zISubtract value SigFigNum from self SigFigNum and return another SigFigNumr   r1   r2   r6   s   &&    r   Ú__sub__ÚSigFigNum.__sub__9   r=   r   c               ó"   €   U ]6„  c   PgQQQQ-! r,   r   )r   s   "r   r   ÚSigFigNum.__mul__.__annotate__J   s   � ÷ %ñ %˜Yð %¨9ñ %r   c                óè   €   U O                  U2      oUd   U! U O                  UO                  *          o[        U O                  UO                  2      oU O	                  V4QQ5      o[        U2      ! )z;Multiply two SigFigNum objects and return another SigFigNumr   r1   ©r3   r   r4   r   r5   r   ©r   r   r7   r8   Úrounded_sigfigsr:   s   &&    r   Ú__mul__ÚSigFigNum.__mul__J   óe   � ð ×(Ñ(¨Ó/ˆØÒØˆLà—J‘J §¡Õ,ˆ	ä˜dŸl™l¨E¯M©MÓ:ˆà×+Ñ+¨IÈYÐ+ÓWˆ
ä˜Ó$Ð$r   c               ó"   €   U ]6„  c   PgQQQQ-! r,   r   )r   s   "r   r   Ú"SigFigNum.__truediv__.__annotate__Y   s   � ÷ %ñ % ð %¨yñ %r   c                óè   €   U O                  U2      oUd   U! U O                  UO                  *          o[        U O                  UO                  2      oU O	                  V4QQ5      o[        U2      ! )zEDivide self SigFigNum by value SigFigNum and return another SigFigNumr   r1   rF   rG   s   &&    r   Ú__truediv__ÚSigFigNum.__truediv__Y   rK   r   c                	ód   €   U O                  U2      oUd   U! U O                  UO                  6H  ! r   )r3   r	   )r   Úvalr7   s   && r   Ú__eq__ÚSigFigNum.__eq__i   s0   � Ø×(Ñ(¨Ó-ˆØÒØˆLØ�|‰|˜sŸ{™{Ñ*Ð*r   c                ó�   €   [         O                   [        U O                  2      %       f   [	        QU O                   Q02      gP! )zFValidate self.num_str after it is created, raise an error if not validzInvalid num_str 'Ú')ÚreÚ	fullmatchÚNUM_STR_PATTERNr	   Ú
ValueErrorr%   s   &r   r   ÚSigFigNum._validate_nump   s5   � ä�|Š|œO¨T¯\©\×:Ò:ÜÐ0°·±°¸aÐ@ÓAÐAñ ;r   c                ót  €   U O                  2       v  qQU7   cd   UO                  QP2      O                  Q2      oU%       c   [        U2      L'[        UO	                  Q2      ]*          2      ]*           U m        P! UO                  Q2      O                  Q2      oU%       c   [        U2      L]U m        P! )z?Calculate the significant numbers after self.num_str is createdÚ.Ú0)Ú_split_num_strÚreplaceÚlstripÚlenÚsplitr   Úrstrip)r   ÚcoefficientÚ_Údigitss   &   r   r   ÚSigFigNum._calculate_sigfigu   s’   � ð ×,Ñ,Ó.‰ˆð �+Ôà ×(Ñ(¨¨bÓ1×8Ñ8¸Ó=ˆFç*0œ3˜vœ;´c¸+×:KÑ:KÈCÓ:PÐQRÕ:SÓ6TÐWXÕ6XˆDŽLð !×'Ñ'¨Ó,×3Ñ3°CÓ8ˆFç*0œ3˜vœ;°aˆDŽLr   c                ó  €   U O                  2       v  qQU7   c#   [        UO                  Q2      ]*          2      oL+[        U2      [        UO                  Q2      2      *
          ' oU[	        U2      *
          U m        P! )z:Calculate the decimal places after self.num_str is createdr]   r^   )r_   rb   rc   rd   r
   r   )r   re   Úexponentr   s   &   r   r   ÚSigFigNum._calculate_decimals†   sm   � ð !%× 3Ñ 3Ó 5Ñˆà�+Ôä˜;×,Ñ,¨SÓ1°!Õ4Ó5‰Hô ˜[Ó)¬C°×0BÑ0BÀ3Ó0GÓ,HÕHÐIˆHð !¤3 x£=Õ0ˆŽr   c                ó<   €   [        U O                  2      U m        P! )z4Calculate the actual numerical value of self.num_str)r   r	   r   r%   s   &r   r   ÚSigFigNum._calculate_value•   s   � ô ˜TŸ\™\Ó*ˆŽ
r   c               ó   €   U ]6„  c   PgQQ-! )r   r-   z	list[str]r   )r   s   "r   r   Ú%SigFigNum._split_num_str.__annotate__›   s   � ÷ ?ñ ? 	ñ ?r   c                óÈ   €   U O                   O                  Q2      O                  Q2      o[        U2      ]6X  c   U! [        U2      ]6X  c   U] *          Q,! [	        Q2      g)z;Split self.num_str into coefficient and exponent and returnz+-Úer^   zInvalid num_str: more than 1 e)r	   ra   rc   rb   rZ   )r   Úvaluess   & r   r_   ÚSigFigNum._split_num_str›   sY   � à—‘×$Ñ$ TÓ*×0Ñ0°Ó5ˆÜˆv‹;˜!ÔØˆMÜ�‹[˜AÔØ˜1•I˜sÐ#Ð#äÐ=Ó>Ð>r   c                ó@   €   [        U[        2      %       f   [        ! P! )z%Validate value passed in is SigFigNum)Ú
isinstancer   ÚNotImplemented)r   r   s   &&r   r3   ÚSigFigNum._validate_sigfignum¥   s   � ä˜%¤×+Ò+Ü!Ð!ñ ,r   c               ó*   €   U ]6„  c   PgQQQQQQQQ-! )r   r   r   Ú	precisionr
   r#   r   r-   r   )r   s   "r   r   Ú(SigFigNum._round_num_string.__annotate__ª   s.   � ÷ 7Hñ 7H Wð 7H¸ð 7HÀCð 7HÈCñ 7Hr   c                	ó˜  €   UQ 6X  cd   [        ]2      O                  U' 2      oV*          O                  [        ]2      [        Q5      U*          oU] 6”  c	   UQU Q0 ! [	        UQ2      ! UQ6X  CcK   U]6  c   [        Q2      gUO                  2       %       c!   U]6”  c   QQU]*
          *          *           ! Q! UO                  2       O                  2       oV&*
          ]*
          o[        ]2      O                  U' 2      oV*          O                  [        ]2      [        Q5      U*          oUO                  2       O                  2       oVb6¼  f   UQ6  f   U] 6”  c;   U]
*          ] 6X  c-   UO                  U' 2      oUQU]*
           Q0 o	UQ	 o
U	 Q
U
 0! [        ] V&*
          ]*
          2      oUQU Q0 ! [        QU 02      g)r   )Úroundingr]   Úfz.0fr   z&Significant figures must be at least 1z0.r^   z+drq   z Invalid 'type' parameter value: éüÿÿÿ)
r   ÚscalebÚquantizer   r   rZ   Úis_zeroÚcopy_absÚadjustedÚmax)r   r   ry   r#   ÚmultipleÚroundedÚ	magnitudeÚdecimal_placesÚmantissaÚmantissa_textÚexponent_texts   &&&&       r   r5   ÚSigFigNum._round_num_stringª   sÚ  � Ø�:Ôä˜q“z×(Ñ(¨)¨Ó4ˆHð •~×/Ñ/Ü˜“
¤]ð 0ó àõˆGð
 ˜1Œ}Ø! ! I ;¨a Ð0Ð1ô ˜' 5Ó)Ð)à�YÕØ˜1Œ}Ü Ð!IÓJÐJð �{‰{�}Š}Ø7@À1´}�t˜c Y°¥]Õ3Õ3ÐMÈ#ÐMð Ÿ™›×/Ñ/Ó1ˆIØ&Õ2°QÕ6ˆNô ˜q“z×(Ñ(¨.¨Ó9ˆHØ•~×/Ñ/Ü˜“
¤]ð 0ó àõˆGð  ×(Ñ(Ó*×3Ñ3Ó5ˆIð Ô&Ø˜r”>Ø ”M g°¥l°aÔ&7à"Ÿ>™>¨9¨*Ó5�Ø#+¨A¨i¸!­m¨_¸AÐ+=Ð">�Ø#,¨R .�Ø'˜¨¨-¨Ð9Ð9ô !  IÕ$9¸AÕ$=Ó>ˆNØ˜a Ð/¨qÐ0Ð1Ð2ô Ð?À¸vÐFÓGÐGr   )r   r	   r   r   )r$   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r   r&   r)   r;   rA   rI   rO   rS   r   r   r   r   r_   r3   r5   Ú__static_attributes__r   r   r   r   r   
   sw   ‡ € ØƒLØ<ØƒLØ5ØƒMØSØƒNØ.õ	 ò>ò>õ
%õ"%õ"%õ%ò +òBò
8ò"1ò+õ?ò"÷
7Hñ 7Hr   r   Ú__main__zFirst number: zSecond number: z2Which operator should be used? (+, -, /, *, quit) Ú+zAnswer is: Ú-Ú/Ú*ÚquitzUnknown operator)Ú
__future__r   rW   Údecimalr   r   rY   r   r$   ÚdoneÚinputÚaÚbÚoperatorÚprintr	   r   r   r   Ú<module>r       sô   ñÝ "ã 	ß *à5€÷WHñ WHðt ˆzÔØ€DßÙÐ"Ó#ˆÙ�a‹LˆÙÐ#Ó$ˆÙ�a‹LˆÙÐMÓNˆØÞÚ˜ Q¨¥U§O¡OÐ#4Ð5Ö6ÞÚ˜ Q¨¥U§O¡OÐ#4Ð5Ö6ÞÚ˜ Q¨¥U§O¡OÐ#4Ð5Ö6ÞÚ˜ Q¨¥U§O¡OÐ#4Ð5Ö6ÝØ’ØÙÐ(Ö)ñ% ñ r   