When func is given as a keyword arg, the effect is different (it becomes a factory) than when given as a positional arg (which gives us the (correct) Wrap object.
Reproduce error:
from i2 import wrap
def foo(x):
return x
wrap(foo)
# <i2.Wrap foo(x)>
wrap(func=foo)
# functools.partial(<function wrap at 0x10610a8c0>, func=<function foo at 0x173d17520>)
Note: The problem might be with double_up_as_factory, not wrap itself.