<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def partial(coro, *args, **kw):
 """ Partial function implementation designed for coroutines, allowing variadic input arguments. This function can be used as decorator. arguments: coro (coroutinefunction):
 coroutine function to wrap. *args (mixed):
 mixed variadic arguments for partial application. Raises: TypeError: if ``coro`` is not a coroutine function. Returns: coroutinefunction Usage:: async def pow(x, y):
 return x ** y pow_2 = paco.partial(pow, 2) await pow_2(4) # => 16 """

    assert_corofunction(coro=coro)

    @asyncio.coroutine
    def wrapper(*_args, **_kw):
        call_args = args + _args
        kw.update(_kw)
        return (yield from coro(*call_args, **kw))

    return wrapper