3
d                 @   s~   d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
mZmZmZ dd	 Ze dkZG d
d deZG dd de
ZdS )zInterfaces to run R scripts.    N)which   )config   )CommandLineInputSpecInputMultiPath	isdefinedCommandLinetraitsFile	Directoryc              C   s,   dt jkrd S t jddd} t| r(| S d S )NZNIPYPE_NO_RZRCMDR)default)osenvirongetenvr   )r_cmd r   5/tmp/pip-build-7vycvbft/nipype/nipype/interfaces/r.pyget_r_command   s    
r   c               @   s@   e Zd ZdZejdddddZejddddZe	d	dd
dZ
dS )
RInputSpecz$Basic expected inputs to R interfacez-e "%s"zR code to runTr   )argstrdesc	mandatorypositionzRun R using R script)r   
usedefaultz
pyscript.RzName of file to write R code to)r   r   N)__name__
__module____qualname____doc__r
   StrscriptZBoolrfiler   script_filer   r   r   r   r      s   r   c                   s\   e Zd ZdZe ZeZd fdd	Zdd Z	dd Z
 fd	d
Z fddZdd Z  ZS )RCommandzInterface that runs R code

    >>> import nipype.interfaces.r as r
    >>> r = r.RCommand(rfile=False) # doctest: +SKIP
    >>> r.inputs.script = "Sys.getenv('USER')" # doctest: +SKIP
    >>> out = r.run()  # doctest: +SKIP
    Nc                s.   t t| jf | |r$t|r$|| _d| _dS )z9initializes interface to r
        (default 'R')
        	allatonceN)superr%   __init__r   _cmdterminal_output)selfr   inputs)	__class__r   r   r(   8   s    zRCommand.__init__c             C   s
   || _ dS )zSet the default R command line for R classes.

        This method is used to set values for all R
        subclasses.
        N)r)   )r+   r   r   r   r   set_default_r_cmdD   s    zRCommand.set_default_r_cmdc             C   s
   || _ dS )zSet the default R script file format for R classes.

        This method is used to set values for all R
        subclasses.
        N)Z_rfile)r+   r#   r   r   r   set_default_rfileL   s    zRCommand.set_default_rfilec                s.   d| _ tt| j|}d|jkr*| j| |S )Nr&   zR code threw an exception)r*   r'   r%   _run_interfacestderrZraise_exception)r+   Zruntime)r-   r   r   r0   T   s
    

zRCommand._run_interfacec                s.   |dkr|j }| j||S tt| j|||S )Nr"   )r"   )r   _gen_r_commandr'   r%   _format_arg)r+   nameZ
trait_specvaluer   )r-   r   r   r3   [   s    zRCommand._format_argc          	   C   s   | j js<djdd |jdD }|jdd}|jdd}n>tjjtj | j j}t	|d	}|j
| W d
Q R X d| }|| S )z>Generates commands and, if rfile specified, writes it to disk.z; c             S   s   g | ]}|j  jd s|qS )#)strip
startswith).0liner   r   r   
<listcomp>g   s   z+RCommand._gen_r_command.<locals>.<listcomp>
"z\"$z\$wtNzsource('%s'))r,   r#   joinsplitreplacer   pathgetcwdr$   openwrite)r+   r   Zscript_linesr"   Zscript_pathr#   r   r   r   r2   a   s    zRCommand._gen_r_command)N)r   r   r   r    r   r)   r   Z
input_specr(   r.   r/   r0   r3   r2   __classcell__r   r   )r-   r   r%   ,   s   r%   )r    r   shutilr    r   baser   r   r   r	   r
   r   r   r   Zno_rr   r%   r   r   r   r   <module>   s   $
