
    g                         d Z ddlm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	Z	ddl
Zddl
mZ  ej                  e      Zd Zd Zd Z	 	 	 dd	Zdd
dZd Zd Zd Zd Zy)z
Helper functions for testing.
    )Path)TemporaryDirectoryN)_apic                  v    dt         j                  d<   dt         j                  d<   dt         j                  d<   y )NzDejaVu Sanszfont.familynoneztext.hinting   ztext.hinting_factormplrcParams     X/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/matplotlib/testing/__init__.pyset_font_settings_for_testingr      s-    "/CLL#)CLL *+CLL&'r   c                  *    dt         j                  d<   y )N
matplotlibzsvg.hashsaltr	   r   r   r   set_reproducibility_for_testingr      s    #/CLL r   c                     	 t        j                  t         j                  d       t        j                  d       t        j                         5  t        j                          d d d        t                t                y # t         j                  $ rW 	 t        j                  t         j                  d       n.# t         j                  $ r t        j                  d       Y nw xY wY w xY w# 1 sw Y   xY w)Nzen_US.UTF-8zEnglish_United States.1252zPCould not set locale to English/United States. Some date-related tests may fail.Agg)locale	setlocaleLC_ALLError_logwarningr
   user   'suppress_matplotlib_deprecation_warning
rcdefaultsr   r   r   r   r   setupr      s    56 GGEN		5	5	7 
 "##%! << 5	5V]],HI|| 	5LL45	55 sA   $B C.C+$B:9C+:(C%"C+$C%%C+*C+.C7c           	          |rt         j                  x}}	 t        j                  | ||||||      }|S # t        $ r* t        j
                  dk(  rddl}	|	j                  d        w xY w)a  
    Create and run a subprocess.

    Thin wrapper around `subprocess.run`, intended for testing.  Will
    mark fork() failures on Cygwin as expected failures: not a
    success, but not indicating a problem with the code either.

    Parameters
    ----------
    args : list of str
    env : dict[str, str]
    timeout : float
    stdout, stderr
    check : bool
    text : bool
        Also called ``universal_newlines`` in subprocess.  I chose this
        name since the main effect is returning bytes (`False`) vs. str
        (`True`), though it also tries to normalize newlines across
        platforms.
    capture_output : bool
        Set stdout and stderr to subprocess.PIPE

    Returns
    -------
    proc : subprocess.Popen

    See Also
    --------
    subprocess.run

    Raises
    ------
    pytest.xfail
        If platform is Cygwin and subprocess reports a fork() failure.
    envtimeoutcheckstdoutstderrtextcygwinr   NzFork failure)
subprocessPIPErunBlockingIOErrorsysplatformpytestxfail)
commandr!   r"   r$   r%   r#   r&   capture_outputprocr.   s
             r   subprocess_run_for_testingr3   5   sq    L $//)~~5&	
 K  <<8#LL(s	   4 3A')	extra_envc                ,   | j                   }| j                  }| j                  j                  }t	        t
        j                  dd|d|d| dg|i t        j                  ddi|xs i |dt        j                  t        j                  d	      }|S )
a  
    Run a function in a sub-process.

    Parameters
    ----------
    func : function
        The function to be run.  It must be in a module that is importable.
    *args : str
        Any additional command line arguments to be passed in
        the first argument to ``subprocess.run``.
    extra_env : dict[str, str]
        Any additional environment variables to be set for the subprocess.
    -czEimport importlib.util;_spec = importlib.util.spec_from_file_location(z, z]);_module = importlib.util.module_from_spec(_spec);_spec.loader.exec_module(_module);_module.z()SOURCE_DATE_EPOCH0Tr    )__name__
__module____code__co_filenamer3   r,   
executableosenvironr(   r)   )funcr"   r4   argstargetmodulefiler2   s           r   subprocess_run_helperrE   m   s     ]]F__F==$$D%NN>>DZr$ R hb	"		
 		
 JrzzI.I	RItD" Kr   c                 T   t               5 }t        |d      }|j                  dd       	 t        j                  | dt        |      g|t        j                  t        j                         	 ddd       y	# t        t        j                  f$ r Y ddd       yw xY w# 1 sw Y   yxY w)
z
    Check if a given TeX system + pgf is available

    Parameters
    ----------
    texsystem : str
        The executable name to check
    ztest.texz
            \documentclass{article}
            \usepackage{pgf}
            \begin{document}
            \typeout{pgfversion=\pgfversion}
            \makeatletter
            \@@end
        zutf-8)encodingz-halt-on-error)cwdr$   r%   NFT)	r   r   
write_textr(   
check_callstrDEVNULLOSErrorCalledProcessError)	texsystemtmpdirtex_paths      r   _check_for_pgfrR      s     
	 
+   	 		!!,c(m<&!))*2D2DF
 !  667 	 	 s/    BAA7-B7BBBBB'c                 h    	 t         j                  j                  |  d       y# t        $ r Y yw xY w)Nz.styTF)r
   dvireadfind_tex_fileFileNotFoundError)packages    r   _has_tex_packagerX      s5    !!WIT"23 s   "% 	11c                    dd l }|j                  d      }t        j                  dk(  r|j	                  d       |j
                  d d dk(  r| dk(  r|j	                  d       |j                         D ]  \  }}|j
                  d d	 |k\  s|} n d
}t        ddd|  d|gdd      }|j                  j                         j                  d d      sJ y )Nr   IPythonwin32z>Cannot change backend running IPython in subprocess on Windows   )r      r   osxz:Bug using macosx backend in IPython 8.24.0 fixed in 8.24.1   zpimport matplotlib as mpl, matplotlib.pyplot as plt;fig, ax=plt.subplots(); ax.plot([1, 3, 2]); mpl.get_backend()ipythonz--no-simple-promptz--matplotlib=r6   T)r#   r1   ')r.   importorskipr,   r-   skipversion_infoitemsr3   r$   stripendswith)	"requested_backend_or_gui_frameworkall_expected_backendsr.   rZ   min_versionbackendexpected_backendcoder2   s	            r   ipython_in_subprocessrn      s    !!),G
||wTURa J..%7PQ !6 ; ; = W#{2&
LD% >?@$		
 	D ;;''!,<+=Q(?@@@r   c                  H    g d} | D ]  }t        j                  |      s y y)N)CICONTINUOUS_INTEGRATIONTRAVISCIRCLECIJENKINS	GITLAB_CIGITHUB_ACTIONSTEAMCITY_VERSIONTF)r>   getenv)ci_environment_variablesenv_vars     r   is_ci_environmentr{      s/    
  , 99W r   )N<   NNFTF)__doc__pathlibr   tempfiler   r   loggingr>   r(   r,   r   r
   r   	getLoggerr9   r   r   r   r   r3   rE   rR   rX   rn   r{   r   r   r   <module>r      s|     '   	  
  w",0&2 FJ>B.35p ;? "J8ADr   