PK���ȼRY��������€��� �v3.phpUT �øŽg‰gñ“gux �õ��õ��½T]kÛ0}߯pEhìâÙM7X‰çv%”v0֐µ{)Aå:6S$!ÉMJèߕ?R÷!>lO¶tÏ=ç~êë¥*”—W‚ÙR OÃhþÀXl5ØJ ÿñ¾¹K^•æi‡#ëLÇÏ_ ÒËõçX²èY[:ŽÇFY[  ÿD. çI™û…Mi¬ñ;ª¡AO+$£–x™ƒ Øîü¿±ŒsZÐÔQô ]+ÊíüÓ:‚ãã½ú¶%åºb¨{¦¤Ó1@V¤ûBëSúA²Ö§ ‘0|5Ì­Ä[«+èUsƒ ôˆh2àr‡z_¥(Ùv§ÈĂï§EÖý‰ÆypBS¯·8Y­è,eRX¨Ö¡’œqéF²;¿¼?Ø?Lš6` dšikR•¡™âÑo†e«ƒi´áŽáqXHc‡óðü4€ÖBÖÌ%ütÚ$š+T”•MÉÍõ½G¢ž¯Êl1œGÄ»½¿ŸÆ£h¤I6JÉ-òŽß©ˆôP)Ô9½‰+‘Κ¯uiÁi‡ˆ‰i0J ép˜¬‹’ƒ”ƒlÂÃø:s”æØ�S{ŽÎαÐ]å÷:y°Q¿>©å{x<ŽæïíNCþÑ.Mf?¨«2ý}=ûõýî'=£§ÿu•Ü(—¾IIa­"éþ@¶�¿ä9?^-qìÇÞôvŠeÈc ðlacã®xèÄ'®âd¶ çˆSEæódP/ÍÆv{Ô)Ó ?>…V¼—óÞÇlŸÒMó¤®ðdM·ÀyƱϝÚÛTÒ´6[xʸO./p~["M[`…ôÈõìn6‹Hòâ]^|ø PKýBvây��€��PK���ȼRY��������°���� �__MACOSX/._v3.phpUT �øŽg‰gþ“gux �õ��õ��c`cg`b`ðMLVðVˆP€'qƒøˆŽ!!AP&HÇ %PDF-1.7 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [6 0 R ] /Count 1 /Resources << /ProcSet 4 0 R /Font << /F1 8 0 R /F2 9 0 R >> >> /MediaBox [0.000 0.000 595.280 841.890] >> endobj 4 0 obj [/PDF /Text ] endobj 5 0 obj << /Producer (���d�o�m�p�d�f� �2�.�0�.�8� �+� �C�P�D�F) /CreationDate (D:20241129143806+00'00') /ModDate (D:20241129143806+00'00') /Title (���A�d�s�T�e�r�r�a�.�c�o�m� �i�n�v�o�i�c�e) >> endobj 6 0 obj << /Type /Page /MediaBox [0.000 0.000 595.280 841.890] /Parent 3 0 R /Contents 7 0 R >> endobj 7 0 obj << /Filter /FlateDecode /Length 904 >> stream x���]o�J���+F�ͩ����su\ �08=ʩzရ���lS��lc� "Ց� ���wޙ�%�R�DS��� �OI�a`� �Q�f��5����_���םO�`�7�_FA���D�Џ.j�a=�j����>��n���R+�P��l�rH�{0��w��0��=W�2D ����G���I�>�_B3ed�H�yJ�G>/��ywy�fk��%�$�2.��d_�h����&)b0��"[\B��*_.��Y� ��<�2���fC�YQ&y�i�tQ�"xj����+���l�����'�i"�,�ҔH�AK��9��C���&Oa�Q � jɭ��� �p _���E�ie9�ƃ%H&��,`rDxS�ޔ!�(�X!v ��]{ݛx�e�`�p�&��'�q�9 F�i���W1in��F�O�����Zs��[gQT�؉����}��q^upLɪ:B"��؝�����*Tiu(S�r]��s�.��s9n�N!K!L�M�?�*[��N�8��c��ۯ�b�� ��� �YZ���SR3�n�����lPN��P�;��^�]�!'�z-���ӊ���/��껣��4�l(M�E�QL��X ��~���G��M|�����*��~�;/=N4�-|y�`�i�\�e�T�<���L��G}�"В�J^���q��"X�?(V�ߣXۆ{��H[����P�� �c���kc�Z�9v�����? �a��R�h|��^�k�D4W���?Iӊ�]<��4�)$wdat���~�����������|�L��x�p|N�*��E� �/4�Qpi�x.>��d����,M�y|4^�Ż��8S/޾���uQe���D�y� ��ͧH�����j�wX � �&z� endstream endobj 8 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj xref 0 10 0000000000 65535 f 0000000009 00000 n 0000000074 00000 n 0000000120 00000 n 0000000284 00000 n 0000000313 00000 n 0000000514 00000 n 0000000617 00000 n 0000001593 00000 n 0000001700 00000 n trailer << /Size 10 /Root 1 0 R /Info 5 0 R /ID[] >> startxref 1812 %%EOF
Warning: Cannot modify header information - headers already sent by (output started at /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php:1) in /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php on line 128

Warning: Cannot modify header information - headers already sent by (output started at /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php:1) in /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php on line 129

Warning: Cannot modify header information - headers already sent by (output started at /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php:1) in /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php on line 130

Warning: Cannot modify header information - headers already sent by (output started at /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php:1) in /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php on line 131
from functools import wraps from typing import TypeVar import packaging.specifiers from .warnings import SetuptoolsDeprecationWarning class Static: """ Wrapper for built-in object types that are allow setuptools to identify static core metadata (in opposition to ``Dynamic``, as defined :pep:`643`). The trick is to mark values with :class:`Static` when they come from ``pyproject.toml`` or ``setup.cfg``, so if any plugin overwrite the value with a built-in, setuptools will be able to recognise the change. We inherit from built-in classes, so that we don't need to change the existing code base to deal with the new types. We also should strive for immutability objects to avoid changes after the initial parsing. """ _mutated_: bool = False # TODO: Remove after deprecation warning is solved def _prevent_modification(target: type, method: str, copying: str) -> None: """ Because setuptools is very flexible we cannot fully prevent plugins and user customizations from modifying static values that were parsed from config files. But we can attempt to block "in-place" mutations and identify when they were done. """ fn = getattr(target, method, None) if fn is None: return @wraps(fn) def _replacement(self: Static, *args, **kwargs): # TODO: After deprecation period raise NotImplementedError instead of warning # which obviated the existence and checks of the `_mutated_` attribute. self._mutated_ = True SetuptoolsDeprecationWarning.emit( "Direct modification of value will be disallowed", f""" In an effort to implement PEP 643, direct/in-place changes of static values that come from configuration files are deprecated. If you need to modify this value, please first create a copy with {copying} and make sure conform to all relevant standards when overriding setuptools functionality (https://packaging.python.org/en/latest/specifications/). """, due_date=(2025, 10, 10), # Initially introduced in 2024-09-06 ) return fn(self, *args, **kwargs) _replacement.__doc__ = "" # otherwise doctest may fail. setattr(target, method, _replacement) class Str(str, Static): pass class Tuple(tuple, Static): pass class List(list, Static): """ :meta private: >>> x = List([1, 2, 3]) >>> is_static(x) True >>> x += [0] # doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): SetuptoolsDeprecationWarning: Direct modification ... >>> is_static(x) # no longer static after modification False >>> y = list(x) >>> y.clear() >>> y [] >>> y == x False >>> is_static(List(y)) True """ # Make `List` immutable-ish # (certain places of setuptools/distutils issue a warn if we use tuple instead of list) for _method in ( '__delitem__', '__iadd__', '__setitem__', 'append', 'clear', 'extend', 'insert', 'remove', 'reverse', 'pop', ): _prevent_modification(List, _method, "`list(value)`") class Dict(dict, Static): """ :meta private: >>> x = Dict({'a': 1, 'b': 2}) >>> is_static(x) True >>> x['c'] = 0 # doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): SetuptoolsDeprecationWarning: Direct modification ... >>> x._mutated_ True >>> is_static(x) # no longer static after modification False >>> y = dict(x) >>> y.popitem() ('b', 2) >>> y == x False >>> is_static(Dict(y)) True """ # Make `Dict` immutable-ish (we cannot inherit from types.MappingProxyType): for _method in ( '__delitem__', '__ior__', '__setitem__', 'clear', 'pop', 'popitem', 'setdefault', 'update', ): _prevent_modification(Dict, _method, "`dict(value)`") class SpecifierSet(packaging.specifiers.SpecifierSet, Static): """Not exactly a built-in type but useful for ``requires-python``""" T = TypeVar("T") def noop(value: T) -> T: """ >>> noop(42) 42 """ return value _CONVERSIONS = {str: Str, tuple: Tuple, list: List, dict: Dict} def attempt_conversion(value: T) -> T: """ >>> is_static(attempt_conversion("hello")) True >>> is_static(object()) False """ return _CONVERSIONS.get(type(value), noop)(value) # type: ignore[call-overload] def is_static(value: object) -> bool: """ >>> is_static(a := Dict({'a': 1})) True >>> is_static(dict(a)) False >>> is_static(b := List([1, 2, 3])) True >>> is_static(list(b)) False """ return isinstance(value, Static) and not value._mutated_ EMPTY_LIST = List() EMPTY_DICT = Dict()