Unexpected behaviour of ducktape and ducktape_left

I've noticed an unexpected behaviour of ducktape_left and ducktape in combination with Linearization. The following example code:

 a = ift.Linearization.make_var(ift.from_random(ift.RGSpace(3))).ducktape_left('a')

does not produce an error but produces something that is not an instance of Linearization any more. Instead it returns an _OpChain. The same is true if we replace ducktape_left with ducktape.

I suspect this is due to the fact that Linearization is now an instance of Operator but does not implement ducktape itself.

In contrast if we try this with Field:

 a = ift.from_random(ift.RGSpace(3)).ducktape_left('a')

we get an error.

I see two possible solutions for this: either we disable the (currently unintended?) support of Linearization in ducktape and ducktape_left or we implement a proper version of them for Field and Linearization.

@all does somebody know what is going on here?

Edited Jul 01, 2020 by Philipp Frank
Assignee Loading
Time tracking Loading