U �.W�v � @ s\ d Z ddlmZmZmZ ddlZddlZddlZddlZzddl m Z W n ek rh ddlm Z Y nX ddl mZ dddd gZeej�Zeej�ZeeejfZd"d d�Zdd � Zdd � ZG dd� de�ZG dd� de�ZG dd� de�Zeddd�Zeddd�Z eddd�Z!eddd�Z"eddd�Z#G dd� de�Z$G d d� de�Z%G d!d� de�Z&dS )#z�Function signature objects for callables Back port of Python 3.3's function signature tools from the inspect module, modified to be compatible with Python 2.6, 2.7 and 3.3+. � )�absolute_import�division�print_functionN)�OrderedDict)�__version__�BoundArguments� Parameter� Signature� signaturec C s8 t | t�r0| jdd|fkr | jS | jd | j S t| �S )N�builtinsZ__builtin__�.)� isinstance�type� __module__�__name__�repr)� annotationZbase_module� r �/__init__.py�formatannotation s r c G s\ z2| t krW d S t| |�}|D ]}t|||�}qW n tk rH Y d S X t|t�sX|S d S �N)r �getattr�AttributeErrorr �_NonUserDefinedCallables)�clsZmethod_name�nestedZmeth�namer r r �_get_user_defined_method'