wL iW.XdZddlZddlZddlZddlZddlmZmZddl Z dZ dZ dZ dZ dZd Zd Zd Ze d e d e de dedededed iZGddej&j(ZeZej.j1dedZdZdZdZdZd!dZdZdZ dZ!dZ"dZ#dZ$d Z%y)"aD This module contains factory functions that attempt to return Qt submodules from the various python Qt bindings. It also protects against double-importing Qt with different bindings, which is unstable and likely to crash This is used primarily by qt and qt_for_kernel, and shouldn't be accessed directly from the outside N)partial lru_cachepyqt6pyside6pyqt5pyside2pyqtpyqtv1pyside pyqtdefaultPyQt6PySide6PyQt5PySide2PySidePyQt4c$eZdZdZdZdZddZy) ImportDenierzfImport Hook that will guard against bad Qt imports once IPython commits to a specific binding c"t|_yN)set_ImportDenier__forbidden)selfs a/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/IPython/external/qt_loaders.py__init__zImportDenier.__init__9s 5cztjj|d|jj |yr)sysmodulespopradd)r module_names rforbidzImportDenier.forbid<s(  T* [)rNcZ|ry||jvrtd|dtdy)Nz Importing zQ disabled by IPython, which has already imported an Incompatible QT Binding:  )r ImportError loaded_api)rfullnamepathtargets r find_speczImportDenier.find_spec@s6   t'' ' Z\ +  (rr)__name__ __module__ __qualname____doc__rr#r+rrrr4s!* rrcttj}|jt||D]}tj |y)zXCommit to a particular API, and trigger ImportErrors on subsequent dangerous importsN)r api_to_modulevaluesremoveIDr#)apirmods r commit_apir8QsB-&&()G NN=%& #rctjjdrtStjjdrtStjjdrt Stjjdrt Stjjdrtdk(rtStStjjdrtSy) zReturn which API is loaded, if any If this returns anything besides None, importing any other Qt binding is unsafe. Returns ------- None, 'pyside6', 'pyqt6', 'pyside2', 'pyside', 'pyqt', 'pyqt5', 'pyqtv1' z PyQt6.QtCorezPySide6.QtCorez PyQt5.QtCorezPySide2.QtCorez PyQt4.QtCorez PySide.QtCoreN) rrget QT_API_PYQT6QT_API_PYSIDE6 QT_API_PYQT5QT_API_PYSIDE2 qtapi_version QT_API_PYQT QT_API_PYQTv1 QT_API_PYSIDEr0rrr'r'[s {{~& ) *  ( ) *  ( ?a    ) rct|}ddlm}gd}|ttt t fvr|jd|D]} ||d|}|y|tk(rddl }|jdk\Sy #t$rYywxYw) a5Safely check for PyQt4/5, PySide or PySide2, without importing submodules Parameters ---------- api : str [ 'pyqtv1' | 'pyqt' | 'pyqt5' | 'pyside' | 'pyside2' | 'pyqtdefault'] Which module to check for Returns ------- True if the relevant module appears to be importable r)r+)QtCoreQtGuiQtSvg QtWidgets.NF)rT) r2importlib.utilr+r>r?r<r=appendr&rCr__version_info__)r6r"r+requiredsubmodspecrs r has_bindingrRxs $K(+H |^\>JJ $   V<=D |  m&&)33   s A33 B?Bc ddl} |jdS#t$r ddlm}n#t$rYYywxYwY5wxYw#t$rYywxYw)zReturn which QString API has been set, if any Returns ------- The QString API version (1 or 2), or None if not set rNsipQString)rUr&rgetapi ValueErrorrTs rr@r@sazz)$$   !    "  s3? <)< 6<6<< A  A c`t|syt}|tk(r |tdfvS||dfvS)z?Safely query whether an API is importable, without importing itFN)rRr'QT_API_PYQT_DEFAULTr<)r6currents r can_importr\s< s lG !!<...3+%%rcLddl}|$|jd||jd|ddlm}m}m}|j dkrtd|jz|j|_ |j|_ |jd}|dk(rtnt}||||fS) z Import PyQt4 Parameters ---------- version : 1, 2, or None Which QString/QVariant API to use. Set to None to use the system default ImportErrors raised within this function are non-recoverable rNrVQVariantrFrErGiz'IPython requires PyQt4 >= 4.7, found %srJ)rUsetapirrFrErG PYQT_VERSIONr&PYQT_VERSION_STR pyqtSignalSignalpyqtSlotSlotrWrBrA)versionrUrFrErGr6s r import_pyqt4rhs 9g& :w'** X%C 1123 3%%FM//FKjj#G"a<-[C 5% $$rc4ddlm}m}m}m}|j |_|j|_tjd}|jj|j|jj|jt}||||fS)zX Import PyQt5 ImportErrors raised within this function are non-recoverable rrErGrHrF QtGuiCompat)rrErGrHrFrcrdrerftypes ModuleType__dict__updater>rErGrHrFrkr6s r import_pyqt5rq|65%%FM//FK""=1K/ 2 23 C ;s **rc4ddlm}m}m}m}|j |_|j|_tjd}|jj|j|jj|jt}||||fS)zX Import PyQt6 ImportErrors raised within this function are non-recoverable rrjrk)r rErGrHrFrcrdrerfrlrmrnror<rps r import_pyqt6rtrrrc*ddlm}m}m}|||tfS)zY Import PySide ImportErrors raised within this function are non-recoverable rr_)rrFrErGrCr_s r import_pysidervs ,+ 5% ..rc:ddlm}m}m}m}m}t jd}|jj|j|jj|j|jj|j|||tfS)zZ Import PySide2 ImportErrors raised within this function are non-recoverable rrFrErGrHQtPrintSupportrk) rrFrErGrHryrlrmrnror?)rFrErGrHryrks rimport_pyside2rzsx HG""=1K/ 2 23 7 78 ;~ 55rcd}ddlm}m}m}m}m}t jd}|jj|j|jdkrK|jj|j|jj|jnB|jj|||jj|||||tfS)zZ Import PySide6 ImportErrors raised within this function are non-recoverable cvt|Dcic] }|jds |t||"c}Scc}w)N_)dir startswithgetattr)modulenames r get_attrsz!import_pyside6..get_attrs3s@F  ??3' '&$' '   s%6rrxrk)) rrFrErGrHryrlrmrnrorNr=)rrFrErGrHryrks rimport_pyside6r,s HG""=1K/ '##I$6$67##N$;$;<##Ii$89##In$=> ;~ 55rctttttt t ttttttttdtti}|D]n}||vr?td|ddj!|j#Dcgc]}d|z c}t%|sR||}|d}t'||cSdt(j*vrt(j*d=t-d t/d t1td t1td t1t d t1td|d cc}w)a Attempt to import Qt, given a preference list of permissible bindings It is safe to call this function multiple times. Parameters ---------- api_options : List of strings The order of APIs to try. Valid items are 'pyside', 'pyside2', 'pyqt', 'pyqt5', 'pyqtv1' and 'pyqtdefault' Returns ------- A tuple of QtCore, QtGui, QtSvg, QT_API The first three are the Qt modules. The last is the string indicating which module was loaded. Raises ------ ImportError, if it isn't possible to import any requested bindings (either because they aren't installed, or because an incompatible library has already been installed) rJ)rgzInvalid Qt API z, valid values are: z, z%rQT_APIz Could not load requested Qt binding. Please ensure that PyQt4 >= 4.7, PyQt5, PyQt6, PySide >= 1.0.3, PySide2, or PySide6 is available, and only one is imported per session. Currently-imported Qt library: zA PyQt5 available (requires QtCore, QtGui, QtSvg, QtWidgets): zA PyQt6 available (requires QtCore, QtGui, QtSvg, QtWidgets): zA PySide2 installed: zA PySide6 installed: zA Tried to load: r%)r<rtr=rr>rqr?rzrCrvrArhrBrrZ RuntimeErrorjoinkeysr\r8osenvironr&r'rR) api_optionsloadersr6kresults rload_qtrIs6 ll}\w|Q7\ G)  g dii7<<> Ba BCEF F# Rj3 ) " rzz ! 8$ L)L)N+N+%   !Cs Ec2tdfd}|S)z@Construct an enum helper to account for PyQt5 <-> PyQt6 changes.Nctjtk(r|n|jddtj j S)NrIr)operator attrgetterr< rpartitionrr __package__)rrrEs r_enumzenum_factory.._enumsK x""l*D0DQ0G ++f(( )+ +r)r)rrErs`` r enum_factoryrs"t_++ Lr)r:)&r/ importlib.abc importlibrrrl functoolsrrrr<r=r>r?rArBrCrZr2abcMetaPathFinderrr5 meta_pathinsertr8r'rRr@r\rhrqrtrvrzrrrr0rrrs  (     #'I'I87  9==//2^ Q:%P, &!%H+,+,/6"6:Q h r