'CITDL for a given python_symbols.power Node type.'

def _citdl_from_power_node(self, node):

    children = node.children
    from functools import partial as curry
    N = pytree.NodePattern
    N.POWER = curry(N, type=python_symbols.power)
    N.TRAILER = curry(N, type=python_symbols.trailer)
    L = pytree.LeafPattern
    L.NAME = curry(L, type=token.NAME)
    L.LPAR = curry(L, type=token.LPAR, content='(')
    L.RPAR = curry(L, type=token.RPAR, content=')')
    ANY = pytree.WildcardPattern
    funcall_pattern = N.POWER(content=[L.NAME(name='func'), N.TRAILER(content=[L.LPAR(), ANY(), L.RPAR()])])
    match = {}
    if funcall_pattern.match(node, results=match):
        func = match['func'].value
        if (func in ('range', 'filter', 'map')):
            return 'list'
        elif (func in ('list', 'tuple', 'dict')):
            return func
    bits = [children[0].value]
    for c in children[1:]:
        if (c.children and (c.children[0].type == token.DOT)):
            bits += ['.', c.children[1].value]
        else:
            assert (c.children[0].type in (token.LPAR, token.LSQB))
            bits += [c.children[0].value, c.children[(-1)].value]
    return ''.join(bits)
