#
# Example: use numpy to print the product of a matrix by a random vector.
#
# Uses xpress.Dot to on a matrix and a vector. Note that the NumPy dot operator
# works perfectly fine here.
#

from __future__ import print_function

import numpy as np
import xpress as xp

x = [xp.var() for i in range(5)]

p = xp.problem ()
p.addVariable (x)
p.addConstraint (xp.Sum (x) >= 2)

p.setObjective (xp.Sum (x[i]**2 for i in range (5)))
p.solve()

A   = np.array (range(30)).reshape(6,5) # A is a 6x5 matrix
sol = np.array (p.getSolution ()) # suppose it's a vector of size 5
columns = A*sol         # not a matrix-vector product!
v = xp.Dot (A,sol)      # this is a matrix-vector product A*sol

print (v)
