U � �Qi � @ s. d dl mZ d dlmZ ze W n ek r< dd� ZY nX zd dlmZ W n G dd� de�ZY nX zd dl m Z W n ek r� d d � Z Y nX G dd� de�Z d e _G dd � d e�ZzeefZW n ek r� eZY nX dd� ZeefZG dd� de�Zddd�Zddd�ZG dd� de�ZdS )� )�ref)�BoundMethodWeakrefc C s t | d�S )N�__call__)�hasattr)�object� r �/_utilities.py�callable s r )�defaultdictc @ sN e Zd Zddd�Zdd� Zdd� Zdd � Zd d� Zdd � Zdd� Z dd� Z dS )r Nc O s6 |d k rt |d�std��tj| f|�|� || _d S )Nr zfirst argument must be callable)r � TypeError�dict�__init__�default_factory)�selfr �a�kwr r r r s �zdefaultdict.__init__c C s2 zt �| |�W S tk r, | �|� Y S X d S �N)r �__getitem__�KeyError�__missing__)r �keyr r r r s zdefaultdict.__getitem__c C s&