- Optimization over an embedded submanifold defined by equality constraints c(x) = 0
has attracted much interest over the past few decades due to its wide applications in var-
ious areas, including computer vision, signal processing, numerical linear algebra, and
deep learning. For solving such problems, many related optimization packages have
been developed based on Riemannian optimization approaches, which rely on some
basic geometrical materials of Riemannian manifolds, including Riemannian gradi-
ents, retractions, vector transports, etc. These geometrical materials can be challenging
to determine in general. In fact, existing packages only accommodate a few well-known
manifolds whose geometrical materials are more easily accessible. For other mani-
folds that are not contained in these packages, the users have to develop the geometric
materials by themselves. In addition, it is not always tractable to adapt the advanced fea-
tures from various state-of-the-art unconstrained optimization solvers to Riemannian
optimization approaches. Here we introduce a user-friendly Python package, CDOpt
(available at https://cdopt.github.io/ under BSD 3-clause license), for solving a class of
Riemannian optimization problems. CDOpt is designed to complement existing Riemannian optimization packages by transforming Riemannian optimization problems
into their unconstrained counterparts through the constraint dissolving approach. We
prove that the when the penalty parameter in the constraint dissolving approach is suffi-
ciently large, Riemannian optimization problems and their unconstrained counterparts
are equivalent. Therefore, solving Riemannian optimization problems through CDOpt
can directly benefit from various existing solvers and the rich expertise gained over
the past few decades for unconstrained optimization. Moreover, all the computations
in CDOpt related to any manifold in question are conducted through its constraints
expression, hence users can easily define new manifolds in CDOpt without any back-
ground on differential geometry. Furthermore, CDOpt extends the neural layers from
PyTorch and Flax, thus allowing users to train manifold constrained neural networks
directly by the solvers for unconstrained optimization. Extensive numerical experi-
ments demonstrate that CDOpt is highly efficient and robust in solving various classes
of Riemannian optimization problems.