Thanks Carlos, that's exactly it.
Ethan wrote: The problem I am running into is modifying the M.dist, M.typicaldist, and the other functions as I’m not too sure how they’re defined.
M.dist(x, y) is the Riemannian distance between points x and y on the manifold M.
The approach Carlos suggested (product manifold) makes it such that the squared distance between (x1, x2) and (y1, y2) is equal to dist(x1, y1)^2 + dist(x2, y2)^2, where x1, y1 represent bits on the oblique manifold, and x2, y2 represent bits on the Euclidean manifold.
M.typicaldist() returns a scalar that represents the "typical distance" between random points. It's very loosely defined. For compact manifolds, this would be some fraction of the diameter. For non-compact manifolds, it's less clear. The reason this is included is because some solvers (such as the Trust Region method) need a sense of the scale of the manifold (e.g., to initialize the trust region radius) to get things started. This isn't hugely important though. For non-compact manifolds, I usually just use the square root of the dimension, as this is the distance between two opposite vertices of a unit cube.
Best,
Nicolas