I agree with the desire of the original post, though for general objects and not just generators.
Having opening and closing brackets far apart is ugly, hurts readability, and is annoying to write. And being forced to use intermediate variables leads to mistakes.
As an additional advantage, having such notation available would reduce the need for subclassing. (and wrappers.)
Though I would note that
for index, bracket in brackets |> windowed(2) |> enumerate() |> tqdm():
...
looked confusing to me at first.
I think it’s preferable to demand the brackets, so that f |> g can be interpreted as partial(g, f). The code you end up with that way looks more similar to other python code, specifically it will look very similar to method chaining, which python users are probably familiar with.
Then again it wouldn’t completely clear to me whether f |> g |> h should mean partial(h, partial(g, f)) or partial(partial(h, g), f) within that paradigm. Or whether that would even matter.