3
d                 @   s   d Z ddlZddlmZmZ ddlmZ ddlmZm	Z	m
Z
mZmZ ejdZd	Zd
ZdZG dd deZG dd de	ZG dd deZdS )zIThe ants module provides basic functions for interfacing with ANTS tools.    N)Versionparse   )logging   )CommandLineCommandLineInputSpectraits	isdefinedPackageInfoznipype.interface   ZNSLOTSZ$ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADSc               @   s2   e Zd Zejjejdddd Zedd Z	dS )InfoZANTSPATH ZantsRegistrationz
 --versionc             C   sh   x,| j  D ]}|jdr
|j d }P q
W d S |jdd }t|}|jrb|jdkrb|jdkrbdS |jS )NzANTs Version: r   -r   z2.1.0i  z2.2.0)
splitlines
startswithsplitr   is_postreleasebase_versionpost)Zraw_infolineZv_stringversion r   =/tmp/pip-build-7vycvbft/nipype/nipype/interfaces/ants/base.pyparse_version#   s    
zInfo.parse_versionN)
__name__
__module____qualname__ospathjoingetenvZversion_cmdstaticmethodr   r   r   r   r   r      s   r   c               @   s"   e Zd ZdZejeddddZdS )ANTSCommandInputSpecz.Base Input Specification for all ANTS CommandsTzNumber of ITK threads to use)Z
usedefaultZnohashdescN)r   r   r   __doc__r	   ZIntLOCAL_DEFAULT_NUMBER_OF_THREADSnum_threadsr   r   r   r   r#   ;   s   r#   c                   sT   e Zd ZdZeZeZ fddZdd Z	e
dd Zedd	 Zed
d Z  ZS )ANTSCommandzBase class for ANTS interfacesc                sF   t t| jf | | jj| jd t| jjs:| j| j_n| j  d S )Nr'   )	superr(   __init__inputsZon_trait_change_num_threads_updater
   r'   _num_threads)selfr+   )	__class__r   r   r*   L   s
    zANTSCommand.__init__c             C   sb   | j j| _| j jdkrDt| j jkr,| j jt= t| j jkr^| j jt= n| j jjtd| j j i d S )Nr   z%s)r+   r'   r-   ALT_ITKv4_THREAD_LIMIT_VARIABLEenviron$PREFERED_ITKv4_THREAD_LIMIT_VARIABLEupdate)r.   r   r   r   r,   U   s    


zANTSCommand._num_threads_updatec             C   s   dj dd | D S )z\Convenience method for converting input arrays [1,2,3] to
        commandline format '1x2x3'xc             S   s   g | ]}t |qS r   )str).0r5   r   r   r   
<listcomp>n   s    z.ANTSCommand._format_xarray.<locals>.<listcomp>)r    )valr   r   r   _format_xarrayj   s    zANTSCommand._format_xarrayc             C   s
   || _ dS )a:  Set the default number of threads for ITK calls

        This method is used to set the default number of ITK threads for all
        the ANTS interfaces. However, setting this will not update the output
        type for any existing instances.  For these, assign the
        <instance>.inputs.num_threads
        N)r-   )clsr'   r   r   r   set_default_num_threadsp   s    	z#ANTSCommand.set_default_num_threadsc             C   s   t j S )N)r   r   )r.   r   r   r   r   {   s    zANTSCommand.version)r   r   r   r%   r#   Z
input_specr&   r-   r*   r,   r"   r:   classmethodr<   propertyr   __classcell__r   r   )r/   r   r(   F   s   	r(   )r%   r   Zpackaging.versionr   r   r   r   baser   r   r	   r
   r   	getLoggerZifloggerr&   r3   r1   r   r#   r(   r   r   r   r   <module>   s   
