This reduction takes as input a DGP problem and returns an equivalent DCP
problem. Because every (generalized) geometric program is a DGP problem,
this reduction can be used to convert geometric programs into convex form.

```
# S4 method for Dgp2Dcp,Problem
accepts(object, problem)
# S4 method for Dgp2Dcp,Problem
perform(object, problem)
# S4 method for Dgp2Dcp
canonicalize_expr(object, expr, args)
# S4 method for Dgp2Dcp,Solution,InverseData
invert(object, solution, inverse_data)
```

## Arguments

- object
A Dgp2Dcp object.

- problem
A Problem object.

- expr
An Expression object corresponding to the DGP problem.

- args
A list of values corresponding to the DGP expression

- solution
A Solution object to invert.

- inverse_data
A InverseData object containing data necessary for the inversion.

## Methods (by generic)

`accepts(object = Dgp2Dcp, problem = Problem)`

: Is the problem DGP?

`perform(object = Dgp2Dcp, problem = Problem)`

: Converts the DGP problem to a DCP problem.

`canonicalize_expr(Dgp2Dcp)`

: Canonicalizes each atom within an Dgp2Dcp expression.

`invert(object = Dgp2Dcp, solution = Solution, inverse_data = InverseData)`

: Returns the solution to the original problem given the inverse_data.