U
    \	a                   
   @   s  d Z ddlmZ ddlZddlZddlZddlZddlmZ dZ	dZ
dZdZd	Zejd
Zedk	rle Ze	e
eeddZdejkre	Zndejkre
ZndejkreZndejkreZneejddkredkree ZndZnjeejddkredkree ZndZn<zee ZW n. ek
rN Z zedeW 5 dZ[X Y nX dd Zdd Zee	e
fkrve  neeeefkre  nedkr:eejddkreefeefeefee	fee
fgZn"ee	fee
feefeefeefgZeD ]8\ZZz
e  W n ek
r$   Y qY nX  qHqedne d!eejdkree" d edkret#$ edk rd ejkrd!ejd < eed"fed"fe	d#fe
d#fd$Z%e&t#$ 'd%d Z(e(d"krej)d&d'd( d)d* Z*d+d, Z+dS )-a9  
Qt binding and backend selector.

The selection logic is as follows:
- if any of PyQt5, PySide2, PyQt4 or PySide have already been imported
  (checked in that order), use it;
- otherwise, if the QT_API environment variable (used by Enthought) is set, use
  it to determine which binding to use (but do not change the backend based on
  it; i.e. if the Qt5Agg backend is requested but QT_API is set to "pyqt4",
  then actually use Qt5 with PyQt5 or PySide2 (whichever can be imported);
- otherwise, use whatever the rcParams indicate.

Support for PyQt4 is deprecated.
    )LooseVersionN)_apiPyQt5PySide2ZPyQt4v2PySidePyQt4QT_API)pyqt5pyside2pyqtpysideNzPyQt5.QtCorezPySide2.QtCorezPyQt4.QtCorezPySide.QtCorebackend)ZQt5AggZQt5Cairo)r	   r
   )Qt4AggZQt4Cairo)Zpyqt4r   zyThe environment variable QT_API has the unrecognized value {!r};valid values are 'pyqt5', 'pyside2', 'pyqt', and 'pyside'c                     s   t tkrJddlmamama dd l} tjatj	t_
tjt_tjt_| jan>t tkrddlmamamama dd l  fddantdtjjatjddd	d
d ad S )Nr   )QtCoreQtGui	QtWidgets)r   r   r   __version__c                    s     |  S NZisValidobj	shiboken2 A/tmp/pip-unpacked-wheel-wjyw_3jo/matplotlib/backends/qt_compat.py
_isdeletedY       r   z.Unexpected value for the 'backend.qt5' rcparam3.3QtCore.qVersion()alternativec                   S   s   dS )NTr   r   r   r   r   is_pyqt5^   s    r!   )r   QT_API_PYQT5r   r   r   r   sipPYQT_VERSION_STRr   
pyqtSignalSignalpyqtSlotSlotpyqtPropertyProperty	isdeletedr   QT_API_PYSIDE2r   r   
ValueErrorQFileDialoggetSaveFileName_getSaveFileNamer   
deprecatedr!   )r#   r   r   r   _setup_pyqt5J   s     r2   c                     s   dd } t tkr| dd njt tkrjddlmamamam} dd l |dk rTt	d fd	d
a
tjjant tkr~| dd ntdtatjddddd ad S )Nc              
   S   s   dddddddg}zdd l }W n tk
r2   Y n6X |D ].}z|||  W q8 ttfk
rd   Y q8X q8dd	lmama dd l }tja	t	t
d
k rtdtjt_tjt_tjt_|jatjjad S )NZQDateZ	QDateTimeZQStringZQTextStreamZQTimeZQUrlZQVariantr   )r   r   z4.6zPyQt<4.6 is not supported)r#   ImportErrorZsetapiAttributeErrorr-   r   r   r   r$   r   r   r%   r&   r'   r(   r)   r*   r+   r   r.   ZgetSaveFileNameAndFilterr0   )apiZ	_sip_apisr#   Z_sip_apir   r   r   _setup_pyqt4_internalg   s.    
 z+_setup_pyqt4.<locals>._setup_pyqt4_internal   )r5   r   )r   r   r   __version_info__)   r      zPySide<1.0.3 is not supportedc                    s     |  S r   r   r   shibokenr   r   r      r   r   r9   z.Unexpected value for the 'backend.qt4' rcparamr   r   r   c                   S   s   dS )NFr   r   r   r   r   r!      s    r!   )r   QT_API_PYQTv2QT_API_PYSIDEr   r   r   r   r8   r<   r3   r   r.   r/   r0   QT_API_PYQTr-   r   r   r1   r!   )r6   r8   r   r;   r   _setup_pyqt4c   s     
r@   r   zFailed to import any qt bindingzUnexpected QT_API: {}darwinz10.16z5.15.2ZQT_MAC_WANTS_LAYER1      )r   r   r	   r
   .r   zsupport for Qt4)namec                 C   sN   z|   pdW S  tk
r"   Y nX z|  p0dW S  tk
rH   Y dS X dS )z
    Return obj.devicePixelRatioF() with graceful fallback for older Qt.

    This can be replaced by the direct call when we require Qt>=5.6.
    r9   N)ZdevicePixelRatioFr4   ZdevicePixelRatior   r   r   r   _devicePixelRatioF   s    rG   c                 C   s   t | dr| | dS )z
    Call obj.setDevicePixelRatio(val) with graceful fallback for older Qt.

    This can be replaced by the direct call when we require Qt>=5.6.
    setDevicePixelRatioN)hasattrrH   )r   valr   r   r   _setDevicePixelRatio   s    
rK   ),__doc__Zdistutils.versionr   osplatformsysZ
matplotlibZmplr   r"   r,   r=   r>   r?   environgetZ
QT_API_ENVlowerZ_ETSmodulesr   dict__getitem__ZrcParamsKeyErrorerrRuntimeErrorr2   r@   _candidates_setupr3   AssertionErrorformatmac_verr   ZqVersionZETSintsplitZQT_RC_MAJOR_VERSIONZwarn_deprecatedrG   rK   r   r   r   r   <module>   s    






8




 
