Gurobi quadratic matrix expression object. Quadratic matrix expressions are used to build quadratic objective functions and quadratic constraints. They are temporary objects that typically have short lifespans.

You generally build quadratic matrix expressions using overloaded operators. For example, if x is an MVar object and A is a 2-D matrix (dense or sparse), then x @ A @ x and x @ x are both MQuadExpr objects. Arithmetic operations supported on MQuadExpr objects are addition, subtraction (e.g., expr = x @ A @ x - y @ B @ y), and multiplication by a constant (e.g. expr = 2 * x @ A @ y).

The full list of overloaded operators on MQuadExpr objects is as follows: +, +=, -, -=, *, and *=. In Python parlance, we've defined the following QuadExpr functions: __add__, __radd__, __iadd__, __sub__, __rsub__, __isub__, __neg__, __mul__, __rmul__, and __imul__.

We've also overloaded the comparison operators (==, <=, and >=), to make it easier to build constraints from quadratic expressions.

Note that the Python matrix multiplication operator (@) was introduced in Python version 3.5; it isn't available from Python 2.7.

Note that quadratic matrix expressions always have shape (1,). You can add linear terms into a quadratic matrix expression, but they must also have shape (1,).