The code in `make_node()` handles the case where either `x` or `y` is dense correctly.  So this seems inefficient.